艾丽斯和鲍勃定期见面。他们已经同意面对面地使用128位密码来加密/解密他们之间写的电子邮件。
他们决定使用256位AES。Alice写了她的消息,但是发现她用来加密文本的每一个AES 256应用程序都提供了不同的密文。因此,如果不指定加密她文本的工具,她就无法与Bob通信,也无法通过与其他人进行比较来检查该工具是否真实。
为什么似乎没有标准的算法?为什么没有可以下载并脱机使用的简单可信工具(例如javascript文件)?
发布于 2015-05-28 15:54:58
不存在AES加密标准。有块密码,可以用于操作模式(也可能是填充方法)。然而,这样的操作模式需要一个键控分组密码。密码不是一个密钥--即使是PGP mcrypt的人现在也已经开始看到这个了。因此,您需要(至少)某种基于密码的密钥派生函数或PBKDF从密码派生密钥。此外,您需要指定存储IV的位置,您可能需要进行身份验证等等。
实现这一点的最好方法是使用所谓的容器格式,在这种格式中,这些东西被很好地定义或列出为选项。最常见的是CMS (加密消息语法)和OpenPGP。它们指定消息是如何加密的。mikeazo已经提到的GPG等工具允许使用OpenPGP格式进行基于密码的加密。GPG作为命令行实用工具包括在大多数使用GNU的计算机上,并且可以在Windows上免费下载。CMS通常可以与来自电子邮件应用程序的软令牌一起使用。
由于CMS和OpenPGP的复杂性,您还会看到许多更简单的格式。费涅特是我曾经评论过的(但它是基于令牌的)。RNCryptor是执行密钥派生的另一种方法。NaCl是另一种获得支持的格式。“标准的好处在于,你有这么多可供选择的地方。”(AST)。
发布于 2015-05-27 15:57:44
如果这是一个家庭作业问题,我会给出一个不太可能是正确的答案,所以你可以不使用它。但也许人们不会指责你问作业问题,如果你想从哪里得到这个例子的话?
密码和密钥是两种不同的东西。早期的密码实现直接使用密码。这就是为什么Blowfish密钥调度如此复杂的部分原因,它的密钥调度是一个能够接受56个字符(448位)输入的散列算法。
您可以看到,在许多情况下,如何将密码作为密钥是一个问题。
https://www.schneier.com/paper-blowfish-fse.html
该算法应便于软件实现的简单密钥管理。DES的软件实现通常使用糟糕的密钥管理技术。特别是,用户输入的密码将成为密钥。这意味着虽然DES的理论密钥空间为2^56,但实际密钥空间仅限于使用可打印ASCII的95个字符构造的键。此外,与单词和近词对应的键更有可能出现。
(由于位互补属性,DES密钥空间实际上是2^55 )
本文中没有提到相关的密钥攻击,就好像一个人在128位(16字符)密钥密码中使用了12个字符,并将其更改为另一个12个字符密码,如果攻击者知道这一点,则可以在攻击者知道最后32位时安装差异攻击(取决于实现,最后32位可能都是零位)。
但时代已经变了。虽然仍然有可怕的加密实现( http://arstechnica.com/security/2014/07/crypto-weakness-in-smart-led-lightbulbs-exposes-wi-fi-passwords/,但它们的频率较低,因为人们更了解某些问题,在CBC或CFB模式下的密码泄漏明文,如果有碰撞IV。
因此,一个密码和一个随机盐被散列,以减少每个明文被泄露的可能性,有效地在生成新的密文之前生成一个新的密钥。为了降低离线蛮力攻击的有效性,经常对散列进行多次迭代以加强安全性。
尽管为了回答您没有问过的问题,测试向量仍然存在。
https://crypto.stackexchange.com/questions/25952
复制相似问题