【问题标题】:Storing IV when using AES asymmetric encryption and decryption使用AES非对称加密和解密时存储IV
【发布时间】:2017-06-22 09:07:41
【问题描述】:

我正在查看 C# AES 非对称加密和解密示例 here,但不确定是否应该将 IV 存储在安全的地方(也加密??)。或者我可以将它附加到加密文本中,以便稍后在我解密时使用。从关于 AES 的简短阅读看来,解密似乎根本不需要它,但我不确定我是否做对了,aes.CreateDecryptor(keyBytes, iv) 也需要它作为参数。

我对所有加密都使用一个密钥。

【问题讨论】:

  • 在密文前加上 IV 前缀是标准。 AES 对称不是不对称的。

标签: encryption cryptography aes private-key


【解决方案1】:

IV.Concat(cipherText) 传输加密数据是相当标准的。将 IV 放在一边也是相当标准的做法,例如 PKCS#5

IV-on-the-side 方法与 .NET 希望处理数据的方式更匹配,因为将 IV 分割为将其单独传递给 IV 参数(或属性),然后再传递给对密文(或恢复的明文)进行更复杂的切片操作。

但无论哪种方式,IV 通常都以明文传输。

所以,将它们粘合在一起,或者单独列...任何更适合您的程序和结构的东西。

【讨论】:

    【解决方案2】:

    答案: IV 是解密所必需的,只要内容已被加密。您不需要加密或隐藏 IV。它可能是公开的。

    --

    IV 的目的是与您正在使用的密钥组合,因此就像您使用不同的“最终密钥”加密每个“数据块”,然后它保证密码数据(加密的一)在加密(和解密)过程中总是不同的。

    这很好地说明了如果你不使用 IV 会发生什么。

    基本上,加密过程是通过对块中的输入数据进行加密来完成的。所以在这个例子的加密过程中,如果你总是使用相同的密钥,图像中具有相同颜色的所有部分(比如白色背景)将输出相同的“密码数据”,那么仍然可以找到一个模式并且那么您没有按需要隐藏图像。

    因此,将 不同 额外数据(IV)与 每个 块的键组合起来就像您为每个块使用不同的“最终键”,然后您解决你的问题。

    【讨论】:

    • “非常好的插图”很好,但不是关于 IV。这是关于块模式“ECB”en.wikipedia.org/wiki/Block_cipher_mode_of_operation。是的,许多更高级的模式使用 IV。
    • 我同意...IV 远不止于此...但这是一个非常公平的用法示例...尤其是对于那些一无所知的人。
    • 每个块的 IV 听起来不像任何正确的加密用法。并且链接到块模式描述可能很有用。要点是正确的“您不需要加密或隐藏IV。它可能是公开的。”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-03-19
    • 2012-02-21
    相关资源
    最近更新 更多