Desarrollador Senior en MediaSmart Mobile
Consultor de Escalabilidad
¿Qué es aleatorio?
Números pseudo-aleatorios
Sesión práctica: adivina un número
Seguridad y aleatoriedad
Sesión praćtica: tokens
- adj. Perteneciente o relativo al juego de azar
- adj. Dependiente de algún suceso fortuito
Que depende de la suerte
Sin método ni regla
Que no puede ser predicho
Que contiene máxima información
Simulaciones científicas
(e.g. Método de Montecarlo)
Aplicaciones de juegos
Selección de jurados
Seguridad
Circuito que genera ruido
Se calibra y filtra en ejecución
No se puede usar directamente
Generación rápida
¿Cómo saber si algo es aleatorio?
Definición negativa
Múltiples suites:
John von NeumannAny one who considers arithmetical methods of producing random digits is, of course, in a state of sin.
(Pseudo-Random Number Generator)
Algoritmo
(e.g. Mersenne Twister)Semilla
(e.g. el timestamp actual)
(o mejor, un valor aleatorio de verdad)
Selecciona un número aleatorio entre 1 y 6
Pide un número al usuario
Si falla, avísale y sigue
Si acierta, termina
Función común de JavaScript
Devuelve un número de [0, 1)
Usa su propia semilla
Fuente: MDN
De [0, 1) a [1, 7)
Tokens aleatorios
Claves de sesión
One-time pads
Sal para contraseñas
/dev/random
Devuelve bytes aleatorios
Acumula "entropía" del exterior
La pierde al reiniciar
Bloquea en Linux (no en Mac OS X)
/dev/urandom
Generador pseudoaleatorio
Usa semilla segura
Insuficiente aleatoriedad
Especialmente tras reinicios (routers)
Semillas reutilizadas (BitCoin en Android)
Vectores no inicializados (WEP)
"Have any of you been approached
by the US for a backdoor?"
Almacena entropía de diversas fuentes
La va pasando entre "pools" internos
Sucesor de Yarrow (Windows)
Resiste tras reinicios
Fuente: Schneier.com
¿Dónde insertarías una puerta trasera en un chip?
Respuesta: en el generador de números pseudo-aleatorios
Devs de FreeBSD“We cannot trust” Intel and Via’s chip-based crypto
Generar un token aleatorio para cada usuario
Se almacenará en cookie o en código cliente
El token permite el acceso a datos de usuario
El token no debe poderse adivinar
Devuelve un número de bytes aleatorios
Es segura criptográficamente
No compatible con browsers
Bloquea (en teoría)
Fuente: Crypto
Entropía
→ difícil
Números aleatorios → difíciles
Usos seguros: funciones seguras
Semilla aleatoria, algoritmo PRNG
No te la juegues