PHP の CSPRNG 関数

墨辰丷
リリース: 2023-03-29 19:34:02
オリジナル
1878 人が閲覧しました

この記事では主に 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 乗。

結果のグラフは次のとおりです:


(値が0に近いほど優れています)

3 6の結果は良好なパフォーマンスを示しておらず、このテストは実際のアプリケーションには単純すぎるものの、それでも次のことがわかります。 random_int は優れたパフォーマンスを発揮します

さらに、乱数ジェネレーターの予測不可能性と再現性のある動作により、アプリケーションのセキュリティ レベルが向上します。

概要

: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

PHP実行サイクル例分析の原則

PHPソースコードのディレクトリ構造と機能の説明の詳細な説明


PHP モジュラー インストールの詳細な手順のチュートリアル

以上がPHP の CSPRNG 関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート