En la gran mayoría de los casos los programadores basamos nuestras rutinas de generación de tokens en la generación de números pseudo-aletorios. Estos son producidos por rutinas denominadas PRGN (Peudo Random Number Generators).
La calidad de los números producidos por los PRNG se basa en la impredictibilidad de los mismos, y una rutina de generación de números pseudo-aleatorios es más fuerte de forma inversamente proporcional a la posibilidad de predicción de sus resultados.
La calidad de los números producidos por los PRNG se basa en la impredictibilidad de los mismos, y una rutina de generación de números pseudo-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.
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.
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.
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 PRNG deberían ser criptográficamente seguras.
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 pseudo-aleatorios mejor distribuidos y por ende con mayor entropía.
Para utilizar rutinas PRNG criptográficamente seguras en .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.
Hasta la próxima...
Hasta la próxima...
1 comentario:
hola, Chicos, Muy buen puesto. Me tropecé con su blog y quería decir que he disfrutado mucho navegando por tu blog. En cualquier caso, voy a ser la suscripción a tu feed, y espero que escribir de nuevo pronto!
Publicar un comentario