この記事では主に PHP の CSPRNG 関数を紹介します。興味のある方はぜひ参考にしてください。
1.CSPRNGとは
Wikipediaより引用すると、暗号的に安全な擬似乱数生成器(CSPRNG)は、擬似乱数を生成する擬似乱数生成器(PRNG)です。乱数は暗号アルゴリズムに適しています。
CSPRNG は主に以下の目的で使用されます:
鍵の生成 (複雑な鍵の生成など)
新しいユーザーのランダムなパスワードを生成
暗号化システム
鍵高レベルのセキュリティを実現するための重要な点は、高品質のランダム性です
2. PHP7 の CSPRNG
PHP 7 では、CSPRNG の実装に使用できる 2 つの新しい関数、random_bytes とrandom_int が導入されています。
random_bytes 関数は文字列を返し、返された結果のバイト数を表す int 入力パラメータを受け取ります。
例:
$bytes = random_bytes('10'); var_dump(bin2hex($bytes)); //possible ouput: string(20) "7dfab0af960d359388e6"
random_int 関数は、指定された範囲内の int 数値を返します。
例:
var_dump(random_int(1, 100)); //possible output: 27
3. バックグラウンド実行環境
上記の関数のランダム性は環境によって異なります:
ウィンドウでは、常に CryptGenRandom() が使用されます。
他のプラットフォームでは、利用可能な場合は arc4random_buf() が使用されます (BSD シリーズまたは libbsd を備えたシステムで確立されています)
上記のどれも当てはまらない場合、Linux システムは getrandom() を呼び出します2)が使用されます。
それでも機能しない場合は、/dev/urandom が最後の利用可能なツールとして使用されます
上記のどれも機能しない場合、システムはエラーをスローします
4 つ、1 つの簡単なテスト
優れた乱数生成システムは、適切な生成の「品質」を保証します。この品質をチェックするために、通常、一連の統計的テストが実行されます。複雑な統計のトピックを深く掘り下げずに、既知の動作を数値生成プログラムの結果と比較することは、品質評価に役立ちます。
簡単なテストはサイコロゲームです。 1 つのサイコロを 1 回振って 6 の目が出る確率が 1/6 であると仮定すると、3 つのサイコロを同時に 100 回振ると、結果はおおよそ次のようになります:
0 6 = 57.9 回
1 6 = 34.7倍結果は次のとおりです
よりよく比較するために、最初に rand と random_int を確認すると、数式を適用して結果をグラフにプロットできます。式は次のとおりです: (php 結果 - 期待される結果)/期待される結果の 0.5 乗。
3 6の結果は良好なパフォーマンスを示しておらず、このテストは実際のアプリケーションには単純すぎるものの、それでも次のことがわかります。 random_int は優れたパフォーマンスを発揮します
さらに、乱数ジェネレーターの予測不可能性と再現性のある動作により、アプリケーションのセキュリティ レベルが向上します。
概要
: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。 関連する推奨事項:PHP実行サイクル例分析の原則
PHPソースコードのディレクトリ構造と機能の説明の詳細な説明
PHP モジュラー インストールの詳細な手順のチュートリアル
以上がPHP の CSPRNG 関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。