.net 通过验证加密的随机字符串来保护密码

.net 通过验证加密的随机字符串来保护密码,.net,encryption,passwords,.net,Encryption,Passwords,我想制作一个应用程序,将一些加密的配置数据保存在XML文件中。我的想法是,我希望用户设置一个密码,并用它来加密我的数据 如果我有密码:“mypass”和数据:“mydata”。 当用户定义密码时,我的应用程序将生成一个随机字符串:“myRandomString”。在我的XML文件中,我将保存: “myRandomString” “f6354a1eb2a1deb2”-开关是“myRandomString”加密的 “我的通行证” “69380d137534519”-开关是“mydata”加密的 “

我想制作一个应用程序,将一些加密的配置数据保存在XML文件中。我的想法是,我希望用户设置一个密码,并用它来加密我的数据

如果我有密码:“mypass”和数据:“mydata”。 当用户定义密码时,我的应用程序将生成一个随机字符串:“myRandomString”。在我的XML文件中,我将保存:

  • “myRandomString”
  • “f6354a1eb2a1deb2”-开关是“myRandomString”加密的 “我的通行证”
  • “69380d137534519”-开关是“mydata”加密的 “我的通行证”
当用户登录时,我会将“myRandomString”与解密版本的“f6354a1eb2a1deb2”进行比较。如果它们相等,那么我的通行证就可以了,我可以解密“mydata”


据我所知,这种方法非常安全,但我想知道是否有更好的方法可以在不使用“受保护配置”的情况下保护密码。

在这种情况下,您应该使用HMAC。它是一个键控哈希函数

即使没有修改随机字符串,也不能假定密码也没有修改

使用HMAC,您可以知道自应用程序创建整个文件以来对该文件所做的任何更改

使用加密字段构建XML文件,通过HMAC将其输入,然后附加结果。当您再次使用该文件时,如果HMAC不相等,则表明该文件已更改,您也可以这样做


使用时间安全比较来检查HMAC不会有什么坏处

在这种情况下,您应该使用HMAC。它是一个键控哈希函数

即使没有修改随机字符串,也不能假定密码也没有修改

使用HMAC,您可以知道自应用程序创建整个文件以来对该文件所做的任何更改

使用加密字段构建XML文件,通过HMAC将其输入,然后附加结果。当您再次使用该文件时,如果HMAC不相等,则表明该文件已更改,您也可以这样做


使用时间安全比较检查HMAC不会有什么坏处。

问题:由于比较是比较散列,输入中的一个位更改会产生大约50%的输出位更改,为什么需要进行时间安全比较?@zaph,因为攻击者可以修改附加的HMAC,直到匹配为止使用定时攻击,HMAC将已更改的输入数据转换为HMAC。理论上,我会考虑一下,我想你比我更精通密码分析。问题:由于比较是比较散列和输入中的单个位更改产生大约50%的输出位更改,为什么需要时间安全比较?@zaph,因为攻击者可以修改附加的HMAC,直到它与使用定时攻击输入他们已更改的数据。理论上,我会考虑一下,我想你比我更精通密码分析。