了解 PHP 会话熵

Understanding PHP Session Entropy

php.inisession 部分有一个名为 session.entropy_length 的指令。

我知道它用于生成会话 ID "more random"。

session_id 是客户端 IP 地址(32 位)、当前时间戳和微秒(52 位)的哈希值,以及从 php combined lcg() 生成的值,伪随机数生成器(PRNG) 函数(64 位)。熵为 148 位。然而,这个数字不应被视为绝对最小值,因为 IP 地址和时间戳从创建会话的人那里是众所周知的。

当可用的熵量过低时,可以从会话 ID 重建 PRNG 的 seed。由于 PHP 在不同生成器之间重用相同的熵源,这就更容易了。

种子是用来产生其他伪随机值的,所以如果攻击者能够得到种子值就可以预测所有未来的输出(包括但不仅限于mt_rand()rand) .这样不好。

session.entropy_length是将从熵文件中读取的字节数,通常是/dev/urandom/dev/arandomfrom documentation)。

如果你提供像/dev/random这样的随机源,那么熵就越大,生成的session_id强度就越大