使用 base 64 加盐密码是否安全



在Web应用程序中,我正在从/dev/urandom读取一些字节,以获取用于散列密码的随机盐。

在散列之前对盐进行base64好吗?因为 base64 编码有时会在末尾附加一些 =,这可能会导致已知的明文攻击。但这可能没有问题,因为盐仍然存储在数据库中,还是我错了?

这是否会影响应用程序的安全性?

在大多数情况下,可能不是。为了解密密码,必须知道您的盐,因此我们可以假设任何攻击者都能够获得散列密码和使用的盐。您的盐现在所要防止的只是基于彩虹表的攻击和增加工作量(因为每个明文现在需要散列n次,而不是一次才能与n密码进行比较(。

只要你的盐长度合理,你可能没事。

这取决于使用的哈希算法,哪个字符字母被接受为盐。例如,BCrypt 将接受以下字符,这些字符与 base64 编码文本几乎但不完全相同: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz .

已知的纯文本攻击在这里没有问题,因为我们不加密任何东西,尤其是盐。

不,它不安全。

不应对用户密码使用任何哈希函数。相反,您应该使用基于密码的密钥派生函数,例如具有适当迭代次数的 PBKDF2 或 scrypt,以减慢哈希,从而降低暴力攻击的风险。

密钥派生函数和密码哈希有什么区别?

如果您将 PHP 用于您的 Web 应用程序:

我需要 base64 编码我的盐(用于散列密码(吗?

PHP 密码的安全哈希和盐

盐的目的是确保每个密码的存储方式不同。 也就是说,如果两个人使用相同的密码,则两个密码的存储并不相同。这可以防止攻击者设法提取密码表数据时彩虹和哈希表攻击。

虽然没有理由使用Base64 - 哈希应该是字节序列而不是ASCII文本 - 但这应该不会影响哈希密码的安全性。是的,将使用的字节序列有限(仅表示有效 ASCII 字符的字节序列(,但是您的哈希会更长,并且表示相同范围的可能值。

相关内容

最新更新