我需要提高我们网站的安全性,目前正在使用此处的指南:http://crackstation.net/hashing-security.htm ,以及此处生成的随 secret 码:https://defuse.ca/generating-random-passwords.htm .我收集到两者都使用函数 mcrypt_create_iv()
生成随机字节(或位?),但出于某种原因,我在 CentOS 6 下安装 php-mcrypt 时遇到错误。幸运的是,第一个链接说openssl_random_pseudo_bytes()
是一个 CSPRNG(PHP 文档和其他来源也支持该声明),并且在当前服务器安装的 PHP 5.4 上可用,所以我别无选择,只能在此时此刻。考虑到这些,我想问以下问题:
在不影响安全性的情况下,直接代码替换是否足够? (也就是说,只需将对
mcrypt_create_iv()
的调用替换为openssl_random_pseudo_bytes()
即可?)关于代码 (http://crackstation.net/hashing-security.htm#properhashing) 中提到的常量,指南说“[m]确保你的盐至少与哈希函数的输出。”我假设
PBKDF2_SALT_BYTES
和PBKDF2_HASH_BYTES
都设置为 24 字节是否正确,因为pbkdf2()
函数的输出仅为 24 字节,而不是 32(对于 256 位),因为使用的底层算法是sha256
? (是的,我也在使用键拉伸(stretch)。)在相关说明中,24 字节是否合适,或者应该增加/减少,这会有什么影响?
非常感谢那些愿意回答的人。
最佳答案
- 我认为安全性不会受到影响,因为这两个函数只是加密安全的伪随机数生成器(注意:
openssl_random_pseudo_bytes($len, true)
和mcrypt_create_iv($len, MCRYPT_DEV_RANDOM)
). PBKDF2_SALT_BYTES
仅用于测试函数create_hash()
而不是pbkdf2()
本身。因此,您只需使用这些 CSPRNG 实现您自己的盐生成函数即可。
关于PHP - 用 openssl_random_pseudo_bytes() 替换 mcrypt_create_iv(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241418/