Kel*_*vin 37 encryption aes rijndaelmanaged
如果我使用Rijndael CBC模式,我不知道为什么我们需要盐.我的理解是,即使人们知道密码,但如果没有IV,他也无法获得数据.所以从我的角度来看,密码+ IV似乎足够安全.
我有什么不对吗?
eri*_*son 48
是的,你需要所有这些东西.
Salt(和"迭代计数")用于从密码中导出密钥.有关更多信息,请参阅PKCS#5.用于密钥派生的salt和迭代计数不必是秘密的.然而,盐应该是不可预测的,并且最好随机选择.
CBC模式需要初始化矢量.这是由加密随机数生成器为每个消息生成的随机数据块.它用作密文的虚拟初始块.与密钥派生盐一样,它不必保密,通常与密文一起传输.
密码和从中派生的密钥必须保密.即使攻击者具有密钥派生和加密的参数以及密文,如果没有密钥,他也无能为力.
更新:
密码不是随机选择的; 有些密码比其他密码更有可能.因此,攻击者不是生成给定长度的所有可能密码(穷举暴力搜索),而是维护密码列表,按降低概率排序.
从密码导出加密密钥相对较慢(由于密钥导出算法的迭代).为几百万个密码导出密钥可能需要数月时间.这将激励攻击者从他最可能的密码列表中获取密钥一次,并存储结果.通过这样的列表,他可以快速尝试使用列表中的每个密钥进行解密,而不是花费数月的计算时间来再次导出密钥.
但是,每一点盐都会使存储派生密钥所需的空间加倍,并为每个可能的密码派生密钥所需的时间.几个字节的盐,很快就变得不可能创建和存储这样的列表.
盐是防止预计算攻击所必需的.
IV(或具有计数器模式的随机数)使相同的纯文本产生不同的密文.防止攻击者利用纯文本中的模式从一组加密消息中获取信息.
需要初始化向量来隐藏消息中的模式.
一个用于增强密钥的安全性,另一个用于增强使用该密钥加密的每个消息的安全性.两者都是必要的.
首先要做的事情是:Rijndael在CBC模式下没有"密码".CBC模式下的Rijndael需要一个缓冲区来加密或解密,一个密钥和一个IV.
"salt"通常用于加密密码.盐被添加到密码中,该密码被加密并与加密值一起存储.这可以防止有人建立所有密码加密的字典 - 你需要建立一个字典,说明所有密码如何为所有盐加密.使用旧的Unix密码加密算法实际上是可能的,该算法仅使用12位盐.(它将工作因素提高了4096).使用128位盐是不可能的.
当然,有人可以对特定密码进行暴力攻击,前提是他们可以检索加密密码.
但是,你有一个IV,它与Salt的功能完全相同.你不需要两者.或者说,IV是你的盐.
顺便说一句,这些天我们称之为"Rijndael"AES.
| 归档时间: |
|
| 查看次数: |
20885 次 |
| 最近记录: |