首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP是否使用符合FIPS-140的RNG来生成会话ID?

PHP是否使用符合FIPS-140的RNG来生成会话ID?
EN

Stack Overflow用户
提问于 2013-09-26 14:50:54
回答 1查看 1.2K关注 0票数 2

部署我正在开发的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,以防发生问题。

谢谢

EN

回答 1

Stack Overflow用户

发布于 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审核的会话生成器

代码语言:javascript
复制
<?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!");
}

用法:

代码语言:javascript
复制
<?php
ini_set('session.
if (!isset($_COOKIE['PHPSESSID'])) {
    session_id_fips140();
}
session_start();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19031540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档