Es una terna de algoritmos
- Gen: (public key, secret key)
- Enc:
- Dec:
Que cumple que para todo y válidos,
“Textbook” RSA
- Gen:
- Elegir .
- Calcular tal que
- ,
Problemas
- Tal cual está formulado, el cifrado es determinístico, por lo cual no pasaría la prueba de Eavesdropping para sistemas asimétricos.
- Si y son pequeños, y entonces se puede calcular el logaritmo (durante mucho tiempo se utilizo para ahorrar tiempo, ouch)
- Módulos repetidos: Si dos pares de claves comparten el mismo , es posible recuperar (y luego la clave privada)
PKCS 1 v1.5
RSA Labs Public Key Cryptography Standard, defina una versión con padding aleatorio de RSA: Sea la longitud de en bytes, solo se permiten cifrar mensajes de hasta bytes. Luego, sea la longitud de en bytes, el nuevo mensaje , donde bytes aleatorios, distintos de cero para evitar ambigúedades. Se cree que es CPA-Secure, pero se encontraron ataques que muestran que no es CCA-Secure
El Gamal
Basado en el Intercambio Diffie-Hellman
- Gen
- Seleccionar , , (Campo de tamaño , un generador)
- ,
- Enc:
- Sea
- Dec:
Se sabe que si la prueba de decisión de DH es difícil en G, entonces el gamal es CPA-Secure A diferencia de RSA, el gamal es probabilistico, permite reutilizar los parámetros , y , y no esta limitado a campos numéricos: Es decir, permite utilizar anillos de polinomios, que tienen elementos, por lo que es fácil mapear mensajes, o curvas elípticas, donde el problema de decisión de DH es más complejo.
En números
El nivel de seguridad es relativo a los tamaños de los conjuntos involucrados, es decir: En RSA, , mientras que en el gamal, . Cuando se utilizan campos numéricos bits, aunque en la actualidad se recomiendan 1536 o 2048 bits, pero para campos de otro tipo, los números pueden variar, por ejemplo sobre curvas elípticas, se recomienda bits.