Seguridad Informática - Criptografía de clave secreta

Anuncio
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Seguridad Informática
Criptografı́a de clave secreta
Ramón Hermoso y Matteo Vasirani
Universidad Rey Juan Carlos
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto I
Secreto perfecto
Un esquema de cifrado (Gen, Enc, Dec) se dice que logra
secreto perfecto si
P[M = m|C = c] = Pr[M = m]
es decir, si cualquier adversario que vea el texto cifrado no
obtiene ninguna información sobre el texto en claro
[Shannon]
la probabilidad a priori de conocer el mensaje en claro m
es igual que la probabilidad a posteriori de conocer dicho
mensaje m aun conociendo el mensaje cifrado c
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Secreto perfecto II
Experimento IND-EAV
A ≡ adversario
1
2
A crea dos mensajes m0 y m1 y se los envı́a a C
C genera una clave k mediante un generador Gen
1
2
C elige b ← {0, 1}
C envı́a a A el mensaje cifrado c ← Enck (mb )
3
A devuelve un bit b0
4
La función Succ determina el éxito del adversario:
(Succ(A) = 1) ↔ (b = b0 )
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Secreto perfecto III
Esquema del experimento IND-EAV
k,b
m0 m1
Enck(mb)
C
A
b'
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto IV
Secreto perfecto (Definición alternativa)
Un esquema de cifrado alcanza secreto perfecto si, para
cualquier adversario A, se tiene que:
P[Succ(A) = 1] = 1/2
Es decir, ningún adversario puede distinguir entre el
cifrado de dos mensajes de su elección mejor que
eligiendo al azar.
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto V
Teorema
Si para un esquema de cifrado se tiene |k| < |m|, entonces no
se puede alcanzar el secreto perfecto
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad computacional I
Se relaja la noción de seguridad en dos aspectos:
1
2
La seguridad ha de preservarse contra adversarios
eficientes (aquéllos que corren en tiempo polinomial)
Se admite que dichos adversarios tengan éxito con una
probabilidad muy pequeña
Por lo tanto, si se busca un esquema que permita cifrar
varias veces usando la misma clave, es necesario evitar
ataques por fuerza bruta
1
2
KPA (Tema 1) probando con todas las claves
KPA eligiendo una clave al azar
Ası́ pues, el tamaño del espacio de claves ha de ser
suficientemente grande
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Adversarios PPT
PPT ≡ Probabilistic Polynomial Time
Un algoritmo ag corre en tiempo polinomial
n
si existe un polinomio p(x) = ∑ ai xi de tal
i=0
manera que para cada entrada x el algoritmo
ag termina en p(|x|) pasos
Se dice que ag es probabilı́stico si tiene la
capacidad de dar pasos de manera aleatoria
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Función despreciable (negligible)
Decimos que una función f : N → R es
despreciable si para cada polinomio p(.)
existe un n0 tal que si n > n0 entonces
1
f (n) < p(n)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad asintótica
El algoritmo Gen tiene como entrada 1n
n recibe el nombre parámetro de seguridad
Usualmente Gen(1n ) elige k ← {0, 1}n
El adversario A también recibe 1n como input
El esquema será seguro si la probabilidad
de éxito de A es despreciable como función
de n
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Esquema de cifrado con clave privada
Consta de 3 algoritmos (Gen, Enc, Dec)
k ← Gen(1n ) (genera la clave secreta)
c ← Enck (m) (cifra el texto en claro)
m ← Deck (c) (descifra el texto cifrado)
Corrección: m = Deck (Enck (m))
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Experimento IND-EAV I
1
2
A(1n ) construye y envı́a a C dos mensajes
m0 y m1 de la misma longitud
C genera k mediante Gen(1n )
1
2
3
4
C elige b ← {0, 1}
C genera c ← Enck (mb ) y lo envı́a a A
A devuelve un bit b0
Si b = b0 se dice que Succ(A, n) = 1
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Experimento IND-EAV II
Se dice que un esquema de cifrado es
IND-EAV seguro si, para cualquier tipo de
adversario PPT A, se cumple que:
P(Succ(A, n) = 1) ≤ 12 + f (n)
donde f (n) es una función despreciable.
Es decir, ningún adversario eficiente puede
distinguir entre el cifrado de dos mensajes
de su elección mejor que eligiendo al azar,
salvo con una probabilidad que se considera
despreciable
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de clave simétrica I
Formados a base de:
Sustituciones
Permutaciones (o transposiciones)
Pueden ser:
De bloque (block ciphers)
De flujo (stream ciphers)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de clave simétrica II
Ejemplo ⇒ Cifrado del César (Tema 1)
(Monoalfabético y Polialfabético)
Cifrado y descifrado igual de sencillos
Demasiado fácil de romper (sólo hay 26
claves diferentes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Cifradores de clave simétrica III
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de clave simétrica IV
Hay una tabla que muestra cómo cifrar cada
letra del mensaje
Hay 26! (> 4x1026 ) claves
Ataques de fuerza bruta inviables
¿Problemas?
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad IND-CPA I
Misma definición que seguridad IND-EAV,
pero el adversario tiene acceso a un oráculo
de cifrado
Nunca se puede alcanzar para esquemas
de cifrado deterministas
Si un esquema es IND-CPA seguro cifrando
una vez, lo será también cifrando múltiples
veces
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad IND-CPA II
Experimento IND-CPA
1
C genera k mediante un generador Gen(1n )
2
A recibe como input 1n
3
A recibe acceso al oráculo Enck (.)
4
A crea dos mensajes m0 , m1
5
Se elige b ← {0, 1}
6
Se envı́a c ← Enck (mb ) a A
7
A devuelve un bit b0
8
Si b = b0 se dice que Succ(A, n) = 1
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad IND-CPA III
Se dice que un esquema de cifrado es
IND-CPA seguro si para cualquier
adversario PPT A tenemos que:
P(Succ(A, n) = 1) ≤ 12 + negl(n)
Es decir, si ningún adversario eficiente con
acceso a un oráculo cifrado puede distinguir
entre el cifrado de dos mensajes de su
elección mejor que eligiendo al azar, salvo
con probabilidad despreciable
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Funciones pseudo-aleatorias
Consiste en una familia de funciones
indexadas por una clave secreta
F : {0, 1}l × {0, 1}n → {0, 1}n
(k, x) → Fk (x)
Se pretende que al elegir una clave al azar
la función correspondiente sea difı́cil de
distinguir de una función elegida
completamente al azar
Además, la función se debe poder computar
eficientemente
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Permutaciones pseudo-aleatorias
Funciones pseudoaleatorias a las que se les
pide que cada Fk (.) sea una permutación de
{0, 1}n
Se pide que, para cada clave, tanto la
permutación como su inversa sean
computables de manera eficiente
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifrador en bloque
Es el nombre que reciben las permutaciones
pseudoaleatorias cuando se usan en la
práctica
l: longitud de clave
n: longitud de bloque
Se usan como primitivas para la
construcción de esquemas de cifrado de
clave secreta
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación I
Determina la forma de utilizar un cifrador en bloque
Las partes que se comunican comparten una clave
secreta k y usan una permutación Fk
Se supone un mensaje m cuya longitud es múltiplo de
la longitud de bloque n (si no es ası́ se completa con
información superflua)
Se divide el mensaje en bloques de longitud n
m = m0 || m1 || ... || ms
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación II
1
Electronic Code Book (ECB)
Se divide el mensaje original en bloques y cada uno de
ellos es cifrado por separado usando la misma clave k
cj = Fk (mj )
Es inseguro :-s
m1
m2
m3
Fk
Fk
Fk
c1
c2
c3
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación III
2
Cipher Block Chaining (CBC)
A cada bloque de texto plano se le aplica la operación XOR
con el bloque cifrado anterior antes de ser cifrado
Se elige al azar un vector de inicialización IV de n bits
c0 = IV
cj = Fk (mj ⊕ cj−1 )
m1
m2
m3
Fk
Fk
Fk
c1
c2
c3
IV
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación IV
3
Output Feedback (OFB)
Se elige al azar un vector de inicialización (IV) de longitud n
r0 = IV
rj = Fk (rj−1 )
cj = mj ⊕ rj
IV
Fk
m1
Fk
m2
c1
Fk
m3
c2
c3
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación V
4
Counter (CTR)
Se elige al azar un vector de inicialización (IV) de longitud n
ctr = IV
rj = Fk (ctr + j)
cj = mj ⊕ rj
ctr
ctr+1
ctr+2
ctr+3
Fk
Fk
Fk
m1
ctr
m2
c1
m3
c2
c3
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Modos de operación VI
Seguridad de los modos
Teorema: los modos CBC, OFB y CTR son
IND-CPA seguros si se emplea una
permutación pseudoaleatoria
ECB es inseguro. ¿Por qué?
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Seguridad IND-CCA I
Experimento IND-CCA
Se genera k mediante Gen(1n )
A recibe como input 1n
A recibe acceso a oráculos Enck (.) y Deck (.)
A crea dos mensajes m0 , m1
Se elige b ← {0, 1}
C envı́a c ← Enck (mb ) a A
A ya tiene cerrado el acceso a Deck (c)
A devuelve un bit b0
Si b = b0 se dice que Succ(A, n) = 1
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad IND-CCA II
Un esquema de cifrado es IND-CCA seguro si para
cualquier adversario PPT A se tiene que:
P(Succ(A, n) = 1) ≤ 12 + negl(n)
Es decir, si ningún adversario eficiente con acceso a
oráculos de cifrado y descifrado puede distinguir
entre el cifrado de dos mensajes de su elección
mejor que eligiendo al azar, salvo con probabilidad
despreciable
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad IND-CCA III
Los modos anteriores no la alcanzan (los textos
cifrados son manipulables)
Para hacerlos IND-CCA seguros se combinan con
codigos de autenticación de mensajes (MAC)
Se construyen MAC a partir de funciones
pseudoaleatorias o funciones hash resistentes a
colisiones
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque I
Cifradores de sustitución simple (i)
Sea A un alfabeto de q sı́mbolos y T el conjunto de todas las
cadenas de caracteres de longitud l en A. Sea, además, P el
conjunto de todas las posibles permutaciones en A. Se define
Enck por cada p ∈ P como:
Encp (m) = (p(m1 )p(m2 )...p(ml )) = (c1 c2 ...cl ) = c
donde m = (m1 m2 ...ml ) ∈ T. Es decir, para cada sı́mbolo en un
l-bloque éste se sustituye por otro sı́mbolo de A según la
permutación fija marcada por p. Encp es un cifrador de
sustitución simple (o monoalfabético)
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de bloque II
Cifradores de sustitución simple (ii)
Para descifrar c = (c1 c2 ...cl ) se realiza el cómputo inverso
p = e−1 , por lo que:
Decp (c) = (p(c1 )p(c2 )...p(cl )) = (m1 m2 ...ml ) = m
¿Ventajas / Inconvenientes?
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque III
Cifradores de sustitución polialfabética
Es un un cifrador de bloques, donde la longitud del bloque es
de tamaño l sobre un alfabeto A. Tiene las siguientes
propiedades:
El espacio de claves K consiste en todos los conjuntos
ordenados de l permutaciones (p1 , p2 , ..., pl ), donde cada
permutación está definida en A;
La encriptación de un mensaje m = (m1 m2 ...ml ) con la
clave k = (p1 , p2 , ..., pl ) se proporciona mediante
Enck (m) = (p1 (m1 )p2 (m2 )...pl (ml )); y
La clave para descifrar con k = (p1 , p2 , ..., pl ) es
−1
−1
k−1 = (p−1
1 , p2 , ..., pl )
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque IV
Ejemplo: cifrador de Vigenère
Sea A = {A, B, C, D, ..., X, Y, Z} y l = 3. Se elige k = (p1 , p2 , p3 ),
donde p1 se corresponde con la letra de 3 posiciones a la
derecha de la actual en el alfabeto A , p2 7 posiciones a la
derecha y p3 10 posiciones a la derecha. Si el mensaje en claro
es:
m = EST ECI FRA DOR ESU NAP ATA TA
El mensaje cifrado quedarı́a de esta forma:
c = Enck (m) = hzd hjs iyk gvb xze qhz dak wh
¿Ventajas / Inconvenientes?
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque V
Cifradores de transposición/permutación
Sea K el conjunto de todas las permutaciones en el conjunto
{1, 2, ..., l}. Para cada k ∈ K se define la función de encriptación
como sigue:
Enck (m) = (mk(1) mk(2) ...mk(l) )
Permuta los sı́mbolos en un mismo bloque
La permutación o transposición puede depender o no de la
clave
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Cifradores de bloque VI
Ejemplo
l=5
m = ATACA MOSAL ASOCH O
k = {5, 4, 3, 2, 1}
El mensaje codificado resulta:
c = ACATA LASOM HCOSA O
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque VII
Cifradores de producto (Product ciphers)
Los cifradores de sustitución y de permutación no ofrecen
alta seguridad por sı́ solos, en cambio, su combinación
hace criptosistemas más robustos
Un cifrador de producto muy común serı́a una
composición de l ≥ 2 transformaciones
Enck1 , Enck2 , ..., Enckl , donde cada Encki , 1 ≤ i ≤ l, es o bien
un cifrador por sustitución o bien uno por permutación
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de bloque VIII
Redes S-P
Creadas por Shannon en 1949
Secuencia de varias substituciones y permutaciones
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque IX
Ejemplo: Cifrador ADFGVX (i)
Utilizado en la I Guerra Mundial
Llamado ası́ por los diferentes sonidos en Morse de los
distintos sı́mbolos
Combina sustitución polialfabética (de pares) con
transposición por columnas
A
D
F
G
V
X
A
K
9
Q
E
8
U
D
Z
B
7
V
O
4
F
W
6
J
Y
D
I
G
R
C
P
3
H
S
V
1
L
G
A
0
T
X
F
5
X
N
2
M
Cuadro: Tabla de substituciones
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de bloque X
Ejemplo: Cifrador ADFGVX (ii)
Texto en claro: QUEDAMOS A LAS NUEVE
Texto substituido:
FA XA GA VF GV XX VD XG GV
DV GV XG GX XA GA GD GA
Clave a utilizar: LIBRO
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de bloque XI
Ejemplo: Cifrador ADFGVX (iii)
Creamos una matriz con el texto substituido en bloques
bajo la clave
Ordenamos las columnas por orden alfabético de la clave
(a)
L
F
A
X
G
G
X
G
I
A
V
X
G
V
X
D
B
X
F
V
V
X
A
G
(b)
R
A
G
D
D
G
G
A
O
G
V
X
V
G
A
#
B
X
F
V
V
X
A
G
I
A
V
X
G
V
X
D
L
F
A
X
G
G
X
G
O
G
V
X
V
G
A
#
R
A
G
D
D
G
G
A
El texto cifrado serı́a: XFVVXAG AVXGVXD FAXGGXG GVXVGA# AGDDGGA
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Técnicas generales de diseño (DES y AES)
Uso del paradigma confusión-difusión
Confusión: supongamos que la longitud del bloque es de
128 bits
La clave determina 16 permutaciones f1 , f2 , ..., f16 cuya
longitud de bloque es 8
Se divide, pues, m = m1 ||m2 ||...||m16 en bloques de 8 bits
Se define Fk (m) = f1 (m1 )||...||f16 (m16 )
Difusión: los bits de la salida anterior se mezclan de
acuerdo a una cierta permutación (permutación de
mezcla)
Los pasos de confusión-difusión se repiten un cierto
número de rondas
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Implementación I
Red de sustitución/permutación: las permutaciones {fj }
son fijas y no dependen de la clave. Reciben el nombre de
S-cajas (cajas de sustitución)
La dependencia de la clave se introduce al principio de
cada ronda mediante una agenda de claves (key
schedule). Por ejemplo, haciendo XOR de la entrada con
una subclave obtenida a partir de la clave
Secreto perfecto
Cifrado con clave secreta
Implementación II
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Otro principio de diseño
Efecto avalancha: cambiar un único bit de
la entrada deberı́a afectar a todos los bits de
la salida
Para conseguirlo:
1
2
Para cada S-caja, si se cambia un bit del input,
cambian al menos dos bits del output
Para cada S-caja la permutación de mezcla
reparte cada bit del output a una caja distinta
para la ronda siguiente
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Redes de Feistel
Se trata de un enfoque alternativo para construir cifradores
de bloque
No se requiere que las S-cajas sean permutaciones, pero
se consigue que cada ronda se pueda invertir
Inicialmente se divide el input en dos bloques L0 y R0
(parte izda. y parte dcha.)
En cada ronda j se calcula el output mediante una S-caja fj
(que dependerá de la clave) teniendo:
Lj = Rj−1
Rj = Lj−1 ⊕ fj (Rj−1 )
Cada una de estas rondas se puede invertir (siempre que
se conozca la clave)
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Posibles ataques
Ataques
Tanto las redes de sustitución-permutación como las redes de
Feistel son susceptibles a ataques si no se elige un número de
rondas suficientemente alto
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
DES (Data Encryption Standard) I
Consiste en una red de Feistel de 16 rondas
Longitud de bloque: 64 bits
Longitud de clave: 56 bits
Agenda de clave: en cada ronda se genera una subclave
de 48 bits eligiendo 24 bits de la parte izquierda y 24 de la
parte derecha de la clave original
El mecanismo para la generación de claves es fijo y
público
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
DES (Data Encryption Standard) II
Cada función de ronda fj se comporta de la siguiente
manera:
El input de 32 bits se expande a 48 bits (duplicando la
mitad). Al resultado se le aplica XOR con la subclave kj
A continuación, se procede con la ronda
sustitución-permutación:
1
2
La parte de sustitución consta de 8 S-cajas fijas que tienen
entrada de 6 bits y salida de 4 bits. Por lo tanto, se reduce
la entrada de 48 bits a 32 bits de nuevo
Se aplica una permutación de mezcla a los 32 bits
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
DES (Data Encryption Standard) III
Input: m = m1 m2 ...m64 , mensaje de texto plano; k = k1 k2 ...k64 ,
clave de 64 bits
Output: c = c1 c2 ...c64 , texto cifrado
1
2
Crear la agenda de claves, con 16 claves de 48 bits
(l0 , r0 ) ← IP(m1 m2 ...m64 )
1
3
Se divide el resultado en dos mitades, izda. y dcha. de 32
bits cada una
(16 rondas), calcular li y ri (ec. 1 y 2), calculando
f (ri−1 , ki ) = P(S(E(ri−1 ) ⊕ ki )) de la siguiente forma:
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
DES (Data Encryption Standard) IV
1
2
3
4
Expandir ri−1 = r1 r2 ...r32 (de 32 a 48 bits usando la tabla de
permutaciones E) : T ← E(ri−1 )
T 0 ← T ⊕ ki . Representamos T 0 como 8 cadenas de 6 bits:
(B1 , ..., B8 )
T 00 ← (S1 (B1 ), S2 (B2 ), ..., S8 (B8 )). Se mapea Si (Bi ) a una
entrada de 4 bits en la caja Si . (b1 b6 ) determinan la fila y
b2 b3 b4 b5 la columna
T 000 ← P(T 00 ) (Permutación P)
4
b1 b2 ...b64 ← (r16 , l16 ) (Intercambio de ri por li )
5
c ← IP−1 (b1 b2 ...b64 ) (Permutación usando la inversa de IP)
li = ri−1
(1)
ri = li−1 ⊕ f (ri−1 , ki )
(2)
donde f (ri−1 , ki ) = P(S(E(ri−1 ) ⊕ ki ))
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
DES (Data Encryption Standard) V
ri-1
Input
m1 m2
...
IP
32
m64
64
E
Expansión
Permutación inicial
48
64
l0
r0
48 k
1
32
32
+
48
l1
r1
48 k
2
32
6
S1
r15
48 k
16
32
32
32
f
l15
+
+
32
f
32
+
ki
S2
S3
S4
S5
S6
S7
S8
4
32
f
32
r16
l16
P
64
IP
-1
Permutación inversa
32
64
Output
c1 c2
...
c64
(a) Flujo de DES
Adaptado de Menezes et al. Handbook of Applied Cryptography. Cap.7 pág. 254
(b) Función f
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad de DES
El mejor ataque conocido en la práctica es una búsqueda
exhaustiva en el espacio de claves. El tamaño es 256 , hoy
en dı́a demasiado pequeño
Un par de retos propuestos en 1997, en forma de pares
input/output, con objetivo de recuperar la clave, fueron
resueltos en 96 y 41 dı́as, respectivamente.
En 1998, la máquina Deep Crack (250000$ diseñada
ad-hoc) resuelve otro reto en 56 horas
DES no se considera seguro actualmente
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Mejoras a DES I
No es aconsejable modificar la estructura interna porque
se puede perder seguridad
DES iterado: se aplica varias veces el cifrador utilizando
distintas claves
Variantes de DES:
2DES(k1 k2 , m) ≡ DES(k2 , DES(k1 , m))
3DES3(k1 k2 k3 , m) ≡ DES(k3 , DES−1 (k2 , DES(k1 , m)))
3DES2(k1 k2 , m) ≡ 3DES3(k1 k2 k1 , m)
DESX(k k1 k2 , m) ≡ k2 ⊕ DES(k, k1 ⊕ m)
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Mejoras a DES II
Incovenientes
Las variantes iteradas son poco eficientes
La longitud de clave efectiva baja por ataques
meet-in-the-middle
La longitud del bloque se mantiene baja
Se hace necesario buscar un nuevo estándar, con
longitudes de clave y bloque mayores y más eficiente
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
AES (Advanced Encryption Standard)
En 1997 el NIST (USA) convoca una competición para
seleccionar un nuevo cifrador de bloque que sustituya a
DES
15 equipos de todo el mundo presentaron sus propuestas
En 1998 y 1999 se celebraron los congresos donde se
expusieron los criptoanálisis de las propuestas. Se
eligieron 5
En octubre de 2000 se eligió el ganador: Rjindael,
diseñado por los belgas Daemen y Rijmen (pasarı́a a
denominarse AES)
Se reconoció que los 5 candidatos no tenı́an
vulnerabilidades
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Diseño de AES I
Longitud de bloque: 128 bits
Longitud de clave: variable (128, 192 ó 256
bits)
Número de rondas:
10 para clave de 128 bits
12 para clave de 192 bits
14 para clave de 256 bits
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Diseño de AES II
Es una red de sustitución-permutación
Un array de 4x4 bytes llamado estado (state) se va
modificando a lo largo de rondas
El estado inicial es el input del cifrador
En cada ronda se aplican 4 operaciones al estado
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Diseño de AES III
1
AddRoundKey: se genera una subclave de 128 bits a
partir de la clave, se interpreta como un array 4x4 de bytes
y se hace XOR con el estado
2
SubBytes: cada byte del estado se substituye por otro
mediante una S-caja fija para todo el algoritmo
ShiftRows: los bytes de cada fila del estado se desplazan
a la izda
3
0 posiciones en la primera fila
1 posición en la segunda fila
2 posiciones en la tercera fila
3 posiciones en la cuarta fila
4
MixColumns: se multiplica el estado por una matriz 4x4
invertible fija
En la última ronda se sustituye el último paso de
MixColumns por un AddRoundKey adicional
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Seguridad de AES
AES ha sido intensamente criptoanalizado y no se ha
encontrado ninguna vulnerabilidad
Se han conseguido romper algunas implementaciones
(ataques por temporización - Open-SSL)
Actualmente AES se sigue considerando muy seguro y
eficiente
Es libre
Está estandarizado
Buena elección para cualquier protocolo que necesite una
permutación pseudoaleatoria
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Índice
1
Secreto perfecto
2
Cifrado con clave secreta
3
Cifradores bloque
4
Ejemplos: DES, AES y otros
5
Cifradores flujo
Generación de claves (secuencias cifrantes)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Generadores psudoaleatorios
Un generador pseudoaleatorio es un algoritmo
determinista que corre en tiempo polinomial
Para cada entrada s ∈ {0, 1}n devuelve una secuencia de
bits G(s) de longitud l(n). La función l recibe el nombre de
factor de expansión
¿Cómo se implementan? (ver final del capı́tulo)
¿Cómo qué se utilizan?
Gen(1n ) elige k ← {0, 1}n
Dado m ∈ {0, 1}l(n)
Enck (m) = G(k) ⊕ m
Dado c ∈ {0, 1}l(n)
Deck (c) = G(k) ⊕ c
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de flujo I
Cifradores de bloque de longitud 1
La transformación para codificar sı́mbolos del texto en
claro puede cambiar dinámicamente
Sea K el espacio de claves para las transformaciones al
codificar. Se llamará flujo de clave (keystream) a la
secuencia de sı́mbolos k1 k2 k3 ...ki
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de flujo II
Definición de cifrador de flujo
Sea A un alfabeto de q sı́mbolos y Enck un cifrador simple de
sustitución de longitud de bloque 1, donde k ∈ K. Sea m1 m2 m3 ...
un texto en claro y k1 k2 k3 ... un flujo de claves de K. Un cifrador
de flujo toma el texto en claro y produce un texto cifrado
c1 c2 c3 ... donde ci ∈ Encki (mi )
Aplica cifrado simple de acuerdo al flujo de claves usado
¿Cómo crear el flujo de claves?
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Cifradores de flujo III
Ejemplo: cifrador de Vernam
Es un cifrador de flujo definido sobre el alfabeto A = {0, 1}. A un
mensaje binario m1 m2 ...ml le será aplicado una clave binaria
k1 k2 ...kl para generar un texto cifrado c1 c2 ...cl donde
ci = mi ⊕ ki , 1 ≤ i ≤ l
Si la clave se elige aleatoriamente y no se vuelve a usar,
este cifrador se llama one-time pad
Simple y fácil de implementar
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores de flujo IV
Ejemplo de cifrador de Vernam: RC4
Ejemplo
M = BYTES K = VERNAM
Solución:
B ⊕ V = 11001 ⊕ 11110 = 00111 = U
Y ⊕ E = 10101 ⊕ 00001 = 10100 = H
T ⊕ R = 10000 ⊕ 01010 = 11010 = G
E ⊕ N = 00001 ⊕ 01100 = 01101 = F
S ⊕ A = 00101 ⊕ 00011 = 00110 = I
Se usa en protocolos tales como: TLS/SSL (tráfico en
Internet seguro) o WEP (seguridad en Redes
Inalámbricas)
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Múltiples cifrados
El cifrado en flujo no se mantiene seguro cuando se usa
varias veces con la misma clave
Problema: es determinista. Se detecta, por ejemplo,
cuando se envı́a un mensaje dos veces
Solución (aproximación al cifrador seguro de Vernam):
1
Secuencias cifrantes
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Generación de claves I
Una clave k se puede generar de diversas
maneras
1
Generadores de números aleatorios (RNGs)
Generadores hardware
Generadores software
2
Mediante funciones hash (funciones de una
dirección)
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Generadores pseudoaleatorios I
Hardware
Parámetros poco o nada predecibles
(temperatura, humedad, potencia de la
baterı́a, ...)
Secuencias de números basadas en ruido
Construidos con diodos y amplificadores
Futuro → generadores cuánticos
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Generadores pseudoaleatorios I
Software
Funciones que, partir de una semilla (seed), generan una
secuencia de valores
Suelen estar basados en congruencias numéricas que
siguen el siguiente patrón:
xi = a · xi−1 + c mod n, con x0 , a, c < m
m representa el espacio de valores (espacio de claves)
x0 es la semilla
Importante
A partir de una misma semilla siempre se genera la misma
secuencia de valores
Ciclos de valores lo más largos posibles
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Generadores pseudoaleatorios II
Software
Para alcanzar amplitud máxima:
1
Si c 6= 0:
MCD(c, m) = 1
a = 1 mod p para cada factor primo p de m
a = 1 mod 4 si 4 es divisor de m
2
Si c = 0:
m es primo
am−a/p = 1 mod m
Cifradores flujo
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Generadores pseudoaleatorios III
Software
Ejercicio
Calcular valores de a para las configuraciones de generación
de números aleatorios siguientes:
1
m = 32, x0 = 1, c = 3
2
m = 33, x0 = 3, c = 0
3
m = 17, x0 = 5, c = 12
4
m = 3, x0 = 5, c = 7
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash I
Se utilizan funciones hash en una dirección a partir de
contraseñas o frases (usualmente más cortas que la
longitud de clave)
Contraseña
o
passphrase
n bits
Función
hash
m bits
k
Toman como entrada un mensaje de longitud variable y lo
transforman en uno de longitud fija
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash II
MD5 → 128 bits
SHA1 → 160 bits
Problema: cómo elegir la contraseña o frase
Los adversarios ”recuerdan” los códigos o resúmenes de
contraseñas simples:
MD5(00 password00 ) = 5f4dcc3b5aa765d61d8327deb882cf99
Solución: mezclar con algunos bits aleatorios y hacer
re-hash varias veces
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash III
Ejemplo 1
Longitud de clave para el algoritmo de cifrado: 128 bits
Contraseña del usuario para cifrar: ”abc” (Hex: 61 62 63).
Utilizando una conversión directa obtendrı́amos:
61 62 63 00 00 00 00 00 00 00 00 00 00 00 00 00
Sólo usamos 24 de 128 bits posibles (¡¡¡No es muy
seguro!!!). Si utilizamos una función hash (p. ej. MD5)
obtenemos:
90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash IV
Si hacemos re-hash
AF 5D A9 F4 5A F7 A3 00 E3 AD ED 97 2F 8F F6 87
A pesar de la debilidad de la clave el código generado se
puede usar como clave para el cifrado
¿Si queremos una clave de 64 bits? ¿O una de 256 bits?
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash V
Ejemplo 2
Cómo mejorar el método anterior: salt + stretching +
contador de iteraciones
Contraseña del usuario: ”abc”
Salt (p. ej. 64 bits): 78 57 8E 5A 5D 63 CB 06
Contador de iteraciones = 1000
P||S = 61 62 63 78 57 8E 5A 5D 63 CB 06
H(1) = MD5(P||S) = 0E8BAAEB3CED73CBC9BF4964F321824A
H(2) = MD5(H(1)) = 1F0554E6F8810739258C9ABC60A782D5
H(3) = MD5(H(2)) = ABA6FEDB4AD3EFAE8180364E617D9D79
...
H(1000) = MD5(H(999)) =
8FD6158BFE81ADD961241D8E4169D411
Secreto perfecto
Cifrado con clave secreta
Cifradores bloque
Ejemplos: DES, AES y otros
Cifradores flujo
Contraseñas y Funciones hash VI
8FD6158BFE81ADD961241D8E4169D411 será la
clave para el algoritmo de cifrado
La próxima vez usamos la misma clave pero distinto
salt y distinto contador de iteraciones →
generará claves distintas
Este algoritmo se conoce como PBKDF1
Es necesario poder enviar el salt y el contador de
iteraciones a la otra parte, para que sea capaz de
generar una misma clave. ¿En claro?
Descargar