Criptograf´ıa Grado en Ingenier´ıa Informática

Anuncio
Criptografı́a
Grado en Ingenierı́a Informática
Departamento Matemática Aplicada I.
Estas notas corresponden a la transcripción de las transparencias utilizadas
durante las clases de Criptografı́a, y contienen todos los datos relevantes de las
mismas. Su uso está permitido, únicamente, en las pruebas correspondientes a la
evaluación alternativa.
1
Chapter 1
Introducción
¿Por qué es importante la seguridad? Siempre hay adversarios. Siempre hay ataques
• Ataques pasivos
• Ataques activos
Objetivos de la seguridad
• Privacidad
• Integridad
• Disponiblidad
• Autenticación de usuario
• No repudio
• Firma
¿Cómo conseguir los objetivos? Mecanismos de seguridad. Criptografı́a: Conjunto de técnicas
matemáticas que permiten proteger la información en presencia de adversarios
1.1
Conceptos básicos
Primer objetivo: privacidad
Distintos ataques
• Ataque de solo texto cifrado. Objetivo: texto en claro y clave
• Ataque de texto claro conocido. Objetivo: la clave
• Ataque de texto claro elegido. Objetivo: la clave
• Ataque de texto cifrado elegido. Objetivo: la clave
• Ataque de texto elegido. Objetivo: la clave. Buscamos sistemas resistentes a este nivel.
El atacante. Conocimiento, recursos y capacidad
Seguridad computacional: Coste > beneficio. Tiempo excesivo.
2
Chapter 2
Fundamentos
2.1
Un paseo por la antigüedad
Ocultación de la información. Herodoto informa del uso de la esteganografı́a en informes de Grecia
a Persia (tatuajes en cabezas rapadas, tablillas de cera, etc.) . Gente sin prisa.
No es criptografı́a
2.2
Los primeros sistemas
• 600-500 AC: Los hebreos usan simples criptosistemas de sustitución.
El sistema Atbash: cada letra se sustituye por su simétrica en el alfabeto:
A 7→ Z, B 7→ Y . . . Y 7→ B, Z 7→ A
• 400 AC: La Escı́tala:
Usada en la guerra entre Atenas y Esparta. El cifrado se basaba en la alteración del mensaje
original mediante la inclusión de sı́mbolos innecesarios que desaparecı́an al enrollar el mensaje
en un rodillo de longitud y grosor. Aún sabiendo la técnica utilizada, si no se tenı́an las
dimensiones exactas, un interceptor tenı́a difı́cil su criptoanálisis
Figure 2.1: La escı́tala espartana.
• 100-1 AC: Los romanos desarrollan nuevos sistemas de cifrado, como el llamado de César.
Uno de los sistemas de César era desplazar cada carácter del alfabeto 3 posiciones:
A 7→ D, B 7→ E, C 7→ F . . .
3
2.2.1
Cifrado por desplazamiento
Es generalización de la clave de César. Se establece una correspondencia entre letras y números:
A B C D E
F G H
I
J
K L M
00
01
02
03
04
05
06
07
08
09
10
11
12
13
N
Ñ
O
P
Q
R
S
T
U
V
W
X
Y
Z
14 15 16 17 18 19 20 21 22 23 24 25 26 27
La clave es un número entero. Se cifra sumando a cada letra del texto en claro el valor de la
clave: G + V = B 07 + 23 = 02
Figure 2.2: Disco de cifras
Ejemplo de cifrado:
AT AQU E
AL
+3
AM AN ECER −→ dwdtxhcdñcdodphf hu
Un ataque de fuerza bruta:
Clave
1
2
3
Resultado
dwdtxhcdñcdodphf hu
−→
dwdtxhcdñcdodphf hu
−→
dwdtxhcdñcdodphf hu
−→
cvcswgbcnbcñcogegt
bubrvf abmabnbñf df s
ataquealamanecer
¿Se podrı́a automatizar el ataque de fuerza bruta, o es indispensable la intervención de un
agente inteligente que reconozca que ya se ha descifrado el mensaje?
Más debilidades:
• Basta conocer un carácter y su cifrado para obtener la clave, si sabemos que A se transforma
en D, entonces la clave es D - A, es decir 4 -1 = 3.
• La longitud del texto, la frecuencia de los caracteres y sus repeticiones en el texto claro se
conservan en el texto cifrado.
• Se pueden ahorrar muchas de las pruebas del ataque de fuerza bruta si hacemos una tabla
con los caracteres más frecuentes de un texto en claro similar al esperado y los comparamos
con los más frecuentes en el texto cifrado.
4
2.2.2
Cifrado afı́n
Es una generalización del cifrado por desplazamiento en el que la transformación de cifrado es una
aplicación afı́n
x −→ y = a · x + b
donde a es primo con n (el tamaño del alfabeto).
El descifrado se hace con la función inversa
y −→ x = a−1 · (y − b)
• Si usamos un alfabeto de 64 caracteres:
abcdefghijklmnñopqrstuvwxyzç0123456789@(){ } <>=+-*/ % &
o
+,;.:+?¡!’
• Con clave 15, 3 ciframos:
AT AQU E
AL
AM AN ECER −→ q!qpmncq, cqf qtn − n3
• Para un ataque de fuerza bruta necesitamos sólo 2048 intentos, y en uno de ellos está la
solución!
• Con dos caracteres y sus transformados es probable que obtengamos la clave.
2.2.3
Cifrado por sustitución
• Lo más avanzado hasta el siglo XI.
• La revolución en el tamaño del espacio de claves! Con un alfabeto de 64 caracteres el número
de claves posibles es
126886932185884164103433389335161480802865516
174545192198801894375214704230400000000000000
• Y si examináramos 1000 claves por segundo necesitarı́amos
402355822507243036857665491296174152723
44468599234269469432361230090913315068
siglos!
• Cada clave es una permutación del alfabeto.
• Si el alfabeto es de n caracteres hay n! claves. Demasiadas!
• Es imposible un ataque de fuerza bruta.
• Aparentemente inviolable.
• Durante siglos se utilizó confiando en su seguridad.
• Como la clave es grande se suele recurrir a facilitarla, lo que debilita el sistema
5
Además
• Aunque hasta el siglo XV en Europa se tenı́a por totalmente seguro!
• Primer criptoanálisis descubierto por el gran matemático Al-Kindi.
• Desconocido en occidente durante siglos!
2.2.4
Método del análisis de frecuencias.
Una manera de resolver un mensaje cifrado, si sabemos en qué lengua está escrito, es encontrar un
texto llano diferente escrito en la misma lengua y que sea lo suficientemente largo para llenar una
hoja, y luego contar cuántas veces aparece cada letra. A la letra que aparece con más frecuencia la
llamamos ”primera”, a la siguiente en frecuencia la llamamos ”segunda”, a la siguiente la llamamos
”tercera”, y ası́ sucesivamente, hasta que hayamos cubierto todas las letras que aparecen en la
muestra de texto llano.
Luego observamos el texto cifrado que queremos resolver y clasificamos sus sı́mbolos de la
misma manera. Encontramos el sı́mbolo que aparece con más frecuencia y lo sustituimos con la
forma de la letra ”primera” de la muestra de texto llano, el siguiente sı́mbolo más corriente lo
sustituimos por la forma de la letra ”segunda”, y el siguiente en frecuencia lo cambiamos por la
forma de la letra ”tercera”, y ası́ sucesivamente, hasta que hayamos cubierto todos los sı́mbolos
del criptograma que queremos resolver.
Ideas básicas del análisis de frecuencias:
• La longitud del mensaje es la misma.
• Si hacemos una lista contando cuántas veces aparece cada carácter en el texto cifrado, la
lista de números será la misma que en el texto en claro, aunque en otro orden.
• Igual que antes se puede hacer para grupos de caracteres.
• Pueden identificarse grupos caracterı́sticos, letras repetidas, etc.
• Encontrando algunas correspondencias (vocales, letras más frecuentes, etc.) se puede encontrar rápidamente el texto en claro.
Figure 2.3: Frecuencias de las letras en un texto tı́pico en español e inglés.
Fragmento de un mensaje bailado
A
G
G
N
P
B
H
H
K
A
C
I
I
Ñ
Q
D
C
C
C
E
E
J
F
O
A
6
F
K
K
K
C
D
L
B
B
N
E
M
I
K
K
Figure 2.4: Arthur Conan Doyle.
Asignamos arbitrariamente letras a los sı́mbolos del mensaje completo
El mensaje cifrado con sustitución:
ABCDEFDEFEDKCNAJ.....
Otro ejemplo,
Sobre el tesoro del capitán Kidd (Edgar Allan Poe “El escarabajo de oro”)
53-+-++305))6*;4826)4-+.)4-+);8o 6*;48+8++6o))85;1-+(;:-+*8+83(8 8)5*+;46(;88*96*?
;8)*-+(;485) ;5*+2:*-+(;4956*2(5*– 4)8++8*;4069285);)6+8)4-+-+;1(-+ 9;48081;8
:8-+1;48+85;4)485+52 8806*81(-+9;48;(88;4(-+?34;48) 4-+161;:188;-+?;
2.3
Cifrados por transposición
• En los cifrados por transposición se reordena el texto en claro (nótese que en las sustituciones
se reordena el alfabeto).
• Los caracteres del texto cifrado son los mismos que en el texto en claro.
1. Ejemplo 1. Se escribe en filas y se lee por columnas:
uunnn
unsss
nmcap
uncifrado
iunin
usandotra
omeaf
nsposicio
queda dspvs
nsimpleco
roile
nnuevecol
xatce
umnasxxxx
cxdri
coxoa
oolx
7
NTESA
USOIN
NCEIC
LCALA
LAOSNAOVDRCNN
OSNAO
AVNTUMCEOLOIT
2. Ejemplo 2. Camino:
queda VDRCN
CESENIONPOMCE
ICMOP
LCIECNNIOSUAS
NOINE
SEVNT
UMCEO
LO
(Cuatro carriles y camino espiral en sentido de las agujas del reloj, empezando por la
esquina superior derecha)
3. Ejemplo 3. Transposición de columnas: Igual que el primero, pero el orden de las letras
de una palabra clave determina el orden de las columnas.
Criptoanálisis se basa en :
• Detección de anagramas.
• Análisis de frecuencias.
Combinado con sustitución se crean criptosistemas mucho más fuertes puesto que:
• La sustitución rompe los anagramas.
• La transposición rompe la aparición de palabras reconocibles del texto en claro.
Transposición + sustitución fueron fundamentales en las máquinas de rotor de los años veinte.
Sistemas polialfabéticos, se utilizan distintas sustituciones dependiendo de la posición del
carácter
2.4
Cifrado de Vigenere
Publicado por Blaise de Vigenere en su libro ”Traicté des Chiffres” de 1585.
Notable ejemplo efectivo de un sistema polialfabético.
Llamado le chiffre indéchiffrable. Aproximadamente en 1850, Lewis Carroll opinó que era
irrompible.
Criptoanálisis publicado en 1854 (Babbage).
En 1863 se utilizó como sistema de cifrado en la guerra civil americana.
En un ejemplar del Scientific American de 1917 apareció un artı́culo asegurando que era inviolable.
• Dos versiones, la repetitiva y la que usaba un sistema llamado autoclave. Estudiaremos antes
la primera.
• La clave es una palabra o una frase.
• Se divide el texto en claro en bloques de la misma longitud que la clave (excepto el último
que puede ser menor).
8
• Cada bloque se cifra aplicando a cada carácter un desplazamiento de valor el correspondiente
carácter de la clave.
Supongamos que con el alfabeto de 64 caracteres de antes y usando como clave la palabra
CLAVE, queremos cifrar el texto
AT AQU EALAM AN ECER
Separamos el texto en bloques de 5 caracteres y aplicamos la clave:
A T A Q U
E A L A M
A N E C E
R
C L A V E
C L A V E
C L A V E
C
D 4 B ) Z
H M M W Q
D Y F Y J
U
Es claro que para descifrar basta invertir la operación: D - C = A, 4 - L = T, etc.
Para facilitar el cifrado y descifrado se usaba la llamada tabla de Vigenere.
Figure 2.5: Tabla de Vigenere.
El método de autoclave fue un auténtico precursor de algunos sistemas actuales:
• Para cifrar el primer bloque se usa la clave.
• Para cada bloque siguiente se usa el resultado de cifrar el bloque anterior:
A
C
D
T
L
4
A
A
B
Q
V
)
U
E
Z
E
D
I
A
4
5
L
B
N
A
)
{
M
Z
(
9
A
I
J
N
5
-
E
N
R
C
{
¿
E
(
¿
R
J
U
Introduce más complejidad, pero se rompe de forma similar al repetitivo, aunque la idea es
genial!
Seguridad:
• Espacio de claves muy grande. No es viable un ataque de fuerza bruta.
• Resistente al análisis de frecuencias.
• Muy débil ante un ataque de texto cifrado conocido. Basta conocer un fragmento del texto
claro correspondiente:
Si sabemos que el texto en claro contiene la palabra ATAQUE y con cada bloque de 6 caracteres del texto cifrado hacemos la diferencia encontraremos en alguno de ellos un fragmento
de la clave (que podemos probar en el resto del mensaje)
-
2.5
D
A
C
4
T
L
B
A
A
)
Q
V
Z
U
E
H
E
C
Criptoanálisis
1. Determinación de la longitud de la clave.
2. Reducción a un cifrado por desplazamiento.
3. Determinación de la clave.
4. Obtención del texto en claro.
Herramientas
• Test de Kasiski.
• ı̀ndice de coincidencia.
• ı̀ndice de coincidencia de dos textos.
Requisitos. Es necesario que la razón entre la longitud del texto cifrado y la longitud de la
clave sea suficientemente grande.
Test de Kasiski: la incidencia de las coincidencias
• Segmentos repetidos de texto claro cifrados con la misma parte de la clave dan lugar a
segmentos iguales de texto cifrado.
• Gran número de estas coincidencias ocurrirán entre segmentos iguales separados una distancia
múltiplo de la longitud de la clave.
• Kasiski propone buscar coincidencias de grupos de 3 o 4 caracteres para minimizar las colisiones debidas al azar.
Procedimiento para el test de Kasiski:
• Obtenemos la lista de las distancias entre bloques coincidentes.
• La mayorı́a de esos números son múltiplos de cierto número n.
10
• Si el texto es suficientemente largo debe haber pocas distancias no múltiplos de n: las descartamos, atribuyéndolas al azar.
• El máximo común divisor de los números resultantes es probablemente la longitud de la clave.
El ı́ndice de coincidencia:
• Invariante por sustitución (y en particular por desplazamiento)
• Si el texto es aleatorio y suficientemente grande:
pi ≈ 1/N ⇒ IC ≈
N
X
1/N 2 = 1/N
i=1
• Cada idioma tiene un IC caracterı́stico, aunque dependiente de la naturaleza del texto
(cientı́fico, literario, etc.)
Indice de coincidencia de dos textos: Probabilidad de que al elegir al azar un carácter en cada
texto, ambos sean iguales.
X
IC(T1 , T2 ) =
p(x, T1 ) · p(x, T2 )
x
Si a dos textos se les aplica la misma sustitución, el IC no varı́a
p(x, T ) = p(σ(x), σ(T ))
Ejemplo:
X = (a, b, c, d), σ1 (x) = x + 1 mod 4, si T1 = ”baca”, entonces σ1 (T1 ) = ”cdbd”.
La propiedad fundamental dice que
p(a, ”baca”) = p(b, ”cdbd”) =
2
4
En general, si X es unPalfabeto, T1 , T2 son textos y σ1 es una permutación,
IC(σ
P 1 (T1 ), σ1 (T2 )) = x∈X p(x, σ1 (T1 )) · p(x, σ1 (T2 ))
P=
= σ1 (x)∈σ1 (X) p(σ1 (x), σ1 (T1 )) · p(σ1 (x), σ1 (T2 )) = x∈X p(x, T1 ) · p(x, T2 ) = IC(T1 , T2 ).
En nuestro ejemplo, si T1 = ”baca” y T2 = ”adcc”, tenemos que σ1 (T1 ) = ”cdbd” y σ1 (T2 ) =
”badd”, con lo que
IC(T1 , T2 ) = 42 · 14 + 14 · 04 + 41 · 24 + 40 · 14 = 0, 25
IC(σ1 (T1 ), σ1 (T2 )) = 04 · 14 + 24 · 41 + 14 · 40 + 14 · 24 = 0, 25
Sin embargo, el IC es muy sensible a sustituciones distintas, si a dos textos se les aplican
distintas sustituciones, el IC varı́a mucho.
En nuestro ejemplo anterior, si definimos σ2 = x + 2 mod 4, tenemos σ1 (T1 ) = ”cdbd” y
σ1 (T2 ) = ”cbaa”, con lo que
IC(T1 , T2 ) = 42 · 14 + 14 · 04 + 41 · 24 + 40 · 14 = 0, 25 (como antes)
IC(σ1 (T1 ), σ2 (T2 )) = 04 · 24 + 24 · 41 + 14 · 41 + 14 · 04 = 0, 1875
Indice de coincidencia de un (único) texto, es la probabilidad de que al tomar al azar dos
caracteres en el texto, resulten iguales.
X
IC(T ) =
p(x, T )2
x
El IC de un texto aleatorio en un alfabeto de N caracteres es
11
IC(T ) =
X
p(x, T )2 = N · (
x
1 2
1
) =
N
N
Si N = 27, este valor es 0,037.
El IC de un texto nada aleatorio, como T = (x0 , x0 , . . . , x0 ) es
IC(T ) = p(x0 , T )2 +
N
−1
X
p(xi , T )2 = 12 + (N − 1) · 02 = 1
i=1
Español
0,0775
Inglés
0,0667
Francés
0,0778
Italiano
0,0738
Alemán
0,0762
Ruso
0,0529
Uso del IC en el criptoanálisis del criptosistema de Vigenere:
1. Etapa 1 del criptoanálisis: determinación de la longitud de la clave.
• Mediante el test de Kasiski buscamos un valor probable para m, la longitud de la clave.
• Estimamos el IC del texto en claro, calculándolo sobre un texto que suponemos similar.
• Dividimos el texto cifrado en m columnas F1 , . . . , Fm y si la longitud de la clave es m
y nuestra estimación del IC es buena, el IC de cada fila Fi debe ser aproximadamente
igual al estimado.
• Si todo va bien sabemos ahora que el texto se ha cifrado con una clave desconocida
k1 , . . . , km .
2. Etapa 2 del criptoanálisis: desplazamientos entre los caracteres de la clave.
Para cada columna Ci :
• Fi está cifrada con el valor ki
mod m
• Definimos unos desplazamientos (que no conocemos)
∆ i = k1 − ki
mod m
0
• Podrı́amos desplazar todas las filas para obtener F1 , F20 , . . . , Fm
, todas cifradas con k1 :
F1 está cifrado con k1 .
Para i > 1, Fi está cifrado con ki (desconocido). Fi − ki serı́a el texto en claro (si
conociéramos ki ). Fi0 = Fi + ∆i = Fi − ki + k1 estarı́a cifrado con k1 (si conociéramos
el valor de ∆i
• Y ahora . . . ataque de fuerza bruta sobre los ∆i .
Cuántos ∆i hay que probar? Si el alfabeto es de N caracteres y la clave es de longitud
m, hay que probar m − 1 desplazamientos con 0 ≤ ∆i < N ⇒ N · (m − 1) pruebas.
Si N = 27 y m = 16 son solo 405 pruebas.
Cómo sabemos que hemos encontrado ∆i ? Probamos todos los valores posibles hasta
encontrar el que haga que
IC(Fi0 ) ' IC(F1 )
12
3. Etapa 3 del criptoanálisis: reducción a un cifrado por desplazamiento
Sustituimos las filas Fi por las correspondientes Fi0 , volvemos a fusionar las filas en un solo
texto y . . .
ya tenemos todo el texto cifrado por un desplazamiento de k1 .
4. Fin del criptoanálisis
Y ahora, fuerza bruta para buscar k1 .
Encontrado k1 ya tenemos el texto en claro y, conocidos los desplazamientos, podemos calcular la clave completa:
k1 , k2 = k1 − ∆1 , . . . , km = k1 − ∆m
2.6
Cifrado XOR
• Reinventado constantemente por los aficionados, atraı́dos por su sencillez.
• Como Vigenere, pero cambiando las sumas y restas por la operación lógica ”o exclusivo”
(XOR) de bits.
• Supongamos que como antes, queremos cifrar el texto ATAQUEALAMANECER usando
como clave la palabra CLAVE .
Separamos el texto en bloques de 5 caracteres y aplicamos la clave:
⊕
A
C
B
T
L
X
A
A
Q
V
E
U
E
R
E
C
F
A
L
M
L
A
M
A
V
U
M
E
H
A
C
B
N
L
B
E
A
D
C
V
S
E
E
R
C
O
• Como XOR es involutiva, el descifrado es igual que el cifrado.
Criptoanálisis:
• Igual que en Vigenere, el test de Kasiski puede encontrar la longitud probable de la clave.
• Aplicar XOR con el mismo carácter a todo un texto es en realidad aplicarle una permutación
del alfabeto, por lo que el ı́ndice de coincidencia puede ser utilizado para el criptoanálisis.
• El proceso es entonces igual que el de Vigenere.
• Es probable que la razón entre la longitud del texto cifrado y la longitud de la clave tenga
que ser algo mayor en XOR.
2.7
Criptosistema de Hill. 1929
y =M ·x
Por ejemplo cifrando con una matriz 3 × 3
Texto en claro: e, n, u 7→ (2, 13, 21)

 
 



2 3 4
2
23
w
 5 5 6  ·  13  =  22  7→  v 
7 8 9
21
24
x
Para el descifrado
13

2
 5
7
3
5
8
−1 
 



4
23
2
e
6  ·  22  =  13  7→  n 
9
24
21
u
Muy débil ante ataques de texto en claro conocido
Ataque mediante Gauss-Jordan
diagonalizacion
(Texto claro — texto cifrado )
−→
(Matriz unidad — Clave)


e n u w v x
 n l u i d q 


 g a r d d o 


 d e l i t q 


 a m a j g o 


 n c h g j i 


 a d e y m g 


 c u y f v c 


 o n o u ñ t 
m b r r l l


4 13 21 23 22 24
 13 11 21 8 3 17 


 6 0 18 3 3 15 


 3 4 11 8 20 17 


 0 12 0
9 6 15 


 13 2 7
6 9 8 


 0 3 4 25 12 6 


 2 21 25 5 22 2 


 15 13 15 21 14 20 
12 1 18 18 11 11
Tras diagonalizar:
















1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
2
3
4
0
0
0
0
0
0
0
5
5
6
0
0
0
0
0
0
0
7
8
9
0
0
0
0
0
0
0
















La clave es la traspuesta de la matriz de la esquina superior.
Es muy probable que conozcamos algo de texto en claro y su cifrado.
Otros ataques al criptosistema de Hill no requieren conocer un texto en claro.
Y ahora, una duda:
¿Es que todos los criptosistemas son vulnerables?
14
Chapter 3
La búsqueda de la perfección
Existen sistemas irrompibles
+Cómo podemos demostrarlo?
3.1
Teorı́a de la información
• Introducida por Claude Shannon a finales de los años cuarenta, permite efectuar un estudio
formal de la seguridad de los algoritmos criptográficos.
• Cuantifica conceptos como cantidad de información, entropı́a o secreto.
• Introduce la noción de secreto perfecto.
Cantidad de información de un mensaje:
• Ante varios mensajes, el que tenga una menor probabilidad será el que contenga una mayor
cantidad de información.
• Si la probabilidad de un mensaje m es p(m), entonces la cantidad de información de m se
define como
I(m) = −log2 (p(m))
• Si la probabilidad de un mensaje es 1, entonces la cantidad de información de ese mensaje
es 0.
• Si la probabilidad de un mensaje se acerca a 0, entonces la cantidad de información se acerca
a ∞.
Entropı́a:
• Mide la cantidad de información que lleva una señal. Si simplificamos suponiendo que la
señal es una cadena de caracteres en español, la entropı́a mide la aleatoriedad de la cadena.
• Depende de la distribución de probabilidad de los caracteres e indica lo plana que es: plana
equivale a alta entropı́a y ocurre cuando todos los valores tienen probabilidades similares,
mientras que es poco plana cuando algunos valores son mucho más probables que otros.
15
• Con alta entropı́a es difı́cil poder predecir cuál es el próximo valor que va a presentarse, ya
que todos los valores son igualmente probables.
• La medida de información debe ser proporcional (continua). Es decir, un cambio pequeño
en una de las probabilidades de aparición de uno de los elementos de la señal debe cambiar
poco la entropı́a.
• Si todos los elementos de la señal son igualmente probables, entonces la entropı́a será máxima.
• La entropı́a también está relacionada con el lı́mite teórico para la compresión de datos.
• Una buena contraseña debe tener entropı́a alta.
• La entropı́a de un mensaje M = m1 , . . . mn se define como la suma ponderada de las cantidades de información de sus posibles estados:
H(M ) = −
n
X
p(mi ) · log2 (p(mi ))
i=1
• Tiene las siguientes propiedades:
1. 0 ≤ H(M ) ≤ log2 (n) (valor que se da para n caracteres equiprobables).
2. H(M ) = 0 ⇔ existe un j con p(mj ) = 1 y el resto con probabilidad 0.
Ejemplo: M puede tomar tres estados: m1 , m2 , m3 con probabilidades respectivas
p(m1 ) = 50% p(m2 ) = 25% p(m3 ) = 25%
E(M ) = − 21 · log2 12 − 14 · log2 14 − 14 · log2 14 = 12 · 1 + 41 · 2 + 14 · 2 = 1, 5
Entropı́a y codificación
M = mensaje de longitud n.
L = lı́mite máximo de compresión para M eligiendo un codificador sı́mbolo a sı́mbolo, de forma
óptima.
L = n · H(M )
Entropı́a condicional
M = mensaje que puede tomar los valores m1 , . . . , mn .
Si conocemos un valor mk :
H(M |mk ) =
n
X
p(M = mj |mk ) · log2 p(M = mj |mk )
j=1
Incertidumbre
Y = mensaje que puede tomar los valores y1 , . . . , ym .
La incertidumbre de un mensaje X conocido un valor de Y es:
H(X|Y ) =
m
X
H(X|Y = yj ) · p(Y = yj )
j=1
La incertidumbre satisface las siguientes propiedades:
• H(X|X) = 0.
16
• Si X e Y son independientes, H(X|Y ) = H(X).
• H(X|Y ) ≤ H(X).
Entropı́a máxima ⇒ mayor incertidumbre en el mensaje. Se da cuando todos sus n estados
tienen la misma probabilidad.
H(M )max = log2 (n)
Ratio absoluta de un lenguaje:
Es la entropı́a del
Plenguaje suponiendo los N caracteres igualmente probables:
R = H(X) = − x p(x) · log2 (x) = −sumx N1 · log2 N1 = N · N1 · log2 N = log2 N
N = 27 =⇒ R = 4, 75
Ratio verdadera
Como las letras no tienen igual probabilidad, la ratio verdadera baja mucho. Pruebas empı́ricas
dan para el español:
1, 2 ≤ r ≤ 1, 5
Redundancia:
La redundancia de un lenguaje es la diferencia entre su ratio absoluta y su ratio verdadera:
D =R−r
En español se estima que 3, 25 ≤ D ≤ 3, 55.
Empı́ricamente se halla que en un lenguaje con redundancia 3,2 bastarı́a con un texto cifrado
de 25 caracteres para romper un cifrado por sustitución.
Distancia de unicidad
Mı́nima cantidad de texto cifrado para que un atacante con capacidad ilimitada pueda encontrar
la clave.
Si la clave K es aleatoria la distancia de unicidad viene dada por la fórmula
H(K)/D
Ejemplo (desplazamiento):
Con 26 claves, H(K) = log2 26 ' 4, 70, luego H(K)/D ' 1, 38
Ejemplo (sustitución):
Con un alfabeto de 27 caracteres, H(K) = log2 27! ' 93, 13, luego H(K)/D ' 27, 39.
Ejemplo (Vigenere o XOR):
Clave de longitud d y alfabeto de n caracteres:
H(K)
d
= log2 nd =
· log2 n
D
D
Con n = 27 y d = 10, H(K)/D ' 14.
Secreto
Es la incertidumbre del mensaje en claro conocido el mensaje cifrado.
Secreto perfecto: Un criptosistema tiene secreto perfecto si el conocimiento del texto cifrado
no proporciona ninguna información sobre el texto en claro.
Secreto perfecto es mucho más que computacionalmente seguro
17
3.2
Cifrado de Vernam
Existe algún cifrado con secreto perfecto?
Vernam propuso uno consistente en XOR simple (o Vigenere) en el que la clave:
1. Se genera aleatoriamente.
2. Es tan larga como el texto en claro.
3. Se usa una sola vez (para cada texto en claro se genera una clave nueva).
Las tres condiciones son completamente necesarias.
Tiene secreto perfecto.
a1ofkgdygfñuvñjox1p88+Ý3o1qnykp-ı́7qmn(ihqn
con dos claves diferentes puede corresponderse con:
• LANZAMIENTO DE MISILES A LAS 16:00 HORAS
• NO REGAR LAS PLANTAS MIENTRAS SEA DE DIA
Hay claves para descifrar en cualquier texto claro:
C texto cifrado, T texto en claro. Si k = C ⊕ T entonces C ⊕ k = C ⊕ C ⊕ T = T .
En OTP no hay cota para la entropı́a de la clave por lo que su distancia de unicidad es infinita.
¿Por qué no usar siempre OTP?
Problemas:
• Generación de claves verdaderamente aleatorias.
• Distribución de claves.
18
Chapter 4
Números seudoaleatorios
Problema de la generación de claves grandes suficientemente aleatorias (por ejemplo para el cifrado
de Vernam)
Secuencias criptográficamente válidas: Impredecibles e irreproducibles.
Uso de fuentes hardware:
• Reloj del sistema.
• Fluctuaciones en el giro de un disco duro.
• Fuentes defectuosas que emiten ruido.
• Dispositivos especı́ficos.
Fuentes no válidas:
• Bits de un CD o DVD.
• Otras fuentes públicas de información.
Soluciones más seguras: mezcla de métodos hardware y software.
Se puede usar algún sistema de cifrado simétrico:
• El Generador X9.17 usa DES.
• Uso de otros cifrados simétricos.
Los generadores seudoaleatorios parten de una pequeña cantidad de información: semilla, clave,
. . . de tal modo que el conocimiento de esa información permite generar la secuencia completa.
Algunos usos en Criptografı́a de estas secuencias seudoaleatorias son:
• Generación de claves y contraseñas.
• Claves para criptosistemas en flujo
• Vectores de inicialización
• Protección de contraseñas (salt).
• Desafı́os en pruebas de conocimiento cero.
• Valores aleatorios en firmas digitales
19
• Relleno de paquetes
Los generadores seudoaleatorios se pueden dividir en tres clases: buenos, malos, y muy malos
(y usuarios muy descuidados) La generación de números aleatorios es demasiado importante como
para ser dejada al azar.
Descuido en la lı́nea de comandos
echo off
for /l % a in (1 1 100)
do(echo % random %)
Con más cuidado
@echo off & setLocal
EnableDelayedExpansion
for /L % %a in (1 1 100) do
(echo !random!)
SQL
Las condiciones para que una secuencia binaria se considere criptográficamente segura son
1. Periodo suficientemente grande.
2. Distribución uniforme: los unos y ceros en cualquier muestra deben distribuirse aproximadamente al 50% .
3. Imprevisible: con una muestra de la secuencia debe ser imposible poder predecir el bit
siguiente.
4. Fácil, rápido y barato: eficiencia, coste computacional, consumo de recursos, apto para
hardware, etc.
4.1
Generadores por desplazamiento de registros retroalimentados (FSR)
Los registros de desplazamiento retroalimentados (feedback shift registers, o FSR en inglés) son la
base de muchos generadores de secuencia para cifrados de flujo.
Se utilizan n celdas. En cada iteración se calcula una función f sobre el contenido de las n
celdas y el resultado se asigna a la última, desplazando a las anteriores
Dependiendo de la función utilizada se dividen en
• NLFSR (Non-Lineal Feedback Shift Register), que usan una función no lineal.
• LFSR (Lineal Feedback Shift Register), que usan una función lineal. Son sencillos y rápidos
y proporcionan un buen grado de aleatoriedad, por lo que son muy utilizados.
En un LFSR la función es del tipo
f (bn , . . . , b1 ) =
n
X
j=1
20
aj · bj
Pero como las operaciones de bits son en Z2 , cada ai = 0, 1 y f consiste en hacer ⊕ con alguno
de los bits (no hay multiplicaciones).
Un ejemplo de LFSR paso a paso: f (x, y, z, t) = 0 · x + 1 · y + 1 · z + 0 · t mod 2 (⊕ con los
bits centrales), si el bloque inicial es b0 = 1010, la sucesión de bloques obtenidos es b1 = 0101,
b2 = 1011, b3 = 0111, b4 = 1110, b5 = 1100, b6 = 1001, b7 = 0010, b8 = 0101, b9 = 1011, como
b2 = b9 el periodo de esta sucesión es 7.
4.2
Generadores de congruencias lineales (LCG)
xi+1 = (a · xi + b) mod m
Es frecuente elegir m de la forma 2k , ası́ la operación módulo consiste en poner los k bits más
significativos a 0, y no requiere divisiones (equivale a hacer desplazamientos)
x=
0
X
i=n−1
bi · 2i =
k
X
bi · 2i +
i=n−1
0
X
i=k−1
0
X
bi · 2i =
bi · 2i mod 2k
i=k−1
El periodo de esta sucesión es m (máximo) si yo sólo si se verifican1
1. b es primo con m.
2. Si p es primo y divide a m, p divide a a − 1.
3. Si m es múltiplo de 4, a − 1 es múltiplo de 4.
LCG y LFSR son los más usados:
• Biblioteca estándar de C y C++.
• Lı́nea de comandos (Microsoft)
• Unix
Unas observaciones:
Las funciones random se inicializan a veces con valores tomados del reloj, ratón, pulsaciones,
etc. Pueden resultar elecciones muy malas: la generación de números aleatorios es demasiado
importante como para ser dejada al azar.
Existen implementaciones más seguras
4.3
4.3.1
Algunos errores famosos
RANDU. IBM (1960)
x0 impar.
xi+1 = (216 + 3) · xi mod 231
(se normalizan en [0,1] dividiendo por 231 ).
¿Alcanza RANDU el perı́odo máximo?
xi+1 = (65539 · xi + 0) mod 231
1 Knuth,
1969
21
1. No. 0 no es primo con 231 .
2. Si. 2 es el único primo que divide a 231 , y también divide a 65539 − 1.
3. No. 231 es múltiplo de 4, pero 65539 − 1 no lo es.
Test espectral: Se buscan correlaciones interpretando cada s valores consecutivos como vectores
en un espacio de dimensión s, intentando encontrar estructuras geométricas.
Tomamos el conjunto de vectores (que se solapan):
−
Ls = {→
x n = (xn , . . . , xn+s−1 ) : n ≥ 0}
y buscamos hiperplanos paralelos que contengan los vectores de Ls . Si se encuentran es que
hay correlaciones.
Parece que todo está bien, pero si giramos la representación tridimensional ....
Figure 4.1: Todos los puntos en el mismo hiperplano.
Por qué?
xn+2 = (216 + 3) · xn+1 = (216 + 3)2 · xn = (232 + 6 · 216 + 9) · xn = (6 · 216 + 18 − 9) · xn =
= (6 · (216 + 3) − 9) · xn = 6 · (216 + 3) · xn − 9 · xn = 6 · xn+1 − 9 · xn
Cada terna de valores (xn , xn+1 , xn+2 ) está en un plano, el z = 6y − 9x (con más precisión, en
15 trozos de un plano, por trabajar en Z231
¿Cómo de importante es esto? Experimentos que se diseñen usando muestras aleatorias con un
mal generador,áconcluirán que hay correlaciónáentre las variables, pero no es que realmente exista,
sino porque los números de entrada no son suficientemente aleatorios.
¿Y en la Criptografı́a? La falsa seguridad es peor que el conocimiento de que no hay seguridad.
4.3.2
Windows 2000 y XP. 2007
“. . . investigadores israelı́es publicaron un análisis criptográfico sobre el algoritmo usado por Microsoft para generar números aleatorios y descubrieron que contenı́a serios
problemas en su implementación.
22
El estudio revelaba (entre otros fallos) que es relativamente sencillo predecir los resultados del generador conociendo uno de sus estados internos y ası́ como las claves de
sesión usadas para cifrar información . . . ”
4.3.3
Debian. 2008
Un error debido más bien al descuido que a un mal diseño.
14 de mayo de 2008:
“Debian ha sufrido un grave revés [. . . ] su generador de números aleatorios es predecible. Las claves generadas ya no son seguras [. . . ] esto tendrá por muchos años una
importante repercusión y numerosos efectos colaterales en otros paquetes y distribuciones . . . ”
4.4
Generadores tipo Fibonacci
xn = (xn−r xn−s ) mod m
Estos generadores presentan varios inconvenientes
• La fórmula generadora correlaciona xn , xn−r y xn−s , luego ¡no son independientes!
• No son criptográficamente seguros.
Uno de los más famosos de este tipo es el generador sustractivo de Knuth:
1. Se inicializa m = 109 , s1 = 1, s0 (semilla) con 0 ≤ s0 < m
2. s2 , . . . , s54 calculados como si+1 = si − si−1 mod m.
3. Reordenamos: para k = 0, . . . , 54
xk = s(34(k+1)
mod 55)
Y ahora empezamos a generar números, para k ≥ 55,
xk = xk−55 − xk−24 mod m
El generador sustractivo de Knuth genera uniformemente valores entre 0 y m − 1 y es fácil de
calcular: nunca se multiplica ni se divide, ni siquiera para hallar el valor módulo m; sin embargo,
la fórmula generadora correlaciona las términos xk , xk−55 , xk−24 , que no son independientes.
Dos usos notables del generador sustractivo de Knuth son la clase Random en .net y la clase
Random en Java.
4.5
El generador Blum Blum Shub
Lenore Blum, Manuel Blum y Michael Shub 1986. Un generador sencillo y de gran seguridad
(basada en factorización)
1. Se eligen dos primos grandes p, q ambos congruentes con 3 módulo 4, con mcd(φ(p − 1), φ(q −
1)) pequeño (para que el periodo sea largo) y hacemos m = p · q
23
2. Se toma como semilla un entero grande s primo con m y se calcula una sucesión:
x0 = s2 mod n; xi+1 = x2i mod n ∀i ≥ 0
En la práctica se toman los bits menos significativos de cada xn
Se puede calcular directamente cualquier valor mediante
2i mod (p−1)(q−1)
xi = x0
mod m.
Si se eligen pocos bits de cada término de la sucesión, entonces predecir el valor de un término
es tan difı́cil como factorizar n.
Este generador
• Es bueno (criptográficamente seguro),
• es bonito y sencillo, pero . . . sufre dos inconvenientes:
• es caro y lento! (requiere aritmética de enteros grandes).
4.6
Generador X9.17
Semilla y claves:
• s1 = semilla.
• k = clave.
• D = 64 bits elegidos del reloj del sistema.
E(k, X) = cifrado de X con la clave k mediante el criptosistema E.
xi = E(k, E(k, D) ⊕ si )
si+1 = E(k, xi ⊕ E(k, D))
Más sobre generadores seudoaleatorios puede encontrarse en The art of Computer Programming
de Donald Knuth, o Handbook of Applied Cryptography de Menezes, van Oorschot y Vanstone.
Y para terminar, una idea: ¿Podrı́amos usar un buen generador seudoaleatorio para acercarnos
a OTP?
24
Chapter 5
Cifrado en flujo
El objetivo consiste en, usando un buen generador seudoaleatorio, obtener una clave de periodo
suficientemente largo para aproximarnos a la seguridad de OTP.
Para ello podemos actuar de dos modos:
5.1
Modo sı́ncrono.
La secuencia seudoaleatoria (flujo) se calcula independientemente del texto en claro y del texto
cifrado; sólo depende de la clave.
Figure 5.1: Modo sı́ncrono.
Aquı́
• F () es la función generadora de estado
• si es el estado en el paso i , s0 es el estado inicial (que en muchos casos es la clave k).
• G() es la función generadora de la sucesión aleatoria, que depende del estado si .
25
• mi y ci son la i-ésima porción del texto claro y cifrado respectivamente, por medio de or
exclusivo.
En este modo
1. El emisor y el receptor deben estar sincronizados para que el texto pueda descifrarse.
Si durante la transmisión se pierde o inserta algún bit, el receptor ya no estará aplicando xor
con la misma secuencia, por lo que el resto del mensaje no se descifrará.
2. Si se altera un bit del criptograma, la sincronización no se pierde, pero el texto claro se verá
modificado en la misma posición. Esta caracterı́stica podrı́a permitir a un atacante cambiar
el mensaje, si conoce qué bits debe alterar.
3. Si un atacante conociese parte del texto claro, podrı́a sustituirlo por otro sin que lo advirtiese
el destinatario.
5.2
Modo ası́ncrono
Ası́ncrono (auto-sincronizado): la secuencia seudoaleatoria generada es función de la semilla y de
una cantidad fija de los bits anteriores del cifrado.
Donde k es la clave, mi y ci son la i-ésima porción del texto claro y cifrado respectivamente y w
es una funciÝon reversible. Los valores ct , ct+1 , . . . , c1 constituyen el estado inicial del generador.
Figure 5.2: Modo ası́ncrono.
Este modo:
1. Es resistente a la pérdida o inserción de información, ya que se sincroniza automáticamente,
cuando llegan t bloques correctos de forma consecutiva.
2. Dispersa las propiedades estadı́sticas del texto claro a lo largo de todo el mensaje cifrado:
cada elemento del mensaje influye en todo el cifrado.
3. En general son más resistentes frente a ataques basados en la redundancia del texto en claro.
26
5.3
Seguridad
Las debilidades esenciales de estos generadores son
⊗ Uso repetido de la misma inicialización
⊗ Repetición de la misma secuencia cifrante.
aunque existen otros ataques más avanzados, como
• Ataques de correlación
• Ataques algebraicos
• Criptoanálisis diferencial
Algunos usos actuales de criptosistema de flujo
• RC4 (Ronald Code 4) Ronald Rivest - 1987. Secreto
Roto en 2001 ( S. Fluhrer, I. Mantin y A. Shamir). Se puede encontrar la clave si la inicialización cumple unas condiciones muy comunes y se interceptan el suficiente número de
mensajes. Esto incluye a la mayorı́a de los productos que lo usan.
La versión no oficial de RC4 es legal, pero no puede ser utilizada con el nombre de RC4
(ARCFOUR, ARC4, Alleged-RC4). RSA Security nunca ha liberado el algoritmo de RC4.
RC4 es parte de los protocolos de cifrado más comunes como WEP, WPA para tarjetas wireless y TLS. Increı́ble velocidad y simplicidad. Necesita pocos recursos. La implementación
software y hardware es muy sencilla.
• GSM.
A5/1 es usado en Europa y los Estados Unidos; un algoritmo de cifrado más débil, A5/2 es
usado en paı́ses que no son considerados de confianza para tener un cifrado fuerte. A5/1 fue
desarrollado en 1987, cuando GSM no era considerado aún para su uso en Europa, por su
parte A5/2 fue desarrollado en 1989. Intentos de mantenerlo en secreto. Roto rápidamente.
Algoritmos que lo rompen en tiempo real en 2006 (Eli Biham y Nathan Keller).
• CSS. Content Scrambling System - 1996
1. Seguridad por oscuridad. Algoritmo propietario.
2. Roto en 1999 por un equipo noruego (MoRE: Masters of Reverse Engineering). Programa DeCSS, que se salta la protección CSS.
3. Cada disco DVD está cifrado mediante una clave única de solo 40 bits: la fuerza bruta
es factible.
4. Cada DVD se cifra con una clave de 40 bits que se oculta cifrándola con una clave propia
de cada fabricante autorizado (de equipo o programa reproductor).
Consecuencia: la clave del disco está grabada en el DVD unas 400 veces, una vez por
cada fabricante autorizado: con poco esfuerzo los autores de DeCSS encontraron unas
170 claves en pocas horas.
Y ahora, de nuevo la duda: +Es que todos los criptosistemas son vulnerables?
27
Chapter 6
Criptografı́a simétrica moderna
Criptosistemas simétrı́cos
Figure 6.1: Criptosistema simétrico.
Simétrico ⇔ clave secreta compartida.
El emisor y el receptor deben conocer la clave
Todos los sistemas clásicos de cifrado son simétricos.
Una pregunta para responder más adelante: +puede ser de otra manera?
Ventajas
• La seguridad depende sólo del secreto de la clave.
• Son muy rápidos.
• Los sistemas con un gran espacio de claves son muy seguros.
Inconvenientes
• Es complicado establecer un sistema de distribución y gestión de claves eficiente entre emisor
y receptor.
• Carecen de firma digital y de otros servicios.
28
6.1
Cifrado por bloques
Una gran parte de los algoritmos de cifrado simétrico operan dividiendo el mensaje que se pretende
codificar en bloques de tamaño fijo, y aplican sobre cada uno de ellos una combinación de operaciones de confusión (sustituciones) y de difusión (transposiciones). Estos algoritmos se denominan,
en general, cifrados por bloques.
Recordemos que la confusión consiste en tratar de ocultar la relación que existe entre el texto
claro, el texto cifrado y la clave. Un buen mecanismo de confusión harı́a demasiado complicado
extraer relaciones entre las tres cosas. Por su parte la difusión trata de repartir la influencia de
cada bit del mensaje original lo más posible entre el mensaje cifrado.
6.1.1
Modos de operación
En primer lugar, independientemente del método empleado para codificar, hemos de tener en
cuenta lo que ocurre cuando la longitud de la cadena que queremos cifrar no es un múltiplo exacto
del tamaño de bloque. Entonces tenemos que añadir información al final para que lo sea. El
mecanismo más sencillo consiste en rellenar con ceros el último bloque que se codifica.
Una vez hecho esto, existen dos modos principales de operación para algoritmos de cifrado por
bloques
• Modo ECB (Electronic Codebook)
es el método más sencillo y obvio de aplicar un algoritmo de cifrado por bloques. Simplemente
se subdivide la cadena que se quiere codificar en bloques del tamaño adecuado y se cifran
todos ellos empleando la misma clave.
A favor de este método podemos decir que permite codificar los bloques independientemente
de su orden, lo cual es adecuado para codificar bases de datos o ficheros en los que se requiera
un acceso aleatorio. También es resistente a errores, pues si uno de los bloques sufriera una
alteración, el resto quedarı́a intacto. Además, el cifrado es fácilmente paralelizable.
• Modo CBC (Cipher Book Chaining Mode)
que incorpora un mecanismo de retroalimentación en el cifrado por bloques. Esto significa
que la codificación de bloques anteriores condiciona la codificación del actual, por lo que
será imposible sustituir un bloque individual en el mensaje cifrado. Esto se consigue efectuando una operación XOR entre el bloque del mensaje que queremos codificar y el último
criptograma obtenido. Para cifrar el primer bloque, se emplea el denominado vector de
inicialización (V.I.), conocido por ambos interlocutores.
6.1.2
Redes de Feistel
En criptografı́a, el Cifrado de Feistel es un método de cifrado en bloque con una estructura particular. Debe su nombre al criptógrafo de IBM Horst Feistel. También es conocida comúnmente
como Red de Feistel. Un gran número de algoritmos de cifrado por bloques lo utilizan, siendo el
más conocido el algoritmo Data Encryption Standard (DES). Las redes de Feistel presentan la ventaja de ser reversibles por lo que las operaciones de cifrado y descifrado son idénticas, requiriendo
únicamente invertir el orden de las subclaves utilizadas.
El primer algoritmo basado en las redes de Feistel fue el algoritmo Lucifer, diseñado al amparo
de IBM por Horst Feistel y Don Coppersmith a principios de la década del 1970, aunque la
popularidad para este esquema llegó cuando el Gobierno Federal de los Estados Unidos adoptó
el algoritmo DES como estándar para el cifrado de las comunicaciones gubernamentales. Este
algoritmo derivaba del algoritmo Lucifer y también está constituido por una red de Feistel. La
29
naturaleza iterativa de estas redes hacı́a que la implementación del algoritmo en hardware fuera
sencillo.
Se divide el mensaje en bloques de tamaño N , notados A|B y se procesa cada bloque en n
rondas usando:
• Una clave K que se divide en n subclaves: k1 , . . . , kn .
• Una función f (no necesariamente invertible) que en la ronda i toma la subclave ki y N/2
bits y retorna N/2 bits.
siguiendo el siguiente esquema:
Figure 6.2: Ronda i de un cifrado de Feistel
Ai+1 = Bi ⊕ f (Ai , ki )
Bi+1 = Ai
El descifrado funciona de manera análoga, a partir de Ai+1 |Bi+1 podemos recuperar Ai |Bi si
conocemos la clave ki , sin más que hacer
Bi = Ai+1
Bi+1 = Ai
6.2
DES
Historia:
• 1973: En EEUU la NBS (National Bureaux of Standards) convocó un concurso público para
buscar un algoritmo criptográfico estándar.
• 1974: La NSA (National Security Agency) declaró desierto el primer concurso y refinando las
especificaciones eligió una variante de Lucifer que llamó DES (Data Encryption Standard).
• 1976: DES se adoptó como estándar y se autorizó su uso en las comunicaciones no clasificadas
del gobierno.
• Durante más de 25 años DES ha sido el estándar para bancos y comercio electrónico.
30
Especificaciones del concurso DES:
• El nivel de seguridad computacional debe ser alto.
• El algoritmo debe ser fácil de entender y deberá estar especificado en todos sus detalles.
• La seguridad del sistema no debe verse afectada por la publicación y divulgación del algoritmo.
• Debe estar disponible para cualquier usuario.
• Deberá poder usarse en diferentes aplicaciones.
• Fácil implementación en hardware.
• Debe incorporar capacidades de validación.
• Debe ser exportable.
Pero . . .
Secreto:
En realidad la NSA querı́a que los detalles fuesen secretos.
Limitaciones legales:
• La NSA impuso una limitación en la longitud de la clave: los 128 bits de Lucifer se quedaron
en 64 (que son 56 efectivos ya que al ser datos de 8 bits, se conoce el bit de paridad).
• Ası́ el espacio de claves es pequeño: 256 ≈ 7, 2 · 1016 .
Claves débiles:
Existen familias de claves llamadas débiles y semidébiles que deben ser evitadas.
DES no es un grupo.
Triple DES se beneficia de ello: Se usan 2 claves DES: k1 y k2 y se hace un producto de tres
Bastante seguro por el tamaño efectivo de su clave: 112 bits.
Sigue siendo válido actualmente.
Es el propuesto en SET y se encuentra como una opción en PGP.
La historia de DES como estándar:
• Se adoptó como estándar en 1976.
• El NIST lo certificó en 1987 y 1993. En esos años se estandarizó como algoritmo de cifrado.
• Usado sobre todo en el cifrado de la información de transacciones entre un cajero y el banco.
• En 1997 NIST no certificó DES y convocó un concurso internacional para buscar un nuevo
estándar mundial denominado AES (Advanced Encryption Standard).
• Entre 1997 y 1999 DES se enfrentó a tres desafı́os conocidos como DES Challenge impulsados
por la compañı́a RSA.
31
A mediados de julio de 1998, una empresa sin ánimo de lucro, llamada EFF (Electronic Frontier
Foundation), logró fabricar una máquina capaz de descifrar un mensaje DES en menos de tres dı́as.
Curiosamente, pocas semanas antes, un alto cargo de la NSA habı́a declarado que dicho algoritmo
seguı́a siendo seguro, y que descifrar un mensaje resultaba aún excesivamente costoso, incluso para
organizaciones gubernamentales. DES-Cracker costó menos de 250.000 euros.
DES Challenge I (29 de enero de 1997):
Se rompe en 96 dı́as con 80.000 de ordenadores en Internet que evalúan 7.000 millones de clave
por segundo. Hubo que recorrer el 25% del espacio de claves.
DES Challenge II-1 (13 de enero de 1998):
Se rompe en 39 dı́as con un ataque distribuido (distributed.net) que llega a evaluar 34.000
millones de claves por segundo y recorre el 88% del espacio de claves.
DES Challenge II-2 (13 de julio de 1998):
Electronic Frontier Foundation (EFF) crea el DES Cracker con una inversión de 200.000 dólares
y en 56 horas rompió la clave evaluando 90.000 millones de claves por segundo.
DES Challenge III:
El último desafı́o propuesto por RSA mostró la capacidad de un ataque distribuido: usando los
tiempos muertos de procesador de máquinas conectadas a Internet que con un programa cliente
trabajaban en una parte del espacio de claves.
18 de enero de 1999: unión de la máquina DESCracker y distributed.net con 100.000 ordenadores conectados en Internet y rompen la clave en 22 horas, evaluando 245.000 millones de
claves por segundo tras recorrer el 22% del espacio de claves.
Pero . . .
DES, actualmente:
• En 1998 la NSA seguı́a declarando que DES era seguro, que romperlo era demasiado costoso
incluso para grandes organizaciones.
• En realidad el problema de DES no es de diseño, sino que su clave se hizo muy corta.
• DES sigue siendo hoy dı́a muy utilizado en aplicaciones (por ejemplo cajeros automáticos).
• Hay mucha resistencia a abandonarlo porque ha sobrevivido mucho tiempo. Se prefieren variantes antes que confiar en algoritmos nuevos y para permitir aprovechar las implementaciones
por hardware existentes de DES.
6.3
AES
Historia:
• En 1997 el NIST (National Institute of Standards and Technology, antes NBS) no certificó
DES y convocó un concurso público para un nuevo estándar: AES (Advanced Encryption
Standard).
• Ganó el algoritmo RIJNDAEL (Vincent Rijmen y Joan Daemen, Bélgica) que desde el año
2000 es el nuevo estándar de cifrado del siglo XXI. Es de libre distribución, disponible desde
finales del año 2001.
• El proceso completo de selección, revisión y estudio de todos los candidatos del concurso fue
público y abierto. Prácticamente por primera vez, participó toda la comunidad criptográfica
mundial. Esto hace que Rijndael sea muy digno de confianza.
32
En octubre de 2000 el NIST (National Institute for Standards and Technology) anunciaba
oficialmente la adopción del algoritmo Rijndael (pronunciado más o menos como reindal) como
nuevo Estándar Avanzado de Cifrado (AES) para su empleo en aplicaciones criptográficas no militares, culminando ası́ un proceso de más de tres años, encaminado a proporcionar a la comunidad
internacional un nuevo algoritmo de cifrado potente, eficiente, y fácil de implementar.
AES es un sistema de cifrado por bloques, diseñado para manejar longitudes de clave y de
bloque variables, ambas comprendidas entre los 128 y los 256 bits. Realiza varias de sus operaciones
internas a nivel de byte, interpretando éstos como elementos de un cuerpo de Galois GF (28 ). El
resto de operaciones se efectúan en términos de registros de 32 bits. Sin embargo, en algunos casos,
una secuencia de 32 bits se toma como un polinomio de grado inferior a 4, cuyos coeficientes son
a su vez polinomios en GF (28 ).
AES, a diferencia de algoritmos como DES, no posee estructura de red de Feistel. En su lugar se
ha definido cada ronda como una composición de cuatro funciones invertibles diferentes, formando
tres capas, diseñadas para proporcionar resistencia frente a criptoanálisis lineal y diferencial. Cada
una de las funciones tiene un propósito preciso:
• La capa de mezcla lineal (funciones DesplazarFila y MezclarColumnas) permite obtener un
alto nivel de difusión a lo largo de varias rondas.
• La capa no lineal (función ByteSub) consiste en la aplicación paralela de S-cajas con propiedades
óptimas de no linealidad.
• La capa de adición de clave es un simple or-exclusivo entre el estado intermedio y la subclave
correspondiente a cada ronda.
Caracterı́sticas:
• No es de tipo Feistel.
• Muy adaptado para los procesadores de 8 bits usados en tarjetas inteligentes y arquitecturas
de 32 bits.
• Tamaño de clave y de bloque variables: 128, 192 y 256 bits (independientemente).
• Usa aritmética de polinomios sobre cuerpos de Galois, que se traducen en operaciones modulares a nivel de byte y de palabras de 4 bytes.
• Número de etapas flexible según necesidades.
• Utiliza un conjunto de S-Boxes con valores precalculados para facilitar los cálculos aritméticos.
• Rijndael es más versátil que la versión estandarizada.
AES opera modificando bloques de 128 bits representados en una matriz de 4 × 4 bytes, que
llama estado. Cada ronda (excepto la última) consiste en cuatro pasos:
La ronda final reemplaza la fase MixColumns por otra instancia de AddRoundKey.
1. SubBytes - Sustitución de bits: Sustitución no lineal donde cada byte del estado es reemplazado con otro según una tabla:
Esta transformación es una sustitución no lineal que se aplica a cada byte de la matriz de
estado, mediante una S-caja 8 ∗ 8 invertible, que se obtiene componiendo dos transformaciones:
1. Cada byte es considerado como un elemento del GF (28 ) que genera el polinomio irreducible
m(x) = x8 + x4 + x3 + x + 1, y sustituido por su inversa multiplicativa. El valor cero queda
inalterado.
33
Figure 6.3: Subbytes.
2. El siguiente paso consiste en aplicar la siguiente transformación afı́n en GF (2), si x0 , x1 , . . . , x7
los bits del byte correspondiente, su imagen será y0 , y1 , . . . , y7












y0
y1
y2
y3
y4
y5
y6
y7












 == 










1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
 
 
 
 
 
 
·
 
 
 
 
 
x0
x1
x2
x3
x4
x5
x6
x7


 
 
 
 
 
+
 
 
 
 
 
1
1
0
0
0
1
1
0












La función inversa serı́a la aplicación de la inversa de la S-caja correspondiente a cada byte
de la matriz de estado.
2. ShiftRows Desplazamiento de filas: Los bytes de cada fila del estado se rotan de manera
cı́clica hacia la izquierda un número de lugares diferente para cada fila.
La función inversa será, obviamente, un desplazamiento de las filas de la matriz de estado el
mismo número de posiciones, pero a la derecha.
3. MixColumns - Mezcla de columnas: Cada columna del estado se multiplica por un polinomio
constante c(x). Ası́ se mezclan los 4 bytes de la columna con una transformación lineal.
4. AddRoundKey - Cálculo de las subclaves: Cada byte del estado se combina mediante XOR
con una subclave. Las subclaves se derivan de la clave de cifrado usando un proceso iterativo.
34
Figure 6.4: ShiftRows.
Figure 6.5: MixColumns.
Figure 6.6: AddRoundKey.
35
Chapter 7
Intercambio de claves
Intercambio de claves
• A través de un canal abierto, dos interlocutores que no poseen ningún conocimiento secreto
común, necesitan compartir una clave secreta.
• Las mismas ideas que dieron origen a la Criptografı́a de clave pública aportaron soluciones a
este antiguo problema.
• Primera solución:
Diffie y Hellman propusieron en 1976 un método que basa su seguridad en el problema del
logaritmo discreto.
• Hay actualmente muchos otros protocolos de intercambio de claves, algunos perfeccionando
el de D-H y otros basados en nuevas ideas.
A y B se envı́an mensajes usando un canal abierto y consiguen compartir un secreto K que
sólo es conocido por ellos:
1. Eligen y publican un primo adecuado p y un generador g, 2 ≤ g ≤ p − 2 del grupo multiplicativo de Zp .
2. A elige un secreto x, 1 ≤ x ≤ p − 2 y envı́a a B el mensaje g x mod p.
3. . B elige un secreto y, 1 ≤ y ≤ p − 2 y envı́a a A el mensaje g y mod p.
4. B recibe g x y calcula la clave compartida como
K = (g x )y mod p
5. A recibe g y y calcula la clave compartida como
K = (g y )x mod p
Un ejemplo artificialmente pequeño:
1. A y B eligen y publican un primo adecuado p = 71 y un generador g = 21 del grupo
multiplicativo deZ71 .
2. A elige un secreto x = 46 y envı́a a B el mensaje g x mod p = 2146 mod 71 = 9.
36
3. B elige un secreto y = 57 y envı́a a A el mensaje g y mod p = 2157 mod 71 = 61.
4. B recibe g x = 9 y calcula la clave compartida como
K = (g x )y mod p = 957 mod 71 = 16.
5. A recibe g y y calcula la clave compartida como
K = (g y )x mod p = 6146 mod 71 = 16.
Seguridad:
• Si un atacante interceptara toda la comunicación, llegarı́a a conocer los valores de p, g, g x y
gy .
• Para encontrar K necesita conocer uno de los valores x, y. Su dificultad es que para hallar
x tiene que calcular el logaritmo discreto en Zp de g x de base g, y éste es un problema
intratable (análogamente para y).
• Se podrı́a aumentar la seguridad mediante el uso de un grupo sobre el que el PLD fuese
más duro: por ejemplo, el grupo multiplicativo de un cuerpo finito o el grupo de una curva
elı́ptica.
• Es seguro ante ataques pasivos, pero se necesitarán mejoras para protegerse de ataques
activos:
Ataque de intercepción y suplantación:
• A elige un secreto x, 1 ≤ x ≤ p − 2 y envı́a a B el mensaje g x mod p.
C intercepta g x mod p, elige un z con 1 ≤ z ≤ p − 2 y envı́a a B el valor g z mod p.
• B elige un secreto y, 1 ≤ y ≤ p − 2 y envı́a a A el mensaje g y mod p.
C intercepta g y mod p, y envı́a a B el valor g z mod p.
• B recibe g z y calcula la clave compartida como
K = (g z )y mod p
• A recibe g z y calcula la clave compartida como
K = (g z )x mod p
C calcula también la clave compartida haciendo
K = (g x )z mod p
7.1
Ataques
El protocolo es sensible a ataques activos del tipo Meet-in-the-middle. Si la comunicación es interceptada por un tercero, éste se puede hacer pasar por el emisor cara al destinatario y viceversa,
ya que no se dispone de ningún mecanismo para validar la identidad de los participantes en la
comunicación. Ası́, el ”hombre en el medio” podrı́a acordar una clave con cada participante y
retransmitir los datos entre ellos, escuchando la conversación en ambos sentidos. Una vez establecida la comunicación simétrica el atacante tiene que seguir en medio interceptado y modificando
el tráfico para que no se den cuenta.
Para evitar este tipo de ataque se suele usar una o más de las siguientes técnicas:
37
• Control de tiempos.
• Autenticación previa de las partes.
• Autenticación del contenido.
7.2
Autenticación e integridad
Necesidad de autenticación:
• Al ataque anterior (y a otros) son susceptibles también todos los todos los criptosistemas de
clave pública que hemos visto.
• La debilidad clave es la dificultad de autenticación y de integridad, en varios sentidos:
– Autenticación de la identidad del emisor del mensaje.
– Autenticación de la identidad del que recibe el mensaje.
– Verificación de la integridad del mensaje, etc.
• Las soluciones vendrán de una combinación de las técnicas estudiadas.
Este estudio nos llevará a los conceptos de funciones resumen, certificados, firma, etc.
38
Chapter 8
Clave pública
Si la clave es pública cualquiera puede descifrar, . . . o no?
Idea fundamental:
Asimetrı́a ⇔ separación de claves: una pública que cifra y otra privada que descifra.
Dos ejemplos:
1. El cartero fiel:
• Clave pública: mi dirección.
• Clave privada: la llave de mi buzón.
2. El fabricante de cajas de seguridad:
• Clave pública: una caja abierta, que se bloquea al cerrarla.
• Clave privada: mi llave de la caja.
Cifrado y descifrado asimétrico: la clave pública la tienen todos, la clave privada sólo la tiene
el destinatario:
Figure 8.1: Clave pública.
Ni el mismo emisor puede descifrar!
Los algoritmos asimétricos poseen dos claves diferentes en lugar de una, Kp y KP , denominadas
clave privada y clave pública. Una de ellas se emplea para codificar, mientras que la otra se usa
39
para decodificar. Dependiendo de la aplicación que le demos al algoritmo, la clave pública será la
de cifrado o viceversa. Para que estos criptosistemas sean seguros también ha de cumplirse que a
partir de una de las claves resulte extremadamente difı́cil calcular la otra. Se basan en general en
plantear al atacante problemas matemáticos difı́ciles de resolver
Un poco de (pre)historia:
• El concepto de criptosistema de clave pública fue descubierto por James Ellis (Government
Communications Headquarters) al final de los a+?os 60 (7 años antes que DH).
• Clifford Cocks desarrolló esas ideas y descubrió un criptosistema equivalente a RSA en 1973
(3-4 a+?os antes que Rivest, Shamir y Adleman).
• Malcolm Williamson, buscando fallos en el trabajo de Cocks, descubre el Intercambio de
claves DH en 1975 (un año antes que Diffie y Hellman).
Los servicios secretos no supieron valorar estos descubrimientos, pero los mantuvieron en secreto
y el mérito fue para otros.
Whitfield Diffie y Martin Hellman publicaron el artı́culo ”New Directions in Cryptography” en
1976.
Los autores afirman que serı́a posible implementar criptosistemas de clave pública usando
esotéricas funciones relacionadas con difı́ciles problemas matemáticos.
No hacen propuestas concretas.
Cuáles son esas mágicas funciones matemáticas?
Funciones de un solo sentido:
• En realidad son funciones biyectivas . . . de otra forma no se podrı́a descifrar!
• Lo importante es que para ser capaz de invertirlas hay que conocer cierta información: la
clave privada!.
• Si no se conoce la clave privada es computacionalmente imposible invertir la función.
Quién conoce una función ası́?
Esta pregunta queda en pie tras el artı́culo de Diffie y Hellman.
40
Chapter 9
Mochila de Merkle-Hellman
Merkle y Hellman propusieron en 1977 el que fue (probablemente) el primer sistema de cifrado de
clave pública.
Basado en el problema subset-sum:
Dada una lista de enteros positivos (a1 , a2 , . . . , an ) y un entero positivo
Pn s, encontrar, si existe,
una lista de enteros (x1 , x2 , . . . , xn ) con xi ∈ {0, 1}, 1 ≤ i ≤ n tales que i=1 xi · ai = s
El problema es NP-completo y es llamado a menudo el problema de la mochila.
El caso de la mochila supercreciente:
Pi−1
• Una mochila (b1 , b2 , . . . , bn ) se dice que es supercreciente si bi ≥ j=1 bj , ∀i = 2, . . . , n
• Si la mochila es supercreciente es fácil decidir si el problema tiene solución y, en su caso,
hallarla
Para i = n hasta 1
xi = 0
Si s ≥ bi entonces xi = 1, s = s − bi
9.1
MH: generación de claves
En Merkle-Hellman, las claves están compuestas por secuencias. La clave pública es una secuencia
”difı́cil”, y la clave privada es una ”fácil”, o secuencia de valores supercrecientes, junto con dos
números adicionales, un multiplicador y un módulo, los cuales son usados para convertir la secuencia supercreciente en una secuencia difı́cil. Estos mismos números son usados para transformar la
suma de la subsecuencia de la secuencia ”difı́cil” en la suma de la subsecuencia de la secuencia
”fácil”, la cual se puede solucionar en tiempo polinomial.
Cada usuario crea su clave pública y la correspondiente clave privada:
• Crea una mochila supercreciente (b1 , b2 , . . . , bn )
• Elige un módulo M con M > b1 + b2 + . . . + bn
• Elige un entero W , 1 ≤ W ≤ M − 1 con mcd(W, M ) = 1
• Elige una permutación π de (1, 2, . . . , n)
• Calcula ai = W · bπ(i) mod M , para i = 1, . . . , n
41
• La clave pública es (a1 , a2 , . . . , an )
• La clave privada es (π, M, W, (b1 , b2 , . . . , bn )).
9.2
Cifrado y descifrado
B cifra un mensaje para A
1. Obtiene la clave pública de A: (a1 , a2 , . . . , an )
2. Representa el mensaje m como una cadena binaria m1 m2 . . . mn .
3. Calcula el entero c = m1 a1 + m2 a2 + . . . + mn an .
4. Envı́a el mensaje cifrado c a A.
A descifra el mensaje de B
1. Calcula d = W −1 · c mod M .
2. Resuelve el problema de la mochila supercreciente y encuentra enteros r1 , r2 , . . . , rn ∈ {0, 1}
tales que d = r1 b1 + r2 b2 + . . . rn bn .
3. Los bits del mensaje son mi = rπ(i) , i = 1, 2, . . . , n.
POR QUÉ FUNCIONA EL DESCIFRADO?
La operación que se
en elP
descifrado es:
Prealiza
n
n
d = W −1 c = W −1 i=1 mi ai = i=1 mi bπ(i) (mod M )
Como
Pn
0 ≤ d < M, d = i=1 mi bπ(i) mod M
La solución del problema con la mochila supercreciente dará los bits del mensaje (tras la
aplicación de la permutación).
9.3
Seguridad
• El problema general subset-sum es NP-completo, pero el particular de la mochila derivada
de una supercreciente no lo es.
• Se conoce un ataque capaz de romper el criptosistema en tiempo polinomial.
• El único sistema criptográfico basado en el problema de la mochila para el que aún no se
conoce un ataque con éxito es el de Chor-Rivest.
42
Chapter 10
RSA
En 1977 Ron Rivest, Adi Shamir y Len Adleman propusieron un criptosistema de clave pública
sustentado en el que pasó a llamarse el problema RSA, basado en la factorización de enteros.
RSA se basa en la dificultad para factorizar grandes números. Las claves pública y privada se
calculan a partir de un número que se obtiene como producto de dos primos grandes. El atacante
se enfrentará, si quiere recuperar un texto claro a partir del criptograma y la clave pública, a un
problema de factorización o tendrá que resolver un logaritmo discreto
10.1
RSA: herramientas matemáticas
Antes de seguir con el criptosistema RSA, necesitaremos unas herramientas matemáticas
10.1.1
Inversos módulo n
Cuando trabajamos módulo un entero, en numerosas ocasiones necesitaremos calcular el inverso
de algún elemento, y la existencia de dicho inverso está determinada por el siguiente criterio
Dado x ∈ Zn el inverso de x módulo n existe si y sólo si el máximo común divisor de
x y n es 1 (o dicho de otra forma, si los números en cuestión son coprimos).
Para el cálculo de dicho inverso (en caso de que exista) se utiliza el algoritmo extendido de
Euclides.
Cálculemos manualmente 17−1 mod 65:
(1)
(2)
(3)
(4)
65 =
17 =
14 =
3= 1
3·
1·
4·
·2
17 + 14
14 + 3
3+2
+1
1= 3 - 1 · 2 =
= 3 - 1 · (14 - 4 · 3) = - 14 + 5 · 3 =
=-14 + 5 · (17 - 1 · 14) = 5 · 17 - 6 · 14 =
= 5 · 17 - 6 (65 - 3 · 17) = 23 · 17 - 6 · 65
Ası́, la identidad de Bezout 1 = 23 · 17 + (−6) · 65 leida módulo 65 nos da que 1 = 23 · 17 mod 65
10.1.2
Teorema de Euler
Un resultado básico para que funcione el descifrado es el llamado Teorema de Euler que fue primeramente enunciado y demostrado por Fermat para el caso particular en el que el módulo es primo
43
Pequeño Teorema de Fermat: si p primo y x no nulo y menor que p, se verifica
xp−1 = 1 mod p
El teorema de Euler generaliza el pequeño teorema de Fermat para cualquier valor del módulo,
aunque siempre manteniendo la condición de coprimalidad de x y p
Teorema de Euler: si x y p coprimos, se verifica
xφ(p) = 1 mod p
Donde φ es la función de Euler, que mide el número de unidades de Zn , y cuya es
fórmula es
1
1
φ(n) = n · (1 − ) · · · (1 − )
p1
pr
donde los pi son los factores primos de n, es decir n = pa1 1 · · · par r .
10.1.3
Teorema Chino del Resto (TCR)
Este teorema nos determina la existencia de soluciones de un sistema de congruencias.
Si n1 , . . . , nk son enteros primos entre sı́ dos a dos, n = n1 · · · nk y a1 , . . . , ak ∈ Z, se trata de
resolver el siguiente sistema de ecuaciones:


 x = a1 mod n1
..
.


x = ak mod nk
En tal caso el sistema tiene solución única mod n, y dicha solución se halla de la siguiente
manera, en primer lugar se calculan ci = nni y di = c−1
mod ni , ∀i = 1, . . . , k; ahora las soluciones
i
son:
x = a1 c1 d1 + . . . ak dk ck + λ · n,
∀λ ∈ Z
10.1.4
Cálculo de potencias enteras
Otra herramienta básica para el funcionamiento de RSA es la exponenciación modular repetida de
números (eventualmente grandes), ası́ que es interesante disponer de un método que nos permita
calcular el valor de me modn con un mı́nimo número de operaciones
La idea consiste en llegar al valor de me por medio de cuadrados y multiplicaciones por m,
siguiendo la hoja de ruta marcada por la expresión binaria del exponente e (reduciendo cada
resultado intermedio cuando se sobrepase el módulo n.

e=1
 m
e
me =
(mb 2 c )2
epar

m · me−1 eimpar
El seudocódigo de una versión no recursiva serı́a ası́:
s = 1, t = m, q = e;
mientras (q > 0)
si (q & 1) // si q es impar
s = s * t;
q = q / 2; // división entera(desplazamiento)
44
t = t * t;
retorna s;
Este algoritmo se ejecuta en tiempo logarı́tmico en función del valor del exponente e.
El cálculo sin ordenador es un poco diferente. Ejemplo de cálculo de 2100 :
100 = 11001002 → 1C1C0C0C1C0C0 → M CM C0C0CM C0C0 → M CM CCCM CC
M
C
M
C
C
C
M
C
1 −→ 2 −→ 4 −→ 8 −→ 64 −→ 4096 −→ 16777216 −→ 33554432 −→ . . .
C
C
. . . −→ 1125899906842624 −→ 1267650600228229401496703205376
No son 100 multiplicaciones, sino sólo 9 (el númnero de operaciones a realizar está acotado por
el doble del número de bits del exponente −1.
10.1.5
Construcción de primos grandes
También será necesario un procedimiento para generar primos grandes con facilidad. Para generar
un primo, se construye un entero impar de k bits (donde k marca el tamaño deseado):
1
*
*
...
*
*
1
El primero y el último bit se ponen a 1 y los bits intermedios se eligen al azar. La probabilidad
de que el número ası́ construido sea primo es de 2/(k · ln2)
Si el número obtenido no es primo volvemos a sortear los bits intermedios y repetimos hasta
obtener un primo.
Ahora necesitamos determinar si hemos encontrado un primo, y para ello podemos aplicar el
test de primalidad de Miller-Rabin
Entrada: n impar, con n = 2s · r + 1 con r impar.
Salida: ”compuesto” si el número no es primo; ”probable primo” si el número es probablemente
primo, con probabilidad de error de 1/4
El funcionamiento de dicho test es el siguiente
Se elige al azar un entero a con 1 < a < n.
y = ar mod n
Si y = 1 mod n, retorna "probable primo"
j=1
Mientras j ≤ s − 1, y y 6= −1{
y = y 2 mod n
Si y = n − 1 retorna "probable primo"
j =j+1 }
Retorna "compuesto"
Si se obtiene k veces la respuesta ”probable primo”, entonces la probabilidad de error es inferior
a 1/22k , lo que lo hace muy fiable.
Para hacernos una idea de la fiabilidad, valga este cuadro:
Concepto
El gordo de Navidad
Un meteorito y un asteroide el mismo dı́a
Te toca la primitiva y te mata un rayo el mismo dı́a
Error en M R(n, 50)
45
Probabilidad
2−17
2−27
2−56
2−100
Adicionalmente, es interesante que los primos utilizados sean fuertes, se dice que un primo p es
fuerte si verifica:
• p + 1 tiene un factor primo grande.
• p − 1 tiene un factor primo r grande.
• r − 1 tiene un factor primo grande.
Para la búsqueda de primos fuertes podemos utilizar el llamado test de Gordon
• Elige dos primos r, s de tama+?o adecuado
• Calcula t como el menor primo de la forma a · r + 1 con a ∈ Z.
• Calcula p0 = (st−1 − ts−1 ) mod (s · t)
• Calcula p como el menor primo de la forma p = p0 + a · t · s con a ∈ Z.
10.2
RSA: el problema
El problema matemático de difı́cil resolución en que radica la fortaleza del criptosistema RSA es
el siguiente, dados:
• Un entero n, que se sabe que es producto de dos primos p y q (desconocidos)
• Un entero e, que sabemos que es primo con p − 1 y con q − 1.
• Un entero c, que sabemos que es el resultado de elevar un número desconocido m a e módulo
n.
Hay que encontrar un entero m tal que me = c (mod n), es decir, descifrar el mensaje cifrado
c, que corresponde al texto en claro m.
La factorización de enteros resuelve el problema RSA, puesto que si sabemos factorizar n = p·q,
• Calculamos φ = (p − 1)(q − 1)
• Hallamos d = e−1 en Zφ
• La solución es m = cd mod n.
De hecho conociendo φ serı́a fácil encontrar p y q con sólo resolver una ecuación de segundo
grado, ya que φ(n) = (p − 1) · (q − 1) y, por ejemplo q = n/p, con lo que quedarı́a φ(n) =
(p − 1)(n/p − 1), y resolverı́amos la ecuación
p2 + (φ(n) − n − 1) · p + n = 0
No está demostrado que el problema RSA sea equivalente al de la factorización, pero el problema
de determinar d sı́ lo es, ya que conocido éste existe un sencillo ataque que nos darı́a la factorización
de n.
46
10.3
Generación de claves
Cada usuario cera una clave pública y la correspondiente clave privada:
1. Genera dos primos grandes p y q, de tamaño similar.
2. Calcula n = p · q y φ = (p − 1)(q − 1).
3. Elige un entero e, 1 < e < φ con mcd(e, φ) = 1.
4. Calcula el único entero d, 1 < d < φ tal que e · d = 1 modφ.
5. La clave pública es (n, e), la privada es d.
El entero e se llama el exponente de cifrado, d el exponente de descifrado y n el módulo.
10.4
Cifrado y descifrado
El modo de empleo del protocolo es el siguiente:
Cifrado B cifra un mensaje para A
(a) Obtiene la clave pública de A (n, e)
(b) Representa el mensaje como un entero m en el intervalo [0, n − 1]
(c) Calcula c = me mod n.
(d) Envı́a el texto cifrado c a A.
Descifrado A descifra el mensaje de B
Usa su clave privada para recuperar m = cd mod n.
Este procedimiento nos permite cifrar y descifrar, puesto que
• Como ed = 1 (mod φ(n)), existe un entero k con ed = 1 + kφ(n)
• Si mcd(m, p) = 1, entonces, por el Teorema de Euler, mp−1 = 1 (mod p). Elevando ambos
miembros a k(q − 1) y multiplicando por m queda
med = m1+k(p−1)(q−1) = m (mod p).
• Si mcd(m, p) = p entonces ambos miembros son 0 módulo p, con lo que la congruencia
anterior también se verifica
• Por un argumento similar med = m (mod q) y como p y q son primos, de aquı́ se sigue que
med = m (mod n)
Para simplificar el descifrado, podemos utilizar el Teorema Chino del Resto; la idea consiste en
trasladar las operaciones de Zn a Zp × Zq , y resolver el sistema
x = cd mod p
x = cd mod q
que tiene solución única módulo n, ası́:
47
1. ap = q p−1 mod n, aq = pq−1 mod n
2. dp = d mod (p − 1), dq = d mod (q − 1)
3. cp = c mod p, cq = c mod q
d
d
4. m = ap (cpp mod p) + aq (cq q mod q) mod n
Se hacen más operaciones pero más rápidas; además los valores de los dos primeros pasos
pueden estar precalculados, ya que no dependen del mensaje recibido.
10.5
RSA: seguridad
Ron Rivest estimó en 1977 que factorizar un número de 125 dı́gitos requerirı́a 40.000 billones de
años, esto le llevó a pensar que RSA-129 no podrı́a ser roto jamás en la práctica.
Un reto de factorización (propuesto por los inventores de RSA en 1977) apareció en la columna
de Martin Gardner Mathematical Games de la revista Scientific American. Fue resuelto en 1994
por un gran proyecto computacional conjunto coordinado por Derek Atkins, Michael Graff, Arjen Lenstra y Paul Leyland. Más de 600 voluntarios aportaron tiempo de cálculo de unas 1600
máquinas (dos de ellas de fax) durante más de seis meses. La coordinación se realizó a través de
Internet y supuso uno de las primeros proyectos de estas caracterı́sticas.
Para superar el desafı́o RSA-129 habı́a que factorizar un mensaje cifrado con una clave 129
dı́gitos, 425 bits, concretamente el número:
11438162575788886766923577997614661201021829672124236256256184293 . . .
. . . 5706935245733897830597123563958705058989075147599290026879543541
que se factoriza como
3490529510847650949147849619903898133417764638493387843990820577∗
∗32769132993266709549961988190834461413177642967992942539798288533
La solución era el texto The Magic Words are Squeamish Ossifrage (del inglés ”Las Palabras
Mágicas son Quebrantahuesos Aprensivo”) y el hito de 1994 inauguró la tradición de usar las
palabras squeamish ossifrage en los retos criptoanalı́ticos.
El premio ofrecido por el reto era de 100 $, que los ganadores donaron a la Free Software
Foundation.
Con la siguiente estimación de capacidad de cálculo (en mips1 por año):
Particular (P) Gran empresa (E) Gobierno (G)
10.000
10.000.000
1.000.000.000
Teniendo en cuenta que la potencia de cálculo se multiplica por 10 cada 5 años y las Matemáticas
avanzan cada año, los tamaños recomendados de claves:
Año Contra P Contra E Contra G
1995
768
1280
1536
2000
1024
1280
1536
2005
1280
1536
2048
2010
1280
1536
2048
2015
1536
2048
4096
2045
8192
16384
32768
1 ”M”illones
de ”I”nstrucciones ”P”or ”S”egundo”. Es una forma de medir la potencia de los procesadores
48
10.6
Debilidades
10.6.1
Necesidad de relleno
1. Algunos valores del mensaje pueden dar cifrados inseguros:
• Los valores m=0 y m=1 siempre se cifran en sı́ mismos.
• Con exponentes pequeños y valores pequeños de m, el cifrado podrı́a ser estrictamente
menor que el módulo y el texto en claro podrı́a obtenerse haciendo la raı́z e-ésima, sin
tener en cuenta el módulo.
2. Siempre hay mensajes que se cifran en sı́ mismos (al menos 9). De hecho su número exacto
es :
(1 + mcd(e − 1, p − 1)) · (1 + mcd(e − 1, q − 1))
3. RSA es determinista, por lo que es viable un ataque de texto elegido: el atacante construye
un diccionario de textos probables y sus cifrados. Interceptando un texto cifrado, el atacante
puede usar este diccionario para descifrar el mensaje.
Protección: combinar RSA con algún esquema de relleno (como por ejemplo estándares como
PKCS).
10.6.2
Ataque de primos cercanos
• Fuerza bruta
p
Si p y q son primos cercanos, p está cerca p
de (n); ası́ serı́a viable un ataque de fuerza bruta
dividiendo n entre impares menores que (n).
• Factorización de Fermat
p−q
2
2
2
Si llamamos x = p+q
2 , y = 2 , entonces x − n = y . Como x > n, la idea es probar todos
p
2
los x > (n) hasta dar con uno que x − n sea cuadrado perfecto. Cuanto más cercanos
sean p y q, más pequeño será y, y harán falta menos iteraciones.
Con x e y, calculamos p = x + y, q = x − y.
Mersenne propuso a Fermat el problema de decidir si era primo el número 2027651281
Fermat contestó rápidamente:
2027651281 = 44021 · 46061
El método:
√
n = 45029, 45 . . .
√
x
x2 − n
45030 222, 75 . . .
45031 373, 74 . . .
45032 479, 32 . . .
...
...
45041 1020, 00
2027651281 =
450412 − 10202 =
(45041 + 1020)·
(45041 − 1020) =
46061 · 44021
49
10.6.3
Múltiples claves que descifran
Además de la clave privada d pueden encontrarse otras claves que también sirvan para descifrar,
aunque no sean d = e−1 mod n:
Llamando
γ = mcm(p − 1, q − 1)
dγ = e−1 mod γ
λ=b
n − dγ
c
γ
Habrá λ claves dk que descifran (además de d):
dk = dγ + k · γ,
k = 0, 1, . . . , λ
Ejemplo:
Clave pública (n, e) = (3053 = 714̇3, 157).
Clave privada d = 157−1 mod (70 · 42) = 1573.
γ = mcm(70, 42) = 210.
dγ = 157−1 mod 210 = 103.
Claves que descifran:
3053 − 103
= 14
210
Esto es: 103, 313, 523, 733, 943, 1153, 1363, 1573, 1783, 1993, 2203, 2413, 2623, 2833, 3042.
103 + k · 210,
10.7
k = 0, . . .
Sobre la elección de claves
Algunos criterios para una buena clave:
• p y q deben ser suficientemente grandes, del mismo tamaño, pero no muy cercanos.
• Debe maximizarse mcm(p − 1, q − 1)
• Deben minimizarse mcd(e − 1, p − 1) y mcd(e − 1, q − 1).
• p y q deben ser primos fuertes.
Existen algoritmos para generar buenas claves y pruebas para validar su calidad.
Error: elegir un mismo módulo n y distribuir distintos pares (e, d) a los usuarios de la organización.
• Por lo delicado de la buena elección del módulo, es un error bastante frecuente.
• El problema es que el conocimiento de un simple par (e, d) puede revelar la factorización de
n y romper todo el sistema.
Debe evitarse el uso repetido de un pequeño exponente de cifrado.
Por ejemplo, un mensaje enviado a 3 destinatarios que han elegido e = 3, es muy probable que
pueda ser descifrado usando el TCR.
50
Chapter 11
Firma y resumen digital
Aparte de la confidencialidad durante la transmisión de información, tenemos una serie de objetivos
que conseguir por medio del uso de la Criptografı́a, como por ejemplo:
• Integridad del mensaje.
• Autenticación del emisor y/o del receptor
• No suplantación.
• No repudio.
Para implementar mecanismos que permitan estos servicios empezaremos por una herramienta
fundamental: la firma digital.
Firmar un documento consiste en añadirle cierta información que valide su autorı́a. No debe
confundirse la firma electrónica con la firma digital; la firma electrónica es un concepto jurı́dico,
equivalente electrónico al de la firma manuscrita, donde una persona acepta el contenido de un
mensaje electrónico a través de cualquier medio electrónico válido. Ejemplos de firma electrónica
son
• firmar con un lápiz electrónico al usar una tarjeta de crédito o débito en una tienda.
• marcar una casilla en una computadora, a máquina o aplicada con el ratón o con el dedo en
una pantalla táctil.
• usar una firma digital.
• usuario y contraseña.
• usar una tarjeta de coordenadas.
Una firma electrónica crea un historial de auditorı́a que incluye la verificación de quién envı́a
el documento firmado y un sello con la fecha y hora.
Según la Ley 59/2003, de firma electrónica, en España, la firma electrónica es el conjunto
de datos en forma electrónica, consignados junto a otros o asociados con ellos, que pueden ser
utilizados como medio de identificación del firmante.
No vamos a estudiar la firma electrónica, sino la firma digital, que es un mecanismo criptográfico
que, dado un mensaje (cifrado o no), permite (al menos):
• Determinar la entidad originadora del mensaje (autenticación de origen y no repudio).
51
• Confirmar que el mensaje no ha sido alterado desde que fue firmado (integridad).
Para que esto se pueda llevar a cabo necesitamos que la firma digital cumpla una serie de
requisitos:
1. Única: solo puede ser generada por el firmante.
2. No falsificable: para falsificarla hay que resolver problemas computacionalmente intratables.
3. Dependiente del documento.
4. Verificable por terceros.
5. Innegable: el firmante no debe poder negar su firma.
6. Viable: deben existir algoritmos eficientes de generación y verificación.
Con un buen criptosistema de clave pública podemos diseñar de forma sencilla mecanismos de
firma digital.
11.1
Firma RSA
Holmes tiene (n, e, d) como clave RSA (siendo d secreto) y firma un documento D de la siguiente
forma, calcula f = RSA(n, d, D) y publica D y f :
Watson accede al documento firmado (D, f ) y lo comprueba calculando RSA(n, e, f ) y comparándolo con D, si el resultado es igual, la firma es correcta y en caso contrario es falsa.
La comprobación de la firma puede hacerla todo el mundo ya que solo se necesita la clave
pública de Holmes.
Este método cumple los 5 primeros requisitos exigidos, pero no el sexto, si el mensaje D es muy
grande, f puede ser también enorme y los cálculos muy lentos.
Tendrı́amos resuelto el problema si supiéramos asociar a un documento una pequeña cantidad
de información (un resumen), de forma inequı́voca .
11.2
Funciones resumen
Idea básica: el resumen de un documento D debe servir como una representación compacta de D
y debe poder usarse como si el documento estuviera identificado de forma única por su resumen.
Esto se traduce en varias condiciones básicas que debe cumplir una función resumen:
1) Facilidad y velocidad de cálculo. h(D), el resumen de D, debe ser muy fácil y rápido de
calcular.
2) Resumen de longitud fija. El tamaño del resumen h(D) debe ser fijo (definido por la función),
sin depender del tamaño de D.
3) Difusión. h(D) debe ser una función en la que intervengan todos los bits de D. Si en D
cambiase un bit, en h(D) deberı́an cambiar aproximadamente la mitad de los bits.
4) Unidireccionalidad. Conocido un resumen h(D), debe ser computacionalmente imposible
encontrar D.
5) Resistencia a colisiones. Es evidente que h nunca puede ser una función inyectiva, con lo
que siempre existen colisiones: pares (D, D0 ) tales que h(D) = h(D0 ). Distinguiremos entre
resistencia débil y fuerte a las colisiones.
52
5a) Resistencia débil. Conocido D, debe ser computacionalmente imposible encontrar D0
tal que h(D) = h(D0 ).
5b) Resistencia fuerte. Debe ser computacionalmente imposible encontrar D y D0 tales que
h(D) = h(D0 ).
¿Cuántos intentos son necesarios para encontrar una colisión del segundo tipo? Menos de los
que uno esperarı́a, debido a la llamada paradoja del cumpleaños:
Sea p(n) probabilidad de que en un grupo de n personas elegidas al azar haya al menos dos con
el mismo cumpleaños.
¿Cuánto debe valer n para que p(n) > 0, 5 (es decir, para que la probabilidad de coincidencia
sea mayor del 50% ? La (sorprendente) respuesta es n = 23.
La probabilidad de que todos los cumpleaños sean diferentes en un grupo de n personas
(suponiendo que no hay ninguna que haya nacido el 29 de febrero) es
365 − n + 1
365 364 363
·
·
···
365 365 365
365
Teniendo esto en cuenta, si n es el tamaño del resumen y evaluamos la función h sobre 2n/2
documentos, la probabilidad de encontrar dos de ellos con igual resumen es superior al 50%, con
lo que el mı́nimo tamaño del resumen será de 160 bits y el tamaño recomendado irı́a por encima
de 256 bits.
11.2.1
Algunas funciones resumen
Como ejemplos de funciones resumen podemos citar las siguientes:
• CRC32 (W. W. Peterson, 1961) Diseñada para detección de errores, con resumen de 32 bits.
No adecuada para usos criptográficos. http://www.crc-online.com.ar/
• MD5 (R. Rivest, 1992) Sucesora de MD4, con resumen de 128 bits. Su seguridad está en
duda y se desaconseja su uso. http://www.sha1-online.com/
El proceso sobre cada bloque consiste en cuatro rondas, compuestas cada una de 16 operaciones similares, basadas en una función no lineal F (diferente para cada ronda), adición
modular y rotación a la izquierda.
• SHA-1 (NSA, 1994) Basada en MD5, con resumen de 160 bits, más segura. La familia
SHA (Secure Hash Algorithm, Algoritmo de Hash Seguro) es un sistema de funciones hash
criptográficas relacionadas de la Agencia de Seguridad Nacional de los Estados Unidos y
publicadas por el National Institute of Standards and Technology (NIST).
El proceso sobre cada bloque consiste en cuatro rondas, compuestas cada una de 20 operaciones similares, basadas en una función no lineal F (diferente para cada ronda)
• SHA-2 (NSA, 2001) Sucesora de SHA-1, con resúmenes de 224,256,384 o 512 bits. Con
muchos cambios sobre su predecesora. Recomendada actualmente.
Algunos usos de las funciones resumen son:
• Generación de claves para criptosistemas simétricos.
• Checksum y verificaciones de integridad (sin adversarios).
• Generadores seudoaleatorios.
53
• Tablas hash de búsqueda (colecciones, bases de datos, etc.)
• Validación y almacenamiento de contraseñas.
• Firma electrónica.
11.3
Firma eficiente usando resúmenes
Holmes tiene (n, e, d) como clave RSA y quiere firmar un documento m (cifrado o no), para ello
1. Elige una función resumen h y calcula el resumen r = h(m).
2. Calcula y publica cifrado del resumen con la clave privada:
f = RSA(n,d) (r) = rd mod n
3. Se adjunta la firma al documento.
4. Sólo puede firmar el propietario de la clave privada.
Watson verifica de la firma:
1. Se calcula el resumen r = h(m).
2. La firma es válida si
RSA(n,e) (f ) = f e mod n = r
3. Si los resultados no coinciden: el documento ha sido alterado o el firmante no es el legal.
4. Cualquiera puede verificar la firma ya que para ello se usa la clave pública.
Veamos un ejemplo artificialmente pequeño:
Firmamos el mensaje m = ”esto es muy importante”
• Como función resumen usamos h = CRC32:
h(m) = F 0EBDC78 = 4041989240
• Parámetros RSA:
(n = 10009202107, e = 123456789)
d = 4295292925
• Firma:
40419892404295292925 mod 10009202107 = 14275210
• Verificación de la firma:
14275210123456789 mod 10009202107 = 4041989240 = h(m)
54
11.4
Un ataque a la firma digital
Un ataque factible cuando la función resumen no es muy robusta es el llamado “ataque de
cumpleaños”:
Moriarty quiere engañar a Watson para que firme un contrato fraudulento, y para ello:
1. Prepara un contrato bueno C y otro malo C 0 .
2. Modifica C y C 0 sin cambiar los significados (usando sinónimos, comas, espacios, lı́neas en
blanco, etc.) hasta que encuentra una pareja (C, C 0 ) con h(C) = h(C 0 ).
3. Envı́a C a Watson para que lo firme. Watson está de acuerdo con C, lo firma (usando h) y
devuelve (C, fW (C)).
4. Moriarty sustituye (C, fW (C)) por (C 0 , fW (C)).
La protección contra este tipo de ataques proviene de una buena elección de h. La probabilidad
de que en el paso Moriarty encuentre una tal pareja (C, C 0 ) con h(C) = h(C 0 ) es muy pequeña si
la función resumen h genera resúmenes suficientemente grandes.
55
Chapter 12
ElGamal
El procedimiento de cifrado/descifrado ElGamal se refiere a un esquema de cifrado basado en
problemas matemáticos de logaritmos discretos. Es un algoritmo de criptografı́a asimétrica basado
en la idea de Diffie-Hellman. El algoritmo de ElGamal puede ser utilizado tanto para generar
firmas digitales como para cifrar o descifrar.
Fue descrito por Taher ElGamal en 1984 en un artı́culo titulado ”A Public key Cryptosystem
and A Signature Scheme based on discrete Logarithms” y se usa en software GNU Privacy Guard,
versiones recientes de PGP, y otros sistemas criptográficos. Este algoritmo no está bajo ninguna
patente lo que lo hace de uso libre.
El procedimiento de cifrado (y descifrado) esta basado en cálculos sobre un grupo cı́clico
cualquiera lo que lleva a que la seguridad del mismo dependa de la dificultad de calcular logaritmos discretos en un grupo cı́clico. El criptosistema de Elgamal ha demostrado ser muy flexible
y algunos de los sistemas más modernos se inspiran en él.
12.1
El problema del logaritmo discreto
Consiste en lo siguiente: un grupo (G, ·) de n elementos es cı́clico si existe un g ∈ G (llamado
generador del grupo) tal que G = {1, g, g 2 , . . . , g n−1 }. Entonces para todo a ∈ G existe un entero
k con 0 ≤ k ≤ n − 1 tal que g k = a. Se dice que k es el logaritmo discreto de a de base g.
El problema del logaritmo discreto consiste en hallar el valor de k conocidos G, g y a. En grupos
finitos grandes (como por ejemplo en el grupo multiplicativo de Zp con p un primo fuerte), este
problema es computacionalmente intratable.
Una vez elegido el grupo con el que vamos a trabajar, necesitaremos encontrar un generador
de dicho grupo, y esto lo podemos llevar a cabo por medio del siguiente algoritmo:
Entrada: G cı́clico, con |G| = n = pe11 · pe22 · · · pekk .
Salida: un generador g de G.
1. Elige al azar g ∈ G
2. Para i = 1 hasta k, si g n/pi = 1 vuelve al paso 1.
3. Retorna g.
La probabilidad de que g sea generador es φ(n)/n, y un valor del número estimado de intentos
necesarios para encontrarlo es 6 · ln(ln(n))).
56
12.2
Generación de claves
Cada usuario crea su clave pública y la correspondiente clave privada:
1. Construye un primo grande p y un generador del grupo multiplicativo de Zp .
2. Elige aleatoriamente un entero a, 1 < a ≤ p − 2 y calcula β = g a mod p.
3. La clave pública es (p, g, β). La clave privada es a.
12.3
Cifrado y descifrado
B cifra un mensaje para A
1. Obtiene la clave pública de A (p, g, β).
2. Representa el mensaje como un conjunto de enteros m1 m2 · · · en el intervalo [0, p − 1].
3. Para cada mi elige al azar un entero ki , 1 < ki ≤ p − 2.
4. Calcula γi = g ki mod p y δi = mi · β ki mod p.
5. Envı́a el texto cifrado ci = (γi , δi ) a A.
Este proceso de descifrado nos devuelve el mensaje original, puesto que, por el Teorema de
Fermat, se tiene que en Zp ,
γ p−1 = 1
Con lo que γ p−1−a = γ p−1 · γ −a = g −ak .
Y por tanto:
γ −a · δ = g −ak · m · g ak = m
12.4
Eficiencia y seguridad
Entre las desventajas podemos citar
• El proceso de descifrado hace sólo una potencia, pero el de cifrado requiere dos, de exponente
k, que pueden hacerse más rápidas eligiendo adecuadamente el exponente.
• Una desventaja es que el mensaje cifrado es el doble de largo que el original.
Por otra parte, habrı́a que destacar como ventajas
• Una gran ventaja es que al elegirse k de forma aleatoria, el cifrado de un mismo texto dará
resultados diferentes, aunque esto es transparente para el descifrado.
• Es muy flexible y puede adaptarse al uso de otro grupo diferente de Z∗p .
• La seguridad de ElGamal se basa en la dificultad de resolver un problema de logaritmo
discreto.
• Resulta crı́tico que se usen diferentes enteros aleatorios k para cada mensaje. Si se usara el
mismo k para m1 y m2 , dando lugar a los cifrados (γ1 , δ1 ) y (γ2 , δ2 ), entonces δ1 /δ2 = m1 /m2
y el conocimiento de uno de los mensajes reveları́a el otro.
57
12.5
Firma digital ElGamal
El esquema de firma ElGamal permite que un verificador pueda confirmar la autenticidad de un
mensaje m enviado por un emisor sobre un canal de comunicación inseguro.
Los parámetros utilizados por el esquema ElGamal son na función de resumen h resistente a
colisiones, un número primo p muy grande tal que el cómputo de logaritmos discretos módulo p
sea difı́cil y un generador pseudoaleatorio g para el grupo multiplicativo Z∗p .
A firma un mensaje m:
• Sus claves Elgamal son: pública = (p, g, β),privada = a.
• Elige un entero secreto k, 1 < k ≤ p − 2, primo con p − 1.
• Calcula r = g k mod p.
• Calcula s = k −1 (h(m) − ar) mod (p − 1).
• La firma del mensaje m es el par (r, s).
B verifica la firma:
• Calcula ν1 = β r rs mod p.
• Calcula ν2 = g h(m) mod p.
• La firma es válida si ν1 = ν2 .
Por qué funciona la firma:
Si la firma (r, s) que B recibe es válida, entonces
s = k −1 (h(m) − ar) mod (p − 1) ⇒ ks = h(m) − ar mod (p − 1) ⇒
h(m) = ks + ar mod (p − 1) ⇒ h(m) = ks + ar + λ(p − 1)
de aquı́
g h(m) g ks+ar+λ(p−1)
y por el teorema de Fermat
g h(m) g ks+ar = rs (g a )r = rs β r
Ası́ ν1 debe ser igual a ν2
Un ejemplo pequeño:
Firma:
• A tiene como clave pública (p = 2357, g = 2, β = 1185), clave privada a = 1751 y firma un
mensaje m de resumen h(m) = 1463.
• A selecciona k = 1529 y calcula
r = 21529 mod 2357 = 1490
s = 1529−1 (1463 − 1751 · 1490) mod 2356 = 1777.
• La firma es (1490, 1777).
Verificación:
B verifica la firma calculando
ν1 = 11851490 · 14901777 mod 2357 = 1072
ν2 = 21463 mod 2347 = 1072.
58
Chapter 13
Criptografı́a de curvas elı́pticas
Con un grupo cı́clico adecuado los cálculos son más eficientes y las claves más pequeñas, mientras
que el cálculo del logaritmo discreto sigue siendo computacionalmente intratable.
No se trata de un nuevo criptosistema, sino de un nuevo enfoque.
Se trata de usar funciones de un solo sentido en un contexto nuevo, usando una aritmética que
hace los problemas más difı́ciles.
13.1
Curvas elı́pticas
Las curvas elı́pticas han sido muy estudiadas desde hace más de 150 años. Su uso en Criptografı́a
fue propuesto en 1985 independientemente por Neal Koblitz (Univ. de Washington) y Victor Miller
(IBM, Yorktown Heights).
Una curva elı́ptica es una curva en el plano tal que cada lı́nea que la corta en 2 puntos, la corta
además exactamente en un tercer punto.
Una curva elı́ptica sobre R está formada por el conjunto de los puntos (x, y) tales que satisfacen
una ecuación de la forma y 2 = x3 + ax + b con a, b números reales cumpliendo 4a3 + 27b2 6= 0.
Figure 13.1: Curva elı́ptica.
59
13.2
El grupo
Una curva elı́ptica sobre un cuerpo finito está formada por un conjunto finito de puntos.
La curva es
Ea,b = {(x, y) ∈ R2 / y 2 = x3 + ax + b}
El grupo es G = Ga,b = Ea,b ∪ {∞}, donde ∞ es el llamado punto del infinito y es el elemento
neutro del grupo: para todo punto P ∈ G
P +∞=P
La operación del grupo (dos reglas básicas)
B1 Todas las rectas verticales pasan por el punto del infinito ∞.
B2 Si P, Q, R ∈ G están alineados, entonces P + Q + R = ∞.
Figure 13.2: Curva elı́ptica.
Aritmética geométrica:
• El opuesto (negativo) de un punto P = (x, y) es su simétrico respecto al eje x : −P = (x, −y).
• Para sumar dos puntos P, Q (con P 6= −Q) se traza una lı́nea que los une, que corta a la
curva en otro punto R; entonces P + Q = −R.
• Para sumar P consigo mismo se traza la tangente en P , que corta a la curva en otro punto
−R; entonces 2P = P + P = R
• Caso especial: Si P = (x, 0) entonces la tangente es vertical y no corta de nuevo a la curva.
Entonces se establece que 2P = ∞.
Aritmética algebraica:
1.- Suma de puntos distintos y no opuestos. Si P = (xp , yp ) y Q = (xq , yq ) e yp 6= −yq ,
calculamos λ = (yq − yp )/(xq − xp ) y entonces P + Q = R = (xr , yr ) con
xr = λ 2 − xp − xq
,
60
yr = (xp − xr )λ − yp
2.- Duplicación de un punto distinto del (x, 0). Si yp 6= 0, entonces calculamos s = (3x2p + a)/2yp
y entonces 2P = R = (xr , yr ) siendo
xr = s2 − 2xp
,
yr = −yp + s(xp − x−r )
Mutiplicación rápida de puntos
Se puede realizar la multiplicación rápida de puntos haciendo sumas y doblados de puntos con
un número mı́nimo de operaciones, de la misma forma que se hacı́an las potencias rápidas, donde
las operaciones son S (suma de puntos) y D (doblado de puntos) en lugar de M y C.
Ası́ para calcular 23 · P , escribimos (23)2 = 10111, que se traduce en 1D0D1D1D1 y luego en
SDDSDSDS, lo que nos llevarı́a a
∞ → P → 2P → 4P → 5P → 10P → 11P → 22P → 23P
Resultados teóricos que aseguran la existencia de curvas elı́pticas adecuadas son:
√
√
• Teorema de Hasse |G| ∈ [p + 1 − 2 p, p + 1 + 2 p]
• Teorema de Waterhouse: si n está en el intervalo de Hasse, existen curvas elı́pticas con
|G| = n.
• Existen enteros n1 , n2 con n2 |n1 y n2 |p − 1 tales que G ' Zn1 × Zn2 (si n1 = 1 =⇒ G es
cı́clico).
Orden de un punto
Si P es un elemento de un grupo (G, +) entonces el orden de P es el primer entero k tal que
k·P =∞
Si k = |G|, entonces G es cı́clico y P es un generador.
El problema del logaritmo discreto (aditivo) en curvas elı́pticas consiste en:
Dados dos puntos P y Q en el grupo (aditivo) de la curva, encontrar un entero k tal que kP = Q
Ejemplo: en la curva elı́ptica definida sobre F23 por la ecuación y 2 = x3 + 9x + 17, hallar el
logaritmo discreto k de Q = (4, 5) de base P = (16, 5)
Mediante fuerza bruta:
P = (16, 5) 2P = (20, 20)
6P = (7, 3)
7P = (8, 7)
3P = (14, 14)
8P = (12, 17)
4P = (19, 20)
9P = (4, 5) = Q
5P = (13, 10)
⇒k=9
Ası́ el logaritmo discreto de Q en base P es k = 9.
En un caso real, k será muy grande y este ataque será computacionalmente imposible.
13.3
Elgamal elı́ptico
Utilizando un subgrupo cı́clico del grupo de una curva elı́ptica se puede implementar un criptosistema similar al de Elgamal.
Cada usuario construye su clave pública y la correspondiente privada:
1. Elige un primo p y una curva elı́ptica sobre Zp , y 2 = x3 + ax + b con 4a3 + 27b2 6= 0 (mod p).
2. Elige un punto Pg de la curva que sea de orden primo n y de tamaño similar a p.
3. Se elige un entero d ∈ [1, n − 1] y se hace B = dPg .
4. La clave pública es (p, a, b, Pg , n, B).
61
5. La clave privada es d.
Cifrado
B cifra un mensaje para A. Representa el mensaje como un conjunto de enteros m1 , m2 , . . .
cada uno en el intervalo [0, n − 1] y cifra cada m = mi .
1. Elige al azar un entero k, 1 ≤ k ≤ n − 2.
2. Calcula M = k · Pg y k · B = (β1 , β2 ).
3. Calcula γ = m · β1 .
4. Envı́a a A el texto cifrado (M, γ).
Descifrado
B descifra el mensaje de A
1. Calcula d · M = d · k · Pg = k · B = (β1 , β2 ).
2. Obtiene el mensaje en claro
m = γ · β1−1 en Zp
13.4
Algunos estándares
El Gamal elı́ptico no es un estándar, aunque hay intentos, como:
• Estándar P1363 de la IEEE de criptografı́a de clave pública: Standard Specifications For
Public-Key Cryptography. http : //grouper.ieee.org/groups/1363/
• 14.2 - Grupo de evaluación criptográfica Europeo NESSIE: New European Schemes for Signature, Integrity and Encryption. http : //www.cryptonessie.org/
• 14.3 - Grupo de evaluación criptográfica Japonés CRYPTREC: Cryptography Research and
Evaluation Committee http : //www.ipa.go.jp/security/enc/CRY P T REC/index − e.html
• 14.4 - Estándar SECG: The Standards for Efficient Cryptography Group (SECG) http :
//www.secg.org/
• 14.5 - Estándar NIST: The NIST Computer Security Division http : //csrc.nist.gov/
El criptosistema basado en curvas elı́pticas más ampliamente respaldado es el llamado Integrated Encryption Scheme (IES), que ha sido aprobado como estándar por distintas entidades:
ANS X9F1, CRYPTREC, IEEE P1363, NESSIE, NSA Suite B. Puede verse con más detalle en
http : //en.wikipedia.org/wiki/Integrated Encryption Scheme
62
13.5
Seguridad
Certicom es la principal empresa comercial de CCE, esta organización posee 130 patentes, y ha
vendido licencias a NSA por 25 millones de dólares.
También ha patrocinado varios desafı́os a algoritmos CCE. El más complejo resuelto hasta
ahora, con clave de 109 bits, fue roto por un equipo de investigadores a principios de 2003. usando
un ataque masivo en paralelo basado en el ataque de cumpleaños, con más de 10.000 PC’s de tipo
Pentium funcionando continuamente durante 540 dı́as.
Se estima que la longitud de clave mı́nima recomendada para CCE (163 bits) requerirı́a 108
veces los recursos utilizados para resolver el problema con 109 bits.
Tamaños estimados de claves en los distintos problemas estudiados para obtener una seguridad
equivalente:
PLD (bits)
1024
3072
7680
15360
RSA (bits)
1024
3072
7680
15360
PLDE (bits)
163
256
384
512
Ratio
1:6
1:12
1:20
1:30
Un meñor tamaño implica una mejor gestión de las claves, más velocidad, menor tamaño del
cifrado y menos necesidad de memoria.
13.6
Conclusiones
• Las buenas implementaciones de CCE son muy seguras: no se les conoce ningún ataque
subexponencial que haya tenido éxito.
• Más atractivos que los anteriores porque requieren claves mucho más cortas para el mismo
nivel de seguridad.
• Más rápidos que los anteriores.
• Menores requerimientos de memoria que los anteriores.
• Ideales para dispositivos portátiles como PDAs, smartcards, móviles, etc.
Algunos ejemplos de protocolos que usan CCE son EC Digital Signature Algorithm (ECDSA),
o el intercambio de llaves EC Diffie-Hellman (ECDH).
Sólo un problema: es aún nuevo!
63
Chapter 14
Servicios de seguridad
Al empezar tenı́amos varios objetivos. Luego hemos visto muchas herramientas...
1. Confidencialidad
• Criptografı́a simétrica
• Criptografı́a de clave pública
2. Autenticación
• Funciones resumen
• Criptografı́a de clave pública
3. Integridad
• Firma
4. No repudio
• Firma
Ahora vamos a poner orden para tener servicios de seguridad, para ello disponemos de dos
paradigmas, criptografı́a de clave pública y criptografı́a simétrica:
A.- Criptografı́a de clave pública
√
Muy segura.
√
Versátil: ofrece servicios imposibles con solo criptografı́a simétrica.
⊗ Lenta y pesada.
⊗ Poco apta para hardware.
⊗ Ineficiente para grandes volúmenes de información.
B.- Criptografı́a simétrica
√
Muy segura.
√
Muy rápida y ligera.
√
Apta para hardware.
64
√
Adecuada para grandes volúmenes de información.
⊗ Ofrece fundamentalmente servicios de confidencialidad.
Ahora vamos a ponerlas a trabajar juntos, tenemos un criptosistema simétrico, en el que notaremos
SE(k, M ) = cifrado de M con la clave k
SD(k, C) = descifrado de C con la clave k
y un criptosistema de clave pública donde
P E(p, M ) = cifrado de M con la clave p
P D(v, C) = descifrado de C con la clave v
Y nuestro escenario: dos interlocutores, Holmes y Watson, siendo (p, v) las claves pública y
privada PKC de Watson.
14.1
A. Claves de sesión
Holmes envı́a un mensaje M a Watson
Figure 14.1: Clave de sesión.
k es la llamada clave de sesión.
Los beneficios obtenidos con este esquema son:
√
Confidencialidad: sólo podrá leer el mensaje el destinatario del mismo.
√
Integridad: el mensaje no podrá ser modificado.
√
Seguridad: aunque un adversario obtenga la clave de sesión solo puede obtener el correspondiente mensaje.
Sin embargo, Watson puede ser un servidor, el diálogo anterior podrı́a tener lugar entre el
usuario Holmes y un servidor, un sitio de Internet, . . . y esto es un problema: asimetrı́a de la
seguridad en la clave de sesión. Se necesita autenticación de los dos interlocutores.
Hay una serie de objetivos que no han sido alcanzados:
⊗ Autenticación del usuario: Watson no está seguro de la clave pública de Holmes realmente
es la suya y que no lo están suplantando.
⊗ Autenticación del servidor: Holmes no está seguro de que no están suplantando al servidor.
⊗ No repudio: los emisores de los mensajes podrı́an negar ser los autores.
65
14.2
B. Certificados digitales
Un certificado digital es un documento que vincula claves y otros datos con un usuario y confirma
su identidad mediante la firma digital de una entidad de confianza.
Los certificados digitales sirven para:
• Autenticar la identidad del propietario ante terceros.
• Firmar digitalmente de forma que se garantice la integridad de los datos trasmitidos y su
procedencia.
• Cifrar datos para que sólo el destinatario de la información pueda acceder a ella.
El estándar para certificados digitales es el X.509, que responde a la siguiente estructura:
1. Certificado
1.1 Datos de generación.
1.1.1.
1.1.2.
1.1.3.
1.1.4.
1.1.5.
Versión.
Número de serie.
Id. del algoritmo.
Emisor.
Validez.
1.2 Datos del sujeto.
1.2.1. Sujeto.
1.2.2. Algoritmo de clave pública.
1.2.3. Clave pública.
1.3 Datos opcionales.
1.3.1. Id. único del emisor.
1.3.2. Id. único del sujeto.
1.3.3. Extensiones (propósito, etc.)
2. Algoritmo usado para firmar el certificado
3. Firma digital del certificado.
Una forma de poder confiar en el certificado digital de un interlocutor al que no conocemos
es que el certificado esté avalado por una tercera parte en la que sı́ confiamos (autoridad de
certificación).
Esa tercera parte (TTP, Trusted Third Party) avalará con su firma digital que el certificado es
de fiar.
Cualquiera puede emitir un certificado: existen utilidades como makecert.exe que los generan.
Pero un certificado sirve para poco si no lo avala una entidad de confianza: la autoridad de
certificación (AC).
Entre las AC internacionales podemos citar: VeriSign, Thawte, y entre las españolas, el Ministerio del Interior y la Fábrica Nacional de Moneda y Timbre.
Las AC se organizan en jerarquı́as o en anillos de confianza.
La gestión de las claves de los certificados es como sigue:
• En el proceso de solicitud se generan localmente las claves, pública y privada.
66
• La clave pública se envı́a en el certificado y la AC la almacena.
• La clave privada se almacena localmente y nunca se transmite a la AC.
• La integridad del certificado depende de que la clave privada sea gestionada de forma adecuada
por el usuario.
Cuando se genera (o se instala un certificado a partir de un archivo que contenga la clave
privada), la clave privada se guarda localmente en un almacén protegido.
En Windows, en C:/ Users%username%/AppData/Roaming/Microsoft/Crypto/RSA
El certificado y opcionalmente la clave privada se pueden exportar, por ejemplo, para trasladarlos a otro sistema, mediante archivos especiales. Estos archivos pueden ser de varios tipos
• .CER: codificado en CER (a veces varios).
• .DER: codificado en DER.
• .PEM: codificado en Base64
• .P7B/P7C: PKCS] 7.
• .PFX/P12: PKCS] 12, puede contener certificados públicos y claves privadas (protegidas con
contraseña).
En algunos sistemas se usan varios certificados. Por ejemplo, en el DNI electrónico hay dos:
uno para cifrar y otro para la firma. El objetivo es disminuir el riesgo de ciertos ataques.
14.3
C. Autenticación
La autenticación puede llevarse a cabo mediante certificados digitales, o sin necesidad de ellos en
dos pasos,
1. Autenticación del usuario. El servidor proporciona una clave k aleatoria al usuario H, quien
le devuelve un par (CH , fH (k)) compuesto por su certificado y la firma de la clave k. Seguidamente el servidor valida el certificado CH con la autoridad certificadora AC y verifica la firma
fH (k) con el certificado CH .
2. Autenticación del servidor. El usuario proporciona una clave k aleatoria al servidor S, quien
le devuelve un par (CS , fS (k)) compuesto por su certificado y la firma de la clave k. Seguidamente el usuario valida el certificado CS con la autoridad certificadora AC y verifica la firma
fS (k) con el certificado CS .
En ningún momento se transmiten las claves privadas, sólo documentos firmados y las dos
autenticaciones permiten que cada interlocutor esté seguro de la identidad del otro.
14.4
Public Key Infrastructures
Una PKI es un conjunto de protocolos, servicios y estándares que soportan aplicaciones basadas
en criptografı́a de clave pública.
La base de las PKI es el modelo de confianza basado en Terceras Partes de Confianza (TTP) .
Las PKI están compuestas por terceras partes en los que todos los usuarios de la infraestructura
confı́an:
67
• Autoridad de Certificación
• Autoridad de Registro
• Autoridades de Fechado Digital, etc.
Hemos llegado muy lejos, aún faltan mecanismos de seguridad, como
• Detección de intrusos
• Compartición de secretos
• Pruebas de conocimiento cero
• ...
68
Descargar