SecureRandom es una biblioteca PHP para generar números aleatorios seguros y usarlos para operaciones de aleatorización comunes, como mezclar matrices o generar secuencias de cadenas como contraseñas. Antes de la versión 7.0, PHP no tenía funciones aleatorias seguras integradas, pero aún era posible utilizar diferentes fuentes de aleatoriedad para generar valores aleatorios seguros. Así, esta biblioteca tiene dos propósitos principales:
Esta biblioteca no proporciona ningún generador de bytes aleatorios seguro adicional. Simplemente utiliza los generadores de bytes que están disponibles para PHP a través de extensiones o internamente. Los cuatro generadores que comúnmente están disponibles para PHP son:
/dev/(u)random
mcrypt_create_iv()
openssl_random_pseudo_bytes()
La seguridad de la aleatoriedad generada por esta biblioteca depende completamente del generador de bytes aleatorios subyacente. La biblioteca no realiza ninguna transformación adicional en los bytes aparte de la normalización necesaria para generar distribuciones pares de números aleatorios.
La documentación de la API está disponible en: http://kit.riimu.net/api/securerandom/
OpenSSL
(Para usar el generador OpenSSQL)Mcrypt
(Para usar el generador Mcrypt)/dev/urandom
debe ser legible para poder utilizar el generador de lector aleatorio La forma más sencilla de instalar esta biblioteca es utilizar Composer para manejar sus dependencias. Para instalar esta biblioteca a través de Composer, simplemente siga estos dos pasos:
Adquiera composer.phar
ejecutando la instalación de la línea de comandos de Composer en la raíz de su proyecto.
Una vez que haya ejecutado el script de instalación, debería tener el archivo composer.phar
en la raíz de su proyecto y podrá ejecutar el siguiente comando:
php composer.phar require "riimu/kit-securerandom:^1.3"
Después de instalar esta biblioteca a través de Composer, puede cargar la biblioteca incluyendo el archivo vendor/autoload.php
que generó Composer durante la instalación.
Si ya está familiarizado con el uso de Composer, también puede agregar la biblioteca como una dependencia agregando el siguiente archivo composer.json
a su proyecto y ejecutando el comando composer install
:
{
"require" : {
"riimu/kit-securerandom" : " ^1.3 "
}
}
Si no desea utilizar Composer para cargar la biblioteca, también puede descargar la biblioteca manualmente descargando la última versión y extrayendo la carpeta src
a su proyecto. Luego puede incluir el archivo src/autoload.php
proporcionado para cargar las clases de la biblioteca.
El uso de la biblioteca es muy simple. Simplemente cree una instancia de SecureRandom
y llame a cualquiera de los métodos para generar valores aleatorios. Por ejemplo:
<?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'
Los siguientes métodos están disponibles en SecureRandom
para recuperar la aleatoriedad:
getBytes($count)
devuelve una cadena de bytes aleatorios con una longitud igual a $count.
getInteger($min, $max)
devuelve un número entero aleatorio entre los dos números enteros positivos dados (inclusive).
getFloat()
devuelve un valor flotante aleatorio entre 0 y 1 (inclusive).
getRandom()
devuelve un valor flotante aleatorio entre 0 y 1 que tiene 52 bits de precisión y de modo que el valor devuelto siempre es menor que 1. En comparación con getFloat()
, la distribución del valor es más uniforme y no depende de PHP_INT_MAX
.
getArray(array $array, $count)
devuelve una cantidad de elementos aleatorios de la matriz dada. Los elementos están en orden aleatorio, pero las claves se conservan.
choose(array $array)
devuelve un valor aleatorio elegido de la matriz.
shuffle(array $array)
devuelve la matriz en orden aleatorio. Las llaves se conservan.
getSequence($choices, $length)
devuelve una secuencia aleatoria de valores o caracteres. Las opciones se pueden proporcionar como una cadena o una matriz. El tipo de valor de retorno depende del tipo de opciones.
getUuid()
devuelve un identificador aleatorio universalmente único versión 4. Los UUID son identificadores únicos que se pueden generar de forma aleatoria e independiente y tienen una probabilidad muy pequeña de colisión. Y un ejemplo de UUID podría ser 00056a74-036b-47c5-ab35-6f34a41a70ae
.
Los generadores proporcionados por esta biblioteca utilizan /dev/urandom
como fuente de aleatoriedad de forma predeterminada. La lectura desde /dev/random
no proporciona seguridad adicional a las aplicaciones web PHP típicas y su naturaleza de bloqueo la haría muy inadecuada para tales propósitos.
Sólo hay unos pocos casos legítimos en los que deberías leer desde /dev/random
. Esto ocurre principalmente si le preocupa que /dev/urandom
aún no se haya inicializado correctamente. Sin embargo, este no suele ser el caso con las aplicaciones web, ya que tiende a ser un problema sólo al iniciar el sistema.
Si sabe que es absolutamente necesario leer desde /dev/random
es posible configurar RandomReader
y Mcrypt
para usarlo como fuente de aleatoriedad configurando el parámetro del constructor en falso y proporcionando el generador a SecureRandom
en el constructor. Por ejemplo:
<?php
require ' vendor/autoload.php ' ;
$ generator = new Riimu Kit SecureRandom Generator RandomReader ( false );
$ rng = new Riimu Kit SecureRandom SecureRandom ( $ generator );
Cuando se crea SecureRandom
, intentará utilizar uno de los generadores aleatorios seguros disponibles, dependiendo de cuál sea compatible con la plataforma actual. Están disponibles las siguientes fuentes aleatorias y se probarán en el siguiente orden:
GeneratorInternal
utiliza las funciones internas disponibles en PHP 7.0GeneratorRandomReader
simplemente lee bytes del dispositivo aleatorio /dev/urandom
GeneratorMcrypt
usa mcrypt_create_iv()
para generar bytes aleatorios usando MCRYPT_DEV_URANDOM
como fuente.GeneratorOpenSSL
usa openssl_random_pseudo_bytes()
para generar bytes aleatorios.Ha habido cierto debate sobre si el algoritmo utilizado por OpenSSL es realmente criptográficamente fuerte o no. Sin embargo, debido a la falta de evidencia concreta en su contra y debido a las implicaciones de su solidez en el manual de PHP, esta biblioteca utilizará OpenSSL como último recurso de forma predeterminada para lograr una mejor compatibilidad entre diferentes plataformas.
Si desea definir explícitamente el generador de bytes, puede proporcionarlo como parámetro del constructor para SecureRandom
. Por ejemplo:
<?php
require ' vendor/autoload.php ' ;
$ rng = new Riimu Kit SecureRandom SecureRandom (
new Riimu Kit SecureRandom Generator Mcrypt ()
);
Esta biblioteca tiene Copyright (c) 2014-2017 Riikka Kalliomäki.
Consulte LICENCIA para obtener información sobre licencias y copias.