Saltar al contenido

Generación de tokens criptográficamente seguros

Solución:

Aquí está la solución correcta:

$token = bin2hex(openssl_random_pseudo_bytes(16));

# or in php7
$token = bin2hex(random_bytes(16));

Si desea usar openssl_random_pseudo_bytes, es mejor usar la implementación de CrytoLib, esto le permitirá generar todos los caracteres alfanuméricos, si coloca bin2hex alrededor de openssl_random_pseudo_bytes, obtendrá AF (mayúsculas) y números.

Reemplace la ruta / a / con el lugar donde colocó el archivo cryptolib.php (puede encontrarlo en GitHub en: https://github.com/IcyApril/CryptoLib)

<?php
  require_once('path/to/cryptolib.php');
  $token = IcyAprilCryptoLib::randomString(16);
?>

La documentación completa de CryptoLib está disponible en: https://cryptolib.ju.je/. Cubre muchos otros métodos aleatorios, cifrado en cascada y generación y validación de hash; pero está ahí si lo necesitas.

Si tiene un generador de números aleatorios criptográficamente seguro, no necesita hash en su salida. De hecho, no quieres. Solo usa

$token  = openssl_random_pseudo_bytes($BYTES,true)

Donde $ BYTES es la cantidad de bytes de datos que desee. MD5 tiene un hash de 128 bits, por lo que bastará con 16 bytes.

Como nota al margen, ninguna de las funciones a las que llama en su código original es criptográficamente segura, la mayoría son lo suficientemente dañinas como para que usar solo una se rompa sería inseguro incluso si se combinara con otras funciones seguras. MD5 tiene problemas de seguridad (aunque para esta aplicación pueden no ser relevantes). Uniqid no solo no genera bytes criptográficamente aleatorios por defecto (ya que usa el reloj del sistema), la entropía agregada que pasa se combina usando un generador congruente lineal, que no es criptográficamente seguro. De hecho, probablemente signifique que uno podría adivinar todas sus claves API al tener acceso a algunas de ellas, incluso si no tuvieran idea del valor del reloj de su servidor. Finalmente, mt_rand (), lo que usa como entropía adicional, tampoco es un generador de números aleatorios seguro.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *