C++の乱数エンジンは暗号用途に使うな、標準ライブラリの設計思想

Everything should be a random number generator

cppreference.comによるC++乱数ライブラリの解説。一様乱数ビット生成器(URBG)と分布を組み合わせて乱数を作る仕組みを説明し、線形合同法・Mersenne Twister・subtract with carry・Philoxの各エンジンを速度や状態サイズ、周期性の観点で比較する。C++26ではGPU向けに並列化しやすいPhiloxが追加されるが、いずれも暗号学的に安全ではなく、その用途にはOpenSSLのRAND_bytesなど専用ライブラリを使うべきだと明言している。

これらの乱数エンジンはいずれも暗号学的に安全ではない。暗号に関わる操作と同様、その目的には暗号ライブラリ(例えばOpenSSLのRAND_bytes)を使うべきだ。

この日のほかの記事

2026-11-08