Encryption 密钥和初始值AES

Encryption 密钥和初始值AES,encryption,cryptography,Encryption,Cryptography,我正在用256位密钥在cbc模式下创建一个AES加密方案。在了解CBC模式和初始值之前,我计划为每个加密操作创建一个32位salt并存储salt。然后,密码/输入的密钥将填充此salt,最多32位 也就是说,如果输入的通行证/钥匙是“树”,而不是填充28个0,它将填充前28个字符的盐 然而,这是在我知道iv之前,在一些地方也被称为盐。我现在的问题是,这种早期的腌制方法是否在原则上与IV变得多余。这将是假设盐和IV将与密文一起存储,因此理论上的暴力攻击不会被阻止 存储此密钥并使用它而不是0是一个需

我正在用256位密钥在cbc模式下创建一个AES加密方案。在了解CBC模式和初始值之前,我计划为每个加密操作创建一个32位salt并存储salt。然后,密码/输入的密钥将填充此salt,最多32位

也就是说,如果输入的通行证/钥匙是“树”,而不是填充28个0,它将填充前28个字符的盐

然而,这是在我知道iv之前,在一些地方也被称为盐。我现在的问题是,这种早期的腌制方法是否在原则上与IV变得多余。这将是假设盐和IV将与密文一起存储,因此理论上的暴力攻击不会被阻止

存储此密钥并使用它而不是0是一个需要付出一定努力的步骤,因此值得一问,我认为这是否是一个实际上毫无用处的措施。就目前的知识而言,似乎不可能为AES创建任何暴力破解表,甚至在创建md5表的过程中也不可能有16位加密

谢谢,
以利亚

如果你说的是AES-CBC,那么它是一个初始化向量(IV),而不是盐。通常的做法是将IV作为加密信息的第一块发送。静脉注射不需要保密。但是,它应该随每条消息一起更改-常量IV意味着您的第一个数据块实际上是在ECB模式下加密的,这是不安全的。

您最好了解CBC,因为它肯定比使用ECB模式加密更好(尽管还有更好的模式,例如认证模式GCM和EAX)

我想有几件事你应该知道,所以我在这里解释一下


密钥和密码不一样。通常使用密钥派生函数从密码中创建用于对称加密的密钥。这里讨论的最常见的是PBKDF2(基于密码的密钥派生函数#2),它用于PBE(基于密码的加密)。RSA实验室最新的开放式PKCS#5标准对此进行了定义。在输入密码之前,需要检查密码是否正确转换为字节(字符编码)

salt用作键派生函数的另一个输入。它用于防止使用“彩虹表”的暴力攻击,其中密钥是针对特定密码预先计算的。由于存在salt,攻击者无法使用预先计算的值,因为他无法为每个salt生成一个值。salt通常应为8字节(64位)或更长;使用128位的盐将为您提供最佳的安全性。salt还确保(不同用户的)相同密码不会派生相同的密钥

密钥派生函数的输出是
dkLen
字节的秘密,其中
dkLen
是要生成的密钥的长度,以字节为单位。由于AES密钥不包含这些字节以外的任何内容,因此AES密钥将与生成的密钥相同<对于AES的密钥长度,code>dkLen应为16、24或32字节:128、192或256位


好了,现在您终于有了一个AES密钥可以使用了。但是,如果仅使用此密钥加密每个纯文本块,则如果纯文本块相同,则会得到相同的结果。CBC模式通过在加密之前将下一个纯文本块与最后一个加密块异或来解决这个问题。最后一个加密块是“向量”。这不适用于第一个块,因为没有最后一个加密块。这就是为什么需要指定第一个向量:“初始化向量”或IV

AES的块大小为16字节,与密钥大小无关。所以向量,包括初始化向量,也需要16字节。现在,如果您仅使用密钥加密(例如,单个文件),那么IV可能只包含16个字节,值为
00
h

这不适用于多个文件,因为如果文件包含相同的文本,您将能够检测到加密文件的第一部分是相同的。这就是为什么需要为使用密钥执行的每个加密指定不同的IV。它包含什么并不重要,只要它是唯一的,16个字节,并且执行解密的应用程序知道它

[6年后编辑]以上部分并不完全正确:对于CBC,IV需要对攻击者不可预测,而不仅仅是需要是唯一的。例如,不能使用计数器

现在有一个技巧可以让你一直在IV中使用所有的零:对于你使用AES-CBC加密的每一个纯文本,你可以使用相同的密码计算一个密钥,但是使用不同的salt。在这种情况下,您将只对一条信息使用结果键。如果不能为实现基于密码的加密的库提供IV,这可能是一个好主意

[编辑]另一个常用技巧是使用PBKDF2的额外输出来推导IV。通过这种方式,官方建议CBC的IV不应被对手预测。但是,您应该确保您不要求PBKDF2函数的输出大于底层哈希函数所能提供的输出。PBKDF2具有使对手在这种情况下获得优势的弱点。因此,如果SHA-256用作PBKDF2的哈希函数,则不要要求超过256位。请注意,SHA-1是PBKDF2的常见默认值,因此只允许使用单个128位AES密钥


IV和盐是完全独立的术语,尽管经常混淆。在您的问题中,您还混淆了位和字节、密钥大小和块大小以及rainbow表和MD5表(没有人说加密很容易)。有一件事是肯定的:在密码学中,作为sec是值得的