SecureRandom est une bibliothèque PHP permettant de générer des nombres aléatoires sécurisés et de les utiliser pour des opérations de randomisation courantes telles que le mélange de tableaux ou la génération de séquences de chaînes telles que des mots de passe. Avant la version 7.0, PHP n'avait pas de fonctions aléatoires sécurisées intégrées, mais il était toujours possible d'utiliser différentes sources aléatoires pour générer des valeurs aléatoires sécurisées. Ainsi, cette bibliothèque a deux objectifs principaux :
Cette bibliothèque ne fournit aucun générateur d'octets aléatoires sécurisés supplémentaires. Il utilise simplement les générateurs d'octets disponibles pour PHP via des extensions ou en interne. Les quatre générateurs couramment disponibles pour PHP sont :
/dev/(u)random
mcrypt_create_iv()
openssl_random_pseudo_bytes()
La sécurité du caractère aléatoire généré par cette bibliothèque dépend entièrement du générateur d'octets aléatoires sous-jacent. La bibliothèque n'effectue aucune transformation supplémentaire sur les octets autre que la normalisation nécessaire pour générer des distributions paires de nombres aléatoires.
La documentation de l'API est disponible sur : http://kit.riimu.net/api/securerandom/
OpenSSL
(Pour utiliser le générateur OpenSSQL)Mcrypt
(Pour utiliser le générateur Mcrypt)/dev/urandom
doit être lisible pour pouvoir utiliser le générateur de lecteur aléatoire Le moyen le plus simple d'installer cette bibliothèque consiste à utiliser Composer pour gérer vos dépendances. Afin d'installer cette bibliothèque via Composer, suivez simplement ces deux étapes :
Acquérez le composer.phar
en exécutant l’installation en ligne de commande Composer à la racine de votre projet.
Une fois que vous avez exécuté le script d'installation, vous devriez avoir le fichier composer.phar
à la racine de votre projet et vous pouvez exécuter la commande suivante :
php composer.phar require "riimu/kit-securerandom:^1.3"
Après avoir installé cette bibliothèque via Composer, vous pouvez charger la bibliothèque en incluant le fichier vendor/autoload.php
généré par Composer lors de l'installation.
Si vous savez déjà comment utiliser Composer, vous pouvez également ajouter la bibliothèque en tant que dépendance en ajoutant le fichier composer.json
suivant à votre projet et en exécutant la commande composer install
:
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
Si vous ne souhaitez pas utiliser Composer pour charger la bibliothèque, vous pouvez également télécharger la bibliothèque manuellement en téléchargeant la dernière version et en extrayant le dossier src
dans votre projet. Vous pouvez ensuite inclure le fichier src/autoload.php
fourni pour charger les classes de la bibliothèque.
L'utilisation de la bibliothèque est très simple. Créez simplement une instance de SecureRandom
et appelez l’une des méthodes pour générer des valeurs aléatoires. Par exemple:
<?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'
Les méthodes suivantes sont disponibles dans SecureRandom
pour récupérer le caractère aléatoire :
getBytes($count)
renvoie une chaîne d'octets aléatoires d'une longueur égale à $count.
getInteger($min, $max)
renvoie un entier aléatoire entre les deux entiers positifs donnés (inclus).
getFloat()
renvoie une valeur flottante aléatoire comprise entre 0 et 1 (inclus).
getRandom()
renvoie une valeur flottante aléatoire entre 0 et 1 qui a 52 bits de précision et de sorte que la valeur renvoyée soit toujours inférieure à 1. Par rapport à getFloat()
, la distribution des valeurs est plus uniforme et ne dépend pas de PHP_INT_MAX
.
getArray(array $array, $count)
renvoie un certain nombre d'éléments aléatoires du tableau donné. Les éléments sont dans un ordre aléatoire, mais les clés sont conservées.
choose(array $array)
renvoie une valeur aléatoire choisie dans le tableau.
shuffle(array $array)
renvoie le tableau dans un ordre aléatoire. Les clés sont conservées.
getSequence($choices, $length)
renvoie une séquence aléatoire de valeurs ou de caractères. Les choix peuvent être fournis sous forme de chaîne ou de tableau. Le type de la valeur de retour dépend du type de choix.
getUuid()
renvoie un identifiant aléatoire version 4 universellement unique. Les UUID sont des identifiants uniques qui peuvent être générés de manière aléatoire, indépendamment et présentent un très faible risque de collision. Et un exemple d'UUID pourrait être 00056a74-036b-47c5-ab35-6f34a41a70ae
.
Les générateurs fournis par cette bibliothèque utilisent /dev/urandom
comme source aléatoire par défaut. La lecture depuis /dev/random
n'offre aucune sécurité supplémentaire aux applications Web PHP typiques et sa nature bloquante la rendrait très inadaptée à de telles fins.
Il n'y a que quelques cas légitimes où vous devriez plutôt lire depuis /dev/random
. C'est surtout si vous craignez que /dev/urandom
n'ait pas encore été correctement semé. Cependant, ce n'est généralement pas le cas avec les applications Web, car ce problème ne se pose généralement qu'au démarrage du système.
Si vous savez que vous devez absolument lire à partir de /dev/random
il est possible de configurer RandomReader
et Mcrypt
pour qu'ils l'utilisent comme source aléatoire en définissant le paramètre du constructeur sur false et en fournissant le générateur à SecureRandom
dans le constructeur. Par exemple:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
Lorsque SecureRandom
est créé, il tentera d'utiliser l'un des générateurs aléatoires sécurisés disponibles, en fonction de celui pris en charge par la plate-forme actuelle. Les sources aléatoires suivantes sont disponibles et seront essayées dans l'ordre suivant :
GeneratorInternal
utilise les fonctions internes disponibles dans PHP 7.0GeneratorRandomReader
lit simplement les octets du périphérique aléatoire /dev/urandom
GeneratorMcrypt
utilise mcrypt_create_iv()
pour générer des octets aléatoires en utilisant MCRYPT_DEV_URANDOM
comme source.GeneratorOpenSSL
utilise openssl_random_pseudo_bytes()
pour générer des octets aléatoires.Il y a eu un débat sur la question de savoir si l'algorithme utilisé par OpenSSL est réellement cryptographiquement fort ou non. Cependant, en raison du manque de preuves concrètes à son encontre et en raison des implications de sa force dans le manuel PHP, cette bibliothèque utilisera OpenSSL comme dernière solution de secours par défaut pour obtenir une meilleure compatibilité entre les différentes plates-formes.
Si vous souhaitez définir explicitement le générateur d'octets, vous pouvez le fournir comme paramètre constructeur pour SecureRandom
. Par exemple:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
Cette bibliothèque est protégée par Copyright (c) 2014-2017 Riikka Kalliomäki.
Voir LICENCE pour les informations sur la licence et la copie.