我正在构建基于 AES 的文件加密,它必须能够在随机访问模式下工作(访问文件的任何部分)。例如,可以在 Counter 中使用 AES,但众所周知,我们需要一个从未使用过两次的唯一序列。在这种情况下是否可以使用简化的 Fortuna PRNG(使用特定于特定文件的随机选择的唯一密钥加密计数器)?这种方法有弱点吗?
所以加密/解密看起来像这样
在偏移量处加密块:
rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = plaintext xor rndsubseq
ciphertext = AESEnc(xoredplaintext, PasswordBasedKey)
在 Offset 处解密块:
rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = AESDec(ciphertext, PasswordBasedKey)
plaintext = xoredplaintext xor rndsubseq
一项观察。我自己想到了 Fortuna 中使用的想法,后来肯定发现它已经被发明了。但正如我所读到的,关于它的关键点是安全性,但还有另一个好处:可以说它是一个很棒的随机访问伪随机数生成器(以简化形式)。因此,PRNG 不仅可以产生非常好的序列(我用 Ent 和 Die Hard 对其进行了测试),而且如果您知道步骤编号,还允许访问任何子序列。那么在安全应用程序中使用 Fortuna 作为“随机访问”PRNG 通常可以吗?
编辑:
换句话说,我建议使用 Fortuna PRNG 作为调整,以形成具有随机访问能力的可调整 AES 密码。我阅读了 Liskov、Rivest 和 Wagner 的作品,但无法理解操作模式中的密码和可调整密码之间的主要区别是什么。他们说他们建议将这种方法从密码本身的高层引入,但例如在我的情况下,通过调整对纯文本进行异或,这是否是调整?