Ruby pbkdf2_hmac_sha1与空盐一起设置aes密钥

Ruby pbkdf2_hmac_sha1与空盐一起设置aes密钥,ruby,encryption,cryptography,Ruby,Encryption,Cryptography,我正在加密aes-256-cbc中的几个文本。我使用pbkdf2_hmac_sha1生成密钥,并使用空盐。因此,密钥在加密之间没有变化,尽管每次将iv设置为random_iv 我为一个图书馆做这件事,基本上这是我最近的一次推广: 正如你所看到的,盐是空的,但我有1000多发子弹,我也总是随机设置:iv (选项[:iv]来自cipher.random_iv)您的问题中没有实际问题,但我推断它是:“我做得对吗?” 答案是:不。你必须使用随机盐 salt的要点是防止攻击者通过使用并行性来优化事情,即

我正在加密aes-256-cbc中的几个文本。我使用pbkdf2_hmac_sha1生成密钥,并使用空盐。因此,密钥在加密之间没有变化,尽管每次将iv设置为random_iv

我为一个图书馆做这件事,基本上这是我最近的一次推广:

正如你所看到的,盐是空的,但我有1000多发子弹,我也总是随机设置:iv
(选项[:iv]来自cipher.random_iv)

您的问题中没有实际问题,但我推断它是:“我做得对吗?”

答案是:不。你必须使用随机盐

salt的要点是防止攻击者通过使用并行性来优化事情,即攻击系统的多个实例(使用不同的密码)。这种并行性可能是一种密码猜测攻击,并与多条加密消息进行比较;或者可能使用预先计算的表格(例如,大肆宣传的表格)。这是同样的事情(空间或时间并行性,这不是什么大问题)。随机的盐会阻碍平行性


现在,这是一个随机盐每个密码。如果重复使用相同的密码,也可以重复使用相同的salt,这将产生相同的密钥;如果密钥用于加密,则可以为每条消息使用新的正确随机IV。但是如果其他人想用自己的密码使用你的软件,他也必须有自己的密码。另外,请注意,这必须是一个随机salt,而不是一个“通过哈希函数从密码派生的salt”(如果您不明白原因,请再想想预计算表是关于什么的)。

谢谢,我还原了提交:)。Ping@Thomas:很抱歉,这个不相关的评论,但既然你的答案得分似乎是最高的,你介意把它作为同义词吗?我没有足够的答案来做这个标签,所以我自己做。事实上,你介意帮我做吗?