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

时间:2009-08-07 10:04:41

标签: .net cryptography

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

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

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

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

当然,可以通过生成随机IV或通过滥用加密数据来加密链中的下一个块来规避此限制。但是,由于大多数对称算法支持块链接这一事实感觉就像一个黑客 - 正如我所想 - 只是重用前一个块加密的结果向量。

2 个答案:

答案 0 :(得分:1)

CBC模式通过在加密之前将前一个块的加密与明文块进行异或来将每个块链接在一起。加密第一个块时,没有先前的块可供使用,因此您可以为第一个块提供IV。

所谓你所谓的“中间IV”只是前一个块的加密。不需要黑客。

答案 1 :(得分:0)

  

收件人必须知道IV   加密信息   能够解密。这可以   通过多种方式确保:   传输IV与   数据包,事先同意   在密钥交换期间或   握手,通过计算它(通常   递增地),或通过测量这样的   参数作为当前时间(用于   硬件认证令牌等   RSA SecurID,VASCO Digipass等),   发件人和/或等ID   收件人的地址或ID,文件ID,   包,扇区或簇号,   等

Ref