【问题标题】:How to validate AES decryption was successful?如何验证 AES 解密是否成功?
【发布时间】:2017-05-26 06:36:43
【问题描述】:

我正在开发一个本地文件加密/解密软件(AES-256 CBC), 我想验证解密是否成功。

所以我决定在纯数据末尾添加一个额外的纯数据 MD5 哈希并将其加密在一起, 解密时,计算解密数据的MD5散列(最后一个附加的MD5散列除外)和 将其与最后一个额外的 MD5 哈希值进行比较。

我想知道这个想法是否可以安全使用。

这是个坏主意吗?

【问题讨论】:

  • 我投票结束这个问题,因为这不是关于软件开发,而是关于经过身份验证的加密的特定加密结构的安全性。 Cryptography 更适合这类问题,但可能已经在那里回答了
  • @ArtjomB。哦,我不知道那个网站存在。谢谢
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Cryptography Stack ExchangeInformation Security Stack Exchange 会是一个更好的提问地点。
  • “我想知道这个想法是否可以安全使用......” - 不。“......添加一个额外的纯数据的MD5哈希结束纯数据并将其加密在一起..." - 这是Handbook of Applied Cryptography, Section 9.6 中建议的方案。它被证明是不安全的。另请参阅 Crypto++ wiki 上的 Authenticated Encryption。它是在 C++ 安全库的上下文中编写的,但它通常适用于数据安全。
  • 我认为 aswers 和 cmets 肯定是非常有效的,但没有提出问题。他正在询问是否可以使用 MD5 哈希来向纯文本消息添加哈希以识别解密成功,或者这是否会带来一些风险。我的回答被否决了。但也许有人可以在问题范围内提供更好的答案。

标签: cryptography aes md5


【解决方案1】:

您还可以使用 MAC 来验证您的解密。 MAC 和哈希码之间的主要区别是概念上的。哈希用于保证数据的完整性,MAC 保证完整性和身份验证。

这意味着哈希码是在没有任何外部输入的情况下从消息中盲目生成的:您获得的是可用于检查消息在传输过程中是否有任何更改的东西。

MAC 使用私钥作为它在生成代码时使用的哈希函数的种子:这应该向接收者保证,不仅消息没有被修改,而且发送它的人就是我们原来的样子期望:否则攻击者无法知道用于生成代码的私钥。

Cryptographic primitive | Hash |    MAC    | Digital
Security Goal           |      |           | signature
------------------------+------+-----------+-------------
Integrity               |  Yes |    Yes    |   Yes
Authentication          |  No  |    Yes    |   Yes
Non-repudiation         |  No  |    No     |   Yes
------------------------+------+-----------+-------------
Kind of keys            | none | symmetric | asymmetric
                        |      |    keys   |    keys

【讨论】:

  • MAC 并不总是相同的。推荐使用encrypt-then-MAC
  • “MAC 改为使用私钥...” - 我相信 MAC 传统上使用共享密钥,而不是私钥。 “MAC 保证完整性和身份验证...” - 这并不完全正确。由于双方共享 MAC 密钥,因此您无法验证消息的来源,因为任何一方都可以生成它。
  • @jww 我更喜欢术语“密钥”或实际上是“共享密钥”,但有时也使用术语“私钥”。我认为这很愚蠢,因为密钥很难共享私有。您说得有道理,但从某种意义上说,消息本身经过身份验证,至少来自持有密钥的一方。
  • 几个 cmets:只有 HMAC 使用用作哈希输入的密钥,而不是“播种”;例如,AES-CMAC 等其他算法使用密码。此外,哈希提供的完整性仅针对随机变化,而不针对可以简单地重新计算哈希的对手。建议使用单独的密钥,尽管对于 HMAC,使用相同密钥的安全损失主要是理论上的。
【解决方案2】:

我在许多帖子中读到 MD5 不再安全,但是,您将其用作校验和,而不是会话 ID 或密码哈希。如果对 MD5 的攻击不是问题,因为它位于加密代码中,并且它没有被用作密码哈希,也不是会话 ID 或类似的,我认为你可以使用它,但如果你想在安全方面将 MD5 更改为 SHA-2 摘要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2010-12-31
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多