質問: PHPの関数`openssl_random_pseudo_bytes`について質問なんですが、これは`疑似乱数のバイト文字列を生成する`とあるので指定した分だけ返すと思うのですが生成するルール?はどのようなものなのでしょうか?また他で生成した値とかぶることはないでしょうか?
回答: コンピューターで乱数を生成する場合、(雑音などの物理現象から真にランダムな値を取る方法もあることはありますが)何かしらの数式で生成する「擬似乱数」というものが一般的です。 そして、普通の擬似乱数は、出力された値をかき集めると、元の規則を推定できてしまうのですが、暗号に使うにはそれでは不十分なので、それ専用の「暗号論的擬似乱数生成器」を使います。これの作り方としては、 * 普通の擬似乱数にブロック暗号や暗号論的ハッシュ関数を使って作る * 数論的に1から安全な設計を行う などの方法がありますが、利用者としては通常**気にしなくて構いません**。 そして、有限ビットで生成した値なので、「他で生成した値とかぶる」ことも理論上はありますが、誕生日攻撃を考慮しても、たとえば128ビットの値だと、ざっと1000京個作って1組でも衝突する確率がようやく半分、とか言う世界なので、実用上は無視できます(むろん、桁が少なければ衝突します)。