Con la semilla (la clave), la secuencia queda determinada en su totalidad, que es lo que nos interesa.
Los RNG (y PRNG) deben tener unas propiedades para las secuencias generadas:
La secuencia de números (o de bits) debe tener una distribución uniforme a todos los niveles
Para
Adicional: Verifying randomness y también Cryptographic Algorithm Validation Program
La criptografía es segura siempre que las hipótesis de funcionamiento se cumplan, y una de ellas es que se está generando números aleatorios con una fuente RNG ó PRNG criptográfica
¿Para generar claves hemos de utilizar PRNG o RNG? Mejor RNG pero si no está disponible podemos usar PRNG a condición que:
Fuente: NIST: Recommendation for Key Management: Part 1 Rev. 5 (2020)
Usados en HSM, SmartCards, algunas CPUs...
Una resistencia a temperatura ambiente tiene electrones libres que se mueven aleatoriamente (carga negativa) y podemos medir el desequilibrio momentáneo con un conversor Analógico/Digital
El conversor dará una secuencia indefinida de bits aleatorios
Con una fuente de luz apuntamos a un espejo semireflectante; dos fotodetectores detectan uno u otro el fotón de forma totalmente aleatoria
Ambas fuentes de ruido generan valores aleatorios pero no uniformes
En Linux (Ubuntu) tenemos dos fuentes random:
/dev/random
: salida RNG basada en I/O. Flujo lento en el rango de bps/dev/urandom
: unblocking random, salida PRNG (ChaCha20) enriquecida con /dev/random
. Flujo en el rango de MbpsEn otros Linux tenemos diferentes combinaciones de /dev/random
y con aleatoriedad obtenida de diferentes fuentes
Hardware Secure Module
las funciones de un HSM son:
Para implementar las funciones anteriores hace falta:
Los HSM pueden ser certificados según FIPS 140-2 en diferentes niveles:
The security requirements cover areas related to the secure design and implementation of a cryptographic module. These areas include cryptographic module specification; cryptographic module ports and interfaces; roles, services, and authentication; finite state model; physical security; operational environment; cryptographic key management; electromagnetic interference/electromagnetic compatibility (EMI/EMC); self-tests; design assurance; and mitigation of other attacks.
para gestionar claves de usuarios para firma avanzada : FIPS 140-2 nivel 2
para autoridades de validación o de sello de tiempo : FIPS 140-2 nivel 2
para autoridades de certificación : FIPS 140-2 nivel 3
PKCS #11 es una especificación de la API de los HSM en lenguaje C (literalmente un .h)
PKCS: Public Key Cryptographic Standard. Estándares de facto publicados por RSA Labs. Inc. (ahora EMC2 (ahora Dell Technologies)); actualmente la gestión del estándar ha pasado a OASIS
La reducción de parámetros implica reducir el ancho de banda: generar números aleatorios es lento porque hay que esperar a tener datos de UI
Een lenguage comprensible: simplemente por inspección de la salida no podríamos saber si es un salida realmente al azar o fruto de un algoritmo determinista Fíjate que "en tiempo polinomial" siempre lo entendemos como "en un tiempo razonable" La confidencialidad perfecta decía que el algoritmo era seguro aunque el adversario tuviese recursos infonitos. La seguridad computacional, era segura ante adversarios con recursos limitados (de tiempo o de computación o de ambas). Ese requisito "recursos limitados" en matemática forma se exprea como "en tiempo polinomial"
En Linux, casi siempre os interesará leer de urandom: leer de random es muy lento y puede bloquearse, esperando a tener suficientes eventos
## Partición de Secretos En claves importantes (e.g. la de una CA raíz) un HSM puede no ser suficiente (¿y si lo roban?) En estos casos podemos dividir la clave en trozos: - Dividir la cadena de bits en trozos disminuye la seguridad: si el atacante adquiere una parte, tiene que adivinar menos bits de la otra. - $\otimes$ entre las claves: seguro incondicionalmente, pero frágil (la clave se pierde si se pierde una parte) - [Algoritmo de Shamir](https://en.wikipedia.org/wiki/Shamir's_Secret_Sharing): seguro incondicionalmente y robusto. Permite recuperar la clave si se dispone de al menos M de los N trozos. --- ¿Lo podemos hacer "por software"? Sí, pero el secreto ha estado "en claro" en la RAM del ordenador por tanto una vez recuperado el secreto su exposición ha aumentado notablemente Pero en HSM es una propiedad habitual