【あんごうがくてきにあんぜんなぎじらんすうせいせいき】
暗号学的に安全な擬似乱数生成器(CSPRNG) とは?
公開:
💡 秘密の番号を作る、先読みされにくい抽選機
出力の一部を知られても、ほかの値を計算で予測することが難しいように設計された擬似乱数生成器。適切な初期化と内部状態の保護を前提に、鍵や認証トークンなどの生成を支えます。
📌 このページのポイント
ランダムな数なら、秘密の番号に使っていいの?
見た目がばらばらでも、前の出力から次を読める方式があるんだ。CSPRNGは、一部の出力を見られてもほかの値を計算で予測しにくいように設計した仕組みだよ。良質な乱雑さで初期状態を設定することと、内部状態の保護が前提になるんだ。
どんなときに使うの?
暗号用なら、4桁の番号でも安心なの?
そうとはいえないよ。0000から9999までなら候補は1万通りしかない。各番号が同じ確率で出るとしても、1回で当たる確率は1万分の1だね。予測困難な方式を選ぶことと、十分な長さを確保することは別なんだ。
作ったあとに番号が盗まれたら?
もっと詳しく知りたい人へ
ブラウザで乱数を取るAPIと、暗号鍵を作るAPIは同じ?
用途を分けます。Web CryptoのgetRandomValuesは整数型の配列へ暗号学的に強い乱数を書き込みますが、暗号鍵の生成には仕様が案内するsubtle.generateKeyを使います。鍵のアルゴリズムや用途も指定する必要があり、乱数の配列を作るだけでは同じ処理になりません。
まとめ:ざっくりこれだけ覚えればOK!
「CSPRNG」って出てきたら「秘密の値を作るための、先読みされにくい乱数の仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cryptographically Secure Pseudorandom Number Generator」 = 暗号学的に安全な擬似乱数生成器
💬 Pseudorandomは計算で作る擬似乱数、Cryptographically Secureは暗号用途に必要な予測困難性を表す言葉だよ