Criptografía de clave pública

Anuncio
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Seguridad Informática
Criptografı́a de clave pública
Ramón Hermoso, Rubén Ortiz y Matteo Vasirani
Universidad Rey Juan Carlos
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Limitaciones de l criptografı́a de clave secreta I
Necesidad de compartir una clave
La clave debe transmitirse por un canal seguro (hay que
implementarlo!)
No siempre es posible
No es eficiente/fiable en grupos grandes que se
comunican dos a dos
Además:
Almacenamiento de claves:
1
2
Tiene que hacerse de forma segura
Una clave para cada usuario distinto con el que se establece
comunicación
Sistemas abiertos: existen entornos, en los que por su
naturaleza, no se puede distribuir las claves de forma
fı́sicamente segura (teléfono, Internet, ...)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Limitaciones de l criptografı́a de clave secreta II
Solución parcial: Centro de Distribución de Claves
(KDC)
Cada usuario guarda una única clave secreta para
comunicarse con el KDC (que las guarda todas)
Si B quiere comunicarse con C envı́a al KDC el
mensaje ”B quiere hablar con C” autenticado con su
clave secreta
El KDC genera una clave de sesión que envı́a
cifrada a B y C
B y C se pueden comunicar de manera segura con
esta clave, que desechan al terminar
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Limitaciones de l criptografı́a de clave secreta III
Ventajas:
Cada usuario almacena una única clave
Cuando llega un usuario nuevo sólo tiene que
intercambiar la clave con el KDC
Desventajas:
Si se ”rompe” el KDC, el sistema ya no sirve para
ningún usuario
Si el KDC falla se corta la comunicación entre todos
los usuarios
No resuelve el problema de los sistemas abiertos
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Nacimiento de la clave pública I
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Nacimiento de la clave pública II
En 1976 W. Diffie y M. Hellman publican el artı́culo New
Directions in Cryptography donde establecen las bases de
la criptografı́a pública
Introducen tres primitivas de clave pública (o asimétrica):
1
2
3
Esquemas de cifrado de clave pública
Esquemas de firma digital
Protocolos de intercambio de claves
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Cifrado con clave pública
A genera dos claves: pk y sk
Asimetrı́a en las claves: una para cifrar (pk) y otra para
descifrar (sk)
La seguridad del esquema sólo depende de que sk se
mantenga en secreto
pk se hace pública: cualquiera puede enviar un mensaje a
A utilizando pk (de A)
Resuelve los problemas de distribución y almacenamiento
de claves
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Preserva la autenticidad de los mensajes
Sólo A puede firmar sus mensajes usando su sk
Cualquiera puede verificar la firma de un mensaje
utilizando la pk de A
Se obtiene no repudio: sólo A puede haber firmado el
mensaje, la firma es una prueba
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Intercambio de claves
Dos partes que no comparten información a priori
intercambian mensajes por un canal inseguro para acabar
compartiendo un valor común
Los mensajes intercambiados no permiten obtener
información de manera eficiente del valor común
compartido
A
Canal inseguro
B
¢#@¢∞#¢∞@
≠”“÷¬÷∞¢∞¬#¢
¬¢###@¢#‚´≠”‚´??¿!"·$
@∞¢3%$·%&$
sk
Protocolo de intercambio de claves
sk
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Implementación de la primitivas
En el artı́culo de 1976, Diffie y Hellman introducen las
primitivas, pero sólo presentan un protocolo de
intercambio de claves
En 1977 Rivest, Shamir y Adleman presentan esquemas
de cifrado y firma
En 1985, El Gamal publica un esquema de cifrado basado
en el protocolo Diffie-Hellman
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Intercambio de claves Diffie-Hellman I
Protocolo:
Parámetro de seguridad común: n
1
A usa un algoritmo de generación y obtiene:
G grupo cı́clico de orden q (con |q| = n)
g un generador de G
2
3
4
A elige x ← Zq u.a.a. y calcula h = gx
A envı́a (G, q, g, h) a B
B recibe (G, q, g, h) y:
Elige y ← Zq u.a.a.
Calcula l = gy
Envı́a l a A
Obtiene la clave kB = hy
5
A recibe l y genera la clave kA = lx
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Intercambio de claves Diffie-Hellman II
El protocolo es correcto si:
kA = lx = (gy )x = gyx
kB = hy = (gx )y = gxy
Para poder usarlo es necesario tener una forma
adecuada de codificar elementos de G en cadenas
de bits
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad I
Si DLP (Problema del Logaritmo Discreto) se puede
resolver eficientemente en G, la clave común se recupera
a partir de los mensajes intercambiados por A y B
Teorema: si el algoritmo de generación hace que DDH
sea ”difı́cil” con (G, q, g) entonces el protocolo es seguro
Para que DDH sea difı́cil se cree conveniente que G sea
de orden primo
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad II
Una elección habitual, para la que se cree que DDH es
difı́cil, es la siguiente:
1
2
Se elige p ”primo fuerte”, es decir p = 2 · q + 1 donde q
también es primo
Dentro de Z∗p se elige un elemento g de orden q y se toma
G =< g >
Observación: los elementos de G son exactamente los
elementos de Z∗p con raı́z cuadrada
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad III
Vulnerable a ataques MitM (Man in the Middle)
Existe un adversario capaz de interceptar los mensajes
enviados por A y B y sustituirlos por otros de su elección
Al final, el adversario es capaz de que A y B terminen el
protocolo con claves distintas y conocidas por él
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Seguridad IV
Ataque Man-in-the-Middle
Pierre
Elmo
Susi
Hola Susi, soy Elmo,
dame tu pk
Hola Susi, soy Elmo,
dame tu pk
pksusi
pkpierre
Encpk_pierre("Quedamos a las 10")
Encpk_susi("Me duele la cabeza,
quedamos otro día")
.
.
.
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Esquema de cifrado de clave pública
Consta de 3 algoritmos (Gen, Enc, Dec)
(pk, sk) ← Gen(1n ) → genera un par hclave pública / clave
privadai
c ← Encpk (m) cifra el texto en claro
m = Decsk (c) descifra el texto cifrado. En algunos casos
Decsk (c) =⊥ (mensaje de error)
Corrección: m = Decsk (Encpk (m))
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Experimento IND-CPA I
A es el adversario y C el retador
Se genera (pk, sk) mediante Gen(1n )
A recibe como input (1n , pk)
A devuelve dos mensajes m0 , m1 de la misma longitud
Se elige b ← {0, 1}
C envı́a Encpk (mb ) a A
A devuelve un bit b0
Si b = b0 se dice que Succ(A, n) = 1
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Experimento IND-CPA II
Decimos que un esquema de cifrado es IND-EAV seguro
si para cualquier adversario PPT A se tiene
P(Succ(A, n) = 1) ≤ 21 + negl(n)
En el contexto de clave pública el acceso a un oráculo de
cifrado no aporta nada a A
Por tanto, seguridad IND-EAV y seguridad IND-CPA son
equivalentes (se suele usar la segunda)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Observaciones sobre seguridad
Importante
NO es posible conseguir secreto perfecto (seguridad
incondicional o contra adversarios sin limitaciones
computacionales) en cifrado de clave pública
Similitudes con clave secreta:
Al igual que en clave secreta, cualquier esquema
determinista no puede ser IND-CPA seguro
Como en clave secreta, seguridad IND-CPA cifrando un
único mensaje es equivalente a seguridad IND-CPA
cifrando múltiples mensajes
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Cifrado hı́brido I
Caracterı́stica fundamental
El cifrado de clave secreta es significativamente más eficiente
que el de clave pública
Importante
Por lo que para cifrar mensajes largos es habitual usar clave
secreta y clave pública de manera conjunta
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Cifrado hı́brido II
Se tiene a disposición un esquema de clave secreta y uno
de clave pública
En primer lugar B cifra una clave k para el esquema de
clave secreta utilizando la pk de A
Después, B cifra el mensaje m con el esquema de clave
secreta utilizando k
B envı́a ambos textos cifrados a A
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Cifrado hı́brido III
(Genh , Ench , Deck )
(Gen, Enc, Dec) esquema de cifrado de clave secreta
(ECCS)
(Gen0 , Enc0 , Dec0 ) esquema de cifrado de clave pública
(ECCP)
Genh (1n ): genera (pk, sk) ← Gen0 (1n )
Ench (pk, m):
Genera k ← Gen(1n )
c1 = Enc0pk (k)
c2 = Enc0k (m)
c = c1 ||c2
Dech (sk, c1 ||c2 ):
Calcula k = Dec0sk (c1 )
Calcula m = Deck (c2 )
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Cifrado hı́brido: seguridad
El cifrado hı́brido se ajusta a la definición de esquema de
cifrado de clave pública
Teorema
Teorema: si el ECCS es IND-EAV seguro y el ECCP es
IND-CPA seguro, entonces el esquema hı́brido es IND-CPA
seguro
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Algoritmo RSA I
GenRSA(1n ):
Genera al azar dos primos p, q de n bits
Para ello, se generan al azar números de n bits y se les
pasa un test de primalidad hasta que se consiga un
número primo
N = p·q
φ (N) = (p − 1) · (q − 1)
Elige e tal que mcd(e, φ (N)) = 1
Calcula d = [e−1 mod φ (N)]]
Devuelve (N, e, d)
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Algoritmo RSA II
Gen(1n ):
1: (N, e, d) ← GenRSA(1n )
2: pk = (N, e)
3: sk = (N, d)
Encpk (m) = [me mod N] donde m ∈ Z∗N
Decsk (c) = [cd mod N] donde c ∈ Z∗N
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Algoritmo RSA III
Corrección:
Decsk (Encpk (m)) = [me mod N]d =
[med mod N] =
[m mod N] = m
Observación: la penúltima igualdad es cierta porque
φ (N) es el orden de Z∗N y ed = 1 mod φ (N)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad en RSA
Saber factorizar N permite recuperar la clave secreta de
forma sencilla
Este esquema NO es IND-CPA seguro puesto que es
determinista
Se puede probar una noción débil de seguridad
(OW-CPA): si el problema RSA es difı́cil entonces la
probabilidad de recuperar el mensaje completo a partir del
texto cifrado es despreciable
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Implementación de RSA
Es necesario determinar una manera de codificar cadenas
de bits en elementos de Z∗N
Es posible acelerar el proceso de descifrado utilizando el
teorema chino del resto
La elección de e es importante. Una elección popular fue
e = 3 (para acelerar el cifrado). Pero ésto hace el esquema
vulnerable a diversos ataques
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra RSA I
Al cifrar mensajes cortos cuando e es pequeño:
Por ejemplo, si e = 3 y m < N 1/3 , entonces [m3 mod N] = m3
Por lo tanto, para descifrar, basta con obtener la raı́z
cúbica del texto cifrado en los números enteros (y ésto
se puede hacer eficientemente)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra RSA II
e pequeño y mismo mensaje con distintos módulos:
Por ejemplo, e = 3 y tres claves públicas para tres usuarios
distintos:
pk1 = (N1 , 3)
pk2 = (N2 , 3)
pk3 = (N3 , 3)
Al cifrar el mismo mensaje con las tres claves:
c1 = [m3 mod N1 ]
c2 = [m3 mod N2 ]
c3 = [m3 mod N3 ]
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra RSA III
Usando el teorema chino del resto se puede construir
c < N = N1 N2 N3 tal que:
c = c1 mod N1
c = c2 mod N2
c = c3 mod N3
Por lo tanto, c = m3 mod N y se puede aplicar el ataque
anterior (hallar la raı́z cúbica de c en los números enteros)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Ataques contra RSA IV
Al usar el mismo módulo para usuarios distintos (un
usuario interno puede descifrar mensajes dirigidos a
otros):
Esto sucede porque a partir de dos números tales que:
ed ≡ 1 mod φ (N)
es posible hallar eficientemente la factorización de N
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra RSA V
Al usar el mismo módulo para usuarios distintos (un
adversario externo puede descifrar un mensaje si se le
envı́a a dos usuarios distintos)
Si un adversario intercepta:
c1 = [me1 mod N]
c2 = [me2 mod N]
y mcd(e1 , e2 ) = 1 entonces puede calcular X e Y tales que
X · e1 + Y · e2 = 1 (con el algoritmo de Euclides)
Luego recupera m de la siguiente forma:
cx1 · cy2 = m mod N
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Padded RSA
Idea: completar el mensaje de forma aleatoria antes de
cifrar
Visión general:
Se cifran mensajes de longitud fija l(n) ≤ 2n − 2
Un mensaje de longitud l(n) se completa con una cadena
aleatoria de bits r de longitud |N| − l(n) − 1 antes de cifrar
Se cifra el mensaje r||m (visto como un elemento de ZN )
Después de descifrar se descarta la parte superflua
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad de padded RSA I
Si l(n) está demasiado cerca de 2n, es posible un ataque
por fuerza bruta probando con todos los valores aleatorios
posibles y el esquema no será IND-CPA seguro
Si l(n) = cn con c < 2, es razonable pensar que el esquema
es seguro, pero no se conoce demostración
Si l(n) es pequeño, l(n) = O(logN), se puede demostrar
que el esquema es IND-CPA seguro, suponiendo que el
problema es RSA difı́cil
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad de padded RSA II
Ejemplo: PKCS #1 v1.5
Si pk = (N, e) se toma k = longitud de N en bytes
Se cifran mensajes de longitud D ≤ k − 11 bytes
Encpk (m) = [(00000000||00000010||r||00000000||m)e mod N]
donde r es una cadena generada al azar de (k − D − 3) bytes
Esencialmente es un caso concreto de Padded RSA
Con el lı́mite para la longitud de m se asegura que r tiene,
al menos, 8 bytes
Se cree que es IND-CPA seguro (pero no hay
demostración)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Cifrado de El Gamal I
Gen(1n )
Se eligen (G, q, g) como en el intercambio de claves de
Diffie-Hellman
x ← Zq
h = gx
pk = (G, q, g, h)
sk = (G, q, g, x)
Encpk (m)
y ← Zq
c1 = gy
c2 = hy m
Devuelve c = (c1 , c2 )
Decsk (c)
Devuelve m = c2 /cx1
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Cifrado de El Gamal II
Corrección: supongamos
(c1 , c2 ) = Encpk (m) = (gy , hy m). Entonces:
c2 /cy1 = hy m/(gy )x = (gx )y m/(gy )x = m
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Seguridad de El Gamal
Teorema
Si DDH es difı́cil con la generación elegida de (G, q, g),
entonces el esquema de cifrado de El Gamal es IND-CPA
seguro
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Implementación
Compartiendo parámetros
En lugar de que cada usuario genere (G, q, p) se puede
optar por que un administrador del sistema los fije para un
grupo de usuarios
Cada usuario elige:
sk = x ← Zq
pk = gx
A diferencia de lo que ocurre con RSA, esto no
compromete la seguridad del sistema
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Implementación
Codificando mensajes
Hace falta codificar las cadenas de bits como elementos
del grupo
Por ejemplo, supongamos p = 2q + 1, con p y q primos, y
que tomamos G =< g > donde g es un elemento de Zp∗ de
orden q
Para codificar la cadena m0 de longitud n − 1, construimos
m = [(m0 + 1)2 ) mod N]. A continuación, ciframos m
utilizando El Gamal
Después de descifrar, para recuperar m0 a partir de m,
obtenemos las dos raı́ces cuadradas de m0 (se puede
hacer eficientemente), nos quedamos con la menor y le
restamos 1
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Implementación: un ejemplo I
q = 83; p = 2q + 1 = 167 (p, q primos)
g = 22 = 4 mod 167
∗
G =< g > de orden 83 dentro de Z167
sk = 37 ← Z83
pk = (167, 83, 4, [437 mod 167]) = (167, 83, 4, 76)
n = |q| = 7
Queremos el mensaje de 6 bits m0 = 011101
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Implementación: un ejemplo II
Interpretamos m0 como 29
[(29 + 1)2 mod 167] = 65
Para cifrar elegimos y = 71 ← Z83
c = ([471 mod 167], [7671 · 65 mod 167]) = (132, 44)
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Implementación: un ejemplo III
Para descifrar: [13237 mod 167] = 124
66 = [124−1 mod 167]
m = [44 · 66 mod 167] = 65
65 tiene dos raı́ces cuadradas mod 167, son 30 y 137;
elegimos la menor, 30
m0 = 30 − 1 = 29 = 011101
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad IND-CCA en clave pública
Definición análoga a la de clave secreta
El adversario tiene acceso a la clave pública y a un oráculo
de descifrado (al que no le puede pedir el ”reto”)
Ninguno de los esquemas vistos hasta ahora es seguro
ante este tipo de ataques
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Experimento IND-CCA
Se genera (pk, sk) mediante Gen(1n )
A recibe el input (1n , pk) y acceso a un oráculo Decsk (.)
A devuelve dos mensajes m0 , m1 de la misma longitud
Se elige b ← {0, 1}
Se envı́a c ← Encpk (mb ) a A
A ya no puede solicitar Decsk (c)
A devuelve un bit b0
Si b = b0 se dice que Succ(A, n) = 1
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataque (CCA) contra algoritmo RSA (básico)
A intercepta c = [me mod N]
A elige r ∈ ZN∗
A pide descifrar c0 = [re · c mod N]
Decsk (c0 ) = (re · c)d = r · cd = r · m = m0 mod N
A recupera m = r−1 m0 mod N
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Ataque (CCA) contra El Gamal
A intercepta c = (c1 , c2 ) = (gy , hy m)
A elige m0 ∈ G
A pide descifrar c0 = (c1 , c2 · m0 )
A recibe respuesta m · m0 = m00
A recupera m = (m0 )−1 m00
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
¿Hay esquemas INC-CCA seguros? I
Padded RSA también es vulnerable a este
tipo de ataques
El primer esquema de cifrado eficiente para
el que se demostró seguridad INC-CCA fue
introducido por Crame y Shoup en 2003
Es una evolución de El Gamal y su
seguridad está basada en la dificultad de
DDH
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
¿Hay esquemas INC-CCA seguros? II
No se conocen esquemas prácticos y seguros
IND-CCA basados en el problema RSA
En general, hay pocos esquemas seguros IND-CCA y
suelen ser complejos y tener problemas de eficiencia
El enfoque que se ha usado con mucha frecuencia es
construir esquemas eficientes cuya seguridad
IND-CCA se puede demostrar en un modelo
idealizado llamado Random Oracle Model (ROM)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Funciones hash (funciones resumen) I
Son funciones H : {0, 1}∗ → {0, 1}k
computables en tiempo polinomial (Asocian
a una cadena de bits de longitud arbitraria
otra cadena de bits de longitud fija más
corta)
Tiene aplicaciones criptográficas en códigos
de autenticación de mensajes (MAC),
esquemas de cifrado de clave pública y de
firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Funciones hash (funciones resumen) II
Dado un valor m, se espera que H(m) sea un
valor que sólo es asociable a m
Para conseguir ésto es necesario que la
función hash tenga la propiedad de
resistencia a colisiones:
Es computacionalmente difı́cil
encontrar valores x 6= y tales que
H(x) = H(y)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ejemplos de funciones hash
Familia MD: MD4, MD5, ...
Familia SHA: SHA-0, SHA-1, SHA-2
Desde 2009 se está desarrollando SHA-3,
mediante una competición abierta similar a
la convocada para diseñar AES
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
ROM
En la idealización llamada ROM se supone que se dispone
de una función H (oráculo aleatorio) cuyas entradas son
cadenas de bits arbitrarias
El oráculo H funciona como una caja negra, la única forma
de calcular H(m) es solicitarlo al oráculo
Podemos pensar que el oráculo funciona de la siguiente
forma:
1
2
Cuando se le solicita H(mi ) por primera vez genera un valor
hi en el rango adecuado, devuelve H(mi ) = hi y almacena el
par (mi , hi )
Si se le pide de nuevo H(mi ) devuelve hi
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Funciones hash y el ROM
la estrategia habitual es construir protocolos usando un
oráculo aleatorio y demostrar la noción de seguridad
deseada
Cuando estos protocolos se quieren implementar se
sustituye el oráculo aleatorio por una modificación
adecuada de una función hash resistente a colisiones
Estas pruebas de seguridad no ofrecen las mismas
garantı́as (se supone un modelo ideal) que aquellas en las
que no se necesita un oráculo aleatorio (standard model)
Sin embargo, son útiles porque proporcionan, al menos,
una demostración de seguridad para esquemas eficientes
utilizados en la práctica (para los que no se conoce
ninguna en el standard model)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
OAEP
OAEP: Optimal Asymmetric Encryption Padding
En realidad es un algoritmo que codifica cadenas de n/2
bits en cadenas de 2n bits y que se puede usar combinado
con distintos esquemas de cifrado
Observación: se pueden generalizar estas longitudes
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
RSA-OAEP: descripción I
Se dispone de dos funciones:
G : {0, 1}n → {0, 1}n
H : {0, 1}n → {0, 1}n
Gen(1n )
(N, e, d) ← GenRSA(1n+1 )
pk = (N, e)
sk = (N, d)
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
RSA-OAEP: descripción II
Encpk (m) (donde m tiene longitud n/2)
r ← {0, 1}n
m1 = m||0n/2
m2 = G(r) ⊕ m1
m3 = r ⊕ H(m2 )
m0 = m2 ||m3
c = [(m0 )e mod N]
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
RSA-OAEP: descripción III
Decsk (c)
m0 = [cd mod N]
m0 = m2 ||m3
r = H(m2 ) ⊕ m3
m1 = G(r) ⊕ m2
m1 = m||m0
SI m0 = 0n/2 ENTONCES m SI NO ⊥
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
RSA-OAEP: seguridad
Teorema
Si G y H se comportan como oráculos aleatorios (ROM) y el
problema es RSA difı́cil entonces el esquema RSA-OAEP es
IND-CCA seguro
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Índice
1
Introducción
2
Clave pública
3
Intercambio de claves (Diffie-Hellman)
4
Cifrado de clave pública
Cifrado RSA
Cifrado de El Gamal
Seguridad IND-CCA
Funciones hash y el ROM
RSA-OAEP
5
Firma digital
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Firma digital
Sirve para garantizar la integridad de los
mensajes, es decir, da una prueba al
receptor de que el mensaje no ha sido
modificado por un adversario
B genera un par (pk, sk). Para firmar un
mensaje m que quiere enviar, usa sk para
producir una firma σ (m)
Cualquiera que conozca pk puede
comprobar si σ (m) es una firma válida de m
relativa a pk
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Esquema de firma
Consiste en tres algoritmos: (Gen, Sign, Vrfy)
(pk, sk) ← Gen(1n )
σ ← Signsk (m)
b = Vrfypk (m, σ )
donde b = 1 significa válido y b = 0 significa no
válido
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Definición de seguridad: experimento forge I
Se genera (pk, sk) ← Gen(1n )
A recibe pk y acceso al oráculo Signsk (.)
Se almacena en una lista Q todos los
mensajes cuya firma solicita A al oráculo
A devuelve un par (m, σ )
Succ(A, n) = 1 si y sólo si:
Vrfypk (m, σ ) = 1
m no está en Q
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Definición de seguridad: experimento forge II
Corrección:
∀m Vrfypk (m, Signsk (m)) = 1
Ataques CMA
Decimos que un esquema de firma es
existencialmente infalsificable para ataques
CMA (Chosen Message Attack) si para
cualquier adversario PPT A se tiene, en el
experimento forge que:
P(Succ(A, n) = 1) ≤ negl(n)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma RSA (básica)
Gen(1n )
(N, e, d) ← GenRSA(1n )
pk = (N, e)
sk = (N, d)
σ = Signsk (m) = [md mod N]
Vrfypk (σ , m) = 1 si y sólo si:
m = [σ e mod N]
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra firma RSA I
Un adversario que tenga acceso a pk puede
obtener una firma válida sin acceder a
ningún par firmado por el usuario legı́timo
(no-message attack):
Elige σ cualquiera
Calcula m = σ e
Observación: el adversario no controla
qué mensaje está firmando
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Ataques contra firma RSA II
Con dos peticiones al oráculo de firma, A es
capaz de generar una firma válida para
cualquier mensaje:
A quiere obtener una firma de m
A elige un m1 cualquiera
m2 = [m/m1 mod N]
A obtiene firmas σ1 y σ2
σ = σ1 σ2 es firma válida de m
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma RSA con hash
Se dispone de una función hash
H : {0, 1} → ZN∗
Para firmar m ∈ {0, 1}∗ se calcula:
σ = [H(m)d mod N]
Para verificar se comprueba si:
σ e = H(m) mod N
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
Seguridad Firma RSA con hash
Los ataques anteriores ya no funcionan de
forma inmediata si H es difı́cil de invertir
RSA con hash cumple la definición de
seguridad (es existencialmente infalsificable
para ataques CMA) en el ROM (es decir, en
el modelo ideal en el que H es un oráculo
aleatorio) bajo la suposición de que el
problema es RSA difı́cil
No hay demostración de seguridad en el
modelo estándar
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
DSS (o DSA) I
DSS (Digital Signature Standard), también
llamado DSA (Digital Signature Algorithm),
fue propuesto por el NIST de EE.UU. en
1991 y se ha usado desde entonces sin que
se hayan encontrado ataques relevantes
Su seguridad está basada en la dificultad de
DLP. Sin embargo, no se conocen
demostraciones de seguridad ni en el
modelo estándar ni en el ROM
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
DSS (o DSA) II
Gen(1n ) produce:
p y q primos, |q| = n, p = 2q + 1
g generador de un subgrupo de orden q
de Zp∗
H : {0, 1}∗ → Zq una función hash
x ← Zq
y = gx
pk = (H, p, q, g, y)
sk = (H, p, q, g, x)
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
DSS (o DSA) III
Signsk (m) calcula:
k ← Zq
r = [[gk mod p] mod q]
s = [(H(m) + x · r)/k mod q
σ = (r, s)
Cifrado de clave pública
Firma digital
Introducción
Clave pública
Intercambio de claves (Diffie-Hellman)
Cifrado de clave pública
Firma digital
DSS (o DSA) IV
Vrfypk (m, σ ) calcula:
σ = (r, s)
u = [H(m)/s mod q]
v = [r/s mod q]
y comprueba si:
[[gu yv mod p] mod q] = r
Si se cumple se devuelve VÁLIDO, en caso
contrario, devuelve NO VÁLIDO
Descargar