SecureRandomは、安全な乱数を生成し、配列のシャッフルやパスワードなどの文字列シーケンスの生成などの一般的なランダム化操作にそれらを使用するための PHP ライブラリです。バージョン 7.0 より前の PHP には安全なランダム関数が組み込まれていませんでしたが、安全なランダム値を生成するためにさまざまな乱数ソースを使用することは可能でした。したがって、このライブラリには 2 つの主な目的があります。
このライブラリは、追加の安全なランダム バイト ジェネレーターを提供しません。拡張機能または内部的に PHP で利用できるバイト ジェネレーターを使用するだけです。 PHP で一般的に利用できる 4 つのジェネレーターは次のとおりです。
/dev/(u)random
からの読み取りmcrypt_create_iv()
関数の呼び出しopenssl_random_pseudo_bytes()
関数の呼び出しこのライブラリによって生成されるランダム性のセキュリティは、基礎となるランダム バイト ジェネレーターに完全に依存しています。ライブラリは、乱数の均等な分布を生成するために必要な正規化以外に、バイトに対して追加の変換を行いません。
API ドキュメントは http://kit.riimu.net/api/securerandom/ から入手できます。
OpenSSL
(OpenSSQL ジェネレーターを使用する場合)Mcrypt
(Mcrypt ジェネレーターを使用するため)/dev/urandom
読み取り可能である必要があります。 このライブラリをインストールする最も簡単な方法は、Composer を使用して依存関係を処理することです。 Composer 経由でこのライブラリをインストールするには、次の 2 つの手順に従ってください。
プロジェクト ルートで Composer コマンドライン インストールを実行して、 composer.phar
を取得します。
インストール スクリプトを実行すると、 composer.phar
ファイルがプロジェクト ルートに存在し、次のコマンドを実行できるようになります。
php composer.phar require "riimu/kit-securerandom:^1.3"
Composer 経由でこのライブラリをインストールした後、インストール中に Composer によって生成されたvendor/autoload.php
ファイルを含めることでライブラリをロードできます。
Composer の使用方法にすでに慣れている場合は、次のcomposer.json
ファイルをプロジェクトに追加し、 composer install
コマンドを実行することで、ライブラリを依存関係として追加することもできます。
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
Composer を使用してライブラリをロードしたくない場合は、最新リリースをダウンロードし、 src
フォルダーをプロジェクトに抽出することで、ライブラリを手動でダウンロードすることもできます。次に、提供されたsrc/autoload.php
ファイルをインクルードして、ライブラリ クラスをロードできます。
ライブラリの使い方はとても簡単です。 SecureRandom
のインスタンスを作成し、いずれかのメソッドを呼び出してランダムな値を生成するだけです。例えば:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom ();
var_dump ( base64_encode ( $ rng -> getBytes ( 32 ))); // Returns a random byte string
var_dump ( $ rng -> getInteger ( 100 , 1000 )); // Returns a random integer between 100 and 1000
var_dump ( $ rng -> getFloat ()); // Returns a random float between 0 and 1
var_dump ( $ rng -> getRandom ()); // Returns a random float between 0 and 1 (not including 1)
var_dump ( $ rng -> getArray ( range ( 0 , 100 ), 5 )); // Returns 5 randomly selected elements from the array
var_dump ( $ rng -> choose ( range ( 0 , 100 ))); // Returns one randomly chosen value from the array
var_dump ( $ rng -> shuffle ( range ( 0 , 9 ))); // Returns the array in random order
var_dump ( $ rng -> getSequence ( ' 01 ' , 32 )); // Returns a random sequence of 0s and 1s with length of 32
var_dump ( $ rng -> getSequence ([ ' a ' , ' b ' , ' c ' ], 5 )); // Returns an array with 5 elements randomly chosen from 'a', 'b', and 'c'
var_dump ( $ rng -> getUuid ()); // Returns a random version UUID, e.g. '00056a74-036b-47c5-ab35-6f34a41a70ae'
SecureRandom
では、ランダム性を取得するために次のメソッドを使用できます。
getBytes($count)
$count に等しい長さのランダムなバイトの文字列を返します。
getInteger($min, $max)
指定された 2 つの正の整数 (両端を含む) の間のランダムな整数を返します。
getFloat()
0 と 1 (両端を含む) の間のランダムな浮動小数点値を返します。
getRandom()
52 ビットの精度を持つ 0 から 1 までのランダムな浮動小数点値を返します。そのため、戻り値は常に 1 未満になります。 getFloat()
と比較して、値の分布はより均一であり、 PHP_INT_MAX
に依存しません。
getArray(array $array, $count)
指定された配列からランダムな要素の数を返します。要素の順序はランダムですが、キーは保持されます。
choose(array $array)
配列から選択されたランダムな値を返します。
shuffle(array $array)
ランダムな順序で配列を返します。キーは保存されます。
getSequence($choices, $length)
値または文字のランダムなシーケンスを返します。選択肢は文字列または配列として指定できます。戻り値の型は、選択肢の型によって異なります。
getUuid()
ランダムなバージョン 4 の普遍的に一意の識別子を返します。 UUID は、ランダムかつ独立して生成できる一意の識別子であり、衝突の可能性は非常に低いです。 UUID の例は00056a74-036b-47c5-ab35-6f34a41a70ae
です。
このライブラリによって提供されるジェネレーターは、デフォルトで/dev/urandom
ランダム性ソースとして使用します。 /dev/random
からの読み取りは、一般的な PHP Web アプリケーションに追加のセキュリティを提供するものではなく、ブロックする性質があるため、そのような目的には非常に適していません。
代わりに/dev/random
から読み取る必要がある正当なケースはほとんどありません。これは主に、 /dev/urandom
がまだ適切にシードされていないことが懸念される場合に当てはまります。ただし、これはシステムの起動時にのみ問題が発生する傾向があるため、Web アプリケーションの場合は通常は当てはまりません。
/dev/random
から読み取る必要があることが絶対にわかっている場合は、コンストラクター パラメーターを false に設定し、コンストラクターでSecureRandom
にジェネレーターを提供することにより、代わりにランダム ソースとして使用するようにRandomReader
とMcrypt
設定することができます。例えば:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
SecureRandom
が作成されると、現在のプラットフォームでサポートされているものに応じて、利用可能な安全なランダム ジェネレーターの 1 つを使用しようとします。次のランダム ソースが利用可能で、次の順序で試行されます。
GeneratorInternal
PHP 7.0 で利用可能な内部関数を使用します。GeneratorRandomReader
ランダムなデバイス/dev/urandom
からバイトを読み取るだけです。GeneratorMcrypt
mcrypt_create_iv()
使用して、 MCRYPT_DEV_URANDOM
をソースとしてランダム バイトを生成します。GeneratorOpenSSL
openssl_random_pseudo_bytes()
使用してランダムなバイトを生成します。OpenSSL で使用されるアルゴリズムが実際に暗号的に強力であるかどうかについては、いくつかの議論があります。ただし、それに対する具体的な証拠が不足していることと、PHP マニュアルでその強度が示唆されているため、このライブラリは、さまざまなプラットフォーム間でより良い互換性を実現するために、デフォルトで OpenSSL を最後のフォールバックとして使用します。
バイト ジェネレーターを明示的に定義したい場合は、それをSecureRandom
のコンストラクター パラメーターとして指定できます。例えば:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
このライブラリの著作権は 2014-2017 Riikka Kalliomäki にあります。
ライセンスとコピーの情報については、「ライセンス」を参照してください。