php – 是什么让openssl_random_pseudo_bytes“加密安全”?
我总是被告知在给密码盐时我应该使用openssl_random_pseudo_bytes.
但我真正想知道的是,它使加密安全的原因. 提前致谢.
差异很简短:
> rand使用libc随机数生成器(source),它取决于系统,通常不具有加密安全性 这些属性也列在下表中: 兰特 对于rand,它在mt_rand中声明:
所以对于rand,你必须看看你的libc,找出实际使用的随机数. Mersenne Twister网站上说它现在应该有相当的速度,但它的特性取决于系统.它没有说明它是如何播种的,这意味着你可以将它用于游戏等,但不能用于其他方面. mt_rand Mersenne Twister是一种众所周知的算法,可以产生相当好的分布随机数.它有一个很长的时间段,这意味着在遇到前一个状态之前需要很长时间(如果发生这种情况,它会保持循环,循环的大小称为句点). MT不安全,因为有足够的数据可以重建其安全状态.这意味着如果您首先生成密钥,然后将该算法用于其他内容,则攻击者可以在给定足够输出的情况下重新创建密钥.此外,在创建时使用非安全种子作为系统时间. openssl_random_pseudo_bytes OpenSSL的随机数生成器通常是加密安全的(见下面的注释);这意味着在给定发电机输出的情况下不可能重新计算内部状态. OpenSSL的伪随机数生成器是使用散列函数构造的,当前是MD5,它仍然可以安全地生成随机数.它分布均匀,并且 – 像MT算法一样 – 具有较高的周期. OpenSSL的rand比MT慢得多,但它应该仍然能够获得相当好的速度. 它具有优于OS随机数生成器的优势,它不需要额外的线程或系统调用. OpenSSL使用操作系统随机数生成器(可能的其他源)来创建初始种子. OS随机生成器通常是可用的最佳随机数生成器,因为OS可以访问不直接可用于库和应用程序的熵源. 警告:在OpenSSL的Wiki上声明:
这反映在PHP函数中:
这意味着对于例如它可能仍然是不安全的.长期钥匙. 警告#2:其他见解表明,无论返回值如何,OpenSSL的PRNG可能并不总是安全的.因此在选择OpenSSL之前应该特别小心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |