在AES加密中,迭代次数是否确实增加了安全性?

Pri*_*imm 0 java encryption aes encryption-symmetric

我使用AES和salt String来加密我的'密码',使用我制作的java程序.(它使用AES对称加密)

用户设置要加密的消息,盐,迭代和密钥的16个字节.

如果我将它设置为使用大量的加密和解密迭代,比如255,这真的会使我的密码比1次迭代更安全吗?

Cam*_*ner 6

最简洁的答案是不.添加加密迭代无济于事.这与在基础算法中添加回合不同,其中更多回合实际上有帮助.

更长的答案是您使用错误的技术来存储密码.您不应该使用对称加密,您应该使用单向散列函数,例如bcrypt.

解决方案的弱点(对称加密)是您的软件必须可以使用加密密钥才能加密或解密密码.这意味着当攻击者闯入您的系统时,他们将能够同时获得您的密码数据库和密钥,因此对他们来说解密所有密码将是微不足道的.您应该假设攻击者能够获取您的源代码以及您的所有数据.

如果您使用哈希函数,那么您不必担心这种情况.即使攻击者获得了您的源代码和密码数据库,他们仍然无法反转单向哈希(假设您使用好哈希 - 再次考虑使用bcrypt),因此盗窃您的数据不会影响用户的密码.

当你考虑安全性时,几乎总是最好使用现有的解决方案(我提到过bcrypt吗?)而不是自己动手.安全很难做到,甚至专家也搞砸了.不要编写自己的密码存储系统.使用由专家设计的,更重要的是,由一大批其他专家进行分析和攻击.比如Bcrypt.


Wug*_*Wug 5

简短的回答是肯定的.

把它想象成一个魔方(它不是真正最好的例子,而是和我一起承受).明文是处于解决状态的立方体,密文是其扰乱状态.每轮加密都会旋转立方体的一个面.如果它更加剧烈地加扰,那么在尽可能短的移动中解决立方体的计算要困难得多.打破一轮AES将是密码相当于要求某人解决一个旋转一个面的魔方.

一种可以有效解决减少轮次加密的攻击就是SAT求解器攻击.

无论如何,您应该使用单向加密操作来存储密码.我认为首选的方法是bcrypting,因为它的加密安全(单向)和计算密集,因此非常难以暴力.

  • 请记住,基础算法中的*rounds*与添加加密和解密的*迭代*不同.AES(AES('foo'))没有比AES('foo')更好的加密. (2认同)
  • 那么,根据密钥大小,AES固定为10轮,12轮或14轮,所以这不是你可以改变的.我很确定他的意思是迭代,虽然我可能错了:) (2认同)