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)random
mcrypt_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/urandom
GeneratorMcrypt
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.