Mysql SHA2中有多少熵(RAND(),256)?
熵有多少位Mysql SHA2中有多少熵(RAND(),256)?,mysql,security,passwords,salt,sha256,Mysql,Security,Passwords,Salt,Sha256,熵有多少位 SELECT SHA2(RAND(), 256); 生成 (实际问题:这是为密码生成随机salt的合理方法吗?哈希函数SHA2不会向生成的salt添加任何entrophy,它只是将rand()的结果转换为另一种形式。这意味着,这一切都取决于rand()函数及其实现 函数rand()当然不是随机的,如果知道函数的状态(最后的结果),就可以预测下一个生成的值。状态本身基于种子,有时此种子由应用程序自动设置。例如,PHP根据当前时间和进程id创建一个种子。请注意,这些值也是可以预测的,或
SELECT SHA2(RAND(), 256);
生成
(实际问题:这是为密码生成随机salt的合理方法吗?哈希函数SHA2不会向生成的salt添加任何entrophy,它只是将
rand()
的结果转换为另一种形式。这意味着,这一切都取决于rand()
函数及其实现
函数rand()
当然不是随机的,如果知道函数的状态(最后的结果),就可以预测下一个生成的值。状态本身基于种子,有时此种子由应用程序自动设置。例如,PHP根据当前时间和进程id创建一个种子。请注意,这些值也是可以预测的,或者至少会缩小可能结果的范围
我不知道rand的MYSQL实现,但我不建议使用它的rand()
函数来生成salt。实际上,我永远不会让数据库生成密码的salt或hash值,因为大多数数据库都没有提供适当的方式来散列密码。相反,使用具有慢键派生函数的开发环境,例如,此类函数通常会自动创建安全的salt
为了回答你的问题,独特性是盐的主要用途,所以有更弱的方法来生产盐。最好是一种不可预测的盐,这样就没有人可以预先计算盐(可能的盐的范围),从而可以准备攻击。获取salt的最佳方法是使用操作系统的随机源(URADOM)。哈希函数SHA2不会向生成的salt添加任何entrophy,它只是将
rand()
的结果转换为另一种形式。这意味着,这一切都取决于rand()
函数及其实现
函数rand()
当然不是随机的,如果知道函数的状态(最后的结果),就可以预测下一个生成的值。状态本身基于种子,有时此种子由应用程序自动设置。例如,PHP根据当前时间和进程id创建一个种子。请注意,这些值也是可以预测的,或者至少会缩小可能结果的范围
我不知道rand的MYSQL实现,但我不建议使用它的rand()
函数来生成salt。实际上,我永远不会让数据库生成密码的salt或hash值,因为大多数数据库都没有提供适当的方式来散列密码。相反,使用具有慢键派生函数的开发环境,例如,此类函数通常会自动创建安全的salt
为了回答你的问题,独特性是盐的主要用途,所以有更弱的方法来生产盐。最好是一种不可预测的盐,这样就没有人可以预先计算盐(可能的盐的范围),从而可以准备攻击。获取salt的最佳方法是,使用操作系统的随机源(URANDOM)。我们来分析一下
SHA2可参考4种算法之一:
-224位输出SHA224
-256位输出SHA256
-384位输出SHA384
-512位输出SHA512
RAND()
。假设您指的是MySQL的函数,让我们看看发生了什么。RAND()
函数生成浮点结果。现在,MySQL对FLOAT
数据类型使用4字节浮点值。这意味着,结果最多包含32位熵
因此,组合已降至32位熵的上限
多亏了32位的熵,我们在7000代人的时间里就有50%的几率发生碰撞。这对一种有效的盐来说太低了
这甚至没有触及到这样一个事实:RAND()
是可预测的(就盐而言,这不是世界末日)
相反,只需使用库为您处理生成。在PHP中,我建议使用or
在其他语言中,我不确定。但说真的,别再重复了。只需使用一个库(最好是使用bcrypt或scrypt的库)就可以了 我们来分析一下
SHA2可参考4种算法之一:
-224位输出SHA224
-256位输出SHA256
-384位输出SHA384
-512位输出SHA512