SecureRandom ist eine PHP-Bibliothek zum Generieren sicherer Zufallszahlen und deren Verwendung für allgemeine Randomisierungsoperationen wie das Mischen von Arrays oder das Generieren von Zeichenfolgensequenzen wie Passwörtern. Vor Version 7.0 verfügte PHP über keine integrierten sicheren Zufallsfunktionen, es war jedoch weiterhin möglich, verschiedene Zufallsquellen zum Generieren sicherer Zufallswerte zu verwenden. Somit hat diese Bibliothek zwei Hauptzwecke:
Diese Bibliothek bietet keine zusätzlichen sicheren Zufallsbytegeneratoren. Es nutzt einfach die Bytegeneratoren, die PHP über Erweiterungen oder intern zur Verfügung stehen. Die vier für PHP allgemein verfügbaren Generatoren sind:
/dev/(u)randommcrypt_create_iv()openssl_random_pseudo_bytes()Die Sicherheit der von dieser Bibliothek erzeugten Zufälligkeit hängt vollständig vom zugrunde liegenden Zufallsbytegenerator ab. Die Bibliothek führt außer der Normalisierung, die zum Erzeugen gleichmäßiger Verteilungen von Zufallszahlen erforderlich ist, keine weiteren Transformationen der Bytes durch.
Die API-Dokumentation ist verfügbar unter: http://kit.riimu.net/api/securerandom/
OpenSSL (Um den OpenSSQL-Generator zu verwenden)Mcrypt (Um den Mcrypt-Generator zu verwenden)/dev/urandom muss lesbar sein, um den Random-Reader-Generator verwenden zu können Der einfachste Weg, diese Bibliothek zu installieren, besteht darin, Composer zum Verwalten Ihrer Abhängigkeiten zu verwenden. Um diese Bibliothek über Composer zu installieren, befolgen Sie einfach diese beiden Schritte:
Erwerben Sie die composer.phar , indem Sie die Composer-Befehlszeileninstallation in Ihrem Projektstammverzeichnis ausführen.
Sobald Sie das Installationsskript ausgeführt haben, sollte sich die Datei composer.phar in Ihrem Projektstammverzeichnis befinden und Sie können den folgenden Befehl ausführen:
php composer.phar require "riimu/kit-securerandom:^1.3"
Nachdem Sie diese Bibliothek über Composer installiert haben, können Sie die Bibliothek laden, indem Sie die Datei vendor/autoload.php einbinden, die von Composer während der Installation generiert wurde.
Wenn Sie bereits mit der Verwendung von Composer vertraut sind, können Sie die Bibliothek alternativ als Abhängigkeit hinzufügen, indem Sie die folgende Datei composer.json zu Ihrem Projekt hinzufügen und den composer install Installationsbefehl ausführen:
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
} Wenn Sie Composer nicht zum Laden der Bibliothek verwenden möchten, können Sie die Bibliothek auch manuell herunterladen, indem Sie die neueste Version herunterladen und den Ordner src in Ihr Projekt extrahieren. Anschließend können Sie die bereitgestellte Datei src/autoload.php einschließen, um die Bibliotheksklassen zu laden.
Die Nutzung der Bibliothek ist sehr einfach. Erstellen Sie einfach eine Instanz von SecureRandom und rufen Sie eine der Methoden auf, um Zufallswerte zu generieren. Zum Beispiel:
<?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' Die folgenden Methoden stehen in SecureRandom zum Abrufen der Zufälligkeit zur Verfügung:
getBytes($count) gibt eine Zeichenfolge zufälliger Bytes mit der Länge $count zurück.
getInteger($min, $max) gibt eine zufällige Ganzzahl zwischen den beiden angegebenen positiven Ganzzahlen (einschließlich) zurück.
getFloat() gibt einen zufälligen Float-Wert zwischen 0 und 1 (einschließlich) zurück.
getRandom() gibt einen zufälligen Float-Wert zwischen 0 und 1 mit einer Genauigkeit von 52 Bit zurück, sodass der zurückgegebene Wert immer kleiner als 1 ist. Im Vergleich zu getFloat() ist die Werteverteilung gleichmäßiger und nicht von PHP_INT_MAX abhängig.
getArray(array $array, $count) gibt eine Anzahl zufälliger Elemente aus dem angegebenen Array zurück. Die Elemente sind in zufälliger Reihenfolge, die Schlüssel bleiben jedoch erhalten.
choose(array $array) gibt einen zufälligen Wert zurück, der aus dem Array ausgewählt wird.
shuffle(array $array) gibt das Array in zufälliger Reihenfolge zurück. Die Schlüssel bleiben erhalten.
getSequence($choices, $length) gibt eine zufällige Folge von Werten oder Zeichen zurück. Die Auswahlmöglichkeiten können als String oder Array bereitgestellt werden. Die Art des Rückgabewerts hängt von der Art der Auswahlmöglichkeiten ab.
getUuid() gibt einen zufälligen, universell eindeutigen Bezeichner der Version 4 zurück. UUIDs sind eindeutige Kennungen, die zufällig und unabhängig generiert werden können und bei denen die Wahrscheinlichkeit einer Kollision sehr gering ist. Ein Beispiel für eine UUID könnte 00056a74-036b-47c5-ab35-6f34a41a70ae sein.
Die von dieser Bibliothek bereitgestellten Generatoren verwenden standardmäßig /dev/urandom als Zufallsquelle. Das Lesen aus /dev/random bietet keine zusätzliche Sicherheit für typische PHP-Webanwendungen und aufgrund seiner blockierenden Natur wäre es für solche Zwecke sehr ungeeignet.
Es gibt nur wenige legitime Fälle, in denen Sie stattdessen aus /dev/random lesen sollten. Dies ist vor allem dann der Fall, wenn Sie befürchten, dass /dev/urandom noch nicht richtig gesät wurde. Bei Webanwendungen ist dies jedoch in der Regel nicht der Fall, da das Problem meist nur beim Systemstart auftritt.
Wenn Sie wissen, dass Sie unbedingt aus /dev/random lesen müssen, können Sie RandomReader und Mcrypt so einstellen, dass es stattdessen als Zufallsquelle verwendet wird, indem Sie den Konstruktorparameter auf „false“ setzen und den Generator im Konstruktor auf SecureRandom bereitstellen. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator ); Wenn SecureRandom erstellt wird, wird versucht, einen der verfügbaren sicheren Zufallsgeneratoren zu verwenden, je nachdem, welcher von der aktuellen Plattform unterstützt wird. Die folgenden zufälligen Quellen sind verfügbar und werden in der folgenden Reihenfolge ausprobiert:
GeneratorInternal verwendet die in PHP 7.0 verfügbaren internen FunktionenGeneratorRandomReader liest einfach Bytes vom Zufallsgerät /dev/urandomGeneratorMcrypt verwendet mcrypt_create_iv() um zufällige Bytes zu generieren, wobei MCRYPT_DEV_URANDOM als Quelle verwendet wird.GeneratorOpenSSL verwendet openssl_random_pseudo_bytes() um zufällige Bytes zu generieren.Es gab einige Debatten darüber, ob der von OpenSSL verwendete Algorithmus tatsächlich kryptografisch stark ist oder nicht. Aufgrund fehlender konkreter Beweise dagegen und aufgrund von Implikationen seiner Stärke im PHP-Handbuch wird diese Bibliothek jedoch standardmäßig OpenSSL als letzten Fallback verwenden, um eine bessere Kompatibilität zwischen verschiedenen Plattformen zu erreichen.
Wenn Sie den Bytegenerator explizit definieren möchten, können Sie ihn als Konstruktorparameter für SecureRandom angeben. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);Diese Bibliothek unterliegt dem Copyright (c) 2014-2017 Riikka Kalliomäki.
Lizenz- und Kopierinformationen finden Sie unter LIZENZ.