我正在构建基于AES的文件加密系统,需要能够在随机访问模式下工作(访问文件的任何部分)。例如,可以使用Counter模式的AES,但众所周知我们需要一个从未重复使用过的唯一序列。在这种情况下,使用简化版Fortuna PRNG是否可行(用特定于特定文件的随机选择的唯一密钥对计数器进行加密)?这种方法存在弱点吗?
因此,加密/解密可能如下所示:
偏移量处块的加密:
因此,加密/解密可能如下所示:
偏移量处块的加密:
rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = plaintext xor rndsubseq
ciphertext = AESEnc(xoredplaintext, PasswordBasedKey)
在偏移量处解密一个块:
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的论文,但无法理解密码器在操作模式和可微调密码器之间的主要区别。他们说他们建议从高层内部将这种方法带到密码本身中,但例如在我的情况下,明文与微调异或,这是微调还是不是微调?