【问题标题】:Securing a password by verifying encrypted random string通过验证加密的随机字符串来保护密码
【发布时间】:2017-03-17 01:46:50
【问题描述】:

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

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

  • 'myRandomString'
  • 'f6354a1eb2a1deb2' -witch 被 'myRandomString' 加密 用“我的通行证”
  • '69380d137534519' -witch 被 'mydata' 加密 使用“我的通行证”

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

来自AES key finding from encrypted and plaintext data 我知道这种方法非常安全,但我想知道是否有更好的方法来保护密码而不使用“受保护的配置”

【问题讨论】:

    标签: .net encryption passwords


    【解决方案1】:

    在这种情况下,您应该改用 HMAC。它是一个键控散列函数。

    即使随机字符串没有被修改,你也不能假设密码也没有。

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

    使用加密字段构建您的 XML 文件,通过 HMAC 提供它,然后附加结果。再次使用该文件时可以这样做,如果 HMAC 不相等,则该文件已更改。

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

    【讨论】:

    • 问题:既然比较是比较哈希,输入中的单个位更改会产生大约 50% 的输出位来更改,为什么需要时间安全比较?
    • @zaph 因为攻击者可以使用定时攻击修改已附加的 HMAC,直到它与他们更改的输入数据的 HMAC 匹配。理论上。
    • 我会考虑一下,我想你比我更精通密码分析。
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多