代码之家  ›  专栏  ›  技术社区  ›  Armin

如何从一系列加密步骤中提取中间初始化向量?

  •  0
  • Armin  · 技术社区  · 16 年前

    我正在实现一个日志结构的文件系统,并希望使用.NET加密命名空间加密一系列块。我选择了AES对称加密,创建了密钥和初始的随机初始化向量。

    到目前为止还不错,使用 ICryptoTransform 返回的 SymmetricAlgorithm.CreateEncryptor() 可以加密各个块。

    要在解密时启用“随机访问”检索,需要将中间初始化向量与加密块一起存储。

    但是我找不到一种提取中间试管的方法?它们必须存储在实现加密算法的实例中,但正如我看到的,当前的IV是不可访问的。

    当然,这种限制可以通过生成随机的IVS来规避,或者通过滥用加密数据来加密链中的下一个块来规避。但这感觉像是一次黑客攻击,因为在大多数对称算法中都支持块链接,正如我假设的那样,这些算法只是重用上一个块加密的结果向量。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Rasmus Faber    16 年前

    CBC模式通过在加密前将前一个块的加密异化到纯文本块上,将每个块链接在一起。在加密第一个块时,没有要使用的前一个块,因此您为第一个块提供了一个要使用的IV。

    所以你称之为“中间IV” 只加密前一个块。不需要黑客攻击。

        2
  •  0
  •   Mitch Wheat    16 年前

    静脉注射必须为接受者所知。 加密信息的 能够解密它 . 这可以 以多种方式确保: 将IV与 包,事先同意 在密钥交换或 握手,通过计算(通常 或者通过测量 作为当前时间的参数(用于 硬件身份验证令牌,如 RSA SecurID、Vasco DigiPass等) ID,如发件人和/或 收件人地址或ID、文件ID, 数据包、扇区或集群编号, 等。

    Ref .

    推荐文章