height='66'¿por qué utilizar números aleatorios criptográficamente seguros?


Uno de los procedimientos más comunes en el área de desarrollo web es la generación de "Tokens" o cadenas de caracteres no repetibles y aleatorios que de forma única puedan diferenciar a una entidad de otra sin duda alguna. Estos tokens son usados por ejemplo para generación identificadores de sesiones o de usuarios, identificadores de formularios y muchos otros usos en los que se requiera de una identificación segura de la entidad que representen.

La calidad de los números producidos por los sistemas de generación de números aleatorios se basa en la impredictibilidad o alto grado de entropía de los mismos, y una rutina de generación de números aleatorios es más fuerte de forma inversamente proporcional a la posibilidad de predicción de sus resultados.

Como es bien sabido, hoy en día un lenguaje de programación que no posea una rutina, clase o función que permita generar este tipo de números es algo bastante raro. El típico método "Random()" o "Randomize()" está presente en casi todos ellos. Sin embargo estas rutinas nativas de los lenguajes de desarrollo, no han sido creadas pensando en la entropía o impredictibilidad de sus resultados sino en la velocidad de obtención de los mismos, por lo que la predictibilidad es relativamente bastante alta en comparación con rutinas avanzadas o especializadas creadas para dicho fin.
Generador Cuántico de Números Aleotorios Seguros
Generador Cuántico de Números Aleatorios Seguros


Si nuestra aplicación requiere de "tokens" en los que se basan procesos de seguridad de cierto riesgo (como por ejemplo en la producción de una matriz de coordenadas únicas o tarjeta matricial) entonces nuestras rutinas de generación deberían ser criptográficamente seguras. Lo que llamamos predictibilidad es en términos criptográficos conocido como "entalpía" u orden, o lo exactamente contrario a "entropía"o desorden. Mientras más entropía posean nuestros resultados, menos predecibles serán. Por tanto, estadísticamente una rutina de números aletorios es más segura en la medida que pueda presentar una muestra lo más homogeneamente distribuida de números en una cantidad determinada de intentos.

Si bien el mayor defecto de las rutinas criptográficamente seguras de PRNG es que son más lentas que las que producen las rutinas por defecto de los diferentes lenguajes de programación, la garantía es que producen series de números aleatorios mejor distribuidos y por ende con mayor entropía.

Para utilizar rutinas de generación de números aleatorios criptográficamente seguras en la plataforma .NET podremos usar la clase RNGCryptoServiceProvider , bajo la interfaz System.Security.Cryptography, mientras que en Java podemos utilizar la clase java.security.SecureRandom y sus respectivos métodos. Seguramente los números pseudo-aletorios generados con los métodos de estas clases serán mucho menos predecibles y por tanto los tokens y las funciones que dependan de ellos aumentarán la seguridad de los procesos en los que se utilicen.
 
Sin embargo si su solución o proyecto dependen en alto grado de la impredictibilidad de este tipo de números, entonces quizás usted necesite una solución de hardware que pueda producir datos aleatorios de forma aún más segura. Lógicamente el problema con este tipo de soluciones es el costo. Existen soluciones que pasan desde un par de cientos de dólares a miles. Una de ellas quizás de las más sofisticadas es la de los generadores cuánticos de números aleatorios, basados en la colectibilidad aleatoria de fotones en un campo electromagnético determinado. 

Redactado por Mauro Maulini R.

Regresar al listado de artículos »




Nuestros serviciosnuestros servicios
Contácte SharpMind Software¿está usted interesado?
Contáctenos de inmediato y nuestro personal calificado le responderá a la brevedad posible.

Nombre y Apellido
Correo electrónico
Contácte SharpMind Softwarereciba nuestros artículos
RegistreseManténgase informado y reciba artículos especializados  en nuestros boletines...

Nombre y Apellido
Correo electrónico