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.