部署我正在开发的PHP应用程序的一个要求是使用FIPS-140验证的加密模块。
客户特别指出,"PHP使用加密弱随机数生成器来生成会话ID信息“,并引用了以下报告:http://berlin.ccc.de/~andreas/php-entropy-advisory.txt
我建议他们如何设置session.entropy_length和session.hash_function来增加熵,但他们没有接受这一点,特别要求我们使用符合FIPS-140标准的RNG。
我不确定散列函数和RNG之间的区别,所以我很难做出响应。有人能建议使用符合FIPS-140的函数在php中生成会话ids吗?
我们正在Windows + SQL Server上运行PHP 5.4.16,以防发生问题。
谢谢
发布于 2018-10-01 20:14:43
部署我正在开发的PHP应用程序的一个要求是使用FIPS-140验证的加密模块。
我的哀悼。头痛的是FIPS-140,就像一滴晨露对海洋一样。
我不确定散列函数和RNG之间的区别,所以我很难做出响应。有人能建议使用符合FIPS-140的函数在php中生成会话ids吗?
如果您使用ext/mcrypt,mcrypt_create_iv()使用的CryptGenRandom API应该是FIPS-140兼容的。(或者,在minumum,应该可以这样设置。)这个函数是mcrypt的唯一优点,并且它与libmcrypt是分离的。
如果您使用的是OpenSSL,并在FIPS模式下编译了OpenSSL,那么您也可以使用openssl_random_pseudo_bytes(),并且它应该使用一个与FIPS兼容的生成器。
最后,如果您升级到PHP并使用7+,只要random_bytes()与FIPS-140兼容,您就是黄金级的。
散列函数在这里并不重要。你想要使用安全源,仅此而已。哈希不会给你买任何东西。如果您被迫使用散列函数,请使用SHA2家族哈希函数之一(SHA256、SHA384或SHA512),该函数被批准用于符合FIPS-140的软件中。
应该通过FIPS-140审核的会话生成器
<?php
/**
* @return string
*/
function session_id_fips140()
{
if (is_callable('random_bytes')) {
return session_id(bin2hex(random_bytes(32)));
}
if (is_callable('mcrypt_create_iv')) {
return session_id(bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)));
}
if (is_callable('openssl_random_pseudo_bytes')) {
return session_id(bin2hex(openssl_random_pseudo_bytes(32)));
}
// Fail closed. Maybe install random_compat?
throw new Exception("No suitable PRNG is available on the current system!");
}用法:
<?php
ini_set('session.
if (!isset($_COOKIE['PHPSESSID'])) {
session_id_fips140();
}
session_start();https://stackoverflow.com/questions/19031540
复制相似问题