我正在构建基于 AES 的文件加密,该加密必须能够在随机访问模式下工作(访问文件的任何部分)。例如,可以在 Counter 中使用 AES,但众所周知,我们需要一个不会使用两次的唯一序列。
在这种情况下,可以使用简化的 Fortuna PRNG(使用随机选择的特定于特定文件的唯一密钥来加密计数器)吗?这种方法有弱点吗?
所以加密/解密可以是这样的
Offset 处的块加密:
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
一项观察。我自己想到了《福尔图娜》中使用的想法,后来肯定发现它已经被发明了。但正如我到处读到的那样,它的关键点是安全性,但还有另一个优点:可以说,它是一个很棒的随机访问伪随机数生成器(以简化形式)。因此,PRNG 不仅会产生非常好的序列(我用 Ent 和 Die Hard 对其进行了测试),而且如果您知道步骤号,还允许访问任何子序列。那么,在安全应用程序中使用 Fortuna 作为“随机访问”PRNG 通常可以吗?
EDIT:
换句话说,我建议使用 Fortuna PRNG 作为调整,形成具有随机访问能力的可调整 AES 密码。我阅读了 Liskov、Rivest 和 Wagner 的著作,但无法理解操作模式下的密码和可调整密码之间的主要区别是什么。他们说,他们建议将这种方法从高层引入密码本身,但例如在我的例子中,通过调整对纯文本进行异或,这是否是一种调整?
我想您可能想了解一下“可调整的分组密码”是如何工作的,并看看如何解决光盘加密的问题:磁盘加密理论 http://en.wikipedia.org/wiki/Disk_encryption_theory。加密整个磁盘与您的问题类似:每个扇区的加密必须独立完成(您希望对不同偏移量的数据进行独立加密),但整个磁盘必须是安全的。这方面已经做了很多工作。维基百科似乎给出了很好的概述。
编辑添加:
重新编辑:是的,您正在尝试通过将调整与明文进行异或,用 AES 制作可调整的分组密码。更具体地说,您有 Enc(T,K,M) = AES (K, f(T) xor M),其中 AES(K,...) 表示使用密钥 K 进行 AES 加密,f(T) 是以下函数调整(在你的情况下我猜是福尔图娜)。我简要浏览了你提到的论文,据我所知,可以证明这种方法确实有效not产生安全的可调整分组密码。
这个想法(基于 Liskov、Rivest、Wagner 论文第 2 节的定义)如下。我们可以访问加密预言机或随机排列,并且我们想知道我们正在与哪一个进行交互。我们可以设置调整T和明文M,然后我们得到相应的密文,但我们不知道使用的密钥。以下是如何确定我们是否使用 AES(K, f(T) xor M) 结构。
选取任意两个不同的值 T、T',计算 f(T)、f(T')。选择任意消息 M,然后将第二条消息计算为 M' = M xor f(T) xor f(T')。现在要求加密预言机使用调整 T 加密 M,并使用调整 T' 加密 M'。如果我们处理所考虑的构造,输出将是相同的。如果我们处理随机排列,输出几乎肯定会不同(概率为 1-2^-128)。这是因为 AES 加密的两个输入相同,因此密文也相同。当我们使用随机排列时,情况就不会如此,因为两个输出相同的概率是 2^-128。最重要的是,对输入进行异或调整可能不是一种安全的方法。
该论文给出了一些可以证明是安全结构的例子。最简单的似乎是 Enc(T,K,M) = AES(K, T xor AES(K, M))。每个块需要两次加密,但它们证明了这种结构的安全性。他们还提到了更快的变体,但它们需要额外的原语(几乎异或通用函数系列)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)