代码之家  ›  专栏  ›  技术社区  ›  Mark Wilkins

AES、密码块链接模式、静态初始化向量和更改数据

  •  2
  • Mark Wilkins  · 技术社区  · 15 年前

    当使用AES(或者可能是大多数密码)时,对给定密钥重用初始化向量(IV)是一种不好的做法。例如,假设我使用密码块链接(CBC)模式用给定的IV加密数据块。对于下一个数据块,应该更改IV(例如,nonce可能会增加或其他内容)。不过,我想知道(主要是出于好奇)如果可以保证数据块的前四个字节都在递增,那么使用相同的IV会有多大的安全风险。换句话说,假设要加密的两个数据块是:

    0x00000000someotherdatafollowsforsomenumberofblocks
    0x00000001someotherdatathatmaydifferormaynotfollows
    

    如果两个数据块使用相同的IV,会泄漏多少信息?

    3 回复  |  直到 15 年前
        1
  •  3
  •   caf    11 年前

    在这种特殊情况下,它可能是好的(但无论如何不要这样做)。“有效IV”是您的第一个加密块,它保证每个消息都不同(只要nonce在同一个密钥下确实不会重复),因为分组密码操作是一个双射。这也是不可预测的,只要您在更改“IV”的同时更改密钥,因为即使使用完全可预测的输入,攻击者也不能预测分组密码的输出(分组密码的行为类似于伪随机函数)。

    然而,它非常脆弱。在你转向更绿色的牧场很久之后仍在维护此协议的人很可能不理解安全性在很大程度上取决于不重复的临时状态,并且可能会“优化”它。为真正的静脉注射发送每条额外的信息块真的是你负担不起的开销吗?

        2
  •  2
  •   Accipitridae    15 年前

    做记号 你所描述的几乎就是在 Appendix C of NIST SP800-38a . 具体而言,有两种方法可以生成IV:

    1. 随机生成一个新的静脉注射
    2. 对于每条消息,使用一个新的唯一nonce(这可能是一个计数器),加密nonce,并将结果用作IV。

    第二个选项与您的建议非常相似。

        3
  •  1
  •   George    15 年前

    这取决于加密算法的块大小。对于通常64字节的块大小,我认为这不会有任何区别。在输入分组密码之前,许多块的第一位是相同的,但结果不会有任何可识别的模式。对于块大小<4个字节(我不认为会发生这种情况)这会有区别,因为第一个块总是相同的,泄露了关于模式的信息。只是我的意见。

    找到这个

    “对于CBC和CFB,重复使用IV会泄漏关于第一个块的一些信息 关于明文,以及关于两条消息共享的任何公共前缀“

    资料来源:我的大学演讲: