使用Fortuna PRNG的AES In Counter模式的随机访问加密:

Mak*_*see 5 security encryption prng

我正在构建基于AES的文件加密,必须能够以随机访问模式工作(访问文件的任何部分).例如,可以使用计数器中的AES,但众所周知,我们需要一个从未使用过两次的唯一序列.在这种情况下是否可以使用简化的Fortuna PRNG(使用随机选择的特定文件特有的密钥加密计数器)?这种方法有弱点吗?

因此加密/解密可能如下所示

在Offset处加密块:

rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = plaintext xor rndsubseq
ciphertext = AESEnc(xoredplaintext, PasswordBasedKey)
Run Code Online (Sandbox Code Playgroud)

在Offset处解冻块:

rndsubseq = AESEnc(Offset, FileUniqueKey)
xoredplaintext = AESDec(ciphertext, PasswordBasedKey)
plaintext = xoredplaintext xor rndsubseq
Run Code Online (Sandbox Code Playgroud)

一个观察.我自己来到Fortuna使用的想法,后来肯定发现它已经被发明了.但只要我阅读无处不在关键的一点它是安全的,但有另一个好一点:这是一个伟大的随机存取伪随机数生成器可以这么说(以简化形式).所以PRNG不仅产生非常好的序列(我用Ent和Die Hard测试它),而且如果你知道步骤号,也允许访问任何子序列.那么在安全应用程序中使用Fortuna作为"随机访问"PRNG通常是否可以?

编辑:

换句话说,我建议使用Fortuna PRNG作为调整,以形成具有随机访问能力的可调整AES密码.我读了Liskov,Rivest和Wagner的作品,但无法理解操作模式中的密码与可调整密码之间的主要区别.他们说,他们建议把从密码自身内部高层这种方法,但是例如在我的情况下,异或纯文本与TWEAK,这是一个好办法没有?

Kry*_*ian 5

我想你可能想查看"可调整块密码"是如何工作的,看看如何解决光盘加密问题:磁盘加密理论.加密整个磁盘与您的问题类似:每个扇区的加密必须独立完成(您希望在不同的偏移量下对数据进行独立加密),但整个过程必须是安全的.有很多工作要做.维基百科似乎给出了一个很好的概述.

编辑添加:重新编辑:是的,您正试图通过使用明文对调整进行异或调整来使用AES编制可调整的块密码.更具体地说,你有Enc(T,K,M)= AES(K,f(T)xor M)其中AES(K,...)表示用密钥K进行AES加密,而f(T)是一些函数调整(在你的情况下我猜它是Fortuna).我曾在你所提到的,并尽可能我可以看到它可能表明,这种方法确实本文简要回顾一下产生安全的可调分组密码.该想法(基于Liskov,Rivest,Wagner论文第2部分的定义)如下.我们可以访问加密oracle或随机排列,我们想知道我们正在与哪个进行交互.我们可以设置调整T和明文M,然后我们得到相应的密文,但我们不知道使用的密钥.以下是如何确定我们是否使用构造AES(K,f(T)xor M).选择任意两个不同的值T,T',计算f(T),f(T').选择任何消息M,然后将第二个消息计算为M'= M x或f(T)x或f(T').现在要求加密oracle使用调整T和M'使用tweak T'加密M. 如果我们处理所考虑的结构,输出将是相同的.如果我们处理随机排列,输出几乎肯定(概率1-2 ^ -128)不同.这是因为AES加密的两个输入都是相同的,因此密文也是相同的.当我们使用随机排列时不会出现这种情况,因为两个输出相同的概率是2 ^ -128.最重要的是,对输入进行xoring调整可能不是一种安全的方法.

本文给出了一些可以证明是安全结构的例子.最简单的似乎是Enc(T,K,M)= AES(K,T x或AES(K,M)).每个块需要两次加密,但它们证明了这种结构的安全性.他们还提到了更快的变体,但它们需要额外的原始(几乎xor-universal函数系列).