CRIPTOGRAFÍA Y SEGURIDAD

EN

COMPUTADORES

Versi ón 4-0.9.0

27 de mayo de 2011

MANUEL JOS É LUCENA L ÓPEZ

UNIVERSIDAD DE JA ÉN

2

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3

—¿Qué significa habla, amigo y entra? —pregunt ó Merry.

—Es bastante claro —dijo Gimli—. Si eres un amigo, dices la contrase ˜na y las puertas se abren

y puedes entrar.

—S´ı —dijo Gandalf—, es probable que estas puertas estén gobernadas por palabras. . .

J.R.R. Tolkien, El Se ˜nor de Los Anillos

Yo segu´ıa sin entender. De pronto, tuve una iluminaci ón:

—¡Super thronos viginti quatuor! ¡La inscripci ón! ¡Las palabras grabadas sobre el espejo!

—¡Vamos! —dijo Guillermo—. ¡Quizás a ún estemos a tiempo de salvar una vida!

Umberto Eco, El Nombre de la Rosa

—¿Y qué? —pregunt ó un visitante de Washington—. ¿Qué significan otros n úmeros primos

más?

—Tal vez significa que nos están enviando un dibujo. Este mensaje está compuesto por una

enorme cantidad de bits de informaci ón. Supongamos que esa cantidad es el producto de tres

n úmeros más peque ˜nos (. . . ). Entonces, el mensaje tendr´ıa tres dimensiones.

Carl Sagan, Contact

En la pantalla se formaban y volv´ıan a formarse dibujos de hielo mientras él tanteaba en

busca de brechas, esquivaba las trampas más obvias y trazaba la ruta que tomar´ıa a través

del hielo de la Senso/Red.

William Gibson, Neuromante

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

4

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5

Aviso Importante

Este libro está en constante evoluci ón. Por ello, le aconsejo que consulte la siguien-

te página web:

http://wwwdi.ujaen.es/∼mlucena/lcripto.html

En ella podrá:

Si no dispone de los archivos .sig correspondientes, verificar la firma digital

del libro.

Consultar la Fe de Erratas.

Descargar la última versi ón.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

6

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7

Reconocimiento-NoComercial 2.5 Espa ˜na

Usted es libre de:

copiar, distribuir y comunicar p úblicamente la obra.

hacer obras derivadas.

Bajo las condiciones siguientes:

Reconocimiento. Debe reconocer los créditos de la obra de la manera

especificada por el autor o el licenciador (pero no de una manera que

sugiera que tiene su apoyo o apoyan el uso que hace de su obra).

No comercial. No puede utilizar esta obra para fines comerciales.

Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la

licencia de esta obra.

Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del

titular de los derechos de autor.

Nada en esta licencia menoscaba o restringe los derechos morales del autor.

Los derechos derivados de usos leg´ıtimos u otras limitaciones reconocidas por ley

no se ven afectados por lo anterior.

Esto es un resumen legible por humanos del texto legal (la licencia completa)

disponible en la siguiente direcci ón:

http://creativecommons.org/licenses/by-nc/2.5/es/legalcode.es

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

8

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Agradecimientos

A mis alumnos, por aguantarme cada a ˜no.

A Borja Arberas, Jordi Barnes, Alejandro Benabén, Manuel Cátedra, Jes ús Cea,

Dextar, Gabriel Horacio D´ıez, Luis Escánez, Lázaro Escudero, Silvia Fandi ˜no, Sacha

Fuentes, Antonio J. Galisteo, Carlos Garc´ıa, David Garc´ıa, Luis Garc´ıa, Alfonso

González, Germán Jácome, Juen Juen, Mart´ın Knoblauch, Jorge Iglesias, Inkel,

Ignacio Llatser, Daniel Lombra ˜na, Juan Mart´ın, Nicolás Mendia, Ana Celia Molina,

Javier Nieto, Juan Andrés Olmo, Juan Ram ón Moral, Antonio Jes ús Navarro,

Alejandro Noguera, José A. Ramos, Carlos Romeo, Roberto Romero, Javier Rubio,

Juan José Ruiz, Miguel Sánchez, Felipe Santos, Pablo Teller´ıa, Manuel Vázquez,

Rafael Vendrell, V´ıctor A. Villagra, y a todos aquellos que, enviando sugerencias o

correcciones, han ayudado a mejorar esta obra.

A todos los que alguna vez han compartido sus conocimientos, por enriquecernos a

todos.

A todos los que durante todo este tiempo me han animado a seguir trabajando en

esta obra.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Índice general

I

Preliminares

21

1. Introducci ón

23

1.1. C ómo Leer esta Obra . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

1.2. Algunas notas sobre la Historia de la Criptograf´ıa . . . . . . . . . . . .

24

1.3. N úmeros Grandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

1.4. Acerca de la Terminolog´ıa Empleada . . . . . . . . . . . . . . . . . . . .

29

1.5. Notaci ón Algor´ıtmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

29

2. Conceptos Básicos

31

2.1. Criptograf´ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

31

2.2. Criptosistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.3. Esteganograf´ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

2.4. Criptoanálisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

2.5. Compromiso entre Criptosistema y Criptoanálisis . . . . . . . . . . . .

36

2.6. Seguridad en Sistemas Informáticos . . . . . . . . . . . . . . . . . . . .

37

2.6.1. Tipos de Autentificaci ón . . . . . . . . . . . . . . . . . . . . . . .

39

II

Fundamentos Te óricos de la Criptograf´ıa

41

3. Teor´ıa de la Informaci ón

43

3.1. Cantidad de Informaci ón . . . . . . . . . . . . . . . . . . . . . . . . . . .

43

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12

ÍNDICE GENERAL

3.2. Entrop´ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

45

3.3. Entrop´ıa Condicionada . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

3.4. Cantidad de Informaci ón entre dos Variables . . . . . . . . . . . . . . .

48

3.5. Criptosistema Seguro de Shannon . . . . . . . . . . . . . . . . . . . . .

49

3.6. Redundancia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

50

3.7. Desinformaci ón y Distancia de Unicidad . . . . . . . . . . . . . . . . .

52

3.8. Confusi ón y Difusi ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

3.9. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

3.10. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

57

4. Complejidad Algor´ıtmica

59

4.1. Concepto de Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

4.2. Complejidad Algor´ıtmica . . . . . . . . . . . . . . . . . . . . . . . . . .

61

4.2.1. Operaciones Elementales . . . . . . . . . . . . . . . . . . . . . . .

62

4.3. Algoritmos Polinomiales, Exponenciales y Subexponenciales . . . . . .

63

4.4. Clases de Complejidad . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

4.5. Algoritmos Probabil´ısticos . . . . . . . . . . . . . . . . . . . . . . . . . .

65

4.6. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

5. Aritmética Modular

69

5.1. Concepto de Aritmética Modular . . . . . . . . . . . . . . . . . . . . . .

69

5.1.1. Algoritmo de Euclides . . . . . . . . . . . . . . . . . . . . . . . .

71

5.1.2. Complejidad de las Operaciones Aritméticas en Zn . . . . . . .

72

5.2. Cálculo de Inversas en Zn . . . . . . . . . . . . . . . . . . . . . . . . . .

72

5.2.1. Existencia de la Inversa . . . . . . . . . . . . . . . . . . . . . . .

72

5.2.2. Funci ón de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

5.2.3. Algoritmo Extendido de Euclides . . . . . . . . . . . . . . . . .

74

5.3. Teorema Chino del Resto . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

5.4. Exponenciaci ón. Logaritmos Discretos . . . . . . . . . . . . . . . . . . .

77

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE GENERAL

13

5.4.1. Algoritmo Rápido de Exponenciaci ón . . . . . . . . . . . . . . .

77

5.4.2. El Problema de los Logaritmos Discretos . . . . . . . . . . . . .

78

5.4.3. El Problema de Diffie-Hellman . . . . . . . . . . . . . . . . . . .

78

5.5. Importancia de los N úmeros Primos . . . . . . . . . . . . . . . . . . . .

79

5.6. Algoritmos de Factorizaci ón . . . . . . . . . . . . . . . . . . . . . . . . .

80

5.6.1. Método de Fermat . . . . . . . . . . . . . . . . . . . . . . . . . .

81

5.6.2. Método p − 1 de Pollard . . . . . . . . . . . . . . . . . . . . . . .

81

5.6.3. Métodos Cuadráticos de Factorizaci ón . . . . . . . . . . . . . . .

82

5.7. Tests de Primalidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

5.7.1. Método de Lehmann . . . . . . . . . . . . . . . . . . . . . . . . .

84

5.7.2. Método de Rabin-Miller . . . . . . . . . . . . . . . . . . . . . . .

85

5.7.3. Consideraciones Prácticas . . . . . . . . . . . . . . . . . . . . . .

85

5.7.4. Primos fuertes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

5.8. Anillos de Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . .

86

5.8.1. Polinomios en Zn . . . . . . . . . . . . . . . . . . . . . . . . . . .

88

5.9. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

5.10. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

92

6. Curvas El´ıpticas en Criptograf´ıa

93

6.1. Curvas El´ıpticas en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

94

6.1.1. Suma en E(R) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95

6.2. Curvas El´ıpticas en GF (n) . . . . . . . . . . . . . . . . . . . . . . . . . .

97

6.3. Curvas El´ıpticas en GF (2n) . . . . . . . . . . . . . . . . . . . . . . . . .

97

6.3.1. Suma en E(GF (2n)) . . . . . . . . . . . . . . . . . . . . . . . . .

98

6.4. El Problema de los Logaritmos Discretos en Curvas El´ıpticas . . . . . .

98

6.5. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

99

6.6. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

7. Aritmética Entera de M últiple Precisi ón

103

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

14

ÍNDICE GENERAL

7.1. Representaci ón de enteros largos . . . . . . . . . . . . . . . . . . . . . . 103

7.2. Operaciones aritméticas sobre enteros largos . . . . . . . . . . . . . . . 104

7.2.1. Suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

7.2.2. Resta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

7.2.3. Producto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

7.2.4. Divisi ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

7.3. Aritmética modular con enteros largos . . . . . . . . . . . . . . . . . . . 113

7.4. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

7.5. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

8. Criptograf´ıa y N úmeros Aleatorios

115

8.1. Tipos de Secuencias Aleatorias . . . . . . . . . . . . . . . . . . . . . . . . 116

8.1.1. Secuencias estad´ısticamente aleatorias . . . . . . . . . . . . . . . 116

8.1.2. Secuencias criptográficamente aleatorias . . . . . . . . . . . . . 117

8.1.3. Secuencias totalmente aleatorias . . . . . . . . . . . . . . . . . . 117

8.2. Utilidad de las secuencias aleatorias en Criptograf´ıa . . . . . . . . . . . 117

8.3. Generaci ón de Secuencias Aleatorias Criptográficamente Válidas . . . 118

8.3.1. Obtenci ón de Bits Aleatorios . . . . . . . . . . . . . . . . . . . . 119

8.3.2. Eliminaci ón del Sesgo . . . . . . . . . . . . . . . . . . . . . . . . 121

8.3.3. Generadores Aleatorios Criptográficamente Seguros . . . . . . 122

III

Algoritmos Criptográficos

125

9. Criptograf´ıa Clásica

127

9.1. Algoritmos Clásicos de Cifrado . . . . . . . . . . . . . . . . . . . . . . . 128

9.1.1. Cifrados de Sustituci ón . . . . . . . . . . . . . . . . . . . . . . . 128

9.1.2. Cifrados de Transposici ón . . . . . . . . . . . . . . . . . . . . . . 131

9.2. Máquinas de Rotores. La Máquina ENIGMA . . . . . . . . . . . . . . . 132

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE GENERAL

15

9.2.1. Un poco de Historia . . . . . . . . . . . . . . . . . . . . . . . . . 133

9.2.2. Consideraciones Te óricas Sobre la Máquina ENIGMA . . . . . . 135

9.2.3. Otras Máquinas de Rotores . . . . . . . . . . . . . . . . . . . . . 136

9.3. El Cifrado de Lorenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

9.3.1. Consideraciones Te óricas sobre el Cifrado de Lorenz . . . . . . 138

9.4. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

10. Cifrados por Bloques

141

10.1. Introducci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

10.1.1. Redes de Feistel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

10.1.2. Cifrados con Estructura de Grupo . . . . . . . . . . . . . . . . . 144

10.1.3. S-Cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

10.2. El Algoritmo DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

10.2.1. Claves Débiles en DES . . . . . . . . . . . . . . . . . . . . . . . . 147

10.3. Variantes de DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

10.3.1. DES M últiple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

10.3.2. DES con Subclaves Independientes . . . . . . . . . . . . . . . . . 149

10.3.3. DES Generalizado . . . . . . . . . . . . . . . . . . . . . . . . . . 149

10.3.4. DES con S-Cajas Alternativas . . . . . . . . . . . . . . . . . . . . 150

10.4. El algoritmo IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

10.5. El algoritmo Rijndael (AES) . . . . . . . . . . . . . . . . . . . . . . . . . 152

10.5.1. Estructura de AES . . . . . . . . . . . . . . . . . . . . . . . . . . 153

10.5.2. Elementos de AES . . . . . . . . . . . . . . . . . . . . . . . . . . 153

10.5.3. Las Rondas de AES . . . . . . . . . . . . . . . . . . . . . . . . . . 155

10.5.4. Cálculo de las Subclaves . . . . . . . . . . . . . . . . . . . . . . . 157

10.5.5. Seguridad de AES . . . . . . . . . . . . . . . . . . . . . . . . . . 159

10.6. Modos de Operaci ón para Algoritmos de Cifrado por Bloques . . . . . 159

10.6.1. Modo ECB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

16

ÍNDICE GENERAL

10.6.2. Modo CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

10.6.3. Modo CFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

10.6.4. Otros Modos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

10.7. Criptoanálisis de Algoritmos de cifrado por Bloques . . . . . . . . . . . 163

10.7.1. Criptoanálisis Diferencial . . . . . . . . . . . . . . . . . . . . . . 163

10.7.2. Criptoanálisis Lineal . . . . . . . . . . . . . . . . . . . . . . . . . 164

10.7.3. Criptoanálisis Imposible . . . . . . . . . . . . . . . . . . . . . . . 164

11. Cifrados de Flujo

167

11.1. Secuencias Pseudoaleatorias . . . . . . . . . . . . . . . . . . . . . . . . . 168

11.2. Tipos de Generadores de Secuencia . . . . . . . . . . . . . . . . . . . . . 168

11.2.1. Generadores S´ıncronos . . . . . . . . . . . . . . . . . . . . . . . . 168

11.2.2. Generadores As´ıncronos . . . . . . . . . . . . . . . . . . . . . . . 169

11.3. Registros de Desplazamiento Retroalimentados . . . . . . . . . . . . . . 170

11.3.1. Registros de Desplazamiento Retroalimentados Lineales . . . . 171

11.3.2. Registros de Desplazamiento Retroalimentados No Lineales . . 171

11.3.3. Combinaci ón de Registros de Desplazamiento . . . . . . . . . . 172

11.4. Otros Generadores de Secuencia . . . . . . . . . . . . . . . . . . . . . . 173

11.4.1. Cifrados por Bloques en Modo OFB . . . . . . . . . . . . . . . . 173

11.4.2. Algoritmo RC4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

11.4.3. Algoritmo SEAL . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

12. Cifrados Asimétricos

177

12.1. Aplicaciones de los Algoritmos Asimétricos . . . . . . . . . . . . . . . . 178

12.1.1. Protecci ón de la Informaci ón . . . . . . . . . . . . . . . . . . . . 178

12.1.2. Autentificaci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178

12.2. Ataques de Intermediario . . . . . . . . . . . . . . . . . . . . . . . . . . 180

12.3. El Algoritmo RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

12.3.1. Seguridad del Algoritmo RSA . . . . . . . . . . . . . . . . . . . 184

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE GENERAL

17

12.3.2. Vulnerabilidades de RSA . . . . . . . . . . . . . . . . . . . . . . 185

12.4. Otros Algoritmos Asimétricos . . . . . . . . . . . . . . . . . . . . . . . . 188

12.4.1. Algoritmo de Diffie-Hellman . . . . . . . . . . . . . . . . . . . . 188

12.4.2. Algoritmo de ElGamal . . . . . . . . . . . . . . . . . . . . . . . . 189

12.4.3. Algoritmo de Rabin . . . . . . . . . . . . . . . . . . . . . . . . . 190

12.4.4. Algoritmo DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

12.5. Criptograf´ıa de Curva El´ıptica . . . . . . . . . . . . . . . . . . . . . . . . 192

12.5.1. Cifrado de ElGamal sobre Curvas El´ıpticas . . . . . . . . . . . . 193

12.6. Ejercicios Resueltos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

13. Funciones Resumen

195

13.1. Propiedades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

13.2. Longitud Adecuada para una Signatura . . . . . . . . . . . . . . . . . . 196

13.3. Estructura de una Funci ón MDC . . . . . . . . . . . . . . . . . . . . . . 197

13.4. Algoritmo MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

13.5. Algoritmo SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

13.6. Seguridad de las Funciones MDC . . . . . . . . . . . . . . . . . . . . . . 203

13.7. Funciones de Autentificaci ón de Mensaje . . . . . . . . . . . . . . . . . 204

14. Esteganograf´ıa

207

14.1. Métodos Esteganográficos . . . . . . . . . . . . . . . . . . . . . . . . . . 208

14.1.1. En archivos de texto . . . . . . . . . . . . . . . . . . . . . . . . . 208

14.1.2. En archivos multimedia . . . . . . . . . . . . . . . . . . . . . . . 209

14.2. Detecci ón de mensajes esteganografiados . . . . . . . . . . . . . . . . . 213

15. Pruebas de Conocimiento Cero

215

15.1. Introducci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

15.2. Elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

15.3. Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

18

ÍNDICE GENERAL

15.4. Modos de Operaci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

15.5. Conocimiento Cero sobre Grafos . . . . . . . . . . . . . . . . . . . . . . 218

15.6. Ataques de Intermediario . . . . . . . . . . . . . . . . . . . . . . . . . . 219

IV

Aplicaciones Criptográficas

221

16. Protocolos de Comunicaci ón Segura

223

16.1. Introducci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

16.2. Protocolos TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

16.3. Protocolo SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

16.4. Protocolo TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

16.5. Protocolos IPsec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

17. Autentificaci ón, Certificados y Firmas Digitales

231

17.1. Introducci ón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

17.2. Firmas Digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

17.3. Certificados Digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

17.3.1. Certificados X.509 . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

17.3.2. Certificados de Revocaci ón . . . . . . . . . . . . . . . . . . . . . 234

17.4. Verificaci ón de Certificados Digitales . . . . . . . . . . . . . . . . . . . . 234

17.4.1. Infraestructuras Jerárquicas . . . . . . . . . . . . . . . . . . . . . 235

17.4.2. Infraestructuras Distribuidas . . . . . . . . . . . . . . . . . . . . 236

17.5. Autentificaci ón Mediante Funciones Resumen . . . . . . . . . . . . . . 237

17.5.1. Autentificaci ón por Contrase ˜nas . . . . . . . . . . . . . . . . . . 237

17.5.2. Autentificaci ón por Desaf´ıo . . . . . . . . . . . . . . . . . . . . . 240

18. PGP

243

18.1. Fundamentos e Historia de PGP . . . . . . . . . . . . . . . . . . . . . . 243

18.2. Estructura de PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE GENERAL

19

18.2.1. Codificaci ón de Mensajes . . . . . . . . . . . . . . . . . . . . . . 244

18.2.2. Firma Digital . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

18.2.3. Armaduras ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . 246

18.2.4. Gesti ón de Claves . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

18.2.5. Distribuci ón de Claves y Redes de Confianza . . . . . . . . . . . 248

18.2.6. Otros PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

18.3. Vulnerabilidades de PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

V

Seguridad en Computadores

253

19. Introducci ón a la Seguridad Informática

255

19.1. Propiedades de la Informaci ón . . . . . . . . . . . . . . . . . . . . . . . 255

19.2. Problemas de los Sistemas de Informaci ón . . . . . . . . . . . . . . . . . 257

19.2.1. Identificaci ón Un´ıvoca de Vulnerabilidades . . . . . . . . . . . . 259

19.3. Tipos de Vulnerabilidades . . . . . . . . . . . . . . . . . . . . . . . . . . 260

19.4. Detecci ón de Vulnerabilidades . . . . . . . . . . . . . . . . . . . . . . . 261

19.5. La Ventana de Exposici ón . . . . . . . . . . . . . . . . . . . . . . . . . . 262

19.6. La Seguridad como Proceso . . . . . . . . . . . . . . . . . . . . . . . . . 264

19.6.1. La seguridad absoluta no existe . . . . . . . . . . . . . . . . . . . 265

19.6.2. Los costes de la seguridad . . . . . . . . . . . . . . . . . . . . . . 266

19.6.3. La seguridad es un proceso, no un producto . . . . . . . . . . . 266

19.7. Pol´ıticas de Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

19.7.1. Pol´ıticas Procesales de Seguridad . . . . . . . . . . . . . . . . . . 268

19.7.2. Pol´ıticas Formales de Seguridad . . . . . . . . . . . . . . . . . . 269

VI

Apéndices

271

A. Criptograf´ıa Cuántica

273

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

20

ÍNDICE GENERAL

A.1. Mecánica Cuántica y Criptograf´ıa . . . . . . . . . . . . . . . . . . . . . . 273

A.2. Computaci ón Cuántica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

A.3. Expectativas de Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

B. Ayudas a la Implementaci ón

277

B.1. DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

B.1.1. S-Cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

B.1.2. Permutaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

B.1.3. Valores de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

B.2. IDEA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

B.3. AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

B.4. MD5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

B.5. SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

Bibliograf´ıa

301

Índice alfabético

303

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte I

Preliminares

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 1

Introducci ón

1.1.

C ómo Leer esta Obra

Esta obra ha sido organizada en seis partes:

1. Preliminares. Aqu´ı se incluyen todos los conceptos básicos y se introduce la ter-

minolog´ıa empleada en el resto del libro. Su lectura es recomendable incluso

para las personas que ya conocen el tema, puesto que puede evitar cierta con-

fusi ón en los términos empleados a lo largo de la obra.

2. Fundamentos Teóricos de la Criptograf´ıa. Se desarrollan brevemente los resultados

te óricos sobre los que se van a apoyar las diferentes técnicas descritas en el

libro. Si usted no domina las Matemáticas, o simplemente no tiene interés en

estos fundamentos, puede pasar estos cap´ıtulos por alto.

3. Algoritmos Criptográficos. Este bloque está dedicado a los algoritmos de cifrado

—simétricos y asimétricos— a las funciones resumen, y en general a las técnicas

que permiten garantizar la seguridad de la informaci ón.

4. Aplicaciones Criptográficas. A lo largo de la segunda parte del libro estudiare-

mos distintas aplicaciones de la Criptograf´ıa, como la comunicaci ón segura, los

certificados digitales, etc.

5. Seguridad en Computadores. El prop ósito de esta secci ón consiste en identificar y

analizar los distintos problemas de seguridad que surgen en redes de compu-

tadores y en sistemas operativos. Se estudiarán diversas técnicas que permiten

resolverlos o, al menos, minimizar los riesgos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

24

1. Introducci ón

6. Apéndices.

Este texto no tiene necesariamente que ser le´ıdo cap´ıtulo por cap´ıtulo, aunque se

ha organizado de manera que los contenidos más básicos aparezcan primero. La parte

de fundamentos te óricos está orientada a personas con unos conocimientos m´ınimos

sobre Álgebra y Programaci ón, pero puede ser ignorada si el lector está dispuesto

a prescindir de las justificaciones matemáticas de lo que encuentre en posteriores

cap´ıtulos. La recomendaci ón del autor en este sentido es clara: si es su primer contac-

to con la Criptograf´ıa, deje los fundamentos te óricos justo para el final, o correrá el

riesgo de perderse entre conceptos que, si de una parte son necesarios para una com-

prensi ón profunda del tema, no son imprescindibles a la hora de empezar a adentrar-

se en este apasionante mundo.

Se ha pretendido que todos los conceptos queden suficientemente claros con la

sola lectura de este libro, pero se recomienda vivamente que si el lector tiene interés

por profundizar en cualquiera de los aspectos tratados aqu´ı, consulte la bibliograf´ıa

para ampliar sus conocimientos, pudiendo emplear como punto de partida las pro-

pias referencias que aparecen al final de este libro, aunque por desgracia, algunas de

las más interesantes están en inglés.

1.2.

Algunas notas sobre la Historia de la Criptograf´ıa

La Criptograf´ıa moderna nace al mismo tiempo que las computadoras. Duran-

te la Segunda Guerra Mundial, en un lugar llamado Bletchley Park, un grupo de

cient´ıficos entre los que se encontraba Alan Turing, trabajaba en el proyecto ULTRA

tratando de descifrar los mensajes enviados por el ejército alemán con los más so-

fisticados ingenios de codificaci ón ideados hasta entonces: la máquina ENIGMA y

el cifrado Lorenz. Este grupo de cient´ıficos dise ˜n ó y utiliz ó el primer computador de

la Historia, denominado Colossus —aunque esta informaci ón permaneci ó en secreto

hasta mediados de los 70—.

Desde entonces hasta hoy ha habido un crecimiento espectacular de la tecnolog´ıa

criptográfica, si bien la mayor parte de estos avances se manten´ıan —y se siguen man-

teniendo, seg ún algunos— en secreto. Financiadas fundamentalmente por la NSA

(Agencia Nacional de Seguridad de los EE.UU.), la mayor parte de las investigacio-

nes hasta hace relativamente poco tiempo han sido tratadas como secretos militares.

Sin embargo, en los últimos a ˜nos, investigaciones serias llevadas a cabo en universi-

dades de todo el mundo han logrado que la Criptograf´ıa sea una ciencia al alcance

de todos, y que se convierta en la piedra angular de asuntos tan importantes como el

comercio electr ónico, la telefon´ıa m óvil, o las nuevas plataformas de distribuci ón de

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

1.2. Algunas notas sobre la Historia de la Criptograf´ıa

25

contenidos multimedia. Esta dualidad civil–militar ha dado lugar a una curiosa doble

historia de la Criptograf´ıa, en la que los mismos algoritmos eran descubiertos, con

pocos a ˜nos de diferencia, por equipos de an ónimos militares y posteriormente por

matemáticos civiles, alcanzando únicamente estos últimos el reconocimiento p úblico

por sus trabajos.

Muchas son las voces que claman por la disponibilidad p ública de la Criptograf´ıa.

La experiencia ha demostrado que la única manera de tener buenos algoritmos es que

éstos sean accesibles, para que puedan ser sometidos al escrutinio de toda la comuni-

dad cient´ıfica. Existe una máxima en Criptograf´ıa que afirma que cualquier persona

—o equipo— es capaz de desarrollar un algoritmo criptográfico que él mismo no sea

capaz de romper. Si la seguridad de nuestro sistema se basa en que nadie conozca su

funcionamiento tiene varias implicaciones perversas: por un lado, aquellos que quie-

ran conocer su verdadera resistencia tendrán que confiar en nuestra palabra, y por

otro, provoca una falsa sensaci ón de seguridad, ya que si alg ún enemigo encuentra un

agujero, es bastante probable que no lo publique. En consecuencia, el único secreto

que debe tener un sistema criptográfico es la clave. Ejemplos a lo largo de la historia

sobre fracasos de esta pol´ıtica de seguridad basada en la oscuridad, por desgracia, hay

muchos, algunos de ellos en ámbitos tan delicados como el Voto Electr ónico.

Salvo honrosas excepciones1, la Criptograf´ıa llega hasta nosotros en forma de pro-

gramas informáticos. Un programa mal dise ˜nado puede echar por tierra la seguridad

de un buen algoritmo criptográfico, por lo que es necesario conocer c ómo está escrito

el programa en cuesti ón, para poder detectar y eliminar los fallos que aparezcan en

él. En este sentido, el Sofware Libre, cuyo c ódigo fuente está a disposici ón de los usua-

rios —a diferencia del software privativo, que mantiene el c ódigo fuente en secreto—

quizás sea el que brinda mejores resultados, ya que permite a cualquiera, además de

asegurarse de que no contiene puertas traseras, estudiar y eventualmente corregir el

c ódigo si encuentra fallos en él. Actualmente, una de las mayores amenazas sobre el

software libre es la pretensi ón de establecer sistemas de patentes sobre los programas

informáticos, con un claro perjuicio tanto para los usuarios como para las peque ˜nas

empresas frente al poder de las grandes corporaciones. Por desgracia, parece que a

nuestros gobiernos les interesan más los beneficios de las multinacionales que los

intereses de los ciudadanos.

Es imposible desligar la Criptograf´ıa moderna de todas las consideraciones pol´ıti-

cas, filos óficas y morales que suscita. Hoy por hoy, tiene más poder quien más infor-

maci ón controla, por lo que permitir que los ciudadanos empleen técnicas criptográfi-

cas para proteger su intimidad limita de forma efectiva ese poder. Con el pretexto de

la seguridad se están aplicando medidas para ralentizar el acceso de los ciudadanos

1Como el algoritmo Solitaire, desarrollado por Bruce Schneier, para el que únicamente se necesita

papel, lápiz, una baraja y algo de paciencia.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

26

1. Introducci ón

a la Criptograf´ıa fuerte, bien desprestigiando a quienes la usan, bien dificultando por

distintos medios su adopci ón generalizada. Uno de los frentes de debate más llamati-

vos en este sentido es la intenci ón de algunos gobiernos de almacenar todas las claves

privadas de sus ciudadanos, necesarias para firmar digitalmente, y considerar ilegales

aquellas que no estén registradas. Es como pedirnos a todos que le demos a la polic´ıa

una copia de las llaves de nuestra casa. Esta corriente crea una situaci ón extrema-

damente perversa: aquellos que quieren emplear la Criptograf´ıa para usos leg´ıtimos

encuentran dificultades mientras que, por ejemplo, a un traficante de armas le tiene

sin cuidado que sea ilegal usarla, con lo que no se frena su uso delictivo.

Existe un falaz argumento que algunos esgrimen en contra del uso privado de la

Criptograf´ıa, proclamando que ellos nada tienen que ocultar. Estas personas insin úan

que cualquiera que abogue por el uso libre de la Criptograf´ıa es poco menos que un

delincuente, y que la necesita para encubrir sus cr´ımenes. En ese caso, ¿por qué esas

personas que no tienen nada que ocultar no env´ıan todas sus cartas en tarjetas postales,

para que todos leamos su contenido?, o ¿por qué se molestan si alguien escucha sus

conversaciones telef ónicas? Defender el ámbito de lo privado es un derecho inaliena-

ble de la persona, que en mi opini ón debe prevalecer sobre la obligaci ón que tienen

los estados de perseguir a los delincuentes. Démosle a los gobiernos poder para en-

trometerse en nuestras vidas, y acabarán haciéndolo, no les quepa duda.

Uno de los elementos más polémicos acerca de los ataques indiscriminados a la

intimidad es la red Echelon. Básicamente se trata de una red, creada por la NSA en

1980 —sus precursoras datan de 1952— en colaboraci ón con Gran Breta ˜na, Australia y

Nueva Zelanda, para monitorizar prácticamente todas las comunicaciones electr óni-

cas —teléfono, e-mail y fax principalmente— del planeta, y buscar de manera au-

tomática ciertas palabras clave. La informaci ón obtenida ir´ıa a la NSA, que luego

podr´ıa a su vez brindársela a otros pa´ıses. El pretexto es, nuevamente, la lucha contra

el terrorismo, pero podr´ıa ser empleada tanto para espionaje industrial —como pre-

suntamente ha hecho durante a ˜nos el Gobierno Francés, poniendo a disposici ón de

sus propias compa ˜n´ıas secretos robados a empresas extranjeras—, como para el con-

trol de aquellas personas que pueden representar amenazas pol´ıticas a la estabilidad

de la sociedad moderna. La Uni ón Europea reconoci ó la existencia de Echelon, pero

hasta la fecha nadie ha exigido a ning ún gobierno explicaci ón alguna; es más, parece

que los planes de la U.E. al respecto pasan por el despliegue de su propia red de vi-

gilancia electr ónica, llamada Enfopol. Si bien el proyecto se encuentra paralizado, es

conveniente mantenerse en guardia, especialmente desde que los terribles atentados

del 11 de septiembre de 2001 han propiciado una ola de limitaci ón de las libertades

civiles con el pretexto de la seguridad. Quizás algunos deber´ıan recordar aquella fa-

mosa frase de Benjamin Franklin: “Quienes son capaces de renunciar a la libertad esencial,

a cambio de una seguridad transitoria, no son merecedores de la seguridad ni de la libertad.”

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

1.3. N úmeros Grandes

27

Uno de los logros más importantes de la sociedad humana es la libertad de ex-

presi ón. Naturalmente, lo ideal ser´ıa que todos pudiéramos expresar nuestros pen-

samientos con total libertad, y que cada cual se hiciera responsable de sus palabras.

Sin embargo, todos sabemos que hay situaciones, incluso en ámbitos en los que su-

puestamente se respeta la libertad de expresi ón, en los que ciertas afirmaciones in-

convenientes o pol´ıticamente incorrectas pueden dar lugar a represalias. Es necesario,

por tanto, para poder garantizar la libertad, poder garantizar también el anonimato.

También es una cuesti ón de higiene otorgar menos crédito a aquellas cosas que se di-

cen bajo el paraguas del anonimato, pero ser´ıa peor no disponer de esa posibilidad.

En este sentido la Criptograf´ıa, combinada con otras técnicas, es la única tecnolog´ıa

que puede permitirnos llegar a garantizar niveles razonables de anonimato. Después

de todo, como dijo Thomas Jefferson, “es preferible estar expuesto a los inconvenientes

que surgen de un exceso de libertad que a los que provienen de una falta de ella.”

No cabe duda de que la informaci ón se está convirtiendo en la mayor fuente de

poder que ha conocido la Humanidad, y que la Criptograf´ıa es una herramienta esen-

cial para su control. Es necesario, pues, que los ciudadanos de a pie conozcan sus

ventajas e inconvenientes, sus peligros y leyendas. Dicen que vivimos en Democracia

pero, si a la gente no se le muestra toda la informaci ón relevante de manera honesta e

imparcial, ¿c ómo va a poder decidir su futuro? Esta obra pretende poner su peque ˜no

granito de arena en ese sentido.

1.3.

N úmeros Grandes

Los algoritmos criptográficos emplean claves con un elevado n úmero de bits, y

usualmente se mide su calidad por la cantidad de esfuerzo que se necesita para rom-

perlos. El tipo de ataque más simple es la fuerza bruta, que simplemente trata de ir

probando una a una todas las claves. Por ejemplo, el algoritmo DES tiene 256 posibles

claves. ¿Cuánto tiempo nos llevar´ıa probarlas todas si, pongamos por caso, dispu-

siéramos de un computador capaz de hacer un mill ón de operaciones por segundo?

Tardar´ıamos. . . ¡más de 2200 a ˜nos! Pero ¿y si la clave del ejemplo anterior tuviera 128

bits? El tiempo requerido ser´ıa de 1024 a ˜nos.

Es interesante dedicar un apartado a tratar de fijar en nuestra imaginaci ón la mag-

nitud real de este tipo de n úmeros. En el cuadro 1.1 podemos observar algunos va-

lores que nos ayudarán a comprender mejor la auténtica magnitud de muchos de

los n úmeros que veremos en este texto. Observándola podremos apreciar que 1024

a ˜nos es aproximadamente cien billones de veces la edad del universo (y eso con un

ordenador capaz de ejecutar el algoritmo de codificaci ón completo un mill ón de ve-

ces por segundo). Esto nos deber´ıa disuadir de emplear mecanismos basados en la

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

28

1. Introducci ón

Valor

N úmero

Probabilidad de ser fulminado por un rayo (por d´ıa)

1 entre 9.000.000.000 (233)

Probabilidad de ganar la Loter´ıa Primitiva Espa ˜nola

1 entre 13.983.816 (223)

Probabilidad de ganar la Primitiva y caer fulminado

1 entre 256

por un rayo el mismo d´ıa

Tiempo hasta la pr óxima glaciaci ón

14.000 (214) a ˜nos

Tiempo hasta que el Sol se extinga

109 (230) a ˜nos

Edad del Planeta Tierra

109 (230) a ˜nos

Edad del Universo

1010 (234) a ˜nos

N úmero de átomos en el Planeta Tierra

1051 (2170)

N úmero de átomos en el Sol

1057 (2189)

N úmero de átomos en la V´ıa Láctea

1067 (2223)

N úmero de átomos en el Universo (excluyendo mate-

1077 (2255)

ria oscura)

Masa de la Tierra

5,9 × 1024 (282) Kg.

Masa del Sol

2 × 1030 (2100) Kg.

Masa estimada del Universo (excluyendo materia os-

1050 (2166) Kg.

cura)

Volumen de la Tierra

1021 (269) m3

Volumen del Sol

1027 (289) m3

Volumen estimado del Universo

1082 (2272) m3

Cuadro 1.1: Algunos n úmeros grandes

fuerza bruta para reventar claves de 128 bits.

Para manejar la tabla con mayor rapidez, recordemos que un mill ón es aproxima-

damente 220, y que un a ˜no tiene más o menos 224 segundos. Recorrer completamente

un espacio de claves de, por ejemplo, 256 bits a raz ón de un mill ón por segundo

supone 2256−44 = 2212 a ˜nos de cálculo.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

1.4. Acerca de la Terminolog´ıa Empleada

29

1.4.

Acerca de la Terminolog´ıa Empleada

En muchos libros sobre Criptograf´ıa y Seguridad se emplean términos como en-

criptar y desencriptar, adoptados con toda probabilidad del verbo anglosaj ón encrypt.

El lector podrá comprobar que este tipo de expresiones ha sido evitado en el pre-

sente texto, debido a la existencia de palabras perfectamente válidas que pertenecen

al idioma castellano, como son cifrar–descifrar y codificar–decodificar (o descodificar). La

opini ón del autor es que s ólo deben emplearse términos foráneos cuando nuestro ri-

qu´ısimo idioma carezca de expresiones adecuadas para representar las ideas en cues-

ti ón. Esta última es la situaci ón en la que se encuentra la palabra esteganograf´ıa, hispa-

nizaci ón del término inglés steganography —que a su vez proviene del t´ıtulo del libro

‘Steganographia’, escrito por Johannes Trithemius en 1518—. N ótese también que el

término inglés key está traducido indistintamente mediante los vocablos clave o llave,

que consideraremos equivalentes en la mayor´ıa de los casos.

El lector podrá advertir que en este texto aparece el término autentificación, en

lugar de autenticación. Quisiera hacer notar en este punto que ambos términos son

correctos y están recogidos en el Diccionario de la Real Academia, y que aqu´ı el uso

del primero de ellos responde simplemente a una cuesti ón de gustos personales.

1.5.

Notaci ón Algor´ıtmica

En este libro se describen diversos algoritmos de interés en Criptograf´ıa. La no-

taci ón empleada en ellos es muy similar a la del lenguaje de programaci ón C, con

objeto de que sea accesible al mayor n úmero de personas posible. Si usted no conoce

este lenguaje, siempre puede acudir a cualquier tutorial básico para poder entender

los algoritmos de este libro, y después llevar a cabo sus propias implementaciones en

cualquier otro lenguaje de programaci ón. Sin embargo, aunque la notaci ón que uso

es parecida, no es exactamente la misma: all´ı donde el empleo de un C puro pon´ıa

en peligro la claridad en la descripci ón de los algoritmos, me he permitido peque ˜nas

licencias. Tampoco he tenido en cuenta ni mucho menos la eficiencia de tiempo o me-

moria para estos algoritmos, por lo que mi sincero consejo es que no intenten cortar y

pegar para realizar sus propias implementaciones.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

30

1. Introducci ón

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 2

Conceptos Básicos

2.1.

Criptograf´ıa

Seg ún el Diccionario de la Real Academia, la palabra criptograf´ıa proviene de la

uni ón de los términos griegos κρυπτ óς (oculto) y γρ´

αϕιν (escritura), y su definici ón

es: “Arte de escribir con clave secreta o de un modo enigmático”. Obviamente la Cripto-

graf´ıa hace a ˜nos que dej ó de ser un arte para convertirse en una técnica, o más bien

un conglomerado de técnicas, que tratan sobre la protecci ón —ocultamiento frente

a observadores no autorizados— de la informaci ón. Entre las disciplinas que englo-

ba cabe destacar la Teor´ıa de la Informaci ón, la Teor´ıa de N úmeros —o Matemática

Discreta, que estudia las propiedades de los n úmeros enteros—, y la Complejidad

Algor´ıtmica.

Existen dos trabajos fundamentales sobre los que se apoya prácticamente toda

la teor´ıa criptográfica actual. Uno de ellos, desarrollado por Claude Shannon en sus

art´ıculos “A Mathematical Theory of Communication” (1948) y “Communication Theory of

Secrecy Systems” (1949), sienta las bases de la Teor´ıa de la Informaci ón y de la Crip-

tograf´ıa moderna. El segundo, publicado por Whitfield Diffie y Martin Hellman en

1976, se titulaba “New directions in Cryptography”, e introduc´ıa el concepto de Cripto-

graf´ıa Asimétrica, abriendo enormemente el abanico de aplicaci ón de esta disciplina.

Conviene hacer notar que la palabra Criptograf´ıa s ólo hace referencia al uso de

c ódigos, por lo que no engloba a las técnicas que se usan para romper dichos c ódigos,

conocidas en su conjunto como Criptoanálisis. En cualquier caso ambas disciplinas

están ´ıntimamente ligadas; no olvidemos que cuando se dise ˜na un sistema para cifrar

informaci ón, hay que tener muy presente su posible criptoanálisis, ya que en caso

contrario podr´ıamos llevarnos desagradables sorpresas.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

32

2. Conceptos Básicos

Finalmente, el término Criptolog´ıa, aunque no está recogido a ún en el Diccionario,

se emplea habitualmente para agrupar Criptograf´ıa y Criptoanálisis.

2.2.

Criptosistema

Definiremos un criptosistema como una qu´ıntupla (M, C, K, E, D), donde:

M representa el conjunto de todos los mensajes sin cifrar (lo que se denomina

texto claro, o plaintext) que pueden ser enviados.

C representa el conjunto de todos los posibles mensajes cifrados, o criptogra-

mas.

K representa el conjunto de claves que se pueden emplear en el criptosistema.

E es el conjunto de transformaciones de cifrado o familia de funciones que se aplica

a cada elemento de M para obtener un elemento de C. Existe una transforma-

ci ón diferente Ek para cada valor posible de la clave k.

D es el conjunto de transformaciones de descifrado, análogo a E.

Todo criptosistema ha de cumplir la siguiente condici ón:

Dk(Ek(m)) = m

(2.1)

es decir, que si tenemos un mensaje m, lo ciframos empleando la clave k y luego lo

desciframos empleando la misma clave, obtenemos de nuevo el mensaje original m.

Existen dos tipos fundamentales de criptosistemas:

Criptosistemas simétricos o de clave privada. Son aquellos que emplean la misma

clave k tanto para cifrar como para descifrar. Presentan el inconveniente de que

para ser empleados en comunicaciones la clave k debe estar tanto en el emisor

como en el receptor, lo cual nos lleva preguntarnos c ómo transmitir la clave de

forma segura.

Criptosistemas asimétricos o de llave p ública, que emplean una doble clave (kp, kP ).

kp se conoce como clave privada y kP se conoce como clave p ública. Una de ellas

sirve para la transformaci ón E de cifrado y la otra para la transformaci ón D

de descifrado. En muchos casos son intercambiables, esto es, si empleamos una

para cifrar la otra sirve para descifrar y viceversa. Estos criptosistemas deben

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

2.2. Criptosistema

33

cumplir además que el conocimiento de la clave p ública kP no permita calcu-

lar la clave privada kp. Ofrecen un abanico superior de posibilidades, pudien-

do emplearse para establecer comunicaciones seguras por canales inseguros —

puesto que únicamente viaja por el canal la clave p ública—, o para llevar a cabo

autentificaciones.

En la práctica se emplea una combinaci ón de estos dos tipos de criptosistemas,

puesto que los segundos presentan el inconveniente de ser computacionalmente mu-

cho más costosos que los primeros. En el mundo real se codifican los mensajes (largos)

mediante algoritmos simétricos, que suelen ser muy eficientes, y luego se hace uso

de la criptograf´ıa asimétrica para codificar las claves simétricas (cortas).

Claves Débiles

En la inmensa mayor´ıa de los casos los conjuntos M y C definidos anteriormente

son iguales. Esto quiere decir que tanto los textos claros como los textos cifrados se

representan empleando el mismo alfabeto —por ejemplo, cuando se usa el algorit-

mo DES, ambos son cadenas de 64 bits—. Por esta raz ón puede darse la posibilidad

de que exista alg ún k ∈ K tal que Ek(M ) = M , lo cual ser´ıa catastr ófico para nues-

tros prop ósitos, puesto que el empleo de esas claves dejar´ıa todos nuestros mensa-

jes. . . ¡sin codificar!

También puede darse el caso de que ciertas claves concretas generen textos ci-

frados de poca calidad. Una posibilidad bastante com ún en ciertos algoritmos es que

algunas claves tengan la siguiente propiedad: Ek(Ek(M )) = M , lo cual quiere decir

que basta con volver a codificar el criptograma para recuperar el texto claro original.

Estas circunstancias podr´ıan llegar a simplificar enormemente un intento de violar

nuestro sistema, por lo que también habrá que evitarlas a toda costa.

La existencia de claves con estas caracter´ısticas, como es natural, depende en gran

medida de las peculiaridades de cada algoritmo en concreto, y en muchos casos tam-

bién de los parámetros escogidos a la hora de aplicarlo. Llamaremos en general a las

claves que no codifican correctamente los mensajes claves débiles (weak keys en inglés).

Normalmente en un buen criptosistema la cantidad de claves débiles es cero o muy

peque ˜na en comparaci ón con el n úmero total de claves posibles. No obstante, con-

viene conocer esta circunstancia para poder evitar en la medida de lo posible sus

consecuencias.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

34

2. Conceptos Básicos

2.3.

Esteganograf´ıa

La esteganograf´ıa —o empleo de canales subliminales— consiste en ocultar en el

interior de una informaci ón, aparentemente inocua, otro tipo de informaci ón (cifra-

da o no). Este método ha cobrado bastante importancia últimamente debido a que

permite burlar diferentes sistemas de control. Supongamos que un disidente pol´ıtico

quiere enviar un mensaje fuera de su pa´ıs, evitando la censura. Si lo codifica, las auto-

ridades jamás permitirán que el mensaje atraviese las fronteras independientemente

de que puedan acceder a su contenido, mientras que si ese mismo mensaje viaja ca-

muflado en el interior de una imagen digital para una inocente felicitaci ón navide ˜na,

tendrá muchas más posibilidades de llegar a su destino.

2.4.

Criptoanálisis

El criptoanálisis consiste en comprometer la seguridad de un criptosistema. Esto se

puede hacer descifrando un mensaje sin conocer la llave, o bien obteniendo a partir

de uno o más criptogramas la clave que ha sido empleada en su codificaci ón. No se

considera criptoanálisis el descubrimiento de un algoritmo secreto de cifrado; hemos

de suponer por el contrario que los algoritmos siempre son conocidos.

En general el criptoanálisis se suele llevar a cabo estudiando grandes cantidades

de pares mensaje–criptograma generados con la misma clave. El mecanismo que se

emplee para obtenerlos es indiferente, y puede ser resultado de escuchar un canal de

comunicaciones, o de la posibilidad de que el objeto de nuestro ataque responda con

un criptograma cuando le enviemos un mensaje. Obviamente, cuanto mayor sea la

cantidad de pares, más probabilidades de éxito tendrá el criptoanálisis.

Uno de los tipos de análisis más interesantes es el de texto claro escogido, que parte

de que conocemos una serie de pares de textos claros —elegidos por nosotros— y sus

criptogramas correspondientes. Esta situaci ón se suele dar cuando tenemos acceso al

dispositivo de cifrado y éste nos permite efectuar operaciones, pero no nos permite

leer su clave —por ejemplo, las tarjetas de los teléfonos m óviles GSM—. El n úmero de

pares necesarios para obtener la clave desciende entonces significativamente. Cuan-

do el sistema es débil, pueden ser suficientes unos cientos de mensajes para obtener

informaci ón que permita deducir la clave empleada.

También podemos tratar de criptoanalizar un sistema aplicando el algoritmo de

descifrado, con todas y cada una de las claves, a un mensaje codificado que posee-

mos y comprobar cuáles de las salidas que se obtienen tienen sentido como posible

texto claro. En general, todas las técnicas que buscan exhaustivamente por el espacio

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

2.4. Criptoanálisis

35

de claves K se denominan de fuerza bruta, y no suelen considerarse como auténticas

técnicas de criptoanálisis, reservándose este término para aquellos mecanismos que

explotan posibles debilidades intr´ınsecas en el algoritmo de cifrado. En general, se

denomina ataque a cualquier técnica que permita recuperar un mensaje cifrado em-

pleando menos esfuerzo computacional que el que se usar´ıa por la fuerza bruta. Se da

por supuesto que el espacio de claves para cualquier criptosistema digno de interés

ha de ser suficientemente grande como para que los métodos basados en la fuer-

za bruta sean inviables. Hemos de tener en cuenta no obstante que la capacidad de

cálculo de las computadoras crece a gran velocidad, por lo que algoritmos que hace

unos a ˜nos eran resistentes a la fuerza bruta hoy pueden resultar inseguros, como es el

caso de DES. Sin embargo, existen longitudes de clave para las que resultar´ıa imposi-

ble a todas luces, empleando computaci ón tradicional, aplicar un método de este tipo.

Por ejemplo, si dise ˜náramos una máquina capaz de recorrer todas las combinaciones

que pueden tomar 256 bits, cuyo consumo fuera m´ınimo en cada cambio de estado1,

no habr´ıa energ´ıa suficiente en el Universo para que pudiera completar su trabajo.

Un par de métodos de criptoanálisis que han dado interesantes resultados son el

análisis diferencial y el análisis lineal (ver secci ón 10.7, página 163). El primero de ellos, partiendo de pares de mensajes con diferencias m´ınimas —usualmente de un bit—,

estudia las variaciones que existen entre los mensajes cifrados correspondientes, tra-

tando de identificar patrones comunes. El segundo emplea operaciones XOR entre

algunos bits del texto claro y algunos bits del texto cifrado, obteniendo finalmente

un único bit. Si realizamos esto con muchos pares de texto claro–texto cifrado pode-

mos obtener una probabilidad p en ese bit que calculamos. Si p está suficientemente

sesgada (no se aproxima a 1 ), tendremos la posibilidad de recuperar la clave.

2

Otro tipo de análisis, esta vez para los algoritmos asimétricos, consistir´ıa en tra-

tar de deducir la llave privada a partir de la p ública. Suelen ser técnicas anal´ıticas

que básicamente intentan resolver los problemas de elevado coste computacional en

los que se apoyan estos criptosistemas: factorizaci ón, logaritmos discretos, etc. Mien-

tras estos problemas genéricos permanezcan sin soluci ón eficiente, podremos seguir

confiando en estos algoritmos.

La Criptograf´ıa no s ólo se emplea para proteger informaci ón, también se utiliza

para permitir su autentificaci ón, es decir, para identificar al autor de un mensaje e

impedir que nadie suplante su personalidad. En estos casos surge un nuevo tipo de

criptoanálisis que está encaminado únicamente a permitir que elementos falsos pa-

sen por buenos. Puede que ni siquiera nos interese descifrar el mensaje original, sino

simplemente poder sustituirlo por otro falso y que supere las pruebas de autentifica-

ci ón.

1Seg ún las Leyes de la Termodinámica existe una cantidad m´ınima de energ´ıa necesaria para poder

modificar el estado de un sistema f´ısico.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

36

2. Conceptos Básicos

Como se puede apreciar, la gran variedad de sistemas criptográficos produce ne-

cesariamente gran variedad de técnicas de criptoanálisis, cada una de ellas adaptada

a un algoritmo o familia de ellos. Con toda seguridad, cuando en el futuro aparez-

can nuevos mecanismos de protecci ón de la informaci ón, surgirán con ellos nuevos

métodos de criptoanálisis. De hecho, la investigaci ón en este campo es tan importan-

te como el desarrollo de algoritmos criptográficos, y esto es debido a que, mientras

que la presencia de fallos en un sistema es posible demostrarla, su ausencia es por

definici ón indemostrable.

2.5.

Compromiso entre Criptosistema y Criptoanálisis

En la secci ón 3.5 (pág. 49) veremos que pueden existir sistemas idealmente seguros, capaces de resistir cualquier ataque. También veremos que estos sistemas en

la práctica carecen de interés, lo cual nos lleva a tener que adoptar un compromiso

entre el coste del sistema —tanto computacional como de almacenamiento, e incluso

econ ómico— frente a su resistencia a diferentes ataques criptográficos.

La informaci ón posee un tiempo de vida, y pierde su valor transcurrido éste. Los

datos sobre la estrategia de inversiones a largo plazo de una gran empresa, por ejem-

plo, tienen un mayor periodo de validez que la exclusiva period´ıstica de una senten-

cia judicial que se va a hacer p ública al d´ıa siguiente. Será suficiente, pues, tener un

sistema que garantice que el tiempo que se puede tardar en comprometer su seguri-

dad es mayor que el tiempo de vida de la propia informaci ón que éste alberga. Esto

no suele ser fácil, sobre todo porque no tardará lo mismo un oponente que disponga

de una única computadora de capacidad modesta, que otro que emplee una red de

supercomputadores. Por eso también ha de tenerse en cuenta si la informaci ón que

queremos proteger vale más que el esfuerzo de criptoanálisis que va a necesitar, por-

que entonces puede que no esté segura. La seguridad de los criptosistemas se suele

medir en términos del n úmero de computadoras y del tiempo necesarios para rom-

perlos, y a veces simplemente en funci ón del dinero necesario para llevar a cabo esta

tarea con garant´ıas de éxito.

En cualquier caso hoy por hoy existen sistemas que son muy poco costosos —o

incluso gratuitos, como algunas versiones de PGP—, y que nos garantizan un nivel

de protecci ón tal que toda la potencia de cálculo que actualmente hay en el planeta

ser´ıa insuficiente para romperlos.

Tampoco conviene depositar excesiva confianza en el algoritmo de cifrado, pues-

to que en el proceso de protecci ón de la informaci ón existen otros puntos débiles que

deben ser tratados con un cuidado exquisito. Por ejemplo, no tiene sentido emplear

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

2.6. Seguridad en Sistemas Informáticos

37

algoritmos con niveles de seguridad extremadamente elevados si luego escogemos

contrase ˜nas (passwords) rid´ıculamente fáciles de adivinar. Una práctica muy exten-

dida por desgracia es la de escoger palabras clave que contengan fechas, nombres

de familiares, nombres de personajes o lugares de ficci ón, etc. Son las primeras que

un atacante avispado probar´ıa. Tampoco es una práctica recomendable anotarlas o

dec´ırselas a nadie, puesto que si la clave cae en malas manos, todo nuestro sistema

queda comprometido, por buenos que sean los algoritmos empleados.

2.6.

Seguridad en Sistemas Informáticos

Todo sistema que procese, almacene o transmita informaci ón tiene que cumplir

una serie de requisitos. En primer lugar, ha de preservar la informaci ón frente a al-

teraciones tanto fortuitas como deliberadas, debidas a fallos en el software o en el

hardware, provocadas por agentes externos —incendios, interrupciones en el suminis-

tro eléctrico, etc.— o por los propios usuarios. En segundo lugar, es necesario evitar

accesos no autorizados tanto al sistema como a su contenido. Finalmente, el siste-

ma debe garantizar que la informaci ón esté disponible cuando sea necesario. Estos

tres requerimientos quedan recogidos en los conceptos de integridad, confidencialidad

y disponibilidad de la informaci ón respectivamente, y son los que hacen que podamos

considerar seguro a un sistema.

Por lo tanto, garantizar la seguridad de un sistema informático es un objetivo mu-

cho más amplio y complejo que la simple protecci ón de los datos mediante técnicas

criptográficas. De hecho, hemos de tener en cuenta m últiples factores, tanto inter-

nos como externos. En esta secci ón comentaremos algunos de los más relevantes, de

manera no exhaustiva.

Quizás la primera pregunta que haya que responder a la hora de identificar los

requerimientos de seguridad de un sistema sea la siguiente: ¿está conectado con el ex-

terior? En este sentido podemos hacer la siguiente subdivisi ón:

1. Sistemas aislados. Son los que no tienen acceso a ning ún tipo de red. De unos

a ˜nos a esta parte se han convertido en minor´ıa, debido al auge que han expe-

rimentado las redes, especialmente Internet. En ellos suele ser suficiente la im-

plementaci ón de mecanismos de control de acceso f´ısico —cerraduras, videovi-

gilancia, etc.—, junto con protocolos adecuados de gesti ón de los privilegios de

cada usuario, si es que hay más de uno.

2. Sistemas interconectados. Constituyen el caso más general y extendido. De hecho,

hoy por hoy casi cualquier ordenador está conectado a alguna red —y cada vez

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

38

2. Conceptos Básicos

más dispositivos de uso cotidiano son auténticas computadoras: consolas de vi-

deojuegos, teléfonos celulares, reproductores multimedia, etc.—, enviando y re-

cogiendo informaci ón del exterior casi constantemente. Esto hace que las redes

de ordenadores sean cada d´ıa más complejas, y presenten auténticos desaf´ıos

de cara a gestionarlos adecuadamente.

En cuanto a las cuestiones de seguridad propiamente dichas, citaremos algunas

de las más relevantes:

1. Seguridad f´ısica. Englobaremos dentro de esta categor´ıa a todos los asuntos re-

lacionados con la salvaguarda de los soportes f´ısicos de la informaci ón, más

que de la informaci ón propiamente dicha. En este nivel estar´ıan, entre otras,

las medidas contra incendios y sobrecargas eléctricas, la prevenci ón de ataques

terroristas, las pol´ıticas de copias de respaldo (backups), etc. También se suelen

tener en cuenta dentro de este punto aspectos relacionados con la restricci ón

del acceso f´ısico a las computadoras.

2. Seguridad de los canales de comunicación. Los canales de comunicaci ón rara vez se

consideran seguros. Debido a que normalmente escapan a nuestro control, ya

que pertenecen a terceros, resulta imposible asegurarse de que no están siendo

escuchados o intervenidos. En la inmensa mayor´ıa de los casos tendremos que

establecer mecanismos de protecci ón de la informaci ón capaces de cumplir su

cometido en canales manipulados, e incluso hostiles.

3. Control de acceso a los datos. Como ya hemos dicho, un sistema informático debe

permitir acceder a la informaci ón únicamente a agentes autorizados. General-

mente, diferentes usuarios tendrán acceso a distinta informaci ón, por lo que una

simple restricci ón del acceso al sistema no será suficiente, sino que habrá que

establecer privilegios individualizados, as´ı como mecanismos que, como el ci-

frado, permitan preservar la confidencialidad incluso frente a accesos f´ısicos a

los dispositivos de almacenamiento.

4. Autentificación. Para garantizar su correcto funcionamiento, es necesario poder

verificar de forma fiable la autenticidad de los distintos elementos que inter-

act úan en un sistema informático: la informaci ón que se recibe, env´ıa y alma-

cena, los usuarios que acceden a él, y eventualmente los dispositivos que se

comunican con el mismo. En los dos últimos casos, hemos de evitar a toda cos-

ta que se produzcan problemas de suplantación de identidad.

5. No repudio. Cuando se recibe un mensaje no s ólo es necesario poder identificar

de forma un´ıvoca al remitente, sino que éste asuma todas las responsabilidades

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

2.6. Seguridad en Sistemas Informáticos

39

derivadas de la informaci ón que haya podido enviar, por ejemplo en la firma

de un contrato o en una transacci ón comercial. En este sentido es fundamental

impedir que el emisor pueda repudiar un mensaje, es decir, negar su autor´ıa

sobre el mismo.

6. Anonimato. Es, en cierta manera, el concepto opuesto al de no repudio. En de-

terminadas aplicaciones, como puede ser un proceso electoral o la denuncia

de violaciones de los derechos humanos en entornos dictatoriales, es crucial

garantizar el anonimato del ciudadano para poder preservar su intimidad y su

libertad. Sin embargo, el anonimato también puede ser empleado para practicar

actividades delictivas con total impunidad, lo cual lo convierte en una auténtica

arma de doble filo. En cualquier caso, se trata una caracter´ıstica realmente dif´ıcil

de conseguir, y que no goza de muy buena fama, especialmente en pa´ıses donde

prima la seguridad nacional sobre la libertad y la intimidad de los ciudadanos. Si

a eso le sumamos el interés que para muchas empresas tiene conocer los perfiles

de actividad de sus clientes, de cara a personalizar sus ofertas, entenderemos

por qué apenas hay iniciativas serias en la industria para proporcionar servicios

de este tipo.

2.6.1.

Tipos de Autentificaci ón

Como ya se ha dicho, el concepto de autentificaci ón viene asociado a la compro-

baci ón del origen de la informaci ón, y de la identidad de los agentes que interact úan

con un sistema. En general, y debido a los diferentes escenarios que pueden darse,

distinguiremos tres tipos de autentificaci ón:

Autentificaci ón de mensaje. Queremos garantizar la procedencia de un mensa-

je conocido, de forma que podamos asegurarnos de que no es una falsificaci ón.

Este proceso es el que subyace en las firmas digitales, o en los sistemas de creden-

ciales a través de los cuales ciertos elementos de una red se identifican frente a

otros.

Autentificaci ón de usuario mediante contrase ˜na. En este caso se trata de garantizar

la presencia f´ısica de un usuario legal en alg ún punto del sistema. Para ello

deberá hacer uso de una informaci ón secreta —o contrase ˜na—, que le permita

identificarse.

Autentificaci ón de dispositivo. Se trata de garantizar la presencia frente al sistema

de un dispositivo concreto. Este dispositivo puede ser aut ónomo e identificarse

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

40

2. Conceptos Básicos

por s´ı mismo para interactuar con el sistema, o tratarse de una llave electróni-

ca que sustituya o complemente a la contrase ˜na para facilitar la entrada a un

usuario.

N ótese que la autentificaci ón de usuario por medio de alguna caracter´ıstica biométri-

ca, como pueden ser las huellas digitales, la retina, el iris, la voz, etc. puede reducirse

a un problema de autentificaci ón de dispositivo, solo que el dispositivo en este caso es

el propio usuario.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte II

Fundamentos Te óricos de la

Criptograf´ıa

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 3

Teor´ıa de la Informaci ón

Comenzaremos el estudio de los fundamentos te óricos de la Criptograf´ıa dando

una serie de nociones básicas sobre Teor´ıa de la Informaci ón, introducida por Claude

Shannon a finales de los a ˜nos cuarenta. Esta disciplina permite efectuar una aproxi-

maci ón formal al estudio de la seguridad de cualquier algoritmo criptográfico, pro-

porcionando incluso la demostraci ón de que existen sistemas invulnerables frente a

cualquier tipo de ataque, incluso disponiendo de capacidad de computaci ón infinita.

3.1.

Cantidad de Informaci ón

Vamos a introducir este concepto partiendo de su idea intuitiva. Para ello anali-

zaremos el siguiente ejemplo: supongamos que tenemos una bolsa con nueve bolas

negras y una blanca. ¿Cuánta informaci ón obtenemos si alguien nos dice que ha sa-

cado una bola blanca de la bolsa? ¿Y cuánta obtenemos si después saca otra y nos

dice que es negra?

Obviamente, la respuesta a la primera pregunta es que aporta bastante informa-

ci ón, puesto que estábamos casi seguros de que la bola ten´ıa que salir negra. Análoga-

mente si hubiera salido negra dir´ıamos que ese suceso no nos extra ˜na (nos suministra

poca informaci ón). En cuanto a la segunda pregunta, claramente podemos contestar

que el suceso no proporciona ninguna informaci ón, ya que al no quedar bolas blancas

sab´ıamos que iba a salir negra.

Podemos fijarnos en la cantidad de informaci ón como una medida de la disminu-

ci ón de incertidumbre acerca de un suceso. Por ejemplo, si nos dicen que el n úmero

que ha salido en un dado es menor que dos, estamos recibiendo más informaci ón que

si nos dicen que el n úmero que ha salido es par.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

44

3. Teor´ıa de la Informaci ón

Intuitivamente, se puede decir que la cantidad de informaci ón que obtenemos

al observar un suceso crece cuando el n úmero de posibilidades que éste presenta es

mayor. Si existen diez posibilidades, la observaci ón nos proporciona más informaci ón

que si inicialmente tuviéramos dos. Por ejemplo, supone mayor informaci ón conocer

la combinaci ón ganadora del pr óximo sorteo de la Loter´ıa Primitiva, que saber si una

moneda lanzada al aire va a caer con la cara o la cruz hacia arriba. Claramente es más

fácil acertar en el segundo caso, puesto que el n úmero de posibilidades a priori —y

por tanto la incertidumbre, suponiendo sucesos equiprobables— es menor.

También la cantidad de informaci ón es proporcional a la probabilidad de un su-

ceso. En el caso de las bolas pueden pasar dos cosas: sacar bola negra, que es más

probable, y sacar bola blanca, que es menos probable. Sacar una bola negra aumenta

nuestro grado de certeza inicial de un 90 % a un 100 %, proporcionándonos una ganan-

cia del 10 %. Sacar una bola blanca aumenta esa misma certeza en un 90 % —puesto

que partimos de un 10 %—. Podemos considerar la disminuci ón de incertidumbre

proporcional al aumento de certeza, por lo cual diremos que el primer suceso —sacar

bola negra— aporta menos informaci ón.

A partir de ahora, con objeto de simplificar la notaci ón, vamos a emplear una

variable aleatoria V para representar los posibles sucesos que podemos encontrar.

Notaremos el suceso i-ésimo como xi, P (xi) será la probabilidad asociada a dicho

suceso, y n será el n úmero de sucesos posibles.

Supongamos ahora que sabemos con toda seguridad que el único valor que pue-

de tomar V es xi. Saber el valor de V no va a aportar ninguna informaci ón, ya que

lo conocemos de antemano. Por el contrario, si tenemos una certeza del 99 % sobre la

posible ocurrencia de un valor cualquiera xi, el hecho de obtener un xj diferente pro-

porciona bastante informaci ón, como ya hemos visto. Este concepto de informaci ón

es cuantificable y se puede definir de la siguiente forma:

Ii = − log (P (x

2

i))

(3.1)

siendo P (xi) la probabilidad del estado xi. Obsérvese que si la probabilidad de un

estado fuera 1 (máxima), la cantidad de informaci ón que aporta ser´ıa igual a 0, mien-

tras que si su probabilidad se acercara a 0, tender´ıa a +∞ —esto es l ógico, un suceso

que no puede suceder nos aportar´ıa una cantidad infinita de informaci ón si llegara a

ocurrir—.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.2. Entrop´ıa

45

3.2.

Entrop´ıa

Efectuando una suma ponderada de las cantidades de informaci ón de todos los

posibles estados de una variable aleatoria V , obtenemos:

n

n

X

X

1

H(V ) = −

P (xi) log [P (x

P (x

2

i)] =

i) log2

(3.2)

P (xi)

i=1

i=1

Esta magnitud H(V ) se conoce como la entrop´ıa de la variable aleatoria V . Sus

propiedades son las siguientes:

I. 0 ≤ H(V ) ≤ log N

2

II. H(V ) = 0 ⇐⇒ ∃i tal que P (xi) = 1 y P (xj) = 0 ∀j 6= i

III. H(x1, x2 . . . xn) = H(x1, x2 . . . xn, xn+1) si P (xn+1) = 0

Como ejercicio vamos a demostrar la propiedad (I). Para ello emplearemos el Lema

de Gibbs, que dice que dados dos sistemas de n úmeros p1, . . . pn y q1, . . . qn no negati-

vos tales que

n

n

X

X

pi =

qi

i=1

i=1

se verifica que

n

n

X

X

−

pi log (p

p

(q

2

i) ≤ −

i log2

i)

(3.3)

i=1

i=1

Entonces, si tomamos pi = P (xi) y qi = 1 , resulta que

N

n

n

X

X

1

−

pi log (p

p

2

i) ≤ −

i log2

N

i=1

i=1

y por lo tanto

1 n

X

H(X) ≤ − log

p

(N )

2

i = log

N

2

i=1

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

46

3. Teor´ıa de la Informaci ón

Obsérvese que la entrop´ıa es proporcional a la longitud media de los mensajes que

se necesitar´ıa para codificar una serie de valores de V de manera óptima dado un al-

fabeto cualquiera. Esto quiere decir que cuanto más probable sea un valor individual,

aportará menos informaci ón cuando aparezca, y podremos codificarlo empleando un

mensaje más corto. Si P (xi) = 1 no necesitar´ıamos ning ún mensaje, puesto que sabe-

mos de antemano que V va a tomar el valor xi, mientras que si P (xi) = 0,9 parece

más l ógico emplear mensajes cortos para representar el suceso xi y largos para los xj

restantes, ya que el valor que más veces va a aparecer en una secuencia de sucesos es

precisamente xi. Volveremos sobre este punto un poco más adelante.

Veamos unos cuantos ejemplos más:

La entrop´ıa de la variable aleatoria asociada a lanzar una moneda al aire es la

siguiente:

H(M ) = −(0,5 log (0,5) + 0,5 log (0,5)) = 1

2

2

Este suceso aporta exactamente una unidad de informaci ón.

Si la moneda está trucada (60 % de probabilidades para cara, 40 % para cruz), se

obtiene:

H(Mt) = −(0,6 log (0,6) + 0,4 log (0,4)) = 0,970

2

2

Veamos el ejemplo de las bolas (nueve negras y una blanca):

H(B) = −(0,9 log (0,9) + 0,1 log (0,1)) = 0,468

2

2

La cantidad de informaci ón asociada al suceso más simple, que consta únicamen-

te de dos posibilidades equiprobables —como el caso de la moneda sin trucar—,

será nuestra unidad a la hora de medir esta magnitud, y la denominaremos bit. Esta es

precisamente la raz ón por la que empleamos logaritmos base 2, para que la cantidad

de informaci ón del suceso más simple sea igual a la unidad.

Podemos decir que la entrop´ıa de una variable aleatoria es el n úmero medio de

bits que necesitaremos para codificar cada uno de los estados de la variable, supo-

niendo que expresemos cada suceso empleando un mensaje escrito en un alfabeto bi-

nario. Imaginemos ahora que queremos representar los diez d´ıgitos decimales usan-

do secuencias de bits: con tres bits no tenemos suficiente, as´ı que necesitaremos más,

pero ¿cuántos más? Si usamos cuatro bits para representar todos los d´ıgitos tal vez

nos estemos pasando. . . Veamos cuánta entrop´ıa tienen diez sucesos equiprobables:

10

X

1

1

1

H = −

log

= − log

= 3,32bits

10

2

10

2

10

i=1

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.3. Entrop´ıa Condicionada

47

El valor que acabamos de calcular es el l´ımite te órico, que normalmente no se

puede alcanzar. Lo único que podemos decir es que no existe ninguna codificaci ón

que emplee longitudes promedio de mensaje inferiores al n úmero que acabamos de

calcular. Veamos la siguiente codificaci ón: 000 para 0, 001 para 1, 010 para 2, 011 para

3, 100 para 4, 101 para 5 ,1100 para 6, 1101 para 7, 1110 para 8, y 1111 para 9. Con esta

codificaci ón empleamos, como media

3 · 6 + 4 · 4 = 3,4bits

10

para representar cada mensaje. N ótese que este esquema permite codificar una se-

cuencia de n úmeros por simple yuxtaposici ón, sin ambig üedades, por lo que no ne-

cesitaremos s´ımbolos que act úen de separadores, ya que éstos alargar´ıan la longitud

media de los mensajes. El denominado Método de Huffman, uno de los más utilizados

en transmisi ón de datos, permite obtener codificaciones binarias que se aproximan

bastante al óptimo te órico de una forma sencilla y eficiente.

3.3.

Entrop´ıa Condicionada

Supongamos que tenemos ahora una variable aleatoria bidimensional (X, Y ). Re-

cordemos las distribuciones de probabilidad más usuales que podemos definir sobre

dicha variable, teniendo n posibles casos para X y m para Y :

1. Distribuci ón conjunta de (X, Y ):

P (xi, yj)

2. Distribuciones marginales de X e Y :

m

n

X

X

P (xi) =

P (xi, yj)

P (yj) =

P (xi, yj)

j=1

i=1

3. Distribuciones condicionales de X sobre Y y viceversa:

P (x

P (x

P (x

i, yj )

i, yj )

i/yj ) =

P (yj/xi) =

P (yj)

P (xi)

Definiremos la entrop´ıa de las distribuciones que acabamos de referir:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

48

3. Teor´ıa de la Informaci ón

n

m

X X

H(X, Y ) = −

P (xi, yj) log (P (x

2

i, yj ))

i=1 j=1

n

X

H(X/Y = yj) = −

P (xi/yj) log (P (x

2

i/yj ))

i=1

Haciendo la suma ponderada de los H(X/Y = yj) obtenemos la expresi ón de la

Entrop´ıa Condicionada de X sobre Y :

n

m

X X

H(X/Y ) = −

P (yj)P (xi/yj) log (P (x

2

i/yj )) =

i=1 j=1

n

m

X X

= −

P (xi, yj) log (P (x

2

i/yj ))

(3.4)

i=1 j=1

As´ı como existe una Ley de la Probabilidad Total, análogamente se define la Ley de

Entrop´ıas Totales:

H(X, Y ) = H(X) + H(Y /X)

(3.5)

cumpliéndose además, si X e Y son variables independientes:

H(X, Y ) = H(X) + H(Y )

(3.6)

Teorema de Disminución de la Entrop´ıa: La entrop´ıa de una variable X condicionada

por otra Y es menor o igual a la entrop´ıa de X, alcanzándose la igualdad si y s ólo si

las variables X e Y son independientes.

Este teorema representa una idea intuitiva bien clara: conocer algo acerca de la

variable Y puede que nos ayude a saber más sobre X —lo cual se deber´ıa traducir

en una reducci ón de su entrop´ıa—, pero en ning ún caso podrá hacer que aumente

nuestra incertidumbre.

3.4.

Cantidad de Informaci ón entre dos Variables

Shannon propuso una medida para la cantidad de informaci ón que aporta sobre

una variable el conocimiento de otra. Se definirá, pues, la cantidad de información de

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.5. Criptosistema Seguro de Shannon

49

Shannon que la variable X contiene sobre Y como:

I(X, Y ) = H(Y ) − H(Y /X)

(3.7)

La explicaci ón intuitiva de esta magnitud es la siguiente. Inicialmente, nosotros

poseemos un grado determinado de incertidumbre sobre la variable aleatoria Y . Si

antes de medir una realizaci ón concreta de Y , medimos la de otra variable X, parece

l ógico que nuestra incertidumbre sobre Y se reduzca o permanezca igual. Por ejem-

plo, supongamos que Y representa la situaci ón meteorol ógica (lluvia, sol, viento, nie-

ve, etc.), mientras que X representa el atuendo de una persona que entra en nuestra

misma habitaci ón. Inicialmente tendremos un nivel determinado de entrop´ıa sobre

Y . Si, acto seguido, la citada persona aparece con un paraguas mojado, seguramente

para nosotros aumentará la probabilidad para el valor lluvia de Y , modificando su

entrop´ıa. Esa disminuci ón —o no— de entrop´ıa es precisamente lo que mide I(X, Y ).

Las propiedades de la cantidad de informaci ón entre dos variables son las siguien-

tes:

I. I(X, Y ) = I(Y, X)

II. I(X, Y ) ≥ 0

3.5.

Criptosistema Seguro de Shannon

Diremos que un criptosistema es seguro si la cantidad de informaci ón que apor-

ta el hecho de conocer el mensaje cifrado c sobre la entrop´ıa del texto claro m vale

cero. En concreto, consideraremos una variable aleatoria C, compuesta por todos los

criptogramas posibles, y cuya observaci ón corresponderá el valor concreto c del crip-

tograma enviado, y otra variable M , definida análogamente para los textos en claro

m. En ese caso, tendremos que:

I(C, M ) = 0

(3.8)

Esto significa sencillamente que la distribuci ón de probabilidad que nos inducen

todos los posibles mensajes en claro —el conjunto M — no cambia si conocemos el

mensaje cifrado. Para entenderlo mejor supongamos que s´ı se modifica dicha distri-

buci ón: El hecho de conocer un mensaje cifrado, al variar la distribuci ón de probabi-

lidad sobre M har´ıa unos mensajes más probables que otros, y por consiguiente unas

claves de cifrado más probables que otras. Repitiendo esta operaci ón muchas veces

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

50

3. Teor´ıa de la Informaci ón

con mensajes diferentes, cifrados con la misma clave, podr´ıamos ir modificando la

distribuci ón de probabilidad sobre la clave empleada hasta obtener un valor de clave

mucho más probable que todos los demás, permitiéndonos romper el criptosistema.

Si por el contrario el sistema cumpliera la condici ón (3.8), jamás podr´ıamos rom-

perlo, ni siquiera empleando una máquina con capacidad de proceso infinita. Por

ello los criptosistemas que cumplen la condici ón de Shannon se denominan también

criptosistemas ideales.

Se puede demostrar también que para que un sistema sea criptoseguro seg ún el

criterio de Shannon, la cardinalidad del espacio de claves ha de ser al menos igual que

la del espacio de mensajes. En otras palabras, que la clave ha de ser al menos tan larga

como el mensaje que queramos cifrar. Esto vuelve in útiles a estos criptosistemas en la

práctica, porque si la clave es tanto o más larga que el mensaje, a la hora de protegerla

nos encontraremos con el mismo problema que ten´ıamos para proteger el mensaje.

Un ejemplo clásico de criptosistema seguro es el algoritmo inventado por Mau-

borgne y Vernam en 1917, que consist´ıa en emplear como clave de codificaci ón una

secuencia de letras tan larga como el mensaje original, y usar cada carácter de la cla-

ve para cifrar exactamente una letra del mensaje, haciendo la suma m ódulo 26. Este

sistema dio lugar a las secuencias de un solo uso (one-time pads): cadenas de longitud

arbitraria que se combinan byte a byte con el mensaje original mediante la operaci ón

or-exclusivo u otra similar para obtener el criptograma.

3.6.

Redundancia

Si una persona lee un mensaje en el que faltan algunas letras, normalmente puede

reconstruirlo. Esto ocurre porque casi todos los s´ımbolos de un mensaje en lengua-

je natural contienen informaci ón que se puede extraer de los s´ımbolos de alrededor

—informaci ón que, en la práctica, se está enviando dos o más veces—, o en otras pala-

bras, porque el lenguaje natural es redundante. Puesto que tenemos mecanismos para

definir la cantidad de informaci ón que presenta un suceso, podemos intentar medir

el exceso de informaci ón (redundancia) de un lenguaje. Para ello vamos a dar una

serie de definiciones:

Índice de un lenguaje. Definiremos el ´ındice de un lenguaje L para mensajes de

longitud k como:

H

r

k (M )

k =

(3.9)

k

siendo Hk(M ) la entrop´ıa de todos los mensajes de longitud k que tienen sen-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.6. Redundancia

51

tido en L. Estamos midiendo el n úmero de bits de informaci ón que transporta

cada carácter en mensajes de una longitud determinada. Para idiomas como el

Espa ˜nol, rk suele valer alrededor de 1,4 bits por letra para valores peque ˜nos de

k.

Índice absoluto de un lenguaje. Es el máximo n úmero de bits de información que

pueden ser codificados en cada carácter, asumiendo que todas las combinacio-

nes de caracteres son igualmente probables. Suponiendo m s´ımbolos diferentes

en nuestro alfabeto este ´ındice vale:

log (mk)

k log (m)

R =

2

=

2

= log (m)

k

k

2

N ótese que el ´ındice R es independiente de la longitud k de los mensajes. En el

caso del espa ˜nol, puesto que tenemos 27 s´ımbolos, podr´ıamos codificar 4,7 bits

por cada letra aproximadamente, luego parece que el nivel de redundancia de

los lenguajes naturales es alto.

Finalmente, la redundancia de un lenguaje se define como la diferencia entre las

dos magnitudes anteriores:

D = R − r

También se define el ´ındice de redundancia como el siguiente cociente:

D

I = R

Desgraciadamente, para medir la auténtica redundancia de un lenguaje, hemos de

tener en cuenta secuencias de cualquier n úmero de caracteres, por lo que la expresi ón

(3.9) deber´ıa calcularse en realidad como:

H

r

n(M )

∞ = l´

ım

(3.10)

n→∞

n

Hay principalmente dos aplicaciones fundamentales de la Teor´ıa de la Informa-

ci ón, relacionadas directamente con la redundancia:

Compresión de datos: simplemente trata de eliminar la redundancia dentro de un

archivo, considerando cada byte como un mensaje elemental, y codificándolo

con más o menos bits seg ún su frecuencia de aparici ón. En este sentido se trata

de codificar exactamente la misma informaci ón que transporta el archivo origi-

nal, pero empleando un n úmero de bits lo más peque ˜no posible.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

52

3. Teor´ıa de la Informaci ón

Códigos de Redundancia C´ıclica (CRC): permiten introducir un campo de longitud

m´ınima en el mensaje, tal que éste proporcione la mayor redundancia posible.

As´ı, si el mensaje original resultase alterado, la probabilidad de que el CRC

a ˜nadido siga siendo correcto es m´ınima.

N ótese que, conocidos los patrones de redundancia de un lenguaje, es posible dar

de forma automática una estimaci ón de si una cadena de s´ımbolos corresponde o no a

dicho lenguaje. Esta caracter´ıstica es aprovechada para efectuar ataques por la fuerza

bruta, ya que ha de asignarse una probabilidad a cada clave individual en funci ón de

las caracter´ısticas del mensaje obtenido al decodificar el criptograma con dicha clave.

El n úmero de claves suele ser tan elevado que resulta imposible una inspecci ón vi-

sual. Una estrategia bastante interesante para protegerse contra este tipo de ataques,

y que suele emplearse con frecuencia, consiste en comprimir los mensajes antes de

codificarlos. De esa manera eliminamos la redundancia y hacemos más dif´ıcil a un

atacante apoyarse en las caracter´ısticas del mensaje original para recuperar la clave.

3.7.

Desinformaci ón y Distancia de Unicidad

Definiremos desinformación de un sistema criptográfico como la entrop´ıa condicio-

nada del conjunto M de posibles mensajes sobre el conjunto C de posibles criptogra-

mas:

X X

H(M/C) = −

P (c)P (m/c)log2(P (m/c))

(3.11)

m∈M c∈C

Esta expresi ón permite saber la incertidumbre que queda sobre cuál ha sido el

mensaje enviado m, suponiendo que conocemos su criptograma asociado c. Si esa

incertidumbre fuera la misma que ten´ıamos cuando desconoc´ıamos el valor de c —en

cuyo caso se cumplir´ıa que H(M ) = H(M/C)—, nos encontrar´ıamos con que C y

M son variables estad´ısticamente independientes, y por lo tanto estar´ıamos frente

a un criptosistema seguro de Shannon, ya que jamás podr´ıamos disminuir nuestra

incertidumbre acerca de m a partir de los valores de c. Lo habitual no obstante es que

exista relaci ón estad´ıstica entre C y M (a través del espacio de claves K), por lo que

H(M/C) < H(M ).

Adicionalmente, si el valor de H(M/C) fuera muy peque ˜no con respecto a H(M ),

significar´ıa que el hecho de conocer c proporciona mucha informaci ón sobre m, lo

cual quiere decir que nuestro criptosistema es inseguro. El peor de los casos ser´ıa

que H(M/C) = 0, puesto que entonces, conociendo el valor de c tendr´ıamos absoluta

certeza sobre el valor de m.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.8. Confusi ón y Difusi ón

53

Esta magnitud se puede medir también en funci ón del conjunto K de claves, y

entonces representará la incertidumbre que nos queda sobre k conocida c:

X X

H(K/C) = −

P (c)P (k/c)log2(P (k/c))

(3.12)

k∈K c∈C

Definiremos finalmente la distancia de unicidad de un criptosistema como la lon-

gitud m´ınima de mensaje cifrado que aproxima el valor H(K/C) a cero. En otras

palabras, es la cantidad de texto cifrado que necesitamos para poder descubrir la

clave. Los criptosistemas seguros de Shannon tienen distancia de unicidad infinita.

Nuestro objetivo a la hora de dise ˜nar un sistema criptográfico será que la distancia

de unicidad sea lo más grande posible.

3.8.

Confusi ón y Difusi ón

Seg ún la Teor´ıa de Shannon, las dos técnicas básicas para ocultar la redundancia

en un texto claro son la confusión y la difusión. Estos conceptos, a pesar de su an-

tig üedad, poseen una importancia clave en Criptograf´ıa moderna.

Confusión. Trata de ocultar la relaci ón entre el texto claro y el texto cifrado. Re-

cordemos que esa relaci ón existe y se da a partir de la clave k empleada, puesto

que si no existiera jamás podr´ıamos descifrar los mensajes. El mecanismo más

simple de confusi ón es la sustituci ón, que consiste en cambiar cada ocurrencia

de un s´ımbolo en el texto claro por otro. La sustituci ón puede ser tan simple o

tan compleja como queramos.

Difusión. Diluye la redundancia del texto claro repartiéndola a lo largo de todo el

texto cifrado. El mecanismo más elemental para llevar a cabo una difusi ón es la

transposici ón, que consiste en cambiar de sitio elementos individuales del texto

claro.

3.9.

Ejercicios Resueltos

1. Calcule la informaci ón que proporciona el hecho de que en un dado no cargado

salga un n úmero par.

Solución: La probabilidad de que en un dado no cargado salga un n úmero par

es 1 . Por lo tanto, empleando la expresi ón (3.1) tenemos que la informaci ón

2

asociada al suceso vale:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

54

3. Teor´ıa de la Informaci ón

1

Ipar = − log

= 1 bit

2

2

2. Calcule la entrop´ıa que tiene un dado que presenta doble probabilidad para el

n úmero tres que para el resto.

Solución: El dado presenta la siguiente distribuci ón de probabilidad:

2

1

P (x = 3) =

;

P (x 6= 3) =

7

7

Su entrop´ıa será, pues

2

2

1

1

H(X) = − log

− 5 ·

log

= 0,5163 + 2,0052 = 2,5215

7

2

7

7

2

7

3. Demuestre el Lema de Gibbs, teniendo en cuenta la siguiente propiedad:

∀x, x > 0 =⇒ log (x) ≤ x − 1

2

q

Solución: Sea el cociente i

p . Puesto que tanto pi como qi son positivos, su cociente

i

también lo será, luego

q

q

log

i

= log (q

(p

i − 1

2

i) − log

i) ≤

p

2

2

i

pi

Multiplicando ambos miembros de la desigualdad por pi se tiene

pi log (q

(p

2

i) − pi log2

i) ≤ qi − pi

Puesto que pi es positivo, se mantiene el sentido de la desigualdad. Ahora su-

memos todas las desigualdades y obtendremos lo siguiente:

n

n

n

n

X

X

X

X

pi log (q

p

(p

q

p

2

i) −

i log2

i) ≤

i −

i = 0

i=1

i=1

i=1

i=1

Reorganizando los términos obtenemos finalmente la expresi ón buscada

n

n

X

X

−

pi log (p

p

(q

2

i) ≤ −

i log2

i)

i=1

i=1

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.9. Ejercicios Resueltos

55

4. Demuestre la Ley de Entrop´ıas Totales.

Solución: Desarrollemos el valor de H(Y /X), seg ún la expresi ón (3.4):

"

m

n

#

X X

H(Y /X) = −

P (xi, yj) log (P (y

2

j /xi))

j=1 i=1

La Ley de la Probabilidad Total dice que

P (X, Y ) = P (X) · P (Y /X)

por lo que nuestra expresi ón se convierte en

"

m

n

#

X X

P (x

−

P (x

i, yj )

i, yj ) log2

P (xi)

j=1 i=1

Descomponiendo el logaritmo del cociente como la diferencia de logaritmos se

obtiene

"

m

n

#

X X

−

P (xi, yj) [log (P (x

(P (x

2

i, yj )) − log2

i))]

j=1 i=1

Si desarrollamos la expresi ón anterior tenemos

"

m

n

#

" m

n

#

X X

X X

−

P (xi, yj) log (P (x

+

P (x

(P (x

2

i, yj ))

i, yj ) log2

i))

j=1 i=1

j=1 i=1

El primer sumando es igual a H(X, Y ). Observemos el último sumando:

" m

n

#

"

n

m

#

X X

X

X

P (xi, yj) log (P (x

=

log (P (x

P (x

=

2

i))

2

i))

i, yj )

j=1 i=1

i=1

j=1

"

n

#

X

=

log (P (x

= −H(X)

2

i))P (xi)

i=1

Luego H(Y /X) = H(X, Y ) − H(X). Reorganizando los términos, llegamos fi-

nalmente a la expresi ón de la Ley de Entrop´ıas Totales:

H(X, Y ) = H(X) + H(Y /X)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

56

3. Teor´ıa de la Informaci ón

5. Suponga un equipo de f útbol que nunca empata, que cuando no llueve vence el

65 % de sus partidos, y que si llueve s ólo gana el 35 % de las veces. La probabili-

dad de que llueva en un partido es del 15 %. ¿Cuál es la cantidad de informaci ón

que aporta la variable aleatoria lluvia sobre la variable ganar un partido?

Solución: Sea G la variable aleatoria que representa los partidos. Sea gs el suceso

correspondiente a que el equipo gane el partido, y gn el suceso asociado a que

lo pierda. Análogamente, definiremos la variable L, asociada a que llueva o no.

Tendremos, pues:

P (ls)

= 0,15

P (ln)

= 0,85

P (gs, ls)

= 0,35 · 0,15 = 0,0525

P (gs, ln)

= 0,65 · 0,85 = 0,5525

P (gn, ls)

= 0,65 · 0,15 = 0,0975

P (gn, ln)

= 0,35 · 0,85 = 0,2975

P (gs/L = ls)

= 0,35

P (gs/L = ln) = 0,65

P (gn/L = ls) = 0,65

P (gn/L = ln) = 0,35

P (gs)

= P (ln) · P (gs/L = ln) + P (ls) · P (gs/L = ls) = 0,605

P (gn)

= P (ln) · P (gn/L = ln) + P (ls) · P (gn/L = ls) = 0,395

Calculemos ahora las entrop´ıas:

H(G)

= −P (gs) log (P (g

(P (g

2

s)) − P (gn) log2

n)) = 0,9679

H(G/L) = −P (gs, ls) log (P (g

(P (g

2

s/L = ls)) − P (gs, ln) log2

s/L = ln))−

−P (gn, ls) log (P (g

(P (g

2

n/L = ls)) − P (gn, ln) log2

n/L = ln)) =

= −0,0525 · log (0,35) − 0,5525 · log (0,65)−

2

2

−0,0975 · log (0,65) − 0,2975 · log (0,35) = 0,9333

2

2

La cantidad de informaci ón entre G y L es, finalmente

H(G) − H(G/L) = 0,9679 − 0,9333 = 0,0346 bits

6. Suponga un conjunto de 20 mensajes equiprobables. ¿Cuál será la longitud me-

dia de cada mensaje para una transmisi ón óptima? Escriba un c ódigo binario

que aproxime su longitud media de mensaje a ese valor óptimo.

Solución:La longitud media óptima de los mensajes, cuando éstos son equipro-

bables, es el logaritmo base dos del n úmero de mensajes, por tanto

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

3.10. Ejercicios Propuestos

57

log (20) = 4,3219

2

Una posible codificaci ón, con una longitud media de 4,4 bits por mensaje, ser´ıa

la siguiente:

m0

00000

m10

0110

m1

00001

m11

0111

m2

00010

m12

1000

m3

00011

m13

1001

m4

00100

m14

1010

m5

00101

m15

1011

m6

00110

m16

1100

m7

00111

m17

1101

m8

0100

m18

1110

m9

0101

m19

1111

7. Considere un conjunto de 11 mensajes, el primero con probabilidad 50 %, y el

resto con probabilidad 5 %. Calcule su entrop´ıa.

Solución: La entrop´ıa de los mensajes es igual a:

H(X) = −0,5 · log (0,5) − 10 · 0,05 · log (0,05) = 2,660 bits

2

2

3.10.

Ejercicios Propuestos

1. Calcule la cantidad de informaci ón asociada a conocer el ganador de una ca-

rrera en la que compiten quince atletas, si suponemos que a priori todos los

corredores tienen las mismas probabilidades de ganar. Calcule también la can-

tidad de informaci ón asociada a conocer también quiénes quedan en segundo

y tercer puesto respectivamente.

2. Suponga que lanzamos dos dados y sumamos las puntuaciones obtenidas. Cal-

cule la entrop´ıa asociada a dicho experimento.

3. Calcule el ´ındice absoluto de un lenguaje con 32 s´ımbolos. Calcule la redundan-

cia de dicho lenguaje, sabiendo que su ´ındice es de 2bits/letra.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

58

3. Teor´ıa de la Informaci ón

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 4

Complejidad Algor´ıtmica

Cuando dise ˜namos un algoritmo criptográfico, pretendemos plantear a un posi-

ble atacante un problema que éste sea incapaz de resolver. Pero, ¿bajo qué circuns-

tancias podemos considerar que un problema es intratable? Evidentemente, queremos

que nuestro fisgón se enfrente a unos requerimientos de computaci ón que no pueda

asumir. La cuesti ón es c ómo modelizar y cuantificar la capacidad de cálculo necesa-

ria para abordar un problema. En este cap´ıtulo efectuaremos un breve repaso de las

herramientas formales que nos van a permitir dar respuesta a estos interrogantes.

4.1.

Concepto de Algoritmo

En la actualidad, la práctica totalidad de las aplicaciones criptográficas emplean

computadoras en sus cálculos, y las computadoras convencionales están dise ˜nadas

para ejecutar algoritmos. Definiremos algoritmo como una secuencia finita y ordenada de

instrucciones elementales que, dados los valores de entrada de un problema, en alg ún momento

finaliza y devuelve la solución.

En efecto, las computadoras actuales poseen una memoria, que les sirve para al-

macenar datos, unos dispositivos de entrada y salida que les permiten comunicarse

con el exterior, una unidad capaz de hacer operaciones aritméticas y l ógicas, y una

unidad de control, capaz de leer, interpretar y ejecutar un programa o secuencia de

instrucciones. Habitualmente, las unidades aritmético–l ógica y de control se suelen

encapsular en un único circuito integrado, que se conoce por microprocesador o CPU.

Cuando nosotros dise ˜namos un algoritmo de cifrado, estamos expresando, de un

modo más o menos formal, la estructura que ha de tener la secuencia de instrucciones

concreta que permita implementar dicho algoritmo en cada computadora particular.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

60

4. Complejidad Algor´ıtmica

Habrá computadoras con más o menos memoria, velocidad o incluso n úmero de

microprocesadores —capaces de ejecutar varios programas al mismo tiempo—, pero

en esencia todas obedecerán al concepto de algoritmo.

La Teor´ıa de Algoritmos es una ciencia que estudia c ómo construir algoritmos pa-

ra resolver diferentes problemas. En muchas ocasiones no basta con encontrar una

forma de solucionar el problema: la soluci ón ha de ser óptima. En este sentido la

Teor´ıa de Algoritmos también proporciona herramientas formales que nos van a per-

mitir decidir qué algoritmo es mejor en cada caso, independientemente de las carac-

ter´ısticas particulares1 de la computadora concreta en la que queramos implantarlo.

La Criptograf´ıa depende en gran medida de la Teor´ıa de Algoritmos, ya que por

un lado hemos de asegurar que el usuario leg´ıtimo, que posee la clave, puede cifrar

y descifrar la informaci ón de forma rápida y c ómoda, mientras que por otro hemos

de garantizar que un atacante no dispondrá de ning ún algoritmo eficiente capaz de

comprometer el sistema.

Cabr´ıa plantearnos ahora la siguiente cuesti ón: si un mismo algoritmo puede re-

sultar más rápido en una computadora que en otra, ¿podr´ıa existir una computadora

capaz de ejecutar de forma eficiente algoritmos que sabemos que no lo son?. Existe un

principio fundamental en Teor´ıa de Algoritmos, llamado principio de invarianza, que

dice que si dos implementaciones del mismo algoritmo consumen t1(n) y t2(n) segun-

dos respectivamente, siendo n el tama ˜no de los datos de entrada, entonces existe una

constante positiva c tal que t1(n) ≤ c·t2(n), siempre que n sea lo suficientemente gran-

de. En otras palabras, que aunque podamos encontrar una computadora más rápida,

o una implementaci ón mejor, la evoluci ón del tiempo de ejecuci ón del algoritmo en

funci ón del tama ˜no del problema permanecerá constante, por lo tanto la respuesta a

la pregunta anterior es, afortunadamente, negativa. Eso nos permite centrarnos por

completo en el algoritmo en s´ı y olvidarnos de la implementaci ón concreta a la hora

de hacer nuestro estudio.

En muchas ocasiones, el tiempo de ejecuci ón de un algoritmo viene dado por las

entradas concretas que le introduzcamos. Por ejemplo, se necesitan menos operacio-

nes elementales para ordenar de menor a mayor la secuencia {1, 2, 3, 4, 6, 5} que {6,

5, 3, 2, 1, 4}. Eso nos llevará a distinguir entre tres alternativas:

Mejor caso: Es el n úmero de operaciones necesario cuando los datos se encuen-

tran distribuidos de la mejor forma posible para el algoritmo. Evidentemente

este caso no es muy práctico, puesto que un algoritmo puede tener un mejor

caso muy bueno y comportarse muy mal en el resto.

1En algunos casos, sobre todo cuando se trata de computadoras con muchos microprocesadores, se

estudian algoritmos espec´ıficos para aprovechar las peculiaridades de la máquina sobre la que se van

a implantar.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

4.2. Complejidad Algor´ıtmica

61

Peor caso: Es el n úmero de operaciones necesario para la distribuci ón más pe-

simista de los datos de entrada. Nos permitirá obtener una cota superior del

tiempo de ejecuci ón necesario. Un algoritmo que se comporte bien en el peor

caso, será siempre un buen algoritmo.

Caso promedio: Muchas veces, hay algoritmos que en el peor caso no funcionan

bien, pero en la mayor´ıa de los casos que se presentan habitualmente tienen un

comportamiento razonablemente eficiente. De hecho, algunos algoritmos t´ıpi-

cos de ordenaci ón necesitan el mismo n úmero de operaciones en el peor caso,

pero se diferencian considerablemente en el caso promedio.

4.2.

Complejidad Algor´ıtmica

En la mayor´ıa de los casos carece de interés calcular el tiempo de ejecuci ón concre-

to de un algoritmo en una computadora, e incluso algunas veces simplemente resulta

imposible. En su lugar emplearemos una notaci ón de tipo asint ótico, que nos permi-

tirá acotar dicha magnitud. Normalmente consideraremos el tiempo de ejecuci ón del

algoritmo como una funci ón f (n) del tama ˜no n de la entrada, y la llamaremos or-

den de complejidad del algoritmo. f debe estar definida para los n úmeros naturales y

devolver valores en +

R .

Dada la funci ón f (n), haremos las siguientes definiciones:

L´ımite superior asintótico: f (n) = O(g(n)) si existe una constante positiva c y un

n úmero entero positivo n0 tales que 0 ≤ f (n) ≤ cg(n) ∀n ≥ n0.

L´ımite inferior asintótico: f (n) = Ω(g(n)) si existe una constante positiva c y un

n úmero entero positivo n0 tales que 0 ≤ cg(n) ≤ f (n) ∀n ≥ n0.

L´ımite exacto asintótico: f (n) = Θ(g(n)) si existen dos constantes positivas c1, c2

y un n úmero entero positivo n0 tales que c1g(n) ≤ f (n) ≤ c2g(n) ∀n ≥ n0.

Notación o: f (n) = o(g(n)) si para cualquier constante positiva c existe un n úme-

ro entero positivo n0 > 0 tal que 0 ≤ f (n) ≤ cg(n) ∀n ≥ n0.

Intuitivamente, f (n) = O(g(n)) significa que f (n) crece asint óticamente no más

rápido que g(n) multiplicada por una constante. Análogamente f (n) = Ω(g(n)) quie-

re decir que f (n) crece asint óticamente al menos tan rápido como g(n) multiplicada

por una constante. Definiremos ahora algunas propiedades sobre la notaci ón que

acabamos de introducir:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

62

4. Complejidad Algor´ıtmica

a) f (n) = O(g(n)) ⇐⇒ g(n) = Ω(f (n)).

b) f (n) = Θ(g(n)) ⇐⇒ f (n) = O(g(n)) ∧ f (n) = Ω(g(n)).

c) Si f (n) = O(h(n)) ∧ g(n) = O(h(n)), entonces (f + g)(n) = O(h(n)).

d) Si f (n) = O(h(n)) ∧ g(n) = O(l(n)), entonces (f · g)(n) = O(h(n)l(n)).

e) f (n) = O(f (n)).

f) Si f (n) = O(g(n)) ∧ g(n) = O(h(n)), entonces f (n) = O(h(n)).

Para algunas funciones de uso com ún, podemos definir directamente su orden de

complejidad:

Funciones polinomiales: Si f (n) es un polinomio de grado k, y su coeficiente de

mayor grado es positivo, entonces f (n) = Θ(nk).

Funciones logar´ıtmicas: Para cualquier constante c > 0, log (n) = Θ(ln(n))

c

.

Factoriales: n! = Ω(2n).

Logaritmo de un factorial: ln(n!) = Θ(n ln(n)).

Veamos un ejemplo: supongamos que tenemos un algoritmo que necesita llevar a

cabo f (n) = 20n2 + 10n + 1000 operaciones elementales. Podemos decir que ese al-

goritmo tiene un orden de ejecuci ón Θ(n2), es decir, que el tiempo de ejecuci ón crece,

de forma asint ótica, proporcionalmente al cuadrado del tama ˜no de la entrada. Otro

algoritmo que necesite g(n) = n3 + 1 operaciones efectuará menos cálculos para una

entrada peque ˜na, pero su orden es Θ(n3), por lo que crecerá mucho más rápidamente

que el anterior y, en consecuencia, será menos eficiente.

4.2.1.

Operaciones Elementales

Hasta ahora hemos empleado el término operaciones elementales sin especificar su

significado concreto. Podemos considerar una operaci ón elemental como aquella que

se ejecuta siempre en tiempo constante. Evidentemente, en funci ón de las caracter´ısti-

cas concretas de la computadora que estemos manejando, habrá operaciones que

podrán considerarse elementales o no. Por ejemplo, en una computadora que pue-

da operar únicamente con n úmeros de 16 bits, no podrá considerarse elemental una

operaci ón con n úmeros de 32 bits.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

4.3. Algoritmos Polinomiales, Exponenciales y Subexponenciales

63

En general, el tama ˜no de la entrada a un algoritmo se mide en bits, y se consideran

en principio elementales únicamente las operaciones a nivel de bit. Sean a y b dos

n úmeros enteros positivos, ambos menores o iguales que n. Necesitaremos, pues,

aproximadamente log (n)

(n)

2

bits para representarlos —n ótese que, en este caso, log2

es el tama ˜no de la entrada—. Seg ún este criterio, las operaciones aritméticas, llevadas

a cabo mediante los algoritmos tradicionales, presentan los siguientes órdenes de

complejidad:

Suma (a + b): O(log (a) + log (b)) = O(log (n))

2

2

2

Resta (a − b): O(log (a) + log (b)) = O(log (n))

2

2

2

Multiplicaci ón (a · b): O(log (a) · log (b)) = O((log (n))2)

2

2

2

Divisi ón (a/b): O(log (a) · log (b)) = O((log (n))2)

2

2

2

Recordemos que el orden de complejidad de un logaritmo es independiente de la

base, por lo que la capacidad de realizar en tiempo constante operaciones aritméti-

cas con n úmeros de más bits únicamente introducirá un factor de proporcionalidad

—recuérdese que log (x) = log (x) · log (b)

a

b

a

—. Dicho factor no afecta al orden de com-

plejidad obtenido, por lo que podemos considerar que estas operaciones se efect úan

en grupos de bits de tama ˜no arbitrario. En otras palabras, una computadora que reali-

ce operaciones con n úmeros de 32 bits deber´ıa tardar la mitad en ejecutar el mismo

algoritmo que otra que s ólo pueda operar con n úmeros de 16 bits pero, asint ótica-

mente, el crecimiento del tiempo de ejecuci ón en funci ón del tama ˜no de la entrada

será el mismo para ambas.

4.3.

Algoritmos Polinomiales, Exponenciales y Subex-

ponenciales

Diremos que un algoritmo es polinomial si su peor caso de ejecuci ón es de orden

O(nk), donde n es el tama ˜no de la entrada y k es una constante. Adicionalmente,

cualquier algoritmo que no pueda ser acotado por una funci ón polinomial, se conoce

como exponencial. En general, los algoritmos polinomiales se consideran eficientes,

mientras que los exponenciales se consideran ineficientes.

Un algoritmo se denomina subexponencial si en el peor de los casos, la funci ón de

ejecuci ón es de la forma eo(n), donde n es el tama ˜no de la entrada. Son asint óticamente

más rápidos que los exponenciales puros, pero más lentos que los polinomiales.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

64

4. Complejidad Algor´ıtmica

4.4.

Clases de Complejidad

Para simplificar la notaci ón, en muchas ocasiones se suele reducir el problema

de la complejidad algor´ıtmica a un simple problema de decisi ón, de forma que se

considera un algoritmo como un mecanismo que permite obtener una respuesta s´ı o

no a un problema concreto.

La clase de complejidad P es el conjunto de todos los problemas de decisi ón que

pueden ser resueltos en tiempo polinomial.

La clase de complejidad NP es el conjunto de todos los problemas para los cuales

una respuesta afirmativa puede ser verificada en tiempo polinomial, emplean-

do alguna informaci ón extra, denominada certificado.

La clase de complejidad co–NP es el conjunto de todos los problemas para los cua-

les una respuesta negativa puede ser verificada en tiempo polinomial, usando

un certificado apropiado.

N ótese que el hecho de que un problema sea NP, no quiere decir necesariamen-

te que el certificado correspondiente sea fácil de obtener, sino que, dado éste últi-

mo, puede verificarse la respuesta afirmativa en tiempo polinomial. Una observaci ón

análoga puede llevarse a cabo sobre los problemas co–NP.

Sabemos que P ⊆ NP y que P ⊆ co-NP. Sin embargo, a ún no se sabe si P = NP,

si NP = co–NP, o si P = NP ∩ co–NP. Si bien muchos expertos consideran que nin-

guna de estas tres igualdades se cumple, este punto no ha podido ser demostrado

matemáticamente.

Dentro de la clase NP, existe un subconjunto de problemas que se llaman NP–

completos, y cuya clase se nota como NPC. Estos problemas tienen la peculiaridad

de que todos ellos son equivalentes, es decir, se pueden reducir unos en otros, y si

lográramos resolver alguno de ellos en tiempo polinomial, los habr´ıamos resuelto

todos. También se puede decir que cualquier problema NP–completo es al menos tan

dif´ıcil de resolver como cualquier otro problema NP, lo cual hace a la clase NPC la

de los problemas más dif´ıciles de resolver computacionalmente.

Sea A = {a1, a2, . . . an} un conjunto de n úmeros enteros positivos, y s otro n úme-

ro entero positivo. El problema de determinar si existe un subconjunto de A cuyos

elementos sumen s es un problema NP–completo, y, como ya se ha dicho, todos los

problemas de esta clase pueden ser reducidos a una instancia de este. N ótese que da-

do un subconjunto de A, es muy fácil verificar si suma s, y que dado un subconjunto

de A que sume s —que desempe ˜nar´ıa el papel de certificado—, se puede verificar

fácilmente que la respuesta al problema es afirmativa.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

4.5. Algoritmos Probabil´ısticos

65

Figura 4.1: Relaci ón entre las clases de complejidad P, NP, co–NP y NPC.

En la figura 4.1 puede observarse gráficamente la relaci ón existente entre las dis-

tintas clases de complejidad que acabamos de definir.

Finalmente, apuntaremos que existe una clase de problemas, los denominados

NP–duros —esta clase se define sobre los problemas en general, no s ólo sobre los

de decisi ón—, y que contiene la versi ón computacional del problema definido ante-

riormente, que consistir´ıa en encontrar el subconjunto de A cuyos elementos suman

s.

4.5.

Algoritmos Probabil´ısticos

Hasta ahora hemos estudiado la complejidad de algoritmos de tipo determin´ısti-

co, que siempre siguen el mismo camino de ejecuci ón y que siempre llegan —si lo

hacen— a la misma soluci ón. Sin embargo, existen problemas para los cuales puede

ser más interesante emplear algoritmos de tipo no determin´ıstico, también llamados

probabil´ısticos o aleatorizados. Este tipo de algoritmos maneja alg ún tipo de paráme-

tro aleatorio, lo cual hace que dos ejecuciones diferentes con los mismos datos de

entrada no tengan por qué ser idénticas. En algunos casos, métodos de este tipo per-

miten obtener soluciones en una cantidad de tiempo considerablemente inferior a la

necesaria si se emplean algoritmos determin´ısticos (ver secci ón 5.7).

Podemos clasificar los algoritmos no determin´ısticos seg ún la probabilidad con la

que devuelvan la soluci ón correcta. Sea A un algoritmo aleatorizado para el problema

de decisi ón L, y sea I una instancia arbitraria de L. Sea P 1 la probabilidad de que A

devuelva cierto cuando I es cierto, y P 2 la probabilidad de que A devuelva cierto

cuando I es falso.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

66

4. Complejidad Algor´ıtmica

A es de tipo error nulo si P 1 = 1 y P 2 = 0.

A es de tipo error simple si P 1 ≥ c, siendo c una constante positiva, y P 2 = 0

A es de tipo error doble si P 1 ≥ 1 + , y P 2 ≤ 1 −

2

2

Definiremos también el tiempo esperado de ejecuci ón de un algoritmo aleatoriza-

do como el l´ımite superior del tiempo de ejecución esperado para cada entrada, expresa-

do en funci ón del tama ˜no de la entrada. El tiempo de ejecuci ón esperado para cada

entrada será la media de los tiempos obtenidos para esa entrada y todas las posibles

salidas del generador aleatorio.

Las clases de complejidad probabil´ıstica son las siguientes:

Clase ZPP: conjunto de todos los problemas de decisi ón para los cuales existe un

algoritmo de tipo error nulo que se ejecuta en un tiempo esperado de ejecuci ón

polinomial.

Clase RP: conjunto de los problemas de decisi ón para los cuales existe un algo-

ritmo de tipo error simple que se ejecuta en el peor caso en tiempo polinomial.

Clase BPP: conjunto de los problemas de decisi ón para los cuales existe un al-

goritmo de tipo error doble que se ejecuta en el peor caso en tiempo polinomial.

Finalmente, diremos que P ⊆ ZPP ⊆ RP ⊆ BPP y RP ⊆ NP.

4.6.

Conclusiones

En este cap´ıtulo hemos contemplado únicamente aquellos problemas para los que

existe una soluci ón algor´ıtmica —el programa finaliza siempre, aunque necesite un

n úmero astron ómico de operaciones elementales—, y hemos dejado a un lado deli-

beradamente aquellos problemas para los cuales no existen algoritmos cuya finali-

zaci ón esté garantizada (problemas no–decidibles y semidecicibles), ya que en principio

escapan al prop ósito de este libro.

Se han repasado las clases genéricas de problemas que se pueden afrontar, en

funci ón del tipo de algoritmos que permiten resolverlos, y se ha descrito una notaci ón

general para expresar de forma precisa la complejidad de un algoritmo concreto. Se

ha puesto de manifiesto asimismo que un algoritmo ineficiente, cuando el tama ˜no

de la entrada es lo suficientemente grande, es totalmente inabordable incluso para la

más potente de las computadoras, al menos con la tecnolog´ıa actual.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

4.6. Conclusiones

67

El hecho de que no se conozca un algoritmo eficiente para resolver un problema

no quiere decir que éste no exista, y por eso es tan importante la Teor´ıa de Algorit-

mos para la Criptograf´ıa. Si, por ejemplo, se lograra descubrir un método eficiente

capaz de resolver logaritmos discretos (ver secci ón 5.4), algunos de los algoritmos

asimétricos más populares en la actualidad dejar´ıan de ser seguros. De hecho, la con-

tinua reducci ón del tiempo de ejecuci ón necesario para resolver ciertos problemas,

propiciada por la aparici ón de algoritmos más eficientes, junto con el avance de las

prestaciones del hardware disponible, obliga con relativa frecuencia a actualizar las

previsiones sobre la seguridad de muchos sistemas criptográficos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

68

4. Complejidad Algor´ıtmica

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 5

Aritmética Modular

5.1.

Concepto de Aritmética Modular

La aritmética modular es una parte de las Matemáticas extremadamente útil en

Criptograf´ıa, ya que permite realizar cálculos complejos y plantear problemas in-

teresantes, manteniendo siempre una representaci ón numérica compacta y definida,

puesto que s ólo maneja un conjunto finito de n úmeros enteros. Mucha gente la co-

noce como la aritmética del reloj, debido a su parecido con la forma que tenemos de

contar el tiempo. Por ejemplo, si son las 19:13:59 y pasa un segundo, decimos que son

las 19:14:00, y no las 19:13:60. Como vemos, los segundos —al igual que los minutos—

, se expresan empleando sesenta valores c´ıclicamente, de forma que tras el 59 viene

de nuevo el 0. Desde el punto de vista matemático dir´ıamos que los segundos se

expresan módulo 60.

Empleemos ahora un punto de vista más formal y riguroso: Dados tres n úmeros

a, b, n ∈ N, decimos que a es congruente con b módulo n, y se escribe:

a ≡ b

(mód n)

si se cumple:

a = b + kn, para alg ún k ∈ Z

Por ejemplo, 37 ≡ 5 (mód 8), ya que 37 = 5 + 4 · 8. De hecho, los n úmeros 5,

-3, 13, -11, 21, -19, 29. . . son todos equivalentes en la aritmética módulo 8, es decir,

forman una clase de equivalencia. Como se puede apreciar, cualquier n úmero entero

pertenecerá necesariamente a alguna de esas clases, y en general, tendremos n clases

de equivalencia módulo n (n úmeros congruentes con 0, n úmeros congruentes con 1,

. . . , n úmeros congruentes con n − 1). Por razones de simplicidad, representaremos

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

70

5. Aritmética Modular

cada clase de equivalencia por un n úmero comprendido entre 0 y n−1. De esta forma,

en nuestro ejemplo (m ódulo 8) tendremos el conjunto de clases de equivalencia {0,

1, 2, 3, 4, 5, 6, 7}, al que denominaremos Z8. Podemos definir ahora las operaciones

suma y producto en este tipo de conjuntos:

a + b ≡ c (mód n) ⇐⇒ a + b = c + kn

k ∈ Z

ab ≡ c (mód n) ⇐⇒ ab = c + kn

k ∈ Z

Propiedades de la suma:

Asociativa: ∀a, b, c ∈ Zn (a + b) + c ≡ a + (b + c) (mód n)

Conmutativa: ∀a, b ∈ Zn a + b ≡ b + a (mód n)

Elemento Neutro: ∀a ∈ Zn ∃ 0 tal que a + 0 ≡ a (mód n)

Elemento Simétrico (opuesto): ∀a ∈ Zn ∃ b tal que a + b ≡ 0 (mód n)

Propiedades del producto:

Asociativa: ∀a, b, c ∈ Zn (a · b) · c ≡ a · (b · c) (mód n)

Conmutativa: ∀a, b ∈ Zn a · b ≡ b · a (mód n)

Elemento Neutro: ∀a ∈ Zn ∃ 1 tal que a · 1 ≡ a (mód n)

Propiedades del producto con respecto de la suma:

Distributiva: ∀a, b, c ∈ Zn (a + b) · c ≡ (a · c) + (b · c) (mód n)

La operaci ón suma cumple las propiedades asociativa y conmutativa y posee ele-

mentos neutro y simétrico. Podemos decir por tanto que el conjunto Zn, junto con

esta operaci ón, tiene estructura de grupo conmutativo. A partir de ahora llamaremos

grupo finito inducido por n a dicho conjunto.

Con la operaci ón producto se cumplen las propiedades asociativa y conmutativa,

y tiene elemento neutro, pero no necesariamente simétrico —recordemos que al ele-

mento simétrico para el producto se le suele denominar inverso—. La estructura del

conjunto con las operaciones suma y producto es, pues, de anillo conmutativo. Más

adelante veremos bajo qué condiciones existe el elemento simétrico para el producto.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.1. Concepto de Aritmética Modular

71

5.1.1.

Algoritmo de Euclides

Quizá sea el algoritmo más antiguo que se conoce, y a la vez es uno de los más

útiles. Permite obtener de forma eficiente el máximo com ún divisor de dos n úmeros.

Sean a y b dos n úmeros enteros de los que queremos calcular su máximo com ún

divisor m. El Algoritmo de Euclides explota la siguiente propiedad:

m|a ∧ m|b =⇒ m|(a − kb) con k ∈ Z =⇒ m|(a mód b)

a|b quiere decir que a divide a b, o en otras palabras, que b es m últiplo de a, mientras

que (a mód b) representa el resto de dividir a entre b. En esencia estamos diciendo,

que, puesto que m divide tanto a a como a b, debe dividir a su diferencia. Entonces si

restamos k veces b de a, llegará un momento en el que obtengamos el resto de dividir

a por b, o sea a mód b.

Si llamamos c a (a mód b), podemos aplicar de nuevo la propiedad anterior y te-

nemos:

m|(b mód c)

Sabemos, pues, que m tiene que dividir a todos los restos que vayamos obtenien-

do. Es evidente que el último de ellos será cero, puesto que los restos siempre son

inferiores al divisor. El pen último valor obtenido es el mayor n úmero que divide

tanto a a como a b, o sea, el máximo com ún divisor de ambos. El algoritmo queda

entonces como sigue:

int euclides(int a, int b)

{ int i;

int g[];

g[0]=a;

g[1]=b;

i=1;

while (g[i]!=0)

{ g[i+1]=g[i-1]%g[i];

i++;

}

return(g[i-1]);

}

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

72

5. Aritmética Modular

El invariante —condici ón que se mantiene en cada iteraci ón— del Algoritmo de

Euclides es el siguiente:

gi+1 = gi−1

(mód gi)

y su orden de complejidad será de O((log2(n))2) operaciones a nivel de bit, siendo n

una cota superior de a y b.

5.1.2.

Complejidad de las Operaciones Aritméticas en Zn

La complejidad algor´ıtmica de las operaciones aritméticas modulares es la misma

que la de las no modulares:

Suma modular ((a + b) mód n): O(log (a) + log (b)) = O(log (n))

2

2

2

Resta modular ((a − b) mód n): O(log (a) + log (b)) = O(log (n))

2

2

2

Multiplicaci ón modular ((a · b) mód n): O(log (a) · log (b)) = O((log (n))2)

2

2

2

5.2.

Cálculo de Inversas en Zn

5.2.1.

Existencia de la Inversa

Hemos comentado en la secci ón 5.1 que los elementos de un grupo finito no tie-

nen por qué tener inversa —elemento simétrico para el producto—. En este apartado

veremos qué condiciones han de cumplirse para que exista la inversa de un n úmero

dentro de un grupo finito.

Definición: Dos n úmeros enteros a y b se denominan primos entre s´ı (o coprimos), si

mcd(a, b) = 1.

Lema: Dados a,n ∈ N

mcd(a, n) = 1 =⇒ ai 6= aj

(mód n)

∀ i 6= j

0 < i, j < n

(5.1)

Demostración: Supongamos que mcd(a, n) = 1, y que existen i 6= j tales que ai ≡

aj(mód n). Se cumple, pues:

n|(ai − aj) =⇒ n|a(i − j)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.2. Cálculo de Inversas en Zn

73

puesto que a y n son primos entre s´ı, n no puede dividir a a, luego

n|(i − j) =⇒ i ≡ j

(mód n)

con lo que hemos alcanzado una contradicci ón.

Ahora podemos hacer la siguiente reflexi ón: Si ai 6= aj para cualesquiera i 6= j,

multiplicar a por todos los elementos del grupo finito m ódulo n nos producirá una

permutaci ón de los elementos del grupo (exceptuando el cero), por lo que forzosa-

mente ha de existir un valor tal que al multiplicarlo por a nos dé 1. Eso nos conduce

al siguiente teorema:

Definición: Un n úmero entero p ≥ 2 se dice primo si sus únicos divisores positivos

son 1 y p. En caso contrario se denomina compuesto.

Teorema: Si mcd(a, n) = 1, a tiene inversa m ódulo n.

Corolario: Si n es primo, el grupo finito que genera tiene estructura de cuerpo

—todos sus elementos tienen inversa para el producto excepto el cero—. Estos cuer-

pos finitos tienen una gran importancia en Matemáticas, se denominan Cuerpos de

Galois, y su notaci ón es GF (n).

5.2.2.

Funci ón de Euler

Llamaremos conjunto reducido de residuos módulo n —y lo notaremos ∗

Z — al con-

n

junto de n úmeros primos relativos con n. En otras palabras, ∗

Z es el conjunto de todos

n

los n úmeros que tienen inversa m ódulo n. Por ejemplo, si n fuera 12, su conjunto re-

ducido de residuos ser´ıa:

{1, 5, 7, 11}

Existe una expresi ón que permite calcular el n úmero de elementos —el cardinal—

del conjunto reducido de residuos m ódulo n:

n

Y

| ∗

Z | =

pei−1(p

n

i

i − 1)

(5.2)

i=1

siendo pi los factores primos de n y ei su multiplicidad. Por ejemplo, si n fuera el

producto de dos n úmeros primos p y q, | ∗

Z | = (p − 1)(q − 1).

n

Se define la función de Euler sobre n, y se escribe φ(n), como el cardinal de ∗

Z , es

n

decir:

φ(n) = | ∗

Z |

n

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

74

5. Aritmética Modular

Teorema: Si mcd(a, n) = 1:

aφ(n) ≡ 1

(mód n)

(5.3)

Demostración: Puesto que a y n son primos entre s´ı, a multiplicado por cualquier

elemento del conjunto reducido de residuos m ódulo n {r1, . . . , rφ(n)} ha de ser tam-

bién primo con n, por lo tanto el conjunto {ar1, . . . , arφ(n)} no es más que una permu-

taci ón del conjunto anterior, lo cual nos lleva a:

φ(n)

φ(n)

φ(n)

Y

Y

Y

ri =

ari = aφ(n)

ri =⇒ aφ(n) ≡ 1

(mód n)

i=1

i=1

i=1

(Peque ˜no) Teorema de Fermat: Si p es primo, entonces

ap−1 ≡ 1

(mód p)

(5.4)

Como consecuencia de este último teorema podemos deducir que si p es un n úme-

ro primo y

r ≡ s

(mód p − 1),

entonces

ar ≡ as

(mód p),

sea cual sea el valor de a. Por lo tanto, cuando trabajamos m ódulo p, siendo p primo,

los exponentes pueden ser reducidos m ódulo p − 1.

Definición: Sea a ∈

∗

Z . Se define el orden de a, denotado ord(a), como el menor

n

entero positivo t tal que at ≡ 1 (mód n).

Existe una interesante propiedad de ord(a). Si as ≡ 1 (mód n), entonces ord(a)

divide a s. En particular, tenemos que ord(a) siempre divide a φ(n).

Después de todo lo expuesto, queda claro que uno de los posibles métodos para

calcular inversas m ódulo n, es precisamente la Funci ón de Euler, puesto que:

aφ(n) = aaφ(n)−1 ≡ 1

(mód n) =⇒ a−1 ≡ aφ(n)−1

(mód n)

5.2.3.

Algoritmo Extendido de Euclides

El Algoritmo Extendido de Euclides también puede ser empleado para calcular

inversas. Es una ampliaci ón del de Euclides, que posee el mismo orden de comple-

jidad, y que se obtiene simplemente al tener en cuenta los cocientes además de los

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.2. Cálculo de Inversas en Zn

75

restos en cada paso. El invariante que mantiene es el siguiente, suponiendo que se le

pasen como parámetros n y a:

gi = nui + avi

El último valor de gi será el máximo com ún divisor entre a y n, que valdrá 1 si

estos n úmeros son primos relativos, por lo que tendremos:

1 = nui + avi

o sea,

avi ≡ 1

(mód n)

luego (vi mód n) será la inversa de a m ódulo n.

Nuestra segunda alternativa para calcular inversas, cuando desconozcamos φ(n),

será pues el Algoritmo Extendido de Euclides. En la implementaci ón que damos, co-

mo puede apreciarse, calculamos tanto los ui como los vi, aunque luego en la práctica

s ólo empleemos estos últimos. Obsérvese también la segunda cláusula while, que

tiene como único fin que el valor devuelto esté comprendido entre 0 y n − 1.

int inversa(int n, int a)

{ int c,i;

int g[],u[],v[];

g[0]=n; g[1]=a;

u[0]=1; u[1]=0;

v[0]=0; v[1]=1;

i=1;

while (g[i]!=0)

{ c=g[i-1]/g[i];

g[i+1]=g[i-1]%g[i];

u[i+1]=u[i-1]-c*u[i];

v[i+1]=v[i-1]-c*v[i];

i++;

}

while (v[i-1]<0) v[i-1]=v[i-1]+n;

return(v[i-1]%n);

}

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

76

5. Aritmética Modular

5.3.

Teorema Chino del Resto

El Teorema Chino del Resto es una potente herramienta matemática, que posee

interesantes aplicaciones criptográficas.

Teorema: Sea p1, . . . pr una serie de n úmeros primos entre s´ı, y n = p1 · p2 · . . . · pr,

entonces el sistema de ecuaciones en congruencias

x ≡ xi

(mód pi)

i = 1, . . . , r

(5.5)

tiene una única soluci ón com ún en [0, n − 1], que viene dada por la expresi ón:

r

X n

x =

(n/pi)−1 (mód pi) xi (mód n)

(5.6)

pi

i=1

h

i

Demostración: Para cada i, mcd pi, n

p

= 1. Por lo tanto, cada n debe tener una

i

pi

inversa yi tal que

n yi ≡ 1 (mód pi)

pi

También se cumple

n yi ≡ 0 (mód pj)

∀i 6= j

pi

ya que n

p es m últiplo de cada pj.

i

r

X n

Sea x =

yixi (mód n). Entonces x es una soluci ón a (5.5), ya que

pi

i=1

X n

n

x =

ykxk +

yixi = 0 + 1 · xi ≡ xi

(mód pi).

pk

pi

k6=i

Como puede apreciarse, esta demostraci ón nos proporciona además una soluci ón

al sistema de ecuaciones (5.5), lo cual puede resultarnos de gran utilidad para ciertas

aplicaciones, como por ejemplo, el algoritmo RSA (ver secci ón 12.3).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.4. Exponenciaci ón. Logaritmos Discretos

77

5.4.

Exponenciaci ón. Logaritmos Discretos

Muchos de los algoritmos de llave p ública emplean exponenciaciones dentro de

grupos finitos para codificar los mensajes. Tanto las bases como los exponentes en

esos casos son n úmeros astron ómicos, incluso de miles de bits de longitud. Efectuar

las exponenciaciones mediante multiplicaciones reiterativas de la base ser´ıa inviable.

En esta secci ón veremos mecanismos eficientes para llevar a cabo estas operaciones.

También comentaremos brevemente el problema inverso, el cálculo de los logarit-

mos discretos, puesto que en su dificultad intr´ınseca se apoyan muchos algoritmos

criptográficos.

5.4.1.

Algoritmo Rápido de Exponenciaci ón

Supongamos que tenemos dos n úmeros naturales a y b, y queremos calcular ab. El

mecanismo más sencillo ser´ıa multiplicar a por s´ı mismo b veces. Sin embargo, para

valores muy grandes de b este algoritmo no nos sirve.

Tomemos la representaci ón binaria de b:

b = 20b0 + 21b1 + 22b2 + . . . + 2nbn

Expresemos la potencia que vamos a calcular en funci ón de dicha representaci ón:

n

Y

ab = a20b0+21b1+22b2+...+2nbn =

a2ibi

i=0

recordemos que los bi s ólo pueden valer 0 ó 1, por tanto para calcular ab s ólo hemos

de multiplicar los a2i correspondientes a los d´ıgitos binarios de b que valgan 1.

N ótese, además, que a2i = (a2i−1)2, por lo que, partiendo de a, podemos calcular

el siguiente valor de esta serie elevando al cuadrado el anterior. El Algoritmo Rápido

de Exponenciaci ón queda como sigue:

int exp_rapida(int a, int b)

{ int z,x,resul;

z=b;

x=a;

resul=1;

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

78

5. Aritmética Modular

while (z>0)

{ if (z%2==1)

resul=resul*x;

x=x*x;

z=z/2;

}

return(resul);

}

La variable z se inicializa con el valor de b y se va dividiendo por 2 en cada paso

para tener siempre el i-ésimo bit de b en el menos significativo de z. En la variable x

se almacenan los valores de a2i.

La extensi ón a Zn de este algoritmo es muy simple, pues bastar´ıa sustituir las ope-

raciones producto por el producto m ódulo n, mientras que su orden de complejidad,

siendo n una cota superior de a, b y ab es de O(log(n)) multiplicaciones sobre n úmeros

de tama ˜no log(n), por lo que nos queda O((log(n))3) operaciones a nivel de bit.

5.4.2.

El Problema de los Logaritmos Discretos

El problema inverso de la exponenciaci ón es el cálculo de logaritmos discretos.

Dados dos n úmeros a, b y el m ódulo n, se define el logaritmo discreto de a en base b

m ódulo n como:

c = log (a)

(mód n) ⇐⇒ a ≡ bc

(mód n)

b

(5.7)

En la actualidad no existen algoritmos eficientes que sean capaces de calcular en

tiempo razonable logaritmos de esta naturaleza, y muchos esquemas criptográficos

basan su resistencia en esta circunstancia. El problema de los logaritmos discretos

está ´ıntimamente relacionado con el de la factorizaci ón, de hecho está demostrado

que si se puede calcular un logaritmo, entonces se puede factorizar fácilmente (el

rec´ıproco no se ha podido demostrar).

5.4.3.

El Problema de Diffie-Hellman

El problema de Diffie-Hellman está ´ıntimamente relacionado con el problema

de los Logaritmos Discretos, y es la base de algunos sistemas criptográficos de cla-

ve p ública, como el de Diffie-Hellman (apartado 12.4.1) y el de ElGamal (apartado

12.4.2).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.5. Importancia de los N úmeros Primos

79

Antes de enunciarlo definiremos el término generador. Dado el conjunto ∗

Z , con p

p

primo, diremos que α ∈ ∗

∗

Z es un generador de

, si se cumple

p

Zp

∀ b ∈

∗

Z , ∃ i tal que αi = b

p

El enunciado del problema es el siguiente: dado un n úmero primo p, un n úmero

α que sea un generador de ∗

Z , y los elementos αa y αb, encontrar αab (mód p).

p

N ótese que nosotros conocemos αa y αb, pero no el valor de a ni el de b. De hecho,

si pudiésemos efectuar de forma eficiente logaritmos discretos, ser´ıa suficiente con

calcular a y luego (αb)a = αab.

5.5.

Importancia de los N úmeros Primos

Para explotar la dificultad de cálculo de logaritmos discretos, muchos algoritmos

criptográficos de clave p ública se basan en operaciones de exponenciaci ón en gru-

pos finitos. Dichos conjuntos deben cumplir la propiedad de que su m ódulo n sea

un n úmero muy grande con pocos factores —usualmente dos—. Estos algoritmos

funcionan si se conoce n y sus factores se mantienen en secreto. Habitualmente para

obtener n se calculan primero dos n úmeros primos muy grandes, que posteriormen-

te se multiplican. Necesitaremos pues mecanismos para poder calcular esos n úmeros

primos grandes.

La factorizaci ón es el problema inverso a la multiplicaci ón: dado n, se trata de

buscar un conjunto de n úmeros tales que su producto valga n. Normalmente, y para

que la soluci ón sea única, se impone la condici ón de que los factores de n que obten-

gamos sean todos primos elevados a alguna potencia. Al igual que para el problema

de los logaritmos discretos, no existen algoritmos eficientes para efectuar este tipo de

cálculos. Esto nos permite confiar en que, en la práctica, será imposible calcular los

factores de n , incluso disponiendo de elevados recursos computacionales.

En cuanto al cálculo de primos grandes, bastar´ıa con aplicar un algoritmo de fac-

torizaci ón para saber si un n úmero es primo o no. Este mecanismo es inviable, puesto

que acabamos de decir que no hay algoritmos eficientes de factorizaci ón. Por suerte,

s´ı que existen algoritmos probabil´ısticos que permiten decir con un grado de certeza

bastante elevado si un n úmero cualquiera es primo o compuesto.

Cabr´ıa preguntarse, dado que para los algoritmos asimétricos de cifrado necesi-

taremos generar muchos n úmeros primos, si realmente hay suficientes. De hecho se

puede pensar que, a fuerza de generar n úmeros, llegará un momento en el que re-

pitamos un primo generado con anterioridad. Podemos estar tranquilos, porque si a

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

80

5. Aritmética Modular

cada átomo del universo le asignáramos mil millones de n úmeros primos cada mi-

crosegundo desde su origen hasta hoy, har´ıan falta un total de 10109 n úmeros primos

diferentes, mientras que el total estimado de n úmeros primos de 512 bits o menos es

aproximadamente de 10151.

También podr´ıamos pensar en calcular indiscriminadamente n úmeros primos pa-

ra luego emplearlos en alg ún algoritmo de factorizaci ón rápida. Por desgracia, si qui-

siéramos construir un disco duro que albergara diez mil GBytes por cada gramo de

masa y mil´ımetro c úbico para almacenar todos los primos de 512 bits o menos, el

artilugio pesar´ıa más de 10135 Kg y ocupar´ıa casi 10130 metros c úbicos, es decir, ser´ıa

miles de billones de veces más grande y pesado que la V´ıa Láctea.

5.6.

Algoritmos de Factorizaci ón

Como bien es sabido, la descomposici ón de un n úmero entero n = pe1 · pe2 . . . pek

1

2

,

k

siendo pi n úmeros primos y ei n úmeros enteros mayores que 0, es única. Cuando tra-

tamos de obtener la factorizaci ón de n, normalmente nos conformamos con alcanzar

una descomposici ón n = a · b no trivial —la descomposici ón trivial es aquella en la

que a = n y b = 1—. En tal caso, y puesto que tanto a como b son menores que n, po-

demos aplicar el mismo algoritmo de forma recursiva hasta que recuperemos todos

los factores primos. Esta es la raz ón por la que los algoritmos de factorizaci ón suelen

limitarse a dividir n en dos factores.

También conviene apuntar el hecho de que, como se verá en la secci ón 5.7, es

mucho más eficiente comprobar si un n úmero es primo que tratar de factorizarlo,

por lo que normalmente se recomienda aplicar primero un test de primalidad para

asegurarse de que el n úmero puede descomponerse realmente de alguna manera no

trivial.

Finalmente, queda la posibilidad de que n tenga un único factor, elevado a una

potencia superior a 1. Afortunadamente, existen métodos capaces de verificar si n es

una potencia perfecta xk, con k > 1, por lo que todos los algoritmos que comenta-

remos en esta secci ón partirán de la suposici ón de que n tiene al menos dos factores

primos diferentes.

El algoritmo más sencillo e intuitivo para tratar de factorizar un n úmero n es

probar a dividirlo por todos los n úmeros enteros positivos comprendidos entre 2 y

√n. Evidentemente, este método es del todo inaceptable en cuanto n alcanza valores

elevados, y ha sido ampliamente mejorado por otras técnicas que, sin llegar a ser real-

mente eficientes, son mucho más rápidas que la fuerza bruta. En esta secci ón haremos

un breve repaso a algunos de los métodos más interesantes aparecidos hasta la fecha.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.6. Algoritmos de Factorizaci ón

81

5.6.1.

Método de Fermat

Para factorizar n, el método de Fermat intenta representarlo mediante la expresi ón

n = x2 − y2

(5.8)

con x, y ∈ Z, x, y ≥ 1. Es fácil ver que

n = (x + y)(x − y) = a · b

donde a y b serán dos factores de n. El método de Fermat empieza tomando x0 co-

√

mo el primer entero mayor que

n. Se comprueba entonces que y0 = x2 − n es un

0

cuadrado perfecto, y en caso contrario se calcula xi+1 = xi + 1. Usando la siguiente

expresi ón:

yi+1 = x2

− n = (x

− n + 2x

i+1

i + 1)2 − n = x2

i

i + 1 = yi + 2xi + 1

se puede obtener el siguiente yi haciendo uso únicamente de operaciones sencillas.

En cuanto encontremos un yi que sea un cuadrado perfecto, habremos dado con una

factorizaci ón de n. Por ejemplo, vamos a intentar factorizar el n úmero 481:

x0 = 22

y0 = 3

2x0 + 1 = 45

x1 = 23

y1 = 48

2x1 + 1 = 47

x2 = 24

y2 = 95

2x2 + 1 = 49

x3 = 25

y3 = 144

Como puede verse, y3 es el cuadrado de 12, luego podemos poner:

481 = (25 + 12)(25 − 12) = 13 · 37

Este método permite a ún varios refinamientos, pero en cualquier caso resulta in-

viable cuando el n úmero n a factorizar es lo suficientemente grande, ya que presenta

un orden de complejidad para el peor caso de O(n) —n ótese que al ser lineal en n,

resulta exponencial en el tama ˜no de n—.

5.6.2.

Método p − 1 de Pollard

Este método se basa en poseer un m últiplo cualquiera m de p−1, siendo p un factor

primo de n. Todo ello, por supuesto, sin conocer el valor de p. Para ello necesitaremos

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

82

5. Aritmética Modular

definir el concepto de uniformidad. Diremos que n es B–uniforme si todos sus factores

primos son menores o iguales a B.

Llegados a este punto, suponemos que p es un factor de n y p − 1 es B1–uniforme,

con B1 suficientemente peque ˜no. Calcularemos m como el producto de todos los

n úmeros primos inferiores a B1, elevados a la máxima potencia que los deje por de-

bajo de n. De esta forma, garantizamos que m es un m últiplo de p − 1, aunque no

conozcamos el valor de p. Una vez obtenido el valor de m, el algoritmo de factoriza-

ci ón queda como sigue:

1. Escoger un n úmero a aleatorio dentro del conjunto {2, . . . , n − 1}.

2. Calcular d = mcd(a, n). Si d > 1, d es un factor de n. Fin.

3. Calcular x = (am mód n).

4. Calcular d = mcd(x − 1, n). Si d > 1, d es un factor de n. Fin.

5. Devolver fallo en la b úsqueda de factores de n. Fin.

N ótese que, en el paso 3, puesto que m es m últiplo de p − 1, x deber´ıa ser con-

gruente con 1 m ódulo p, luego x − 1 deber´ıa ser m últiplo de p, por lo que el paso 4

deber´ıa devolver p.

Está demostrado que este algoritmo tiene un 50 % de probabilidades de encontrar

un valor de a que permita obtener un factor de n. Ejecutándolo, pues, varias veces, es

bastante probable que podamos hallar alg ún factor de n.

Como ejemplo, vamos a tratar de factorizar el n úmero 187, suponiendo que al-

guno de sus factores es 3–uniforme. En tal caso m = 27 · 34 = 10368. Sea a = 2,

entonces x = (210368 mód 187) = 69. Calculando mcd(68, 187) nos queda 17, que divi-

de a 187, por lo que 187 = 17 · 13.

El orden de eficiencia de este algoritmo es de O(B log (n))

B

operaciones de multi-

plicaci ón modular, suponiendo que n tiene un factor p tal que p − 1 es B–uniforme.

5.6.3.

Métodos Cuadráticos de Factorizaci ón

Los métodos cuadráticos de factorizaci ón se basan en la ecuaci ón

x2 ≡ y2

(mód n)

(5.9)

Siempre y cuando x 6≡ ±y (mód n), tenemos que (x2 − y2) es m últiplo de n, y por

lo tanto

n|(x − y)(x + y)

(5.10)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.6. Algoritmos de Factorizaci ón

83

Adicionalmente, puesto que tanto x como y son menores que n, n no puede ser divi-

sor de (x + y) ni de (x − y). En consecuencia, n ha de tener factores comunes tanto con

(x+y) como con (x−y), por lo que el valor d = mcd(n, x−y) debe ser un divisor de n.

Se puede demostrar que si n es impar, no potencia de primo y compuesto, entonces

siempre se pueden encontrar x e y.

Para localizar un par de n úmeros satisfactorio, en primer lugar elegiremos un

conjunto

F = {p0, p1, . . . , pt−1}

formado por t n úmeros primos diferentes, con la salvedad de que p0 puede ser igual

a −1. Buscaremos ahora ecuaciones en congruencias con la forma

x2 ≡ z

i

i

(mód n)

(5.11)

tales que zi se pueda factorizar completamente a partir de los elementos de F . El si-

guiente paso consiste en buscar un subconjunto de los zi tal que el producto de todos

sus elementos, al que llamaremos z, sea un cuadrado perfecto. Puesto que tenemos

la factorizaci ón de los zi, basta con escoger estos de forma que la multiplicidad de

sus factores sea par. Este problema equivale a resolver un sistema de ecuaciones li-

neales con coeficientes en Z2. Multiplicando los x2 correspondientes a los factores de

i

z escogidos, tendremos una ecuaci ón del tipo que necesitamos, y por lo tanto una

factorizaci ón de n.

Criba Cuadrática

Este método se basa en emplear un polinomio de la forma

q(x) = (x + m)2 − n

√

siendo m = b nc, donde bxc representa la parte entera de x. Puede comprobarse que

q(x) = x2 + 2mx + m2 − n ≈ x2 + 2mx

es un valor peque ˜no en relaci ón con n, siempre y cuando x en valor absoluto sea

peque ˜no. Si escogemos xi = ai + m y zi = q(ai), tendremos que se cumple la relaci ón

(5.11).

Lo único que nos queda es comprobar si zi puede descomponerse totalmente con

los elementos de F . Esto se consigue con la fase de criba, pero antes nos fijaremos en

que si pi ∈ F divide a q(x), también dividirá a q(x + kp). Calcularemos la soluci ón de

la ecuaci ón

q(x) ≡ 0

(mód p)

(5.12)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

84

5. Aritmética Modular

obteniendo una o dos series —dependiendo del n úmero de soluciones que tenga la

ecuaci ón— de valores y tales que p divide a q(y).

La criba propiamente dicha se lleva a cabo definiendo un vector Q[x], con −M ≤

x ≤ M , que se inicializa seg ún la expresi ón Q[x] = blog |q(x)|c. Sean x1, x2 las solu-

ciones a (5.12). Entonces restamos el valor blog(p)c a aquellas entradas Q[x] tales que

x sea igual a alg ún valor de las series de soluciones obtenidas en el paso anterior. Fi-

nalmente, los valores de Q[x] que se aproximen a cero son los más susceptibles de ser

descompuestos con los elementos de F , propiedad que se puede verificar de forma

directa tratando de dividirlos.

Criba del Cuerpo de N úmeros

Hoy por hoy es el algoritmo de factorizaci ón más rápido que se conoce, y fue em-

pleado con éxito en 1996 para factorizar un n úmero de 130 d´ıgitos decimales. Es una

extensi ón de la criba cuadrática, que emplea una segunda base de factores, esta vez

formada por polinomios irreducibles. Los detalles de este método de factorizaci ón

requieren unos conocimientos algebraicos que escapan a los contenidos de este libro,

por lo que se recomienda al lector que acuda a la bibliograf´ıa si desea conocer más a

fondo este algoritmo de factorizaci ón.

5.7.

Tests de Primalidad

Como ya hemos dicho, no es viable tratar de factorizar un n úmero para saber si

es o no primo, pero existen métodos probabil´ısticos que nos pueden decir con un alto

grado de certeza si un n úmero es o no compuesto. En esta secci ón veremos algunos

de los algoritmos más comunes para verificar que un n úmero sea primo.

5.7.1.

Método de Lehmann

Es uno de los tests más sencillos para saber si un n úmero p es o no primo:

1. Escoger un n úmero aleatorio a < p.

2. Calcular b = a(p−1)/2 (mód p).

3. Si b 6= 1 (mód p) y b 6= −1 (mód p), p no es primo.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.7. Tests de Primalidad

85

4. Si b ≡ 1 (mód p) ó b ≡ −1 (mód p), la probabilidad de que p sea primo es igual

o superior al 50 %.

Repitiendo el algoritmo n veces, la probabilidad de que p supere el test y sea

compuesto —es decir, no primo— será de 1 contra 2n.

5.7.2.

Método de Rabin-Miller

Es el algoritmo más empleado, debido a su facilidad de implementaci ón. Sea p el

n úmero que queremos saber si es primo. Se calcula b, siendo b el n úmero de veces

que 2 divide a (p − 1), es decir, 2b es la mayor potencia de 2 que divide a (p − 1).

Calculamos entonces m, tal que p = 1 + 2b ∗ m.

1. Escoger un n úmero aleatorio a < p.

2. Sea j = 0 y z = am (mód p).

3. Si z = 1, o z = p − 1, entonces p pasa el test y puede ser primo.

4. Si j > 0 y z = 1, p no es primo.

5. Sea j = j + 1. Si j = b y z 6= p − 1, p no es primo.

6. Si j < b y z 6= p − 1, z = z2 (mód p). Volver al paso (4).

7. Si j < b y z = p − 1, entonces p pasa el test y puede ser primo.

8. p no es primo.

La probabilidad de que un n úmero compuesto pase este algoritmo para un n úme-

ro a es del 25 %. Esto quiere decir que necesitaremos menos pasos para llegar al mis-

mo nivel de confianza que el obtenido con el algoritmo de Lehmann.

5.7.3.

Consideraciones Prácticas

A efectos prácticos, el algoritmo que se suele emplear para generar aleatoriamente

un n úmero primo p es el siguiente:

1. Generar un n úmero aleatorio p de n bits.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

86

5. Aritmética Modular

2. Poner a uno el bit más significativo —garantizamos que el n úmero es de n bits—

y el menos significativo —debe ser impar para poder ser primo—.

3. Intentar dividir p por una tabla de primos precalculados (usualmente aquellos

que sean menores que 2000). Esto elimina gran cantidad de n úmeros no primos

de una forma muy rápida. Baste decir a t´ıtulo informativo que más del 99.8 %

de los n úmeros impares no primos es divisible por alg ún n úmero primo menor

que 2000.

4. Ejecutar el test de Rabin-Miller sobre p como m´ınimo cinco veces.

5. Si el test falla, incrementar p en dos unidades y volver al paso 3.

5.7.4.

Primos fuertes

Debido a que muchos algoritmos de tipo asimétrico (ver cap´ıtulo 12) basan su po-

tencia en la dificultad para factorizar n úmeros enteros grandes, a lo largo de los a ˜nos

se propusieron diversas condiciones que deb´ıan cumplir los n úmeros empleados en

aplicaciones criptográficas para que no fueran fáciles de factorizar. Se empez ó enton-

ces a hablar de n úmeros primos fuertes.

Sin embargo, en diciembre de 1998, Ronald Rivest y Robert Silverman publicaron

un trabajo en el que quedaba demostrado que no era necesario emplear primos fuertes

para los algoritmos asimétricos. En él se argumentaba que la supuesta necesidad de

n úmeros de este tipo surgi ó para dificultar la factorizaci ón mediante ciertos métodos

—como por ejemplo, el método “p−1”—, pero la aparici ón de técnicas más modernas

como la de Lenstra, basada en curvas el´ıpticas, o la criba cuadrática, hac´ıa que se

ganase poco o nada con el empleo de este tipo de n úmeros primos.

5.8.

Anillos de Polinomios

Definición: Si tenemos un anillo conmutativo R, entonces un polinomio con varia-

ble x sobre el anillo R tiene la siguiente forma

f (x) = anxn + an−1xn−1 + · · · + a1x + a0

donde cada ai ∈ R y n ≥ 0. El elemento ai se denomina coeficiente i–ésimo de f (x), y

el mayor m para el cual am 6= 0 se denomina grado de f (x). Si f (x) = a0 con a0 6= 0,

entonces se dice que f (x) tiene grado 0. Si todos los coeficientes de f (x) valen 0,

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.8. Anillos de Polinomios

87

se dice que el grado de f (x) es −∞. Finalmente, un polinomio se dice mónico si su

coeficiente de mayor grado vale 1.

Podemos definir las operaciones suma y producto de polinomios de la siguiente

forma, siendo f (x) = anxn + · · · + a0 y g(x) = bmxm + · · · + b0:

Suma: f (x) + g(x) = P crxr, donde ci = ai + bi.

Producto: f (x) · g(x) = P crxr, donde ci = P ajbk, tal que j + k = i.

La suma de polinomios cumple las propiedades asociativa, conmutativa, elemen-

to neutro y elemento simétrico, mientras que el producto cumple la asociativa, con-

mutativa y elemento neutro. El conjunto de polinomios definidos en un anillo R, que

notaremos R[x], con las operaciones suma y producto, tiene en consecuencia estruc-

tura de anillo conmutativo.

Dados f (x), g(x) ∈ R[x], existen dos polinomios únicos c(x) y r(x), tales que

f (x) = g(x)c(x)+r(x). Esta operaci ón es la divisi ón de polinomios, donde c(x) desem-

pe ˜na el papel de cociente, y r(x) el de resto, y tiene propiedades análogas a la de en-

teros. Eso nos permite definir una aritmética modular sobre polinomios, igual que la

que ya hemos definido para enteros.

Definición: Se dice que g(x) es congruente con h(x) m ódulo f (x), y se nota

g(x) ≡ h(x)

(mód f (x))

si

g(x) = h(x) + k(x)f (x), para alg ún k(x) ∈ R[x]

Definición: Un polinomio f (x) en R[x] induce un conjunto de clases de equiva-

lencia de polinomios en R[x], donde cada clase posee al menos un representante de

grado menor que el de f (x). La suma y multiplicaci ón pueden llevarse a cabo, por

tanto, m ódulo f (x), y tienen estructura de anillo conmutativo.

Definición: Decimos que un polinomio f (x) ∈ R[x] de grado mayor o igual a 1 es

irreducible si no puede ser puesto como el producto de otros dos polinomios de grado

positivo en R[x].

Aunque no lo demostraremos aqu´ı, se puede deducir que si un polinomio es irre-

ducible, el conjunto de clases de equivalencia que genera tiene estructura de cuerpo.

N ótese que en este caso, el papel que desempe ˜naba un n úmero primo es ahora ocu-

pado por los polinomios irreducibles.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

88

5. Aritmética Modular

5.8.1.

Polinomios en Zn

Puesto que, como ya sabemos, Zn es un anillo conmutativo, podemos definir el

conjunto Zn[x] de polinomios con coeficientes en Zn.

Vamos a centrarnos ahora en el conjunto Z2[x]. En este caso, todos los coeficientes

de los polinomios pueden valer únicamente 0 ó 1, por lo que un polinomio puede ser

representado mediante una secuencia de bits. Por ejemplo, f (x) = x3 + x + 1 podr´ıa

representarse mediante el n úmero binario 1011, y g(x) = x2 + 1 vendr´ıa dado por el

n úmero 101.

Podemos ver que f (x) + g(x) = x3 + x2 + x, que viene dado por el n úmero 1110.

Puesto que las operaciones se realizan en Z2, esta suma podr´ıa haber sido realizada

mediante una simple operaci ón or-exclusivo entre los n úmeros binarios que repre-

sentan a f (x) y g(x). Como vemos, ser´ıa muy fácil implementar estas operaciones

mediante hardware, y ésta es una de las principales ventajas de trabajar en Z2[x].

Si escogemos un polinomio irreducible en Z2, podemos generar un cuerpo finito,

o sea, un cuerpo de Galois. Dicho conjunto se representa como GF (2n), siendo n el

grado del polinomio irreducible que lo genera, y tiene gran importancia en Cripto-

graf´ıa, ya que algunos algoritmos de cifrado simétrico, como el estándar de cifrado

AES, se basan en operaciones en GF (2n) (ver secci ón 10.5).

A modo de ejemplo, veamos c ómo funciona la operaci ón producto dentro de estos

conjuntos. Tomemos el polinomio f (x) = x8 + x4 + x3 + x + 1, que es irreducible en

Z2[x], y genera un cuerpo de Galois GF (28). Vamos a multiplicar dos polinomios:

(x5 + x) · (x4 + x3 + x2 + 1) = x9 + x8 + x7 + x5 + x5 + x4 + x3 + x =

= x9 + x8 + x7 + x4 + x3 + x

N ótese que x5 + x5 = 0, dado que los coeficientes están en Z2. Ahora hemos de tomar

el resto m ódulo f (x). Para ello emplearemos el siguiente truco:

x8 + x4 + x3 + x + 1 ≡ 0

(mód f (x)) =⇒ x8 ≡ x4 + x3 + x + 1

(mód f (x))

luego

x9 + x8 + x7 + x4 + x3 + x = x(x8) + x8 + x7 + x4 + x3 + x =

= x(x4 + x3 + x + 1) + (x4 + x3 + x + 1) + x7 + x4 + x3 + x =

= x5 + x4 + x2 + x + x4 + x3 + x + 1 + x7 + x4 + x3 + x =

= x7 + x5 + x4 + x4 + x4 + x3 + x3 + x2 + x + x + x + 1 =

= x7 + x5 + x4 + x2 + x + 1

La ventaja esencial que posee este tipo de conjuntos es que permite llevar a cabo

implementaciones muy sencillas y paralelizables de los algoritmos aritméticos. En

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.9. Ejercicios Resueltos

89

realidad, aunque el orden de complejidad sea el mismo, se logra multiplicar la velo-

cidad por una constante y simplificar el dise ˜no de los circuitos, por lo que se obtienen

sistemas con mayores prestaciones, y a la vez más baratos.

5.9.

Ejercicios Resueltos

1. Comprobar las propiedades de la suma en grupos finitos.

Solución: La suma en grupos finitos cumple las propiedades conmutativa y aso-

ciativa, además de la existencia de elementos neutro y simétrico. Tendremos en

cuenta que:

a ≡ b

(mód n) ⇐⇒ ∃k ∈ Z tal que a = b + k · n

Propiedad conmutativa: Puesto que a + b = b + a, tenemos que

a + b = b + a + k · n

si

k = 0, luego

a + b ≡ b + a

(mód n)

Propiedad asociativa: Puesto que a + (b + c) = (a + b) + c, tenemos que

a + (b + c) = (a + b) + c + k · n

si

k = 0, luego

a + (b + c) ≡ (a + b) + c

(mód n)

Elemento neutro: Trivialmente,

a + 0 = a + k · n

si

k = 0, luego

a + 0 ≡ a

(mód n)

por lo tanto, 0 es el elemento neutro para la suma.

Elemento simétrico: Sea a ∈ Zn y b = n − a, tenemos

a + b = a + (n − a) = k · n

si

k = 1, luego

a + b ≡ 0

(mód n)

por tanto, b es el inverso de a para la suma.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

90

5. Aritmética Modular

2. Comprobar las propiedades del producto en grupos finitos.

Solución: El producto en grupos finitos cumple las propiedades conmutativa y

asociativa, además de la existencia de elemento neutro. Tendremos en cuenta,

al igual que en el ejercicio anterior, que:

a ≡ b

(mód n) ⇐⇒ ∃k ∈ Z tal que a = b + k · n

Propiedad conmutativa: Puesto que a · b = b · a, tenemos que

a · b = b · a + k · n

si

k = 0, luego

a · b ≡ b · a

(mód n)

Propiedad asociativa: Puesto que a · (b · c) = (a · b) · c, tenemos que

a · (b · c) = (a · b) · c + k · n

si

k = 0, luego

a · (b · c) ≡ (a · b) · c

(mód n)

Elemento neutro: Trivialmente,

a · 1 = a + k · n

si

k = 0, luego

a · 1 ≡ a

(mód n)

por lo tanto, 1 es el elemento neutro para el producto.

3. Calcular el valor de la funci ón φ de Euler para los siguientes n úmeros: 64, 611,

2197, 5, 10000.

Solución: Para calcular el valor de la funci ón φ emplearemos la expresi ón (5.2):

64 = 26

φ(64) = 25 · (2 − 1) = 32

611 = 13 · 47

φ(611) = (13 − 1) · (47 − 1) = 552

2197 = 133

φ(2197) = 132 · 12 = 2028

5 es primo

φ(5) = 5 − 1 = 4

10000 = 24 · 54

φ(10000) = 23 · 1 · 53 · 4 = 4000

4. Resolver el siguiente sistema de ecuaciones en congruencias:

x ≡ 12

(mód 17)

x ≡ 13

(mód 64)

x ≡ 8

(mód 27)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

5.9. Ejercicios Resueltos

91

Solución: Emplearemos la expresi ón (5.6) para resolver el sistema:

x ≡ 12

(mód 17)

x ≡ 13

(mód 64)

x ≡ 8

(mód 27)

Puesto que n = 17 · 64 · 27 = 29376, tenemos

x = (29376/17)[1728−1

(mód 17)] · 12+

+(29376/64)(459−1

(mód 64)) · 13+

+(29376/27)(1088−1

(mód 27)) · 8

Calculamos ahora las inversas:

1728

≡

11 (mód 17),

11−1 (mód 17)

=

14

459

≡

11 (mód 64),

11−1 (mód 64)

=

35

1088

≡

8 (mód 27),

8−1 (mód 27)

=

17

Sustituyendo los valores, nos queda

x = 1728 · 14 · 12 + 459 · 35 · 13 + 1088 · 17 · 8 = 647117 ≡ 845

(mód 29376)

5. ¿C ómo calcular´ıa el valor de (210368 mód 187), empleando únicamente lápiz, pa-

pel y calculadora?

Solución: Para calcular el valor de (210368 mód 187), se puede emplear el algorit-

mo de exponenciaci ón rápida (apartado 5.4.1):

r =

1

z = 10368 x =

2

r =

1

z =

5184 x =

4

r =

1

z =

2592 x =

16

r =

1

z =

1296 x =

256

(mód 187) = 69

r =

1

z =

648 x =

4761

(mód 187) = 86

r =

1

z =

324 x =

7396

(mód 187) = 103

r =

1

z =

162 x = 10609

(mód 187) = 137

r =

1

z =

81 x = 18769

(mód 187) = 69

r =

69

z =

40 x =

4761

(mód 187) = 86

r =

69

z =

20 x =

7396

(mód 187) = 103

r =

69

z =

10 x = 10609

(mód 187) = 137

r =

69

z =

5 x = 18769

(mód 187) = 69

r = 4761

(mód 187) = 86 z =

2 x =

4761

(mód 187) = 86

r =

86

z =

1 x =

7396

(mód 187) = 103

r = 8858

(mód 187) = 69

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

92

5. Aritmética Modular

6. Calcule la suma y el producto de los polinomios correspondientes a los n úmeros

binarios 100101 y 1011, dentro del GF (26) definido por el polinomio irreducible

f (x) = x6 + x + 1.

Solución: Para calcular la suma, es suficiente con aplicar un or-exclusivo entre

ambos, por lo tanto:

100101 ⊕ 1011 = 101110 = x5 + x3 + x2 + x

En cuanto al producto, tenemos lo siguiente:

(x5 + x2 + 1)(x3 + x + 1) = x8 + x6 + x5 + x5 + x3 + x2 + x3 + x + 1 =

= x8 + x6 + x2 + x + 1

Ahora nos queda calcular el m ódulo x6 + x + 1. Para ello aplicaremos la propie-

dad

x6 + x + 1 ≡ 0 =⇒ x6 ≡ x + 1

que nos deja

x8 + x6 + x2 + x + 1 = x2 · x6 + x6 + x2 + x + 1 =

= x2(x + 1) + (x + 1) + x2 + x + 1 = x3 + x2 + x + 1 + x2 + x + 1 =

= x3

5.10.

Ejercicios Propuestos

1. Calcule el valor de la funci ón φ de Euler para los n úmeros: 1024, 748, 5000.

2. Resuelva el siguiente sistema de ecuaciones en congruencias:

x ≡ 1

(mód 13)

x ≡ 2

(mód 24)

x ≡ 20

(mód 125)

3. Calcule el valor de 350000 (mód 211).

4. Calcule la suma y el producto de los polinomios correspondientes a los n úmeros

binarios 100011 y 10011, dentro del GF (26) definido por el polinomio irreducible

f (x) = x6 + x + 1.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 6

Curvas El´ıpticas en Criptograf´ıa

La Criptograf´ıa de Curva El´ıptica es una de las disciplinas más prometedoras en

el campo de los cifrados asimétricos. Las curvas el´ıpticas constituyen un formalismo

matemático conocido y estudiado desde hace más de 150 a ˜nos, y presentan una serie

de propiedades que da lugar a problemas dif´ıciles (ver secci ón 5.4) análogos a los

que presentaba la aritmética modular, lo cual las hace válidas para aplicar algunos

de los algoritmos asimétricos más conocidos (ver cap´ıtulo 12). Si bien su estructura

algebraica es algo compleja, su implementaci ón suele resultar tanto o más eficiente

que la aritmética modular, y además con claves mucho más cortas se puede alcanzar

el mismo nivel de seguridad que con otras técnicas.

Las primeras propuestas de uso de las curvas el´ıpticas en Criptograf´ıa fueron he-

chas por Neal Koblitz y Victor Miller en 1985. Precisamente el principal argumen-

to que esgrimen los detractores de estas técnicas es que, si bien las curvas el´ıpticas

han sido objeto de estudio y análisis durante más de un siglo, las propiedades que

pueden estar directamente relacionadas con su calidad como base para un sistema

criptográfico, apenas llevan quince a ˜nos siendo consideradas.

Para introducir el concepto de Curva El´ıptica, vamos a establecer un paralelis-

mo con otro formalismo mucho más cercano e intuitivo: los n úmeros enteros. Como

ya vimos en el cap´ıtulo 5, los n úmeros enteros constituyen un conjunto sobre el que

podemos definir una serie de operaciones, con unas propiedades concretas. Estos

conjuntos y operaciones presentan una estructura que hace surgir problemas compu-

tacionalmente dif´ıciles de tratar. Vamos a hacer exactamente lo mismo con las curvas

el´ıpticas.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

94

6. Curvas El´ıpticas en Criptograf´ıa

Figura 6.1: Gráficas de curvas el´ıpticas. a) y2 = x3 − 5x + 1; b) y2 = x3 − 3x + 4.

6.1.

Curvas El´ıpticas en R

Definición: Una curva el´ıptica sobre R es el conjunto de puntos del plano (x, y) que

cumplen la siguiente ecuaci ón:

y2 = x3 + ax + b

(6.1)

Los coeficientes a y b caracterizan un´ıvocamente cada curva. En la figura 6.1 puede

verse la representaci ón gráfica de dos de ellas —n ótese que la curva se extenderá ha-

cia la derecha hasta el infinito—.

Si x3 + ax + b no tiene ra´ıces m últiples, lo cual es equivalente a que 4a3 + 27b2 6= 0,

entonces la curva correspondiente, en conjunci ón con un punto especial O, llamado

punto en el infinito, más la operaci ón suma que definiremos más adelante, es lo que

vamos a denominar grupo de curva el´ıptica E(R). Hay que recalcar que O es un punto

imaginario situado por encima del eje de abscisas a una distancia infinita, y que por

lo tanto no tiene un valor concreto.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

6.1. Curvas El´ıpticas en R

95

6.1.1.

Suma en E(R)

Ya tenemos un conjunto sobre el que trabajar. Nuestro siguiente paso será definir

una ley de composici ón interna que, dados dos elementos cualesquiera, nos devuel-

va otro que también pertenezca al conjunto. Denominaremos suma a esta operaci ón

y la representaremos mediante el signo ‘+’, de forma totalmente análoga a lo que

hac´ıamos con Z.

Sean los puntos r = (rx, ry), s = (sx, sy), p = (px, py), t = (tx, ty) ∈ E(R), la

operaci ón suma se define de la siguiente forma:

r + O = O + r = r, sea cual sea el valor de r. Esto quiere decir que O desempe ˜na

el papel de elemento neutro para la suma.

Si rx = sx y ry = −sy, decimos que r es el opuesto de s, escribimos r = −s, y

además r + s = s + r = O por definici ón.

Si r 6= s y r 6= −s, entonces para sumarlos se traza la recta que une r con s. Dicha

recta cortará la curva en un punto. La suma t de r y s será el opuesto de dicho

punto (ver figura 6.2a).

Para sumar un punto p consigo mismo, se emplea la tangente a la curva en p. Si

py 6= 0, dicha tangente cortará a la curva en un único punto. La suma t = p + p

será el opuesto de dicho punto (ver figura 6.2b).

Para sumar un punto p consigo mismo, cuando py = 0, la tangente a la curva

será perpendicular al eje de abscisas, por lo que podemos considerar que corta

a la curva en el infinito. Por lo tanto, p + p = O si py = 0.

Por razones de simplicidad en la notaci ón diremos que sumar un punto p consigo

mismo k veces, es como multiplicar dicho punto por el escalar k, y lo notaremos kp

N ótese que, cuando se suma r y −r, la recta que los une resulta perpendicular al

eje de abcisas, por lo que cortará a la curva en el infinito, dando como resultado O.

Compruébese, además, que cuando ry = 0, se cumple:

2r = r + r = O

3r = 2r + r = O + r = r

4r = 3r + r = r + r = O

. . .

Algebraicamente, la suma de curvas el´ıpticas se define de la siguiente forma: Sea

r = (rx, ry) y s = (sx, sy), donde r 6= −s, entonces r + s = t donde

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

96

6. Curvas El´ıpticas en Criptograf´ıa

-t

-t

p

s

r

t

t

a)

b)

Figura 6.2: Interpretaci ón gráfica de la suma de dos puntos en una curva el´ıptica.

r

d = y − sy ;

tx = d2 − rx − sx;

ty = −ry + d(rx − tx)

(6.2)

rx − sx

y cuando queremos sumar un punto consigo mismo, tenemos que 2p = t donde

3p2 + a

d =

x

;

tx = d2 − 2px;

ty = −py + d(px − tx)

(6.3)

2py

Si nos fijamos un poco, podremos observar que d representa a la pendiente de la

recta que une r y s, o bien a la tangente en el punto p.

Obsérvese que cuando introdujimos los grupos finitos en Z, seleccionábamos un

subconjunto de elementos de Z y defin´ıamos la operación suma, junto con sus pro-

piedades, para este subconjunto. Con las curvas el´ıpticas hemos hecho exactamente

lo mismo, s ólo que el subconjunto es extra´ıdo del plano

2

R y la operaci ón suma es

ligeramente más complicada.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

6.2. Curvas El´ıpticas en GF (n)

97

6.2.

Curvas El´ıpticas en GF (n)

Recordemos que un cuerpo de Galois GF (n) es el grupo finito generado por n,

siendo n un n úmero primo. En dicho conjunto todos los elementos menos el cero

tienen inversa, por lo que podemos sumar, restar, multiplicar y dividir exactamente

de la misma forma que en R. Nada nos impide entonces calcular qué puntos cumplen

la ecuaci ón

y2 ≡ x3 + ax + b

(mód n)

definiendo de esta forma el conjunto E(GF (n)).

A modo de ejemplo, vamos a estudiar la curva el´ıptica con a = 7 y b = 4 en

GF (17). En primer lugar, habremos de comprobar, igual que antes, que 4a3 +27b2 6= 0:

4 · 73 + 27 · 42 = 2

(mód 17)

Seguidamente, vamos a ver qué puntos pertenecen a la curva el´ıptica. Si hacemos los

cálculos pertinentes, tenemos los siguientes:

(0,2) (0,15) (2,3) (2,14) (3,1) (3,16)

(11,1) (11,16) (15,4) (15,13) (16,8) (16,9)

N ótese que dado un punto de la curva (x, y), el valor (x, −y) (mod n) también

pertenece a ésta. Calculemos ahora la suma de dos puntos cualesquiera, por ejemplo

(2, 3) y (3, 16), empleando la expresiones de (6.2):

d = (3 − 16)/(2 − 3) = 13

(mód 17)

x = 132 − 2 − 3 = 11

(mód 17)

y = −3 + 13 · (2 − 11) = 16

(mód 17)

luego (2, 3) + (3, 16) = (11, 1). Como cabr´ıa esperar, nos da como resultado un punto

que también pertenece a la curva.

6.3.

Curvas El´ıpticas en GF (2n)

Vamos a dar un paso más. Como ya se vio en la secci ón 5.8.1, los elementos de

GF (pn) —y las operaciones entre ellos— presentan unas propiedades análogas a las

de los elementos de GF (n), con la caracter´ıstica a ˜nadida de que, cuando p = 2, la

implementaci ón de los algoritmos correspondientes es más sencilla y rápida. Defini-

remos entonces, de forma análoga a E(GF (n)), el conjunto E(GF (2n)).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

98

6. Curvas El´ıpticas en Criptograf´ıa

En GF (2n), debido a su especial estructura, la ecuaci ón de curva el´ıptica que

será útil para nuestros prop ósitos es ligeramente diferente a la dada en (6.1). Da-

do un polinomio irreducible p(x), de grado n, las curvas el´ıpticas asociadas vienen

dadas por los puntos que cumplen la ecuaci ón:

y2 + xy ≡ x3 + ax2 + b

(mód p(x))

(6.4)

y la única condici ón necesaria para que genere un grupo es que b 6= 0.

Dentro de GF (2n), los puntos de nuestra curva van a ser pares de polinomios de

grado n − 1 con coeficientes binarios, por lo que podrán ser representados mediante

cadenas de bits.

6.3.1.

Suma en E(GF (2n))

Sean los puntos r = (rx, ry), s = (sx, sy), p = (px, py), t = (tx, ty) ∈ E(GF (2n)), la

operaci ón suma se define de la siguiente forma:

r + O = O + r = r, sea cual sea el valor de r.

Si rx = sx y ry = sx + sy, decimos que r es el opuesto de s, escribimos r = −s, y

además r + s = s + r = O por definici ón.

Si r 6= s y r 6= −s, la suma t = r + s se calcula de la siguiente forma:

s

d = y − ry ;

tx = d2 + d + rx + sx + a;

ty = d(rx + tx) + tx + ry

sx − rx

Para calcular la suma t = 2p, con px 6= 0, se emplea la siguiente f órmula:

p

d = p

y

x +

;

tx = d2 + d + a;

ty = p2 + (d + 1)tx

p

x

x

Finalmente, si px = 0, 2p = O.

6.4.

El Problema de los Logaritmos Discretos en Curvas

El´ıpticas

Tomemos un punto p cualquiera de una curva el´ıptica. Denominaremos hpi al

conjunto {O, p, 2p, 3p,. . . }. En E(GF (n)) y E(GF (2m)) los conjuntos de esta natu-

raleza deberán necesariamente ser finitos, ya que el n úmero de puntos de la curva

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

6.5. Ejercicios Resueltos

99

es finito. Por lo tanto, si disponemos de un punto q ∈ hpi, debe existir un n úmero

entero k tal que kp = q.

El Problema de los Logaritmos Discretos en Curvas El´ıpticas consiste precisamente en

hallar el n úmero k a partir de p y q. Hasta ahora no se ha encontrado ning ún algorit-

mo eficiente (subexponencial) para calcular el valor de k. Al igual que los descritos

en la secci ón 5.4, este problema puede ser empleado con éxito para el desarrollo de

algoritmos criptográficos de llave p ública.

6.5.

Ejercicios Resueltos

1. Se denomina ra´ız de un polinomio p(x) a los valores de x tales que p(x) = 0. Las

ra´ıces ri de un polinomio tienen la propiedad de que el polinomio pi(x) = x − ri

divide a p(x). Una ra´ız es m últiple, y su multiplicidad es m, si el polinomio

(pi(x))m divide a p(x). Por lo tanto, si el polinomio e(x) = x3 + ax + b tiene ra´ıces

m últiples, debe poder escribirse de la forma

x3 + ax + b = (x − q)2(x − r)

Demuestre, a partir de la expresi ón anterior, que 4a3 + 27b2 = 0 es condici ón

suficiente para que e(x) tenga ra´ıces m últiples.

Solución: Partiendo de la expresi ón

x3 + ax + b = (x − q)2(x − r)

desarrollaremos el segundo término:

(x − q)2(x − r) = (x2 − 2qx + q2)(x − r) = x3 − 2qx2 − rx2 + q2x + 2qrx − q2r

Igualando los coeficientes del mismo grado tenemos las siguientes relaciones:

0 = −2q − r

a = q2 + 2qr

b = q2r

Despejando r en la primera igualdad y sustituyendo su valor en las dos restan-

tes se obtiene

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

100

6. Curvas El´ıpticas en Criptograf´ıa

a = −3q2

b = −2q3

Elevando al cuadrado la primera expresi ón y al cubo la segunda, podemos des-

pejar q6 en ambas e igualar:

a3

b2

q6 =

=

−27

4

Para que el sistema de ecuaciones tenga soluci ón, la igualdad anterior debe

cumplirse; si la desarrollamos, finalmente nos queda

a3

b2

=

=⇒

4a3 = −27b2

=⇒

4a3 + 27b2 = 0

−27

4

2. En el ejemplo de la secci ón 6.2, calcule el conjunto hpi con p = (11, 16).

Solución: Emplearemos la expresi ón (6.3) para calcular 2p y (6.2) para el resto: 2p = p + p:

d = (3 · 112 + 7)/(2 · 16) =

2

tx =

4 − 22

= 16

ty =

−16 + 2 · (11 − 16)

=

8

Por lo tanto,

2p = (16, 8)

3p = 2p + p:

d =

(16 − 8)/(11 − 16)

= 12

tx =

8 − 11 − 16

= 15

ty = −16 + 12 · (11 − 15) =

4

Por lo tanto,

3p = (15, 4)

. . .

Aplicando los cálculos de forma sucesiva, tenemos que

hpi = {O, (11, 16), (16, 8), (15, 4), (0, 2), (2, 14), (3, 16),

(3, 1), (2, 3), (0, 15), (15, 13), (16, 9), (11, 1)}

Como se puede observar, en este caso hpi contiene todos los puntos de la curva

el´ıptica en cuesti ón.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

6.6. Ejercicios Propuestos

101

6.6.

Ejercicios Propuestos

1. Sea el grupo GF (23) generado por el polinomio x3 + x + 1. Calcule los puntos

que pertenecen a la curva el´ıptica con parámetros a = 100 y b = 010.

2. Compruebe geométricamente las propiedades asociativa y conmutativa de la

suma en E(R).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

102

6. Curvas El´ıpticas en Criptograf´ıa

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 7

Aritmética Entera de M últiple

Precisi ón

En este cap´ıtulo daremos una serie de nociones básicas y algoritmos sobre aritmé-

tica entera de m últiple precisi ón, disciplina que ha cobrado un gran interés debido

al uso extensivo que hacen de ella sobre todo los algoritmos asimétricos de cifrado y

autentificaci ón.

7.1.

Representaci ón de enteros largos

Llamaremos n úmero largo a aquel que posee gran cantidad de d´ıgitos significati-

vos, normalmente más de los que los tipos de dato convencionales de los lenguajes

de programaci ón clásicos pueden soportar. En este apartado vamos a indicar c ómo

representarlos y operar con ellos empleando tipos de dato de menor precisi ón.

Todos conocemos la representaci ón tradicional en base 10 de los n úmeros reales,

en la que cada cifra contiene únicamente valores de 0 a 9. Esta representaci ón no es

más que un caso particular (B = 10) de la siguiente expresi ón general:

∞

X

n = (−)

aiBi

−∞

donde los términos con ´ındice negativo corresponden a la parte no entera (decimal)

del n úmero real n. Sabemos que, dado el valor de B, dicha representaci ón es única, y

que significa que n en base B se escribe:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

104

7. Aritmética Entera de M últiple Precisi ón

(−)anan−1 . . . a0.a−1 . . .

Donde cada ai está comprendido entre 0 y B − 1. Por ejemplo, en base 10, el n úmero

3,1415926 corresponder´ıa a la expresi ón:

3 · 100 + 1 · 10−1 + 4 · 10−2 + 1 · 10−3 + 5 · 10−4 + 9 · 10−5 + 2 · 10−6 + 6 · 10−7

En cualquier caso, puesto que nuestro objetivo es representar únicamente n úme-

ros enteros positivos, prescindiremos del signo y de los términos con sub´ındice nega-

tivo.

Cualquier n úmero vendrá representado por una serie única de coeficientes ai (ci-

fras), de las que importa tanto su valor como su posici ón dentro del n úmero. Esta es-

tructura corresponde claramente a la de un vector (array). Para representar de forma

eficiente enteros largos emplearemos una base que sea potencia de dos (normalmente

se escoge B = 216 ó B = 232 para que cada cifra de nuestro n úmero se pueda almace-

nar en un dato del tipo unsigned int sin desperdiciar ning ún bit). Para almacenar

los resultados parciales de las operaciones aritméticas emplearemos un tipo de dato

de doble precisi ón (unsigned long int, correspondiente a B = 232 ó B = 264) de

forma que no se nos desborde al multiplicar dos cifras. Normalmente se escoge una

longitud que pueda manejar directamente la ALU (Unidad Aritmético-L ógica) de la

computadora, para que las operaciones elementales entre cifras sean rápidas.

Por todo esto, para nosotros un n úmero entero largo será un vector de unsigned

int. En cualquier caso, y a partir de ahora, nuestro objetivo será estudiar algoritmos

eficientes para efectuar operaciones aritméticas sobre este tipo de n úmeros, indepen-

dientemente de la base en la que se encuentren representados.

7.2.

Operaciones aritméticas sobre enteros largos

Vamos a describir en este apartado c ómo realizar operaciones aritméticas (suma,

resta, multiplicaci ón y divisi ón) de enteros largos.

7.2.1.

Suma

La suma de a = (a0, a1 . . . an−1) y b = (b0, b1 . . . bn−1) se puede definir como:

(a

(a + b)

i + bi + ci) mód B para i = 0 . . . n − 1

i =

ci

para i = n

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7.2. Operaciones aritméticas sobre enteros largos

105

siendo

0

para i = 0

ci =

(ai−1 + bi−1 + ci−1) div B para i = 1 . . . n

ci es el acarreo de la suma de los d´ıgitos inmediatamente anteriores. Tenemos en cuen-

ta el coeficiente n de la suma porque puede haber desbordamiento, en cuyo caso la

suma tendr´ıa n+1 d´ıgitos y su cifra más significativa ser´ıa precisamente cn. Este no es

otro que el algoritmo clásico que todos hemos empleado en la escuela cuando hemos

aprendido a sumar.

El algoritmo para la suma quedar´ıa, pues, como sigue:

suma (unsigned *a, unsigned *b, unsigned *s)

{ unsigned long sum;

unsigned acarreo;

n=max(num. de digitos de a, num. de digitos de b)

acarreo=0;

for (i=0;i<n;i++)

{

sum=acarreo+a[i]+b[i];

s[i]=sum%BASE;

acarreo=sum/BASE;

}

s[n]=acarreo;

}

El resultado se devuelve en s.

7.2.2.

Resta

La resta es muy parecida a la suma, salvo que en este caso los acarreos se restan.

Suponiendo que a > b:

(a − b)i = (ai − bi − ri) mód B

para i = 0 . . . n − 1

siendo

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

106

7. Aritmética Entera de M últiple Precisi ón

( 0

para i = 0

r

i =

1 − (ai−1 − bi−1 − ri−1 + B) div B

para i = 1 . . . n

ri representa el acarreo de la resta (borrow), que puede valer 0 ó 1 seg ún la resta parcial

salga positiva o negativa. N ótese que, como a > b, el último acarreo siempre ha de

valer 0.

resta (unsigned *a, unsigned *b, unsigned *d)

{ unsigned long dif;

unsigned acarreo;

n=max(num. de digitos de a, num. de digitos de b)

acarreo=0;

for (i=0;i<n;i++)

{

dif=a[i]-b[i]-acarreo+BASE;

d[i]=dif%BASE;

acarreo=1-dif/BASE;

}

}

El resultado se devuelve en d. La raz ón por la que sumamos la base a dif es para

que la resta parcial salga siempre positiva y poder hacer el m ódulo correctamente.

En ese caso, si el valor era positivo, al sumarle B y dividir por B de nuevo nos que-

da 1. Si fuera negativo, nos saldr´ıa 0. Por eso asignamos al nuevo acarreo el valor

1-dif/BASE.

Nos queda comprobar cuál de los dos n úmeros es mayor para poder emplear-

lo como minuendo. Esta comprobaci ón se puede realizar fácilmente definiendo una

funci ón que devuelva el n úmero cuyo d´ıgito más significativo tenga un n úmero de

orden mayor. En caso de igualdad ir´ıamos comparando d´ıgito a d´ıgito, empezando

por los más significativos hasta que encontremos alguno mayor o lleguemos al último

d´ıgito, situaci ón que únicamente ocurrirá si los dos n úmeros son iguales.

7.2.3.

Producto

Para obtener el algoritmo del producto emplearemos la expresi ón general de un

n úmero entero positivo en base B. Si desarrollamos el producto de dos n úmeros cua-

lesquiera a y b de longitudes m y n respectivamente nos queda:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7.2. Operaciones aritméticas sobre enteros largos

107

m−1

X

ab =

aiBib

i=0

A la vista de esto podemos descomponer el producto como m llamadas a una funci ón

que multiplica un entero largo por aiBi (es decir, un entero largo con un único d´ıgito

significativo) y después sumar todos los resultados parciales.

Para poder implementar esto primero definiremos una funci ón (summult) que

multiplique b por aiBi y el resultado se lo sume al vector s, que no tiene necesaria-

mente que estar a cero:

summult(unsigned ai, int i, unsigned *b, int m, unsigned *s)

{ int k;

unsigned acarreo;

unsigned long prod,sum;

acarreo=0;

for (k=0; k<m; k++)

{ prod=ai*b[k]+s[i+k]+acarreo;

s[i+k]=prod%BASE;

acarreo=prod/BASE;

}

k=m+i;

while (acarreo!=0)

{ sum=s[k]+acarreo;

s[k]=sum%BASE;

acarreo=sum/BASE;

k++;

}

}

La segunda parte de la funci ón se encarga de acumular los posibles acarreos en el

vector s. A partir de la funci ón que acabamos de definir, queda entonces como sigue:

producto(unsigned *a,int m, unsigned *b, int n, unsigned *p)

{ int k;

for (k=0;k<=m+n;k++)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

108

7. Aritmética Entera de M últiple Precisi ón

p[k]=0;

for (k=0;k<m;k++)

summult(a[k],k,b,n,p);

}

El resultado se devuelve en p.

Existe otra propiedad de la multiplicaci ón de enteros que nos va a permitir efec-

tuar estas operaciones de manera más eficiente. Tomemos un n úmero entero cual-

quiera a de k d´ıgitos en base B. Dicho n úmero puede ser representado mediante la

de la siguiente expresi ón:

k

a = alB 2 + ar

Es decir, partimos a en dos mitades. Por razones de comodidad, llamaremos Bk a

k

B 2 . Veamos ahora c ómo queda el producto de dos n úmeros cualesquiera a y b, en

funci ón de sus respectivas mitades:

ab = alblB2 + (a

k

lbr + ar bl)Bk + ar br

Hasta ahora no hemos aportado nada nuevo. El truco para que este desarrollo nos

proporcione un aumento de eficiencia consiste en hacer uso de la siguiente propie-

dad:

albr + arbl = albr + arbl + albl − albl + arbr − arbr = (al + ar)(bl + br) − albl − arbr

quedando finalmente, lo siguiente:

x = albl

y = (al + ar)(bl + br)

z = arbr

ab = xB2 + (y − x − z)B

k

k + z

Hemos reducido los cuatro productos y tres sumas del principio a tres productos

y seis sumas. Como es l ógico, esta técnica debe emplearse dentro de una estrategia

divide y vencerás.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7.2. Operaciones aritméticas sobre enteros largos

109

7.2.4.

Divisi ón

El algoritmo más simple para dividir dos n úmeros se consigue a partir de su re-

presentaci ón binaria:

cociente_bin(unsigned *c, unsigned *d, unsigned *a, unsigned *b)

{ /*

Calcular a= c div d

b= c mod d

Bits_Significativos(x) => Devuelve el numero de bits

significativos de x, es decir, el

numero total de bits menos el numero

de ceros a la derecha.

pow(a,b)

=> Calcula el valor de a elevado a b.

Poner_bit_a_1(a,x)

=> Pone a 1 el i-esimo bit de a.

Poner_bit_a_0(a,x)

=> Pone a 0 el i-esimo bit de a.

*/

m=Bits_Significativos(c);

n=Bits_Significativos(d);

b=c;

a=0;

d1=d*pow(2,m-n);

/* Desplazamos a la izquierda d */

for (i=m-n;i>=0;i--)

{ if (b>d1)

{ Poner_bit_a_1(a,i);

b=b-d1;

}

else Poner_bit_a_0(a,i);

d1=d1/2;

}

}

El funcionamiento del algoritmo es extremadamente simple: copiamos el dividen-

do en b y desplazamos a la izquierda el divisor hasta que su longitud coincida con

la del dividendo. Si el valor resultante es menor que b, se lo restamos y ponemos a

1 el bit correspondiente de a. Repitiendo esta operaci ón sucesivamente se obtiene el

cociente en a y el resto en b. A modo de ejemplo, dividiremos 37 (100101) entre 7

(111):

1. b = 100101;

a = − − −−;

d1 = 111000;

b 6> d1 −→ a = 0 − −−

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

110

7. Aritmética Entera de M últiple Precisi ón

2. b = 100101;

a = 0 − −−;

d1 = 11100;

b > d1 −→ a = 01 − −

3. b = 001001;

a = 01 − −;

d1 = 1110;

b 6> d1 −→ a = 010−

4. b = 001001;

a = 010−;

d1 = 111;

b > d1 −→ a = 0101

5. b = 010

Este algoritmo resulta muy lento, ya que opera a nivel de bit, por lo que intenta-

remos encontrar otro más rápido —aunque con el mismo orden de eficiencia—. Nos

basaremos en el algoritmo tradicional de la divisi ón. Suponiendo que queremos di-

vidir c por d, obteniendo su cociente (a) y resto (b), iremos calculando cada d´ıgito del

cociente en base B de un solo golpe. Nuestro objetivo será estimar a la baja el valor

de cada uno de los d´ıgitos a, e incrementarlo hasta alcanzar el valor correcto. Para

que la estimaci ón se quede lo más cerca posible del valor correcto efectuaremos una

normalizaci ón de los n úmeros, de forma que el d´ıgito más significativo d tenga su bit

de mayor peso a 1. Esto se consigue multiplicando c y d por 2k, siendo k el n úmero de

ceros a la izquierda del bit más significativo del divisor d. Posteriormente habremos

de tener en cuenta lo siguiente:

c = ad + b ⇐⇒ 2kc = a(2kd) + 2kb

luego el cociente será el mismo pero el resto habrá que dividirlo por el factor de

normalizaci ón. Llamaremos ¯

c, ¯

d a los valores de c y d normalizados.

Para hacer la estimaci ón a la baja de los ai, dividiremos cjB + cj−1 por ¯

dm + 1 (cj

es el d´ıgito más significativo de c en el paso i, y ¯

dm es el d´ıgito más significativo de

¯

d). Luego actualizamos ¯

c con ¯

c − ¯

daiBi y vamos incrementando ai (y actualizando ¯

c)

mientras nos quedemos cortos. Finalmente, habremos calculado el valor del cociente

(a) y el valor del resto será

¯

b

b = 2k

El algoritmo podr´ıa quedar como sigue:

cociente(unsigned *c, unsigned *d, unsigned *a, unsigned *b)

{

/* Calcular a= c div d

b= c mod d

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7.2. Operaciones aritméticas sobre enteros largos

111

Digito_Mas_Significativo(a) => Devuelve el valor del

digito de mayor peso de a.

Bits_Significativos(x) => Devuelve el numero de bits

significativos de x, es decir, el

numero total de bits menos el numero

de ceros a la derecha.

pow(a,b)

=> Calcula el valor de a elevado a b.

*/

despl=Num_bits_digito -

Bits_significativos(Digito_Mas_Significativo(d));

factor=pow(2,despl);

/* Desplazamos d hasta que su digito

mas significativo tenga su bit de mayor

peso a 1 (di>=B/2)

*/

dd=d*factor;

cc=c*factor;

if (Digitos(cc)==Digitos(c))

Poner_Un_Cero_A_La_Izquierda(cc);

/* Garantizar que cc

tiene exactamente un

digito mas que c

*/

t=Digito_Mas_Significativo(dd);

/* Ya hemos normalizado. El cociente que obtengamos seguira

siendo valido, pero el resto habra luego que dividirlo por

factor */

Poner_a_cero(a);

for (i=Digitos(c)-Digitos(dd); i>=0; i--)

{

/* Subestimar digito del cociente (ai) */

if (t==B-1)

/* No podemos dividir por t+1 */

ai=cc[i+Digitos(dd)];

/* La estimacion es el primer

digito significativo de cc

*/

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

112

7. Aritmética Entera de M últiple Precisi ón

else ai=(cc[i+Digitos(dd)]*B+cc[i+Digitos(dd)-1])/(t+1);

/* La estimacion es el cociente

entre los dos primeros digitos

de cc y t+1

*/

cc=cc-ai*dd*pow(B,i);

/* Restar a cc */

while (cc[i+Digitos(dd)] ||

/* Si no se ha hecho cero el

digito mas sign. de cc...

*/

mayor(cc,dd*pow(B,i))) /* o si cc es mayor o igual

que dd*Bî

*/

{ ai++;

/* Hemos de aumentar la estimacion */

cc=cc-dd*pow(B,i);

}

a[i]=ai;

}

b=cc/factor; /* Lo que nos queda en cc es el resto

dividimos por factor para deshacer

la normalizacion

*/

}

Aunque a primera vista pueda parecer un algoritmo muy complejo, vamos a ver

que no es tan complicado siguiendo su funcionamiento para un ejemplo concreto,

con B = 16, c = 3F BA2, y d = 47:

1. Normalizaci ón: multiplicamos por 2 y nos queda ¯

c = 7F 744, ¯

d = 8E

2. a

¯

2 = 7F div 9 = E; ¯

c = ¯

c − a2dB2 = 7F 744 − 7C400 = 3344

Puesto que ¯

c < ¯

dB2 = 8E00, no hay que incrementar a2.

3. a

¯

1 = 33 div 9 = 5; ¯

c = ¯

c − a1dB = 3344 − 2C60 = 6E4

Puesto que ¯

c < ¯

dB = 8E0, no hay que incrementar a1.

4. a

¯

0 = 6E div 9 = C ; ¯

c = ¯

c − a0d = 6E4 − 6A8 = 3C

Puesto que ¯

c < ¯

d = 8E, tampoco hay que incrementar a0

5. a = E5C; b = ¯c = 1E

2

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

7.3. Aritmética modular con enteros largos

113

7.3.

Aritmética modular con enteros largos

Los algoritmos criptográficos de llave p ública más extendidos se basan en opera-

ciones modulares sobre enteros muy largos. Empleando los algoritmos del apartado

7.2 son inmediatas las operaciones de suma, resta y multiplicaci ón m ódulo n. La di-

visi ón habremos de tratarla de manera diferente.

Para sumar dos n úmeros m ódulo n basta con efectuar su suma entera y, si el

resultado es mayor que n, restar el m ódulo.

Para restar basta con comprobar que el minuendo es mayor que el sustraendo,

en cuyo caso aplicamos directamente el algoritmo de la resta. Si, por el contra-

rio, el sustraendo fuera mayor que el minuendo, sumamos a este último el valor

de n antes de hacer la resta.

El producto se lleva a cabo multiplicando los factores y tomando el resto de

dividir el resultado por el m ódulo.

La divisi ón habremos de implementarla multiplicando el dividendo por la in-

versa del divisor. Para calcular la inversa de un n úmero m ódulo n basta con

emplear el Algoritmo Extendido de Euclides, sustituyendo las operaciones ele-

mentales por llamadas a las operaciones con enteros largos descritas en la sec-

ci ón 7.2.

7.4.

Ejercicios Resueltos

1. Efect úe el trazado del algoritmo de la divisi ón con B = 8 para calcular el si-

guiente cociente: c = 35240, d = 234.

Solución: A partir de los valores c = 35240 y d = 234, calculamos el factor de nor-

malizaci ón, que será 2, por lo que dd = 470 y cc = 72500. N ótese que todas las

operaciones están efectuadas en base octal. Los pasos del algoritmo arrojarán

los siguientes valores:

t = 4

a2 = 07 ÷ 5 = 1

cc = 72500 − 1 · 47000 = 23500

a1 = 25 ÷ 5 = 3

cc = 23500 − 3 · 4700 = 5000

a1 = a1 + 1 = 4

cc = 5000 − 4700 = 100

a0 = 1 ÷ 5 = 0

cc = 100 − 0 · 470 = 100

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

114

7. Aritmética Entera de M últiple Precisi ón

Ahora deshacemos la normalizaci ón, con lo que nos queda un cociente a = 140

y un resto b = 40.

7.5.

Ejercicios Propuestos

1. La técnica divide y vencerás se basa en subdividir el problema y aplicar recur-

sivamente el algoritmo en cuesti ón hasta llegar a un umbral m´ınimo, a partir

del cual la técnica no recursiva es más eficiente. Implemente el algoritmo de la

multiplicaci ón mediante esta técnica y calcule el umbral correspondiente.

2. Elabore la especificaci ón de una Estructura de Datos que permita almacenar

n úmeros enteros largos y defina sus primitivas básicas.

3. Proponga una especificaci ón para la estructura del ejercicio anterior y discuta

su eficiencia.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 8

Criptograf´ıa y N úmeros Aleatorios

Los algoritmos de llave p ública, debido a su mayor orden de complejidad, suelen

ser empleados en conjunci ón con algoritmos de llave privada de la siguiente forma

(ver cap´ıtulo 12): el mensaje primero se codifica empleando un algoritmo simétrico

y la llamada clave de sesión, que será diferente cada vez. Es únicamente la clave de

sesi ón la que se cifra empleando criptograf´ıa asimétrica, produciendo un importante

ahorro de coste computacional. Sin embargo, si el proceso de generaci ón de estas cla-

ves fuera predecible o, al menos, reproducible, un atacante malicioso podr´ıa llegar a

adivinar la siguiente clave de sesi ón a partir de una o varias claves, lo cual tendr´ıa re-

sultados catastr óficos. Un famoso ejemplo de este problema tuvo lugar en una de las

primeras versiones del navegador Netscape, que resultaba insegura debido al uso de

un generador de claves demasiado previsible. La única manera de protegerse fren-

te a estos ataques es asegurarse de que no exista ning ún tipo de dependencia entre

una clave y la siguiente, esto es, que sean aleatorias. De aqu´ı surge el interés por los

n úmeros aleatorios en Criptograf´ıa.

Seguro que el lector conoce generadores pseudoaleatorios y diferentes tests de

aleatoriedad —como el denominado test ψ2, que puede ser consultado en casi cual-

quier libro de Estad´ıstica—. En realidad, los generadores tradicionales no nos per-

miten calcular secuencias realmente aleatorias, puesto que conociendo un n úmero

obtenido con el generador podemos determinar cualquiera de los posteriores —re-

cordemos que cada elemento de la secuencia se emplea como semilla para calcular el

siguiente—. Si bien las series que producen superan los test estad´ısticos de aleato-

riedad, son totalmente previsibles, y esa condici ón es inadmisible para aplicaciones

criptográficas.

En este cap´ıtulo vamos a caracterizar diferentes tipos de secuencias aleatorias,

as´ı como su interés en Criptograf´ıa. También veremos c ómo implementar un buen

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

116

8. Criptograf´ıa y N úmeros Aleatorios

generador aleatorio útil desde el punto de vista criptográfico.

8.1.

Tipos de Secuencias Aleatorias

En realidad es casi del todo imposible generar secuencias auténticamente alea-

torias en una computadora, puesto que estas máquinas son —al menos en teor´ıa—

completamente deterministas. De hecho, cualquier generador que emplee únicamen-

te métodos algor´ıtmicos en su prop ósito producirá secuencias reproducibles, por lo

que estaremos hablando en realidad de secuencias pseudoaleatorias. En general, to-

dos los generadores pseudoaleatorios producen secuencias finitas y peri ódicas de

n úmeros empleando exclusivamente operaciones aritméticas y/o l ógicas. No obstan-

te, si empleamos elementos externos a la computadora, podremos generar también

secuencias realmente aleatorias.

En esta secci ón describiremos dos tipos de secuencias pseudoaleatorias, en fun-

ci ón de sus propiedades, además de las secuencias auténticamente aleatorias.

8.1.1.

Secuencias estad´ısticamente aleatorias

En principio, es relativamente fácil conseguir que una secuencia pseudoaleatoria

sea lo más larga posible antes de comenzar a repetirse y que supere los tests estad´ısti-

cos de aleatoriedad. En este sentido podemos hablar de:

Secuencias estad´ısticamente aleatorias: Secuencias pseudoaleatorias que superan

los tests estad´ısticos de aleatoriedad.

Los generadores congruenciales lineales1 cumplen esta propiedad, y de hecho son

muy utilizados en Informática, especialmente en entornos de simulaci ón, pero en

Criptograf´ıa resultan del todo in útiles, debido a que cada valor de la secuencia se

emplea como semilla para calcular el siguiente, lo cual nos permite conocer toda la

serie a partir de un único valor. Supongamos que tenemos un sistema que se basa

en emplear claves aleatorias para cada sesi ón y usamos un generador de este tipo.

Bastar´ıa con que una de las claves quedara comprometida para que todas las comu-

nicaciones —pasadas y futuras— pudieran ser descifradas sin problemas. Incluso se

ha demostrado que conociendo únicamente un bit de cada valor de la secuencia, ésta

puede ser recuperada completamente con una cantidad relativamente peque ˜na de

valores.

1Un generador congruencial lineal opera seg ún la expresión an+1 = (anb + c) mód m, donde a0 es

la semilla pseudoaleatoria y b, c y m son los parámetros del generador.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

8.2. Utilidad de las secuencias aleatorias en Criptograf´ıa

117

8.1.2.

Secuencias criptográficamente aleatorias

El problema de las secuencias estad´ısticamente aleatorias, y lo que las hace poco

útiles en Criptograf´ıa, es que son completamente predecibles. Definiremos, por tanto:

Secuencias criptográficamente aleatorias: Para que una secuencia pseudoaleatoria

sea criptográficamente aleatoria, ha de cumplir la propiedad de ser impredeci-

ble. Esto quiere decir que debe ser computacionalmente intratable el problema

de averiguar el siguiente n úmero de la secuencia, teniendo total conocimiento

acerca de todos los valores anteriores y del algoritmo de generaci ón empleado.

Existen generadores pseudoaleatorios capaces de generar secuencias criptográfi-

camente aleatorias, generalmente a través del uso en el algoritmo de informaci ón de

inicializaci ón —denominada semilla— o de estado que ha de mantenerse en secre-

to. Sin embargo, habrá situaciones en las que esto no sea suficiente para nuestros

prop ósitos y en las que deseemos tener valores realmente impredecibles, de forma

que nuestro adversario no pueda averiguarlos ni tratar de simular el proceso de ge-

neraci ón que nosotros hemos llevado a cabo.

8.1.3.

Secuencias totalmente aleatorias

Como ya se ha dicho antes, no existe la aleatoriedad cuando se habla de compu-

tadoras. Sin embargo, podemos hacer que el ordenador, a través de sus dispositivos

de entrada/salida, obtenga de su entorno sucesos que pueden considerarse imprede-

cibles. Consideraremos pues un tercer tipo de secuencias:

Secuencias aleatorias: Diremos que una secuencia es totalmente aleatoria (o sim-

plemente aleatoria) si no puede ser reproducida de manera fiable.

8.2.

Utilidad de las secuencias aleatorias en Criptograf´ıa

Llegados a este punto parece claro que nuestro objetivo en la mayor parte de las

ocasiones no va a consistir en generar secuencias aleatorias puras, sino más bien se-

cuencias impredecibles e irreproducibles para un atacante. De hecho, habrá dos esce-

narios t´ıpicos en los que nos vamos a encontrar:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

118

8. Criptograf´ıa y N úmeros Aleatorios

Figura 8.1: Clasificaci ón de los distintos tipos de secuencias aleatorias.

Queremos generar una secuencia de n úmeros impredecible e irreproducible,

por ejemplo, para generar claves de sesi ón. Para ello podemos utilizar indis-

tintamente un generador totalmente aleatorio, o un generador pseudoaleatorio

criptográficamente aleatorio. En este último caso, emplearemos como semilla la

salida producida por un generador totalmente aleatorio.

Queremos generar una secuencia de n úmeros que luego pueda reproducirse,

por ejemplo, para construir un cifrado de flujo (ver cap´ıtulo 11). En ese caso

emplearemos un generador criptográficamente aleatorio, cuya semilla hará las

veces de clave, ya que permitirá al emisor generar una secuencia pseudoaleato-

ria —impredecible para un atacante— y combinarla con el mensaje para obtener

el criptograma. El receptor usará la misma semilla para generar una secuencia

idéntica y recuperar as´ı el mensaje original.

8.3.

Generaci ón de Secuencias Aleatorias Criptográfica-

mente Válidas

Dedicaremos esta secci ón a las técnicas de generaci ón de secuencias totalmente

aleatorias, ya que los generadores de secuencia criptográficamente aleatorios serán

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

8.3. Generaci ón de Secuencias Aleatorias Criptográficamente Válidas

119

estudiados con mayor detalle en el cap´ıtulo 11. Nuestro objetivo será, pues, la obten-

ci ón de secuencias impredecibles e irreproducibles. Podemos obtener directamente

dichas secuencias del exterior, y tratarlas para que no presenten ning ún sesgo es-

tad´ıstico, o emplearlas como semilla para alimentar algoritmos pseudoaleatorios, que

también pueden hacer uso a su vez de valores dif´ıcilmente reproducibles, como el re-

loj del sistema.

8.3.1.

Obtenci ón de Bits Aleatorios

Como hemos dicho antes, las operaciones aritméticas y l ógicas que realiza una

computadora son completamente deterministas. Sin embargo, como veremos a con-

tinuaci ón, los ordenadores suelen ir acompa ˜nados de dispositivos no tan predecibles

que pueden resultar útiles para nuestros prop ósitos. En cualquier caso, cada vez re-

sulta más frecuente la inclusi ón de hardware espec´ıfico en los ordenadores modernos

para la obtenci ón de informaci ón aleatoria.

Aunque lo ideal es disponer de elementos espec´ıficos, existen valores obtenidos

del hardware convencional de una computadora que suelen proporcionar algunos bits

de aleatoriedad. Parece razonable que leer en un momento dado el valor de un reloj

interno de alta precisi ón proporcione un resultado más o menos impredecible, por

lo que podr´ıamos emplearlo para recolectar valores aleatorios. Diferentes pruebas

han demostrado sin embargo que mecanismos de este tipo, que pueden ser útiles

en ciertas arquitecturas y sistemas operativos, dejan de servir en otras versiones del

mismo sistema o en arquitecturas muy similares, por lo que hemos de tener mucho

cuidado con esto.

Algunas veces se ha propuesto el uso de los n úmeros de serie de los componen-

tes f´ısicos de un sistema, pero recordemos que estos n úmeros tienen una estructura

muy r´ıgida, y a veces conociendo simplemente el fabricante y la fecha aproximada de

fabricaci ón podemos adivinar casi todos sus d´ıgitos, por lo que van a ser demasiado

predecibles. Tampoco son útiles las fuentes p úblicas de informaci ón, como por ejem-

plo los bits de un CD de audio, puesto que nuestros atacantes pueden disponer de

ellas, con lo que el único resto de aleatoriedad que nos va a quedar es la posici ón que

escojamos dentro del CD para extraer los bits.

Fuentes Adecuadas de Obtenci ón de Bits Aleatorios

Cuando no disponemos de un elemento f´ısico en la computadora espec´ıficamente

dise ˜nado para producir datos aleatorios, podemos recurrir a algunos dispositivos

relativamente comunes en los ordenadores actuales:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

120

8. Criptograf´ıa y N úmeros Aleatorios

Tarjetas digitalizadoras de sonido o v´ıdeo. Un dispositivo digitalizador de audio (o

v´ıdeo) sin ninguna entrada conectada, siempre que tenga ganancia suficiente,

capta esencialmente ruido térmico, con una distribuci ón aleatoria, y por lo tanto

puede ser apto para nuestros prop ósitos.

Unidades de disco. Las unidades de disco presentan peque ˜nas fluctuaciones en su

velocidad de giro debido a turbulencias en el aire. Si se dispone de un método

para medir el tiempo de acceso de la unidad con suficiente precisi ón, se pueden

obtener bits aleatorios de la calidad necesaria.

Si no se dispone de una fuente fiable de bits aleatorios se puede efectuar la combi-

naci ón de varias fuentes de informaci ón menos fiables. Por ejemplo, podr´ıamos leer

el reloj del sistema, alg ún identificador del hardware, la fecha y la hora locales, el es-

tado de los registros de interrupciones del sistema, etc. Esto garantizará que en total

se ha recogido una cantidad suficiente de bits realmente aleatorios.

La mezcla de todas esas fuentes puede proporcionarnos suficiente aleatoriedad

para nuestros prop ósitos. Teniendo en cuenta que el n úmero de bits realmente alea-

torios que se obtendrán como resultado final del proceso ha de ser necesariamente

menor que el n úmero de bits recogido inicialmente, hemos de buscar un mecanis-

mo para llevar a cabo esa combinaci ón. Emplearemos a tal efecto las denominadas

funciones de mezcla fuertes.

Una funci ón de mezcla es aquella que toma dos o más fuentes de informaci ón y

produce una salida en la que cada bit es una funci ón compleja y no lineal de todos

los bits de la entrada. Por término medio, modificar un bit en la entrada deber´ıa

alterar aproximadamente la mitad de los bits de salida. Podemos emplear diferentes

algoritmos criptográficos para construir este tipo de funciones:

Algoritmos de cifrado por Bloques (ver cap´ıtulo 10). Un algoritmo simétrico de ci-

frado por bloques puede ser útil como funci ón de mezcla de la siguiente forma:

supongamos que usa una clave de n bits, y que tanto su entrada como su sali-

da son bloques de m bits. Si disponemos de n + m bits inicialmente, podemos

codificar m bits usando como clave los n restantes, y as´ı obtener como salida

un bloque de m bits con mejor aleatoriedad. As´ı, por ejemplo, si usamos DES,

podemos reducir a 64 bits un bloque de 120.

Funciones Resumen (ver cap´ıtulo 13) . Una funci ón resumen puede ser empleada

para obtener un n úmero fijo de bits a partir de una cantidad arbitraria de bits

de entrada.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

8.3. Generaci ón de Secuencias Aleatorias Criptográficamente Válidas

121

8.3.2.

Eliminaci ón del Sesgo

En la mayor´ıa de los casos, los bits obtenidos de las fuentes aleatorias están sesga-

dos, es decir, que hay más unos que ceros o viceversa. Esta situaci ón no es deseable,

puesto que necesitamos una fuente aleatoria no sesgada, que presente igual probabi-

lidad tanto para el 0 como para el 1. Como veremos a continuaci ón, esta circunstancia

no constituye un problema serio, ya que existen diversas técnicas para solucionarla.

Bits de Paridad

Si tenemos una secuencia de valores cero y uno, con un sesgo arbitrario, podemos

emplear el bit de paridad2 de la secuencia para obtener una distribuci ón con una

desviaci ón tan peque ˜na como queramos. Para comprobarlo, supongamos que d es el

sesgo, luego las probabilidades que tenemos para los bits de la secuencia son:

p = 0,5 + d

q = 0,5 − d

donde p es la probabilidad para el 1 y q es la probabilidad para el 0. Se puede com-

probar que las probabilidades para el bit de paridad de los n primeros bits valen

1

1

r =

((p + q)n + (p − q)n)

s =

((p + q)n − (p − q)n)

2

2

donde r será la probabilidad de que el bit de paridad sea 0 ó 1 dependiendo de si n

es par o impar. Puesto que p + q = 1 y p − q = 2d, tenemos

1

1

r =

(1 + (2d)n)

s =

(1 − (2d)n)

2

2

log (2)

Siempre que n >

2

el sesgo de la paridad será menor que , por lo que

log (2d)

2

bastará con coger esos n bits. Por ejemplo, si una secuencia de bits tiene p = 0,01 y

q = 0,99, basta con coger la paridad de cada 308 bits para obtener un bit con sesgo

inferior a 0,001.

2El bit de paridad de una secuencia vale 1 si el n úmero de unos de dicha secuencia es par (paridad

impar) o impar (paridad par).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

122

8. Criptograf´ıa y N úmeros Aleatorios

Método de Von Neumann

El método que propuso Von Neumann para eliminar el sesgo de una cadena de

bits consiste simplemente en examinar la secuencia de dos en dos bits. Eliminamos

los pares 00 y 11, e interpretamos 01 como 0 y 10 como 1. Por ejemplo, la serie

00.10.10.01.01.10.10.10.11 dar´ıa lugar a 1.1.0.0.1.1.1.

Es fácil comprobar que, siendo d el sesgo de la distribuci ón inicial

P (01) = P (10) = (0,5 + d)(0,5 − d)

por lo que la cadena de bits resultantes presenta exactamente la misma probabili-

dad tanto para el 0 como para el 1. El problema de este método es que no sabemos

a priori cuántos bits de informaci ón sesgada necesitamos para obtener cada bit de

informaci ón no sesgada.

Uso de Funciones Resumen

Si calculamos la entrop´ıa de una secuencia sesgada (ecuaci ón 3.2, página 45), obtendremos el n úmero n de bits reales de informaci ón que transporta. Entonces podre-

mos aplicar una funci ón resumen (cap´ıtulo 13) y quedarnos exactamente con los n

bits menos significativos del resultado obtenido.

Veamos un ejemplo: sea una secuencia de 300 bits con una probabilidad P (1) =

0,99. La entrop´ıa de cada bit será

H = −0,99 log (0,99) − 0,01 log (0,01) = 0,08079 bits

2

2

Luego los 300 bits originales aportarán 300 × 0,08079 ' 24 bits de informaci ón

real. Podemos calcular la firma MD5 o SHA de dicha secuencia y considerar los 24

bits menos significativos del resultado como bits aleatorios válidos.

8.3.3.

Generadores Aleatorios Criptográficamente Seguros

Vamos a ver a continuaci ón un par de generadores pseudoaleatorios que permiten

obtener secuencias lo suficientemente seguras como para ser empleadas en aplicacio-

nes criptográficas. Ambos emplean una semilla —que puede ser obtenida a partir de

un generador totalmente aleatorio—, e incluso uno de ellos emplea internamente in-

formaci ón de gran variabilidad, como es el reloj del sistema, para hacer más dif´ıcil de

reproducir la secuencia resultante.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

8.3. Generaci ón de Secuencias Aleatorias Criptográficamente Válidas

123

Generador X9.17

Propuesto por el Instituto Nacional de Estándares Norteamericano, permite, a

partir de una semilla inicial s0 de 64 bits, obtener secuencias de valores también de

64 bits. En sus cálculos emplea valores dif´ıciles de adivinar desde el exterior, como

el tiempo del sistema en el momento de obtener cada elemento de la secuencia, pa-

ra de esta forma aproximar más su comportamiento al de un generador totalmente

aleatorio. El algoritmo para obtener cada uno de los valores gn de la secuencia es el

siguiente:

gn = DES(k, DES(k, t) ⊕ sn)

sn+1 = DES(k, DES(k, t) ⊕ gn)

donde k es una clave aleatoria reservada para la generaci ón de cada secuencia, y t

es el tiempo en el que cada valor es generado —cuanta más resoluci ón tenga (hasta

64 bits), mejor—. DES(K, M ) representa la codificaci ón de M mediante el algoritmo

DES, empleando la clave K, y ⊕ representa la funci ón or-exclusivo. N ótese que el

valor k ha de ser mantenido en secreto para que la seguridad de este generador sea

máxima.

Generador Blum Blum Shub

Si bien se trata en realidad de un generador pseudoaleatorio, es uno de los algo-

ritmos que más pruebas de resistencia ha superado, con la ventaja adicional de su

gran simplicidad —aunque es computacionalmente mucho más costoso que el algo-

ritmo X9.17—. Consiste en escoger dos n úmeros primos grandes, p y q, que cumplan

la siguiente propiedad:

p ≡ 3(mód 4)

q ≡ 3(mód 4)

Sea entonces n = pq. Escogemos un n úmero x aleatorio primo relativo con n, que

será nuestra semilla inicial. Al contrario que x, que debe ser mantenido en secreto, n

puede ser p úblico. Calculamos los valores si de la serie de la siguiente forma:

s0 = (x2)(mód n)

si+1 = (s2)(mód n)

i

Hay que tener cuidado de emplear únicamente como salida unos pocos de los bits

menos significativos de cada si. De hecho, si cogemos no más que log (log (s

2

2

i)) bits

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

124

8. Criptograf´ıa y N úmeros Aleatorios

en cada caso podemos asegurar que predecir el siguiente valor de la serie es al menos

tan dif´ıcil como factorizar n.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte III

Algoritmos Criptográficos

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 9

Criptograf´ıa Clásica

El ser humano siempre ha tenido secretos de muy diversa ´ındole, y ha buscado

mecanismos para mantenerlos fuera del alcance de miradas indiscretas. Julio César

empleaba una sencilla técnica para evitar que sus comunicaciones militares fueran

interceptadas. Leonardo Da Vinci escrib´ıa las anotaciones sobre sus trabajos de de-

recha a izquierda y con la mano zurda. Otros personajes, como Sir Francis Bacon o

Edgar Allan Poe eran conocidos por su afici ón a los c ódigos criptográficos, que en

muchas ocasiones constitu´ıan un apasionante divertimento y un reto para el ingenio.

En este cap´ıtulo haremos un breve repaso de los mecanismos criptográficos con-

siderados clásicos. Podemos llamar as´ı a todos los sistemas de cifrado anteriores a la

II Guerra Mundial, o lo que es lo mismo, al nacimiento de las computadoras. Estas

técnicas tienen en com ún que pueden ser empleadas usando simplemente lápiz y

papel, y que pueden ser criptoanalizadas casi de la misma forma. De hecho, con la

ayuda de las computadoras, los mensajes cifrados mediante el uso de estos c ódigos

son fácilmente descifrables, por lo que cayeron rápidamente en desuso.

La transici ón desde la Criptograf´ıa clásica a la moderna se da precisamente duran-

te la II Guerra Mundial, cuando el Servicio de Inteligencia aliado rompe dos sistemas

empleados por el ejército alemán, la máquina ENIGMA y el cifrado de Lorenz, con-

siderados hasta ese momento absolutamente inexpugnables. Pero lo más importante

de esa victoria es que se consigue a través de revolucionarios desarrollos matemáti-

cos, combinados con el nacimiento de las computadoras modernas.

Todos los algoritmos criptográficos clásicos son de carácter simétrico, ya que hasta

mediados de los a ˜nos setenta no naci ó la Criptograf´ıa Asimétrica.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

128

9. Criptograf´ıa Clásica

9.1.

Algoritmos Clásicos de Cifrado

Estudiaremos en esta secci ón algunos criptosistemas que en la actualidad han

perdido gran parte de su eficacia, debido a que son fácilmente criptoanalizables em-

pleando una computadora doméstica, bien mediante análisis estad´ıstico o directa-

mente por la fuerza bruta, pero que fueron empleados con éxito hasta principios del

siglo XX. Algunos se remontan incluso, como el algoritmo de César, a la Roma Impe-

rial. Sin embargo a ún conservan el interés te órico, ya que algunas de sus propiedades

resultan muy útiles para entender mejor los algoritmos modernos.

9.1.1.

Cifrados de Sustituci ón

Los algoritmos engolobados dentro de esta familia se basan en cambiar por otros

los s´ımbolos del mensaje, sin alterar su orden relativo. Cada uno de ellos vendrá defi-

nido por el mecanismo concreto empleado para efectuar dicho cambio, pudiendo ser

independiente de la posici ón que ocupa el s´ımbolo el el mensaje (cifrados monoalfabéti-

cos), o venir determinado por ésta (cifrados polialfabéticos). Como vimos en la secci ón

3.8, esta transformaci ón se corresponde con el concepto de confusión.

Cifrados Monoalfabéticos

Se engloban dentro de este apartado todos los algoritmos criptográficos que, sin

desordenar los s´ımbolos dentro del mensaje, establecen una única funci ón de susti-

tuci ón para todos ellos a lo largo del texto. Es decir, si al s´ımbolo A le corresponde el

s´ımbolo D, esta correspondencia se mantiene para todo el mensaje.

Algoritmo de César.

El algoritmo de César, llamado as´ı porque es el que empleaba

Julio César para enviar mensajes secretos, es uno de los algoritmos criptográficos más

simples. Consiste en sumar 3 al n úmero de orden de cada letra. De esta forma a la A

le corresponde la D, a la B la E, y as´ı sucesivamente. Si asignamos a cada letra un

n úmero (A = 0,B = 1. . . ), y consideramos un alfabeto de 26 letras, la transformaci ón

criptográfica ser´ıa:

c = (m + 3) mód 26

obsérvese que este algoritmo ni siquiera posee clave, puesto que la transformaci ón

siempre es la misma. Obviamente, para descifrar basta con restar 3 al n úmero de

orden de las letras del criptograma.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.1. Algoritmos Clásicos de Cifrado

129

Sustituci ón Af´ın.

Es el caso general del algoritmo de César. Su transformaci ón

ser´ıa:

E(a,b)(m) = (a · m + b) mód N

siendo a y b dos n úmeros enteros menores que el cardinal N del alfabeto, y cumplien-

do que mcd(a, N ) = 1. La clave de cifrado k viene entonces dada por el par (a, b). El

algoritmo de César será pues una transformaci ón af´ın con k = (1, 3).

Cifrado Monoalfabético General.

Es el caso más general de cifrado monoalfabéti-

co. La sustituci ón ahora es arbitraria, siendo la clave k precisamente la tabla de susti-

tuci ón de un s´ımbolo por otro. En este caso tenemos N ! posibles claves.

Criptoanálisis de los Métodos de Cifrado Monoalfabéticos.

El cifrado monoal-

fabético constituye la familia de métodos más simple de criptoanalizar, puesto que

las propiedades estad´ısticas del texto claro se conservan en el criptograma. Suponga-

mos que, por ejemplo, la letra que más aparece en Castellano es la A. Parece l ógico

que la letra más frecuente en el texto codificado sea aquella que corresponde con la

A. Emparejando las frecuencias relativas de aparici ón de cada s´ımbolo en el mensaje

cifrado con el histograma de frecuencias del idioma en el que se supone está el texto

claro, podremos averiguar fácilmente la clave.

En el peor de los casos, es decir, cuando tenemos un emparejamiento arbitrario, la

Distancia de Unicidad de Shannon que obtenemos es:

H(K)

log (N !)

S =

=

2

(9.1)

D

D

donde D es la redundancia del lenguaje empleado en el mensaje original, y N es el

n úmero de s´ımbolos de dicho lenguaje. Como es l ógico, suponemos que las N ! claves

diferentes son equiprobables en principio.

En casos más restringidos, como el af´ın, el criptoanálisis es a ún más simple, puesto

que el emparejamiento de todos los s´ımbolos debe responder a alguna combinaci ón

de coeficientes (a, b).

Cifrados Polialfabéticos

En los cifrados polialfabéticos la sustituci ón aplicada a cada carácter var´ıa en fun-

ci ón de la posici ón que ocupe éste dentro del texto claro. En realidad corresponde a

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

130

9. Criptograf´ıa Clásica

la aplicaci ón c´ıclica de n cifrados monoalfabéticos.

Cifrado de Vigenère.

Es un ejemplo t´ıpico de cifrado polialfabético que debe su

nombre a Blaise de Vigenère, su creador, y que data del siglo XVI. La clave está cons-

tituida por una secuencia de s´ımbolos K = {k0, k1, . . . kd−1}, y se emplea la siguiente

funci ón de cifrado:

Ek(mi) = mi + k(i mód d) (mód n)

siendo mi el i−ésimo s´ımbolo del texto claro y n el cardinal del alfabeto de entrada.

Criptoanálisis.

Para criptoanalizar este tipo de claves basta con efectuar d análisis

estad´ısticos independientes agrupando los s´ımbolos seg ún la ki empleada para codi-

ficarlos. Necesitaremos al menos d veces más cantidad de texto que con los métodos

monoalfabéticos.

En lo que respecta a la estimaci ón del valor de d, podemos emplear el método

propuesto por Friedrich Kasiski en 1863, que consiste en buscar subcadenas de tres o

más letras repetidas dentro del texto cifrado, y anotar las distancias si que las separan.

Lo más probable es que los patrones encontrados se correspondan con subcadenas

repetidas también en el texto claro, separadas por un n úmero de caracteres m últiplo

de d. Podremos, por tanto, estimar d calculando el máximo com ún divisor de todos

los si que hayamos localizado.

Cifrados por Sustituci ón Homof ónica

Para paliar la sensibilidad frente a ataques basados en el estudio de las frecuencias

de aparici ón de los s´ımbolos, existe una familia de algoritmos monoalfabéticos que

trata de ocultar las propiedades estad´ısticas del texto claro, empleando un alfabeto

de salida con más s´ımbolos que el alfabeto de entrada.

Supongamos que nuestro alfabeto de entrada posee cuatro letras, {a, b, c, d}. Su-

pongamos además que en nuestros textos la letra a aparece con una probabilidad

0.4, y el resto con probabilidad 0.2. Podr´ıamos emplear el siguiente alfabeto de salida

{α, β, γ, δ, } efectuando la siguiente asociaci ón:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.1. Algoritmos Clásicos de Cifrado

131

α con probabilidad 1/2

E(a) =

β

con probabilidad 1/2

E(b) =

γ

E(c) =

δ

E(d) =

En el texto cifrado ahora todos los s´ımbolos aparecen con igual probabilidad, ma-

ximizando su entrop´ıa y eliminando su redundancia, lo que en principio imposibilita

un ataque basado en frecuencias. A pesar de su gran potencial, este método necesita

un alfabeto de salida mayor que el de entrada —y tanto más grande cuanto mejor

queramos aplanar el histograma de frecuencias del criptograma—, lo cual representa

un problema, especialmente en lo que a aplicaciones informáticas se refiere.

9.1.2.

Cifrados de Transposici ón

Este tipo de mecanismos de cifrado no sustituye unos s´ımbolos por otros, sino

que cambia su orden dentro del texto, siguiendo el concepto de difusión definido

por Shannon. Quizás el más antiguo conocido sea el escitalo, empleado en la Anti-

gua Grecia, especialmente en Esparta. Este dispositivo estaba formado por un bast ón

cil´ındrico con un radio particular y una tira de piel que se enrollaba alrededor de

aquél. El texto se escrib´ıa a lo largo del bast ón y s ólo pod´ıa ser le´ıdo si se dispon´ıa de

otro bast ón de dimensiones similares. Un mecanismo de transposici ón sencillo, que

no precisa otra cosa que lápiz y papel, consiste en colocar el texto en una tabla de

n columnas, y dar como texto cifrado los s´ımbolos de una columna —ordenados de

arriba abajo— concatenados con los de otra, etc. La clave k se compone del n úmero n

junto con el orden en el que se deben leer las columnas.

Por ejemplo, supongamos que queremos cifrar el texto “El perro de San Roque no

tiene rabo”, con n = 5 y la permutaci ón {3, 2, 5, 1, 4} como clave. Colocamos el texto

en una tabla y obtenemos:

1

2

3

4

5

E

L

P

E

R

R

O

D

E

S

A

N

R

O

Q

U

E

N

O

T

I

E

N

E

R

A

B

O

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

132

9. Criptograf´ıa Clásica

Tendr´ıamos como texto cifrado la concatenaci ón de las columnas 3,2,5,1 y 4 res-

pectivamente: “ Osonealr r irednu eoere et p aqonb”. N ótese que hemos de conservar el

espacio al principio del texto cifrado para que el mecanismo surta efecto.

Criptoanálisis.

Este tipo de mecanismos de cifrado se puede criptoanalizar efec-

tuando un estudio estad´ıstico sobre la frecuencia de aparici ón de pares y tripletas de

s´ımbolos en el lenguaje en que esté escrito el texto claro. Suponiendo que conocemos

n, que en nuestro caso es igual a 5, tenemos 5! = 120 posibles claves. Descifrar´ıamos

el texto empleando cada una de ellas y comprobar´ıamos si los pares y tripletas de

s´ımbolos consecutivos que vamos obteniendo se corresponden con los más frecuentes

en Castellano. De esa forma podremos asignarle una probabilidad automáticamente

a cada una de las posibles claves.

Si, por el contrario, desconocemos n, basta con ir probando con n = 2, n = 3 y

as´ı sucesivamente. Este método es bastante complejo de llevar a cabo manualmente,

a no ser que se empleen ciertos trucos, pero una computadora puede completarlo en

un tiempo más que razonable sin demasiados problemas.

9.2.

Máquinas de Rotores. La Máquina ENIGMA

En el a ˜no 1923, un ingeniero alemán llamado Arthur Scherbius patent ó una má-

quina espec´ıficamente dise ˜nada para facilitar las comunicaciones seguras. Se trataba

de un instrumento de apariencia simple, parecido a una máquina de escribir. Quien

deseara codificar un mensaje s ólo ten´ıa que teclearlo y las letras correspondientes al

texto cifrado se ir´ıan iluminando en un panel. El destinatario copiaba dichas letras

en su propia máquina y el mensaje original aparec´ıa de nuevo. La clave la constitu´ıan

las posiciones iniciales de tres tambores o rotores que el ingenio pose´ıa en su parte

frontal.

En la figura 9.1 podemos apreciar un esquema de esta máquina, llamada ENIG-

MA. Los rotores no son más que tambores con contactos en su superficie y cableados

en su interior, de forma que con cada pulsaci ón del teclado, la posici ón de éstos de-

termina cuál es la letra que se ha de iluminar. Cada vez que se pulsa una tecla el

primer rotor avanza una posici ón; el segundo avanza cuando el anterior ha dado una

vuelta completa y as´ı sucesivamente. El reflector no exist´ıa en los primeros modelos,

se introdujo posteriormente para permitir que la misma máquina sirviera tanto para

cifrar como para descifrar, como veremos más adelante.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.2. Máquinas de Rotores. La Máquina ENIGMA

133

Figura 9.1: Esquema de la máquina Enigma.

9.2.1.

Un poco de Historia

ENIGMA pronto llam ó la atenci ón del ejército alemán, que la utiliz ó de forma

intensiva a lo largo de la II Guerra Mundial. Además se le aplicaron varias mejoras,

como incluir un peque ˜no sistema previo de permutaci ón, llamado stecker o clavijero

—que permit´ıa escoger seis pares de letras para ser intercambiadas previamente al

cifrado—, hacer que los rotores fueran intercambiables —se pod´ıan elegir y colocar

en cualquier orden tres de entre cinco disponibles—, e incluso ampliar a cuatro el

n úmero de rotores.

Aunque ENIGMA parec´ıa virtualmente imposible de romper, presentaba una se-

rie de debilidades, tanto en su dise ˜no como en los mecanismos empleados para utili-

zarla, que fueron aprovechadas por el ejército aliado. El primero en conseguir avances

significativos fue el servicio de inteligencia polaco, ya que en 1931 los franceses, en

virtud de un acuerdo de cooperaci ón firmado diez a ˜nos antes, les facilitaron informa-

ci ón detallada sobre la m´aquina1, que ellos a su vez hab´ıan obtenido sobornando a un

miembro de la oficina de cifras alemana. De hecho, los esp´ıas franceses consideraban

esta informaci ón totalmente in útil, ya que pensaban que ENIGMA era, sencillamente,

indescifrable.

El conocimiento preciso de la máquina permiti ó a un equipo de tres matemáticos

1En anteriores ediciones de este libro se mencionaba el env´ıo por error a Polonia de una máquina,

pero parece que se trata simplemente de una leyenda.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

134

9. Criptograf´ıa Clásica

(Marian Rejewski, Jerzy Rozycki y Henryk Zygalski) elaborar un mecanismo para

aprovechar una debilidad, no en la máquina en s´ı, sino en el protocolo empleado

por el ejército alemán para colocar los rotores al principio de cada mensaje. Dicho

protocolo consist´ıa en escoger una posici ón de un libro de claves, y enviar tres letras

cualesquiera dos veces, para evitar posibles errores. En realidad se estaba introducien-

do una redundancia en el mensaje que permit´ıa obtener, con un nivel de esfuerzo

al alcance de los polacos, la clave empleada. Se construy ó un aparato que permit´ıa

descifrar los mensajes, y se le bautiz ó como Ciclómetro.

En 1938 Alemania cambi ó el protocolo, lo cual oblig ó a los matemáticos polacos a

refinar su sistema, aunque básicamente se segu´ıan enviando tres letras repetidas. No

vamos a entrar en detalles, pero el ataque se basaba en buscar ciertas configuraciones

de la máquina, con propiedades espec´ıficas. Estas configuraciones especiales daban

una informaci ón vital sobre la posici ón inicial de los rotores para un mensaje con-

creto. Se construy ó entonces una versi ón mejorada del cicl ómetro, llamada Bomba,

que era capaz de encontrar estas configuraciones de forma automática. Sin embargo,

a finales de ese mismo a ˜no se introdujeron dos rotores adicionales, lo cual obligaba

a emplear sesenta bombas simultáneamente para romper el sistema. Polonia simple-

mente carec´ıa de medios econ ómicos para afrontar su construcci ón.

Los polacos entonces pusieron en conocimiento de los servicios secretos británico

y francés sus progresos, esperando poder establecer una v´ıa de colaboraci ón para

seguir descifrando los mensajes germanos, pero la invasi ón de Polonia era inminente.

Tras destruir todas las pruebas que pudieran indicar al ejército alemán el éxito polaco

frente a ENIGMA, el equipo de Rejewski huy ó precipitadamente, transportando lo

que pudieron salvar en varios camiones. Tras pasar por Ruman´ıa e Italia, y tener

que quemar todos los camiones por el camino excepto uno, llegaron a Par´ıs, donde

colaboraron con un equipo de siete espa ˜noles expertos en criptograf´ıa, liderados por

un tal Camaz ón. Cuando al a ˜no siguiente Alemania invadi ó Francia el nuevo equipo

tuvo que huir a África, y posteriormente instalarse en Montpellier, donde reanudaron

sus trabajos. En 1942, la entrada alemana en Vichy forz ó a los matemáticos a escapar

de nuevo, los polacos a Espa ˜na (donde muri ó Rozycki), y los espa ˜noles a África,

donde se perdi ó definitivamente su pista.

Cuando el equipo de Rejewski lleg ó por fin a Inglaterra, ya no se le consider ó se-

guro, al haber estado en contacto con el enemigo, y se le confiaron únicamente tra-

bajos menores. Mientras tanto, en Bletchley Park, Alan Turing desarrollaba una se-

gunda Bomba basándose en los estudios del polaco, más evolucionada y rápida que

su antecesora, en el marco del proyecto ULTRA británico, que se encargaba de re-

coger informaci ón acerca de los sistemas de comunicaciones germanos. Este nuevo

dispositivo aprovechaba una debilidad esencial en ENIGMA: un mensaje no puede

codificarse en s´ı mismo, lo cual implica que ninguna de las letras del texto claro pue-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.2. Máquinas de Rotores. La Máquina ENIGMA

135

de coincidir con ninguna del texto cifrado. La Bomba de Turing part´ıa de una palabra

adivinada —en contra de las normas de uso de ENIGMA, la mayor´ıa de los mensajes

que enviaba el ejército alemán comenzaban de igual forma, lo cual facilit ó la tarea del

equipo aliado enormemente—, y buscaba un emparejamiento con el mensaje cifrado

tal que el supuesto texto claro y el fragmento de criptograma asociado no coincidie-

ran en ninguna letra. A partir de ah´ı la Bomba realizaba una b úsqueda exhaustiva

de la configuraci ón inicial de la máquina para decodificar el mensaje, mediante un

ingenioso sistema que permit´ıa ignorar la posici ón del stecker.

Un hecho bastante poco conocido es que Alemania regal ó al régimen de Franco

casi una veintena de máquinas ENIGMA, que fueron utilizadas para comunicacio-

nes secretas hasta entrados los a ˜nos cincuenta, suponemos que para regocijo de los

servicios de espionaje británico y norteamericano.

9.2.2.

Consideraciones Te óricas Sobre la Máquina ENIGMA

Observemos que un rotor no es más que una permutaci ón dentro del alfabeto

de entrada. El cableado hace que cada una de las letras se haga corresponder con

otra. Todas las letras tienen imagen y no hay dos letras con la misma imagen. Si

notamos una permutaci ón como π, podemos escribir que la permutaci ón resultante

de combinar todos los rotores en un instante dado es:

πtotal = hπ0, π1, π2, π3, π−1, π−1, π−1i

2

1

0

La permutaci ón π3 corresponde al reflector, y debe cumplir que π3 = π−1

3

, es decir,

que aplicada dos veces nos dé lo mismo que ten´ıamos al principio. De esta forma se

cumple la propiedad de que, para una misma posici ón de los rotores, la codificaci ón

y la decodificaci ón son simétricas.

La fuerza de la máquina ENIGMA radica en que tras codificar cada letra se giran

los rotores, lo cual hace que la permutaci ón que se aplica a cada letra sea diferente. La

máquina, por tanto, es un sistema de cifrado de sustituci ón polialfabética. Además,

cada sustituci ón concreta no se repite hasta que los rotores recuperan su posici ón

inicial, lo que da lugar a un tama ˜no de ciclo realmente grande. Tengamos en cuenta

que hay 17576 posiciones iniciales de los rotores, y 60 combinaciones de tres rotores

a partir de los cinco de entre los que se puede elegir. Puesto que el stecker presenta

en torno a cien mil millones de combinaciones, existe una cantidad enorme de po-

sibles disposiciones iniciales de la máquina —aproximadamente 1017—. La potencia

del método de criptoanálisis empleado radica en que se pod´ıa identificar un empare-

jamiento válido entre el criptograma y el texto claro, e ignorar la posici ón del stecker,

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

136

9. Criptograf´ıa Clásica

de forma que s ólo bastaba con rastrear dentro del espacio de posibles configuraciones

para encontrar aquella que llevara a cabo la transformaci ón esperada. No disponer

de dicho emparejamiento hubiera complicado enormemente el criptoanálisis, tal vez

hasta el punto de hacerlo fracasar.

9.2.3.

Otras Máquinas de Rotores

Además de la máquina alemana ENIGMA, existieron otros dispositivos criptográ-

ficos basados en rotores. En esta secci ón comentaremos SIGABA y PURPLE, ambos

empleados durante la II Guerra Mundial.

La Máquina SIGABA

Esta máquina de rotores, también conocida como ECM Mark II, Converter M-134

y CSP-889, fue empleada por el ejército de los EE.UU. durante la Segunda Guerra

Mundial. A diferencia de la máquina Enigma, en la que los rotores avanzan una posi-

ci ón cada vez que se pulsa una tecla, SIGABA incorpora un segundo juego de rotores,

que se encarga de decidir qué rotores principales avanzan cada vez que se pulsa una

tecla. Esto aumenta considerablemente la longitud de ciclo de la máquina, y complica

la localizaci ón de posibles patrones en los textos cifrados.

El principal inconveniente de esta máquina era su excesivo peso y tama ˜no, sin

contar con su complejidad mecánica, dificultad de manejo y fragilidad. Esto supuso

que, en la práctica, no pudiera ser utilizada en muchas situaciones a lo largo de la

guerra, a diferencia de la máquina Enigma, mucho más ligera y resistente. En su lu-

gar, se usaba, entre otros, el famoso código consistente en emplear indios navajos, que

simplemente se comunicaban por radio en su propio idioma, demasiado desconocido

y complejo como para ser comprendido por el enemigo.

La Máquina PURPLE

Esta máquina, bautizada como PURPLE por los EE.UU., fue empleada por el go-

bierno japonés desde poco antes de iniciarse la Segunda Guerra Mundial, con fines

diplomáticos. Se trata de la sucesora de otra máquina, denominada RED, y fue di-

se ˜nada por un capitán de la armada japonesa. Criptoanalizada durante la II Gue-

rra Mundial por un equipo del Servicio de Inteligencia de Se ˜nales de la Armada de

EE.UU., dirigido por William Friedman, debi ó su ca´ıda más a una mala pol´ıtica de

elecci ón de claves, que a debilidades intr´ınsecas de la propia máquina.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.3. El Cifrado de Lorenz

137

9.3.

El Cifrado de Lorenz

El cifrado de Lorenz se llevaba a cabo mediante una máquina, denominada SZ40,

que ten´ıa un dise ˜no considerablemente más complejo que el de la ENIGMA. Para

su descifrado se desarroll ó una máquina descifradora, denominada Colossus, que

supuso el germen de las computadoras tal y como hoy las conocemos. Si bien la

Bomba efectuaba en esencia una b úsqueda sistemática de la clave, el cifrado de Lo-

renz necesitaba de análisis estad´ısticos más complejos, y para ello el matemático Max

Newman2, inspirándose en el concepto de Máquina Universal de Turing, dirigi ó el

desarrollo de una máquina, bautizada con el nombre de Colossus, que podr´ıa muy

bien ser considerada como la primera computadora moderna, aunque su existencia

se mantuvo en secreto hasta mediados de los a ˜nos 70. El ingenio, cuya construcci ón

fue llevada a cabo por el ingeniero Tommy Flowers, constaba de unas 1.500 válvulas

de vac´ıo, tecnolog´ıa mucho más moderna que los relés que constitu´ıan el coraz ón de

las Bombas.

En el cifrado de Lorenz se empleaba para codificar teletipos, en los que los textos

ven´ıan representados por una matriz formada por columnas de cinco puntos. Cada

una de esas columnas correspond´ıa a una letra, y en cada punto pod´ıa haber (o no)

un agujero. En esencia, tenemos un sistema de codificaci ón de cinco bits por letra. La

máquina de Lorenz generaba una secuencia pseudoaleatoria (ver cap´ıtulo 8) binaria

que era combinada con la matriz de puntos, mediante una operaci ón or–exclusivo para

producir el criptograma.

El protocolo de comunicaciones usado para la máquina de Lorenz obligaba a usar

secuencias pseudoaleatorias distintas para mensajes distintos. Sin embargo, en agos-

to de 1941, un operador alemán cometi ó un terrible error: ten´ıa que transmitir un

mensaje de cerca de 4.000 caracteres, y tras enviarlo, recibi ó la siguiente respuesta:

“¿podr´ıas repetirlo?”. El operador comenz ó a codificar de nuevo el mensaje a mano,

y, probablemente molesto por tener que repetir la operaci ón, comenz ó a abreviar el

texto claro, de tal forma que se enviaron dos mensajes diferentes combinados con la

misma secuencia pseudoaleatoria. Esta informaci ón permiti ó a los esp´ıas del bando

contrario extraer la secuencia y comenzar a extraer patrones de la misma —después

de todo, result ó más pseudo que aleatoria—. A partir de aqu´ı el único problema fue que

para descifrar los mensajes, el método manual se mostraba demasiado lento. Precisa-

mente por eso se desarroll ó Colossus.

2No confundir con John Von Neumann, que también hizo aportaciones cruciales en los inicios de

la Informática, pero nunca estuvo en Bletchley Park.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

138

9. Criptograf´ıa Clásica

9.3.1.

Consideraciones Te óricas sobre el Cifrado de Lorenz

La máquina SZ40 pretend´ıa emular un sistema Seguro de Shannon (secci ón 3.5),

pero para ello las secuencias generadas tendr´ıan que ser totalmente aleatorias. Sin

embargo, si las secuencias producidas por la máquina fueran de este tipo, ser´ıa im-

posible reproducirlas en los dos extremos de la comunicaci ón, por lo que el sistema

en realidad es una técnica de cifrado de Flujo (cap´ıtulo 11).

Si uno dispone de dos mensajes con sentido en un idioma determinado, cifra-

dos con la misma secuencia pseudoaleatoria, bastará con buscar cadenas de bits que

permitan descifrar simultáneamente ambos mensajes. Por ejemplo, supongamos la

siguiente codificaci ón binaria para cada letra:

a

b

c

d

e

f

g

h

i

j

k

l

m

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

0

0

1

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

0

1

0

1

0

1

0

1

0

1

0

n

o

p

q

r

s

t

u

v

w

x

y

z

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

0

1

0

1

0

1

0

1

0

1

0

1

Si nos encontramos los mensajes:

10100

11000

11000

10101

10000

11000

11001

11011

podemos generar las 1.024 combinaciones posibles de 10 bits, y tratar de descifrar las

dos primeras letras de cada mensaje. Nos quedaremos únicamente con aquellas com-

binaciones de bits que den lugar a s´ılabas (o partes de s´ılabas) legales en castellano

en ambos mensajes. Por ejemplo, la cadena 1010101010 da lugar a las letras BS para el

primer mensaje, y FS para el segundo, ambas con muy poca probabilidad de aparecer

al principio de un mensaje correcto en castellano.

Si, por el contrario, contáramos con un único mensaje cifrado, este análisis resul-

tar´ıa imposible, ya que para todos y cada uno de los mensajes posibles en castellano

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

9.4. Ejercicios Propuestos

139

existirá una secuencia de bits que lo genera. La clave está en que existirán muy pocas

secuencias —tal vez solo una— que den lugar, en ambos mensajes cifrados, a textos

claros válidos.

La tarea es tediosa, pero da resultado, incluso si la secuencia empleada para cifrar

es totalmente aleatoria. En consecuencia, los fallos sobre los que se ciment ó el éxito

del criptoanálisis del cifrado de Lorenz fueron dos: en primer lugar, el cifrado acci-

dental de dos mensajes distintos con la misma secuencia, y en segundo, el carácter

poco aleatorio de la secuencia en cuesti ón.

9.4.

Ejercicios Propuestos

1. Descifre los mensajes comentados en la secci ón 9.3.1, teniendo en cuenta cada

uno de ellos es una palabra completa y correcta en castellano.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

140

9. Criptograf´ıa Clásica

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 10

Cifrados por Bloques

10.1.

Introducci ón

Una gran parte de los algoritmos de cifrado simétrico operan dividiendo el men-

saje que se pretende codificar en bloques de tama ˜no fijo, y aplican sobre cada uno

de ellos una combinaci ón más o menos compleja de operaciones de confusi ón —

sustituciones— y difusi ón —transposiciones— (ver secci ón 3.8). Estos algoritmos se

denominan, en general, cifrados por bloques.

Recordemos que la confusi ón consiste en tratar de ocultar la relaci ón que exis-

te entre el texto claro, el texto cifrado y la clave. Un buen mecanismo de confusi ón

hará demasiado complicado extraer relaciones estad´ısticas 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.

Un hecho digno de ser tenido en cuenta es que la confusi ón por s´ı sola resulta

suficiente, ya que si establecemos una tabla de sustituci ón completamente diferente

para cada clave con todos los textos claros posibles tendremos un sistema extrema-

damente seguro. Sin embargo, dichas tablas ocupar´ıan cantidades astron ómicas de

memoria, por lo que en la práctica resultan inviables. Por ejemplo, un algoritmo que

codificara bloques de 128 bits empleando una clave de 80 bits necesitar´ıa una tabla

de sustituci ón con un tama ˜no del orden de 1064 bits.

Lo que en realidad se hace para conseguir algoritmos fuertes sin necesidad de al-

macenar tablas enormes es intercalar la confusi ón (sustituciones simples, con tablas

peque ˜nas) y la difusi ón (permutaciones). Esta combinaci ón se conoce como cifrado de

producto. La mayor´ıa de los algoritmos se basan en diferentes capas de sustituciones

y permutaciones, estructura que denominaremos Red de Sustitución-Permutación. En

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

142

10. Cifrados por Bloques

Figura 10.1: Estructura de una red de Feistel.

muchos casos el criptosistema no es más que una operaci ón combinada de sustitu-

ciones y permutaciones, repetida n veces, como ocurre con DES.

10.1.1.

Redes de Feistel

Muchos algoritmos de cifrado tienen en com ún que dividen un bloque de longi-

tud n en dos mitades, L y R. Se define entonces un cifrado de producto iterativo en

el que la salida de cada ronda se usa como entrada para la siguiente seg ún la relaci ón

(ver figura 10.1):

L

i

= Ri−1

si i < n.

Ri = Li−1 ⊕ f (Ri−1, Ki)

(10.1)

Ln = Ln−1 ⊕ f (Rn−1, Kn)

Rn = Rn−1

Este tipo de estructura se denomina Red de Feistel, y es empleada en multitud

de algoritmos, como DES, Lucifer, FEAL, CAST, Blowfish, etc. Tiene la interesante

propiedad de que para invertir la funci ón de cifrado —es decir, para descifrar— basta

con aplicar el mismo algoritmo, pero con las Ki en orden inverso. N ótese, además,

que esto ocurre independientemente de c ómo sea la funci ón f .

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.1. Introducci ón

143

Podemos emplear la inducción matemática 1 para comprobar esta propiedad. Sea

En(L, R) la funci ón de cifrado para una red de Feistel de n rondas y Dn(L, R) la

funci ón de descifrado análoga. Desdoblaremos cada funci ón en sus bloques izquier-

do y derecho y los denotaremos con super´ındices, EL(L, R), ER(L, R), DL(L, R) y

n

n

n

DR(L, R) . Hemos de demostrar que

n

DL(EL(L, R), ER(L, R)) = L

y

DR(EL(L, R), ER(L, R)) = R

n

n

n

n

n

n

para cualquier valor de n.

Si n = 1 tenemos:

EL(A, B) = A ⊕ f (B, K

1

1)

ER(A, B) = B

1

y

DL(A, B) = A ⊕ f (B, K

1

1)

DR(A, B) = B

1

luego

DL EL(L, R), ER(L, R) = EL(L, R) ⊕ f ER(L, R), K

=

1

1

1

1

1

1

= L ⊕ f (R, K1) ⊕ f (R, K1) = L

y

DR EL(L, R), ER(L, R) = ER(L, R) = R

1

1

1

1

Suponiendo que se cumple el caso n, demostrar el caso n + 1:

N ótese en primer lugar que cifrar con n + 1 rondas equivale a hacerlo con n

rondas, permutar el resultado y aplicar el paso n+1 de cifrado seg ún la relaci ón

10.1:

EL (L, R) = ER(L, R) ⊕ f EL(L, R), K

n+1

n

n

n+1

ER (L, R) = EL(L, R)

n+1

n

El descifrado con n + 1 será igual a aplicar el primer paso del algoritmo con

Kn+1 y luego descifrar el resultado con n rondas:

Dn+1(A, B) = Dn B, A ⊕ f (B, Kn+1)

1Este principio garantiza que si demostramos el caso correspondiente a n = 1, y luego demostra-

mos el caso n + 1 suponiendo cierto el caso n, la propiedad en cuesti ón ha de cumplirse para cualquier

valor entero de n igual o superior a 1

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

144

10. Cifrados por Bloques

Haciendo que A y B sean ahora el resultado de cifrar con n + 1 rondas tenemos:

Dn+1 EL (L, R), ER (L, R) =

n+1

n+1

= Dn ER (L, R), EL (L, R) ⊕ f (ER (L, R), K

n+1

n+1

n+1

n+1)

Sustituyendo EL (L, R) y ER (L, R) en la parte derecha de la anterior expre-

n+1

n+1

si ón nos queda:

Dn+1 EL (L, R), ER (L, R) =

n+1

n+1

= Dn EL(L, R), ER(L, R) ⊕ f (EL(L, R), K

⊕ f (EL(L, R), K

n

n

n

n+1)

n

n+1)

o sea,

DL

EL (L, R), ER (L, R)

= DL EL(L, R), ER(L, R) = L

n+1

n+1

n+1

n

n

n

DL

ER (L, R), ER (L, R)

= DR EL(L, R), ER(L, R) = R

n+1

n+1

n+1

n

n

n

con lo que finaliza nuestra demostraci ón.

10.1.2.

Cifrados con Estructura de Grupo

Otra de las cuestiones a tener en cuenta en los cifrados de producto es la posibi-

lidad de que posean estructura de grupo. Se dice que un cifrado tiene estructura de

grupo si se cumple la siguiente propiedad:

∀ k1, k2, M

∃ k3

tal que

Ek (E (M )) = E (M )

(10.2)

2

k1

k3

esto es, si hacemos dos cifrados encadenados con k1 y k2, existe una clave k3 que

realiza la transformaci ón equivalente.

Es interesante que un algoritmo criptográfico carezca de este tipo de estructura,

ya que si ciframos un mensaje primero con la clave k1 y el resultado con la clave

k2, es como si hubiéramos empleado una clave de longitud doble, aumentando la

seguridad del sistema. Si, por el contrario, la transformaci ón criptográfica presentara

estructura de grupo, esto hubiera sido equivalente a cifrar el mensaje una única vez

con una tercera clave, con lo que no habr´ıamos ganado nada.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.1. Introducci ón

145

Figura 10.2: A: S-Caja individual. B: combinaci ón de cuatro S-Cajas.

10.1.3.

S-Cajas

Hemos dicho antes que para poder construir buenos algoritmos de producto, in-

tercalaremos sustituciones sencillas (confusi ón), con tablas peque ˜nas, y permutacio-

nes (difusi ón). Estas tablas peque ˜nas de sustituci ón se denominan de forma genérica

S-Cajas.

Una S-Caja de m × n bits (ver figura 10.2) es una tabla de sustituci ón que toma

como entrada cadenas de m bits y da como salida cadenas de n bits. DES, por ejemplo,

emplea ocho S-Cajas de 6 × 4 bits. La utilizaci ón de las S-Cajas es sencilla: se divide

el bloque original en trozos de m bits y cada uno de ellos se sustituye por otro de n

bits, haciendo uso de la S-Caja correspondiente. Normalmente, cuanto más grandes

sean las S-Cajas, más resistente será el algoritmo resultante, aunque la elecci ón de los

valores de salida para que den lugar a un buen algoritmo no es en absoluto trivial.

Existe un algoritmo criptográfico, llamado CAST, que emplea seis S-Cajas de 8×32

bits. CAST codifica bloques de 64 bits empleando claves de 64 bits, consta de ocho

rondas y deposita prácticamente toda su fuerza en las S-Cajas. De hecho, existen mu-

chas variedades de CAST, cada una con sus S-Cajas correspondientes —algunas de

ellas secretas—. Este algoritmo se ha demostrado resistente a las técnicas habituales

de criptoanálisis, y s ólo se conoce la fuerza bruta como mecanismo para atacarlo.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

146

10. Cifrados por Bloques

Figura 10.3: Esquema de la funci ón f del algoritmo DES.

10.2.

El Algoritmo DES

Es el algoritmo simétrico más extendido mundialmente. Se basa en el algoritmo

LUCIFER, que hab´ıa sido desarrollado por IBM a principios de los setenta, y fue

adoptado como estándar por el Gobierno de los EE.UU. para comunicaciones no cla-

sificadas en 1976. En realidad la NSA lo dise ˜n ó para ser implementado por hardware,

creyendo que los detalles iban a ser mantenidos en secreto, pero la Oficina Nacional

de Estandarizaci ón public ó su especificaci ón con suficiente detalle como para que

cualquiera pudiera implementarlo por software. No fue casualidad que el siguiente

algoritmo adoptado (Skipjack) fuera mantenido en secreto.

A mediados de 1998, se demostr ó que un ataque por la fuerza bruta a DES era

viable, debido a la escasa longitud que emplea en su clave. No obstante, el algoritmo

a ún no ha demostrado ninguna debilidad grave desde el punto de vista te órico, por

lo que su estudio sigue siendo plenamente interesante.

El algoritmo DES codifica bloques de 64 bits empleando claves de 56 bits. Es una

Red de Feistel de 16 rondas, más dos permutaciones, una que se aplica al principio

(Pi) y otra que se aplica al final (Pf ), tales que Pi = P −1.

f

La funci ón f (figura 10.3) se compone de una permutaci ón de expansi ón (E), que

convierte el bloque de 32 bits correspondiente en uno de 48. Después realiza un or-

exclusivo con el valor Ki, también de 48 bits, aplica ocho S-Cajas de 6×4 bits, y efect úa

una nueva permutaci ón P .

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.2. El Algoritmo DES

147

Figura 10.4: Cálculo de las Ki para el algoritmo DES. EP1 representa la primera elec-

ci ón permutada, que s ólo conserva 56 bits de los 64 de entrada, y EP2 representa la

segunda, que se queda con 48 bits.

Se calcula un total de 16 valores de Ki (figura 10.4), uno para cada ronda, efec-

tuando primero una permutaci ón inicial EP1 sobre la clave de 64 bits, llevando a

cabo desplazamientos a la izquierda de cada una de las dos mitades —de 28 bits—

resultantes, y realizando finalmente una elecci ón permutada (EP2) de 48 bits en cada

ronda, que será la Ki. Los desplazamientos a la izquierda son de dos bits, salvo para

las rondas 1, 2, 9 y 16, en las que se desplaza s ólo un bit. N ótese que aunque la clave

para el algoritmo DES tiene en principio 64 bits, se ignoran ocho de ellos —un bit de

paridad por cada byte de la clave—, por lo que en la práctica se usan s ólo 56 bits.

Para descifrar basta con usar el mismo algoritmo (ya que Pi = P −1) empleando

f

las Ki en orden inverso.

10.2.1.

Claves Débiles en DES

El algoritmo DES presenta algunas claves débiles. En general, todos aquellos valo-

res de la llave que conducen a una secuencia inadecuada de Ki serán poco recomen-

dables. Distinguiremos entre claves débiles (cuadro 10.1), que son aquellas que gene-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

148

10. Cifrados por Bloques

Clave

Clave tras aplicar EP1

0101010101010101

0000000 0000000

1F1F1F1F0E0E0E0E

0000000 FFFFFFF

E0E0E0E0F1F1F1F1

FFFFFFF 0000000

FEFEFEFEFEFEFEFE

FFFFFFF FFFFFFF

Cuadro 10.1: Claves débiles para el algoritmo DES (64 bits), expresadas en hexadeci-

mal.

Clave

Clave tras aplicar EP1

01FE01FE01FE01FE

AAAAAAA AAAAAAA

FE01FE01FE01FE01

5555555 5555555

1FE01FE00EF10EF1

AAAAAAA 5555555

E01FE01FF10EF10E

5555555 AAAAAAA

01E001E001F101F1

AAAAAAA 0000000

E001E001F101F101

5555555 0000000

1FFE1FFE0EFE0EFE

AAAAAAA FFFFFFF

FE1FFE1FFE0EFE0E

5555555 FFFFFFF

011F011F010E010E

0000000 AAAAAAA

1F011F010E010E01

0000000 5555555

E0FEE0FEF1FEF1FE

FFFFFFF AAAAAAA

FEE0FEE0FEF1FEF1

FFFFFFF 5555555

Cuadro 10.2: Claves semi-débiles para el algoritmo DES (64 bits), expresadas en he-

xadecimal.

ran un conjunto de dieciséis valores iguales de Ki —y que cumplen Ek(Ek(M )) =

M —, y claves semidébiles (cuadro 10.2), que generan dos valores diferentes de Ki, ca-

da uno de los cuales aparece ocho veces. En cualquier caso, el n úmero de llaves de

este tipo es tan peque ˜no en comparaci ón con el n úmero total de posibles claves, que

no debe suponer un motivo de preocupaci ón.

10.3.

Variantes de DES

A mediados de julio de 1998, una empresa sin ánimo de lucro, llamada EFF (Elec-

tronic Frontier Foundation), logr ó fabricar una máquina capaz de descifrar un men-

saje 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 desci-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.3. Variantes de DES

149

frar un mensaje resultaba a ún excesivamente costoso, incluso para organizaciones

gubernamentales. DES-Cracker cost ó menos de 250.000 euros.

A pesar de su ca´ıda, DES sigue siendo ampliamente utilizado en multitud de apli-

caciones, como por ejemplo las transacciones de los cajeros automáticos. De todas

formas, el problema real de DES no radica en su dise ˜no, sino en que emplea una clave

demasiado corta (56 bits), lo cual hace que con el avance actual de las computadoras

los ataques por la fuerza bruta comiencen a ser opciones realistas. Mucha gente se

resiste a abandonar este algoritmo, precisamente porque ha sido capaz de sobrevivir

durante veinte a ˜nos sin mostrar ninguna debilidad en su dise ˜no, y prefieren propo-

ner variantes que, de un lado evitar´ıan el riesgo de tener que confiar en algoritmos

nuevos, y de otro permitir´ıan aprovechar gran parte de las implementaciones por

hardware existentes de DES.

10.3.1.

DES M últiple

Consiste en aplicar varias veces el algoritmo DES con diferentes claves al mensaje

original. Se puede hacer ya que DES no presenta estructura de grupo (ecuaci ón 10.2).

El más com ún de todos ellos es el Triple-DES, que responde a la siguiente estructura:

C = Ek (E−1(E (M )))

1

k

k

2

1

es decir, codificamos con la subclave k1, decodificamos con k2 y volvemos a codificar

con k1. La clave resultante es la concatenaci ón de k1 y k2, con una longitud de 112

bits.

10.3.2.

DES con Subclaves Independientes

Consiste en emplear subclaves diferentes para cada una de las 16 rondas de DES.

Puesto que estas subclaves son de 48 bits, la clave resultante tendr´ıa 768 bits en total.

No es nuestro objetivo entrar en detalles, pero empleando criptoanálisis diferencial,

esta variante podr´ıa ser rota con 261 textos claros escogidos, por lo que en la práctica

no presenta un avance sustancial sobre DES estándar.

10.3.3.

DES Generalizado

Esta variante emplea n trozos de 32 bits en cada ronda en lugar de dos, por lo que

aumentamos tanto la longitud de la clave como el tama ˜no de mensaje que se puede

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

150

10. Cifrados por Bloques

codificar, manteniendo sin embargo el orden de complejidad del algoritmo. Se ha

demostrado sin embargo que no s ólo se gana poco en seguridad, sino que en muchos

casos incluso se pierde.

10.3.4.

DES con S-Cajas Alternativas

Consiste en utilizar S-Cajas diferentes a las de la versi ón original de DES. En la

práctica no se han encontrado S-Cajas mejores que las propias de DES. De hecho,

algunos estudios han revelado que las S-Cajas originales presentan propiedades que

las hacen resistentes a técnicas de criptoanálisis que no fueron conocidas fuera de la

NSA hasta muchos a ˜nos después de la aparici ón del algoritmo.

10.4.

El algoritmo IDEA

El algoritmo IDEA (International Data Encryption Algorithm) es bastante más

joven que DES, pues data de 1992. Para muchos constituye el mejor y más seguro

algoritmo simétrico disponible en la actualidad. Trabaja con bloques de 64 bits de

longitud y emplea una clave de 128 bits. Como en el caso de DES, se usa el mismo

algoritmo tanto para cifrar como para descifrar.

IDEA es un algoritmo bastante seguro, y hasta ahora se ha mostrado resistente

a multitud de ataques, entre ellos el criptoanálisis diferencial. No presenta claves

d´ebiles2, y su longitud de clave hace imposible en la práctica un ataque por la fuerza

bruta.

Como ocurre con todos los algoritmos simétricos de cifrado por bloques, IDEA se

basa en los conceptos de confusi ón y difusi ón, haciendo uso de las siguientes opera-

ciones elementales (todas ellas fáciles de implementar):

XOR.

Suma m ódulo 216.

Producto m ódulo 216 + 1.

El algoritmo IDEA consta de ocho rondas. Dividiremos el bloque X a codificar, de

64 bits, en cuatro partes X1, X2, X3 y X4 de 16 bits. Para la interpretaci ón entera de

2En realidad, IDEA tiene un peque ˜n´ısimo subconjunto de claves que pueden dar ciertas ventajas a

un criptoanalista, pero la probabilidad de encontrarnos con una de ellas es de 1 entre 296, por lo que

no representan un peligro real.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.4. El algoritmo IDEA

151

dichos registros se empleará el criterio big endian, lo cual significa que el primer byte

es el más significativo. Denominaremos Zi a cada una de las 52 subclaves de 16 bits

que vamos a necesitar. Las operaciones que llevaremos a cabo en cada ronda son las

siguientes:

1. Multiplicar X1 por Z1.

2. Sumar X2 con Z2.

3. Sumar X3 con Z3.

4. Multiplicar X4 por Z4.

5. Hacer un XOR entre los resultados del paso 1 y el paso 3.

6. Hacer un XOR entre los resultados del paso 2 y el paso 4.

7. Multiplicar el resultado del paso 5 por Z5.

8. Sumar los resultados de los pasos 6 y 7.

9. Multiplicar el resultado del paso 8 por Z6.

10. Sumar los resultados de los pasos 7 y 9.

11. Hacer un XOR entre los resultados de los pasos 1 y 9.

12. Hacer un XOR entre los resultados de los pasos 3 y 9.

13. Hacer un XOR entre los resultados de los pasos 2 y 10.

14. Hacer un XOR entre los resultados de los pasos 4 y 10.

La salida de cada iteraci ón serán los cuatro sub-bloques obtenidos en los pasos

11, 12, 13 y 14, que serán la entrada del siguiente ciclo, en el que emplearemos las

siguientes seis subclaves, hasta un total de 48. Al final de todo intercambiaremos los

dos bloques centrales (en realidad con eso deshacemos el intercambio que llevamos a

cabo en los pasos 12 y 13).

Después de la octava iteraci ón, se realiza la siguiente transformaci ón:

1. Multiplicar X1 por Z49.

2. Sumar X2 con Z50.

3. Sumar X3 con Z51.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

152

10. Cifrados por Bloques

Ronda

Subclaves de Cifrado

Subclaves de Descifrado

1

Z1

Z2

Z3

Z4

Z5

Z6

Z−1

−Z

Z

49

50

−Z51

Z−1

52

47

Z48

2

Z7

Z8

Z9

Z10

Z11

Z12

Z−1

−Z

Z

43

45

−Z44

Z−1

46

41

Z42

3

Z13

Z14

Z15

Z16

Z17

Z18

Z−1

−Z

Z

37

39

−Z38

Z−1

40

35

Z36

4

Z19

Z20

Z21

Z22

Z23

Z24

Z−1

−Z

Z

31

33

−Z32

Z−1

34

29

Z30

5

Z25

Z26

Z27

Z28

Z29

Z30

Z−1

−Z

Z

25

27

−Z26

Z−1

28

23

Z24

6

Z31

Z32

Z33

Z34

Z35

Z36

Z−1

−Z

Z

19

21

−Z20

Z−1

22

17

Z18

7

Z37

Z38

Z39

Z40

Z41

Z42

Z−1

−Z

Z

13

15

−Z14

Z−1

16

11

Z12

8

Z43

Z44

Z45

Z46

Z47

Z48

Z−1

−Z

Z

7

9

−Z8

Z−1

10

5

Z6

Final

Z49

Z50

Z51

Z52

Z−1

−Z

1

2

−Z3

Z−1

4

Cuadro 10.3: Subclaves empleadas en el algoritmo IDEA

4. Multiplicar X4 por Z52.

Las primeras ocho subclaves se calculan dividiendo la clave de entrada en bloques

de 16 bits. Las siguientes ocho se calculan rotando la clave de entrada 25 bits a la

izquierda y volviendo a dividirla, y as´ı sucesivamente.

Las subclaves necesarias para descifrar se obtienen cambiando de orden las Zi y

calculando sus inversas para la suma o la multiplicaci ón, seg ún el cuadro 10.3. Pues-

to que 216 + 1 es un n úmero primo, nunca podremos obtener cero como producto

de dos n úmeros, por lo que no necesitamos representar dicho valor. Cuando estemos

calculando productos, utilizaremos el cero para expresar el n úmero 216 —un uno se-

guido de 16 ceros—. Esta representaci ón es coherente puesto que los registros que se

emplean internamente en el algoritmo poseen únicamente 16 bits.

10.5.

El algoritmo Rijndael (AES)

En octubre de 2000 el NIST (National Institute for Standards and Technology) anuncia-

ba oficialmente la adopci ón del algoritmo Rijndael (pronunciado más o menos como

reindal3) como nuevo Estándar Avanzado de Cifrado (AES) para su empleo en aplica-

ciones criptográficas no militares, culminando as´ı un proceso de más de tres a ˜nos,

encaminado a proporcionar a la comunidad internacional un nuevo algoritmo de ci-

frado potente, eficiente, y fácil de implementar. DES ten´ıa por fin un sucesor.

La palabra Rijndael —en adelante, para referirnos a este algoritmo, emplearemos

la denominaci ón AES— es un acr ónimo formado por los nombres de sus dos autores,

3Gracias a Sven Magnus por la aclaración.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.5. El algoritmo Rijndael (AES)

153

los belgas Joan Daemen y Vincent Rijmen. Su interés radica en que todo el proceso de

selecci ón, revisi ón y estudio tanto de este algoritmo como de los restantes candidatos,

se ha efectuado de forma p ública y abierta, por lo que, prácticamente por primera

vez, toda la comunidad criptográfica mundial ha participado en su análisis, lo cual

convierte a Rijndael en un algoritmo perfectamente digno de la confianza de todos.

AES es un sistema de cifrado por bloques, dise ˜nado para manejar longitudes de

clave y de bloque variables, ambas comprendidas entre los 128 y los 256 bits. Reali-

za varias de sus operaciones internas a nivel de byte, interpretando éstos como ele-

mentos de un cuerpo de Galois GF (28) (ver secci ón 5.8.1). El resto de operaciones se

efect úan en términos de registros de 32 bits. Sin embargo, en algunos casos, una se-

cuencia de 32 bits se toma como un polinomio de grado inferior a 4, cuyos coeficientes

son a su vez polinomios en GF (28).

Si bien, como ya se ha dicho, este algoritmo soporta diferentes tama ˜nos de bloque

y clave, en el estándar adoptado por el Gobierno Estadounidense en noviembre de

2001 (FIPS PUB 197), se especifica una longitud fija de bloque de 128 bits (Nb = 4,

como se verá más adelante), y la longitud de clave a escoger entre 128, 192 y 256 bits.

10.5.1.

Estructura de AES

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 ˜nadas para proporcionar resistencia

frente a criptoanálisis lineal y diferencial (secci ón 10.7). 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.

10.5.2.

Elementos de AES

AES es un algoritmo que se basa en aplicar un n úmero determinado de rondas

a un valor intermedio que se denomina estado. Dicho estado puede representarse

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

154

10. Cifrados por Bloques

a0,0

a0,1

a0,2

a0,3

a0,4

a1,0

a1,1

a1,2

a1,3

a1,4

a2,0

a2,1

a2,2

a2,3

a2,4

a3,0

a3,1

a3,2

a3,3

a3,4

Cuadro 10.4: Ejemplo de matriz de estado con Nb=5 (160 bits).

k0,0

k0,1

k0,2

k0,3

k1,0

k1,1

k1,2

k1,3

k2,0

k2,1

k2,2

k2,3

k3,0

k3,1

k3,2

k3,3

Cuadro 10.5: Ejemplo de clave con Nk=4 (128 bits).

mediante una matriz rectangular de bytes, que posee cuatro filas, y Nb columnas.

As´ı, por ejemplo, si nuestro bloque tiene 160 bits (cuadro 10.4), Nb será igual a 5.

La clave tiene una estructura análoga a la del estado, y se representará mediante

una tabla con cuatro filas y Nk columnas. Si nuestra clave tiene, por ejemplo, 128 bits,

Nk será igual a 4 (cuadro 10.5).

En algunos casos, tanto el estado como la clave se consideran como vectores de

registros de 32 bits, estando cada registro constituido por los bytes de la columna

correspondiente, ordenados de arriba a abajo.

El bloque que se pretende cifrar o descifrar se traslada directamente byte a byte

sobre la matriz de estado, siguiendo la secuencia a0,0, a1,0, a2,0, a3,0, a0,1 . . ., y análoga-

mente, los bytes de la clave se copian sobre la matriz de clave en el mismo orden, a

saber, k0,0, k1,0, k2,0, k3,0, k0,1 . . ..

Siendo B el bloque que queremos cifrar, y S la matriz de estado, el algoritmo AES

con n rondas queda como sigue:

1. Calcular K0, K1, . . . Kn subclaves a partir de la clave K.

2. S ←− B ⊕ K0

3. Para i = 1 hasta n hacer

4.

Aplicar ronda i–ésima del algoritmo con la subclave Ki.

Puesto que cada ronda es una sucesi ón de funciones invertibles, el algoritmo de

descifrado consistirá en aplicar las inversas de cada una de las funciones en el orden

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.5. El algoritmo Rijndael (AES)

155

Nb = 4 (128 bits)

Nb = 6 (192 bits)

Nb = 8 (256 bits)

Nk = 4 (128 bits)

10

12

14

Nk = 6 (192 bits)

12

12

14

Nk = 8 (256 bits)

14

14

14

Cuadro 10.6: N úmero de rondas para AES en funci ón de los tama ˜nos de clave y blo-

que.

contrario, y utilizar los mismos Ki que en el cifrado, s ólo que comenzando por el

último.

10.5.3.

Las Rondas de AES

Puesto que AES permite emplear diferentes longitudes tanto de bloque como de

clave, el n úmero de rondas requerido en cada caso es variable. En el cuadro 10.6 se

especifica cuántas rondas son necesarias en funci ón de Nb y Nk.

Siendo S la matriz de estado, y Ki la subclave correspondiente a la ronda i–ésima,

cada una de las rondas posee la siguiente estructura:

1. S ←−ByteSub(S)

2. S ←−DesplazarFila(S)

3. S ←−MezclarColumnas(S)

4. S ←− Ki ⊕ S

La última ronda es igual a las anteriores, pero eliminando el paso 3.

Funci ón ByteSub

La transformaci ón ByteSub 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 poli-

nomio irreducible m(x) = x8 + x4 + x3 + x + 1, y sustituido por su inversa

multiplicativa. El valor cero queda inalterado.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

156

10. Cifrados por Bloques

Figura 10.5: Esquema de las funciones DesplazarFila y MezclarColumnas de AES.

2. El siguiente paso consiste en aplicar la siguiente transformaci ón af´ın en GF (2),

siendo x0, x1, . . . , x7 los bits del byte correspondiente, e y0, y1, . . . , y7 los del re-

sultado:

 y 













0

1 0 0 0 1 1 1 1

x0

1

 y1 

 1

1 0 0 0 1 1 1   x1 

 1 

















 y2 

 1

1 1 0 0 0 1 1   x2 

 0 

















 y3 

 1

1 1 1 0 0 0 1   x3 

 0 



 = 

 · 

 + 



 y4 

 1

1 1 1 1 0 0 0   x4 

 0 

















 y5 

 0

1 1 1 1 1 0 0   x5 

 1 

















 y6 

 0

0 1 1 1 1 1 0   x6 

 1 

y7

0 0 0 1 1 1 1 1

x7

0

La funci ón inversa de ByteSub ser´ıa la aplicaci ón de la inversa de la s-caja corres-

pondiente a cada byte de la matriz de estado.

Funci ón DesplazarFila

Esta transformaci ón (figura 10.5) consiste en desplazar a la izquierda c´ıclicamente

las filas de la matriz de estado. Cada fila fi se desplaza un n úmero de posiciones

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.5. El algoritmo Rijndael (AES)

157

Nb

c1

c2

c3

4

1

2

3

6

1

2

3

8

1

3

4

Cuadro 10.7: Valores de ci seg ún el tama ˜no de bloque Nb

ci diferente. Mientras que c0 siempre es igual a cero (esta fila siempre permanece

inalterada), el resto de valores viene en funci ón de Nb y se refleja en el cuadro 10.7.

La funci ón inversa de DesplazarFila será, obviamente, un desplazamiento de las

filas de la matriz de estado el mismo n úmero de posiciones que en el cuadro 10.7,

pero a la derecha.

Funci ón MezclarColumnas

Para aplicar esta funci ón (ver figura 10.5), cada columna del vector de estado se

considera un polinomio cuyos coeficientes pertenecen a GF (28) —es decir, son tam-

bién polinomios– y se multiplica m ódulo x4 + 1 por:

c(x) = 03x3 + 01x2 + 01x + 02

donde 03 es el valor hexadecimal que se obtiene concatenando los coeficientes bina-

rios del polinomio correspondiente en GF (28), en este caso 00000011, o sea, x + 1, y

as´ı sucesivamente.

La inversa de MezclarColumnas se obtiene multiplicando cada columna de la ma-

triz de estado por el polinomio:

d(x) = 0Bx3 + 0Dx2 + 09x + 0E

10.5.4.

Cálculo de las Subclaves

Las diferentes subclaves Ki se derivan de la clave principal K mediante el uso de

dos funciones: una de expansi ón y otra de selecci ón. Siendo n el n úmero de rondas

que se van a aplicar, la funci ón de expansi ón permite obtener, a partir del valor de K,

una secuencia de 4·(n+1)·Nb bytes. La selecci ón simplemente toma consecutivamente

de la secuencia obtenida bloques del mismo tama ˜no que la matriz de estado, y los va

asignando a cada Ki.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

158

10. Cifrados por Bloques

Sea K(i) un vector de bytes de tama ˜no 4 · Nk, conteniendo la clave, y sea W (i) un

vector de Nb · (n + 1) registros de 4 bytes, siendo n el n úmero de rondas. La funci ón

de expansi ón tiene dos versiones, seg ún el valor de Nk:

a) Si Nk ≤ 6:

1. Para i desde 0 hasta Nk − 1 hacer

2.

W (i) ← (K(4 · i), K(4 · i + 1), K(4 · i + 2), K(4 · i + 3))

3. Para i desde Nk hasta Nb · (n + 1) hacer

4.

tmp ← W (i − 1)

5.

Si i mód Nk = 0

6.

tmp ← Sub(Rot(tmp)) ⊕ Rc(i/Nk)

7.

W (i) ← W (i − Nk) ⊕ tmp

b) Si Nk > 6:

1. Para i desde 0 hasta Nk − 1 hacer

2.

W (i) ← (K(4 · i), K(4 · i + 1), K(4 · i + 2), K(4 · i + 3))

3. Para i desde Nk hasta Nb · (n + 1) hacer

4.

tmp ← W (i − 1)

5.

Si i mód Nk = 0

6.

tmp ← Sub(Rot(tmp)) ⊕ Rc(i/Nk)

7.

Si i mód Nk = 4

8.

tmp ← Sub(tmp)

9.

W (i) ← W (i − Nk) ⊕ tmp

En los algoritmos anteriores, la funci ón Sub devuelve el resultado de aplicar la

s-caja de AES a cada uno de los bytes del registro de cuatro que se le pasa como

parámetro. La funci ón Rot desplaza a la izquierda una posici ón los bytes del regis-

tro, de tal forma que si le pasamos como parámetro el valor (a, b, c, d) nos devuelve

(b, c, d, a). Finalmente, Rc(j) es una constante definida de la siguiente forma:

Rc(j) = (R(j), 0, 0, 0)

Cada R(i) es el elemento de GF (28) correspondiente al valor x(i−1), m ódulo

x8 + x4 + x3 + x + 1.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.6. Modos de Operaci ón para Algoritmos de Cifrado por Bloques

159

10.5.5.

Seguridad de AES

Seg ún sus autores, es altamente improbable que existan claves débiles o semidébi-

les en AES, debido a la estructura de su dise ˜no, que busca eliminar la simetr´ıa en las

subclaves. También se ha comprobado que es resistente a criptoanálisis tanto lineal

como diferencial (ver secci ón 10.7). En efecto, el método más eficiente conocido has-

ta la fecha para recuperar la clave a partir de un par texto cifrado–texto claro es la

b úsqueda exhaustiva, por lo que podemos considerar este algoritmo como uno de

los más seguros en la actualidad. Otro hecho que viene a corroborar la fortaleza de

AES es que en junio de 2003 fue aprobado por la NSA para cifrar informaci ón clasifi-

cada como alto secreto.

10.6.

Modos de Operaci ón para Algoritmos de Cifrado

por Bloques

En esta secci ón comentaremos algunos métodos para aplicar cifrados por bloques

a mensajes de gran longitud. En general, habrá que subdividir el mensaje original

en trozos del mismo tama ˜no pero, ¿que ocurre cuando la longitud de la cadena que

queremos cifrar no es un m últiplo exacto del tama ˜no de bloque? En ese caso será ne-

cesario a ˜nadir informaci ón de relleno (padding) al final de la misma para que s´ı lo sea,

de forma que el mensaje pueda recuperar su longitud original, una vez descifrado.

El mecanismo más sencillo consiste en rellenar con ceros (o alg ún otro patr ón) el últi-

mo bloque que se codifica. El problema ahora estriba en saber el tama ˜no exacto del

relleno para eliminarlo posteriormente. Lo que se suele hacer es a ˜nadir como último

byte del último bloque el n úmero de bytes que se han a ˜nadido (ver figura 10.6). Esto

tiene el inconveniente de que si el tama ˜no original es m últiplo del bloque, hay que

alargarlo con otro bloque entero. Por ejemplo, si el tama ˜no de bloque fuera 64 bits, y

nos sobraran cinco bytes al final, a ˜nadir´ıamos dos ceros y un tres, para completar los

ocho bytes necesarios en el último bloque. Si por contra no sobrara nada, tendr´ıamos

que a ˜nadir siete ceros y un ocho.

10.6.1.

Modo ECB

El modo ECB (Electronic Codebook) es el método más sencillo y directo de aplicar

un algoritmo de cifrado por bloques. Simplemente se subdivide la cadena que se

quiere codificar en bloques del tama ˜no adecuado y se cifran todos ellos empleando

la misma clave.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

160

10. Cifrados por Bloques

Figura 10.6: Ejemplos de relleno (padding) al emplear un algoritmo de cifrado por

bloques de 64 bits (8 bytes), en los que el último bloque tiene: a) 3 bytes, b) 4 bytes, c)

8 bytes. Obsérvese c ómo en el caso c) se a ˜nade un bloque completo al mensaje.

A favor de este método podemos decir que permite codificar los bloques indepen-

dientemente de su orden, lo cual es adecuado para cifrar 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.

Por contra, si el mensaje presenta patrones repetitivos, el texto cifrado también

los presentará, y eso es peligroso, sobre todo cuando se codifica informaci ón muy

redundante (como ficheros de texto), o con patrones comunes al inicio y final (como

el correo electr ónico). Un atacante puede en estos casos efectuar un ataque estad´ıstico

y extraer bastante informaci ón.

Otro riesgo bastante importante que presenta el modo ECB es el de la sustitución

de bloques. El atacante puede cambiar un bloque sin mayores problemas, y alterar los

mensajes incluso desconociendo la clave y el algoritmo empleados. Simplemente se

escucha una comunicaci ón de la que se conozca el contenido, como por ejemplo una

transacci ón bancaria a nuestra cuenta corriente. Luego se escuchan otras comunica-

ciones y se sustituyen los bloques correspondientes al n úmero de cuenta del benefi-

ciario de la transacci ón por la versi ón codificada de nuestro n úmero (que ni siquiera

nos habremos molestado en descifrar). En cuesti ón de horas nos habremos hecho ri-

cos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.6. Modos de Operaci ón para Algoritmos de Cifrado por Bloques

161

Figura 10.7: Modo de operaci ón CBC. A: cifrado, B: descifrado. V.I. : Vector de Inicia-

cizaci ón.

10.6.2.

Modo CBC

El modo CBC (Cipher Book Chaining Mode) incorpora un mecanismo de retroali-

mentaci ón en el cifrado por bloques. Esto significa que el cifrado de bloques anterio-

res condiciona la codificaci ón del actual, por lo que será imposible sustituir un bloque

individual en el mensaje cifrado, ya que esta sustituci ón afectará a dos bloques en el

mensaje descifrado resultante. Esto se consigue efectuando una operaci ón XOR entre

el bloque del mensaje que queremos codificar y el último criptograma obtenido (ver

figura 10.7). Para cifrar el primer bloque, se emplea el denominado vector de inicaliza-

ción (V.I.), que deberá ser conocido por ambos interlocutores.

Este método evita que un atacante inserte, elimine o reordene bloques del mensaje

cifrado. También puede comprobarse que los textos cifrados correspondientes a dos

cadenas que difieran en un único bit, serán idénticos hasta el bloque que contenga

ese bit, momento a partir del cual serán totalmente distintos. Esto permitir´ıa a un ata-

cante identificar mensajes con inicios comunes. Para evitar este problema, se puede

usar un vector de inicializaci ón diferente para cada mensaje.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

162

10. Cifrados por Bloques

Figura 10.8: Esquema del modo de operaci ón CFB. A: cifrado, B: descifrado. V.I. :

Vector de Iniciacizaci ón.

10.6.3.

Modo CFB

El modo de operaci ón CFB (Cipher-Feedback), cada bloque es cifrado y luego com-

binado, mediante la operaci ón XOR, con el siguiente bloque del mensaje original. Al

igual que en el modo CBC, se emplea un vector de inicializaci ón a la hora de codificar

el primer bloque. Con este método, si se produce un error en la transmisi ón, ésta se

vuelve a sincronizar de forma automática, a partir del segundo bloque consecutivo

que llegue de forma correcta.

Una ventaja importante de este modo de operaci ón radica en el hecho de que la

longitud de los bloques del mensaje puede ser menor que la longitud de bloque que

acepta el algoritmo de cifrado. Esto ocurre porque el paso final para calcular cada

Ci es un or-exclusivo entre el último bloque cifrado y el valor de Mi, operaci ón que

puede llevarse a cabo a trozos. El modo de operaci ón CFB es, por tanto, apto para

ser usado en situaciones en las que se requiere enviar la informaci ón en paquetes más

peque ˜nos que la longitud de bloque del algoritmo de cifrado subyacente, como por

ejemplo cuando se quiere cifrar la comunicaci ón de una computadora con un termi-

nal remoto —teclado y monitor—. También es destacable que, tanto para codificar

como a la hora de descifrar, se usa únicamente la operaci ón de cifrado del algoritmo

por bloques correspondiente.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.7. Criptoanálisis de Algoritmos de cifrado por Bloques

163

10.6.4.

Otros Modos

Otro modo de operaci ón interesante es el llamado OFB (Output-Feedback). En reali-

dad, este método genera una una secuencia de bloques totalmente independiente del

mensaje, que luego se combina con éste último bit a bit. Esto es en realidad lo que se

conoce por cifrado de flujo, que veremos con detalle en el cap´ıtulo 11. En concreto, el

modo de operaci ón OFB, será comentado en la secci ón 11.4.1.

Aparte de los aqu´ı comentados, existen otros modos de operaci ón sobre algorit-

mos de cifrado por bloques, cada uno de ellos adaptado a las diferentes necesidades

que surgen en distintas aplicaciones concretas.

10.7.

Criptoanálisis de Algoritmos de cifrado por Blo-

ques

Se podr´ıa decir que el criptoanálisis se comenz ó a estudiar seriamente con la apa-

rici ón de DES. El interés por buscar posibles debilidades en él no solo ha llevado a

desarrollar técnicas que posteriormente han tenido éxito con otros algoritmos, sino

a descubrir el porqué de algunas de sus inicialmente secretas directrices de dise ˜no,

elaboradas con todos los conocimientos que, por entonces, pose´ıa la NSA.

Ni que decir tiene que estos métodos no han conseguido doblegar a DES —de

hecho, hoy sabemos que DES fue dise ˜nado para maximizar su resistencia frente a

alguno de ellos, casi veinte a ˜nos antes de ser conocidos por la comunidad cient´ı-

fica—, pero s´ı pueden proporcionar mecanismos significativamente más eficientes

que la fuerza bruta. En esta secci ón veremos algunos de ellos, aplicables a cualquier

método de cifrado por bloques, y que son tenidos en cuenta en la actualidad a la hora

de dise ˜nar nuevos algoritmos.

10.7.1.

Criptoanálisis Diferencial

Descubierto por Biham y Shamir en 1990, aunque ya conocido en 1974 por IBM y

la NSA, permite efectuar un ataque de texto claro escogido que resulta más eficiente

que la fuerza bruta para DES. Para ello se generan pares de mensajes idénticos, que

difieren en una serie de bits fijados de antemano. Después se calcula la diferencia

entre los dos criptogramas asociados, con la esperanza de detectar patrones estad´ısti-

cos. Por ejemplo, podemos definir ∆M como la diferencia entre dos textos claros M1

y M2, de manera que ∆M = M1 ⊕ M2. Cifrando entonces M1 y M2 obtendr´ıamos la

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

164

10. Cifrados por Bloques

diferencia en bits entre los textos cifrados,

∆C = Ek(M1) ⊕ Ek(M2)

Denominaremos diferencial al par (∆M, ∆C) que acabamos de calcular. Un algoritmo

resistente a este análisis deber´ıa presentar una distribuci ón aparentemente aleatoria

para un conjunto de diferenciales lo suficientemente grande. Si, por el contrario, hay

patrones que aparezcan con una frecuencia significativamente mayor que otros, este

sesgo podrá explotarse para ganar conocimiento sobre la clave de cifrado k empleada.

Este ataque puede emplearse tanto si se conocen los detalles del algoritmo de

cifrado en cuesti ón como si se carece de ellos. En el primer caso, el análisis puede ser

más preciso, ya que puede estudiarse c ómo se propagan las diferencias a lo largo de

las distintas fases del mismo.

10.7.2.

Criptoanálisis Lineal

El criptoanálisis lineal, descubierto por Mitsuru Matsui en 1992, basa su funcio-

namiento en tomar algunos bits del texto claro y efectuar una operaci ón XOR entre

ellos, tomar algunos del texto cifrado y hacerles lo mismo, y finalmente hacer un XOR

de los dos resultados anteriores, obteniendo un único bit. Efectuando esa operaci ón a

una gran cantidad de pares de texto claro y criptograma diferentes (M, Ek(M )), el re-

sultado deber´ıa tener una apariencia aleatoria, por lo que la probabilidad de obtener

un 1 o un 0 deber´ıa estar pr óxima a 1/2.

Si el algoritmo criptográfico en cuesti ón es vulnerable a este tipo de ataque, exis-

tirán combinaciones de bits que, bien escogidas, den lugar a un sesgo significativo en

la medida anteriormente definida, es decir, que el n úmero de ceros (o unos) es apre-

ciablemente superior. Esta propiedad nos va a permitir poder asignar mayor proba-

bilidad a unas claves sobre otras y de esta forma descubrir la clave que buscamos.

10.7.3.

Criptoanálisis Imposible

Propuesta por Eli Biham en 1998, esta estrategia de criptoanálisis permiti ó atacar

con éxito una versi ón del algoritmo Skipjack, reducida a 31 rondas de las 32 origina-

les. Se basa en buscar diferenciales (ver secci ón 10.7.1) que, para una clave k dada,

nunca puedan darse, o lo que es lo mismo, que resulten imposibles. De esta mane-

ra, si desciframos un par de mensajes empleando una clave tentativa kt y obtenemos

uno de esos diferenciales, podremos afirmar que kt no es la clave que buscamos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

10.7. Criptoanálisis de Algoritmos de cifrado por Bloques

165

Aplicando esta técnica a modo de criba, podemos reducir considerablemente la in-

certidumbre sobre la clave buscada, lo cual puede reducir el esfuerzo computacional

necesario hasta mejorar a la fuerza bruta.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

166

10. Cifrados por Bloques

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 11

Cifrados de Flujo

En 1917, J. Mauborgne y G. Vernam inventaron un criptosistema perfecto seg ún

el criterio de Shannon (ver secci ón 3.8). Dicho sistema consist´ıa en emplear una se-

cuencia aleatoria de igual longitud que el mensaje, que se usar´ıa una única vez —lo

que se conoce en inglés como one–time pad—, combinándola mediante alguna fun-

ci ón simple y reversible —usualmente el or exclusivo— con el texto en claro carácter

a carácter. Este método presenta el grave inconveniente de que la clave es tan larga

como el propio mensaje, y si disponemos de un canal seguro para enviar la clave,

¿por qué no emplearlo para transmitir el mensaje directamente?

Evidentemente, un sistema de Vernam carece de utilidad práctica en la mayor´ıa

de los casos, pero supongamos que disponemos de un generador pseudoaleatorio

capaz de generar secuencias criptográficamente aleatorias, de forma que la longitud de

los posibles ciclos sea extremadamente grande. En tal caso podr´ıamos, empleando la

semilla del generador como clave, obtener cadenas de bits de usar y tirar, y emplearlas

para cifrar mensajes simplemente aplicando la funci ón xor entre el texto en claro y la

secuencia generada. Todo aquel que conozca la semilla podrá reconstruir la secuencia

pseudoaleatoria y de esta forma descifrar el mensaje.

En este cap´ıtulo analizaremos algunos criptosistemas de clave privada que ex-

plotan esta idea. Dichos algoritmos no son más que la especificaci ón de un genera-

dor pseudoaleatorio, y permiten cifrar mensajes de longitud arbitraria, combinando

el mensaje con la secuencia mediante la operaci ón or exclusivo byte a byte, en lugar

de dividirlos en bloques para codificarlos por separado. Como cabr´ıa esperar, estos

criptosistemas no proporcionan seguridad perfecta, ya que mientras en el cifrado de

Vernam el n úmero de posibles claves es tan grande como el de posibles mensajes,

cuando empleamos un generador tenemos como mucho tantas secuencias distintas

como posibles valores iniciales de la semilla.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

168

11. Cifrados de Flujo

11.1.

Secuencias Pseudoaleatorias

Como ve´ıamos en el cap´ıtulo 8, los generadores criptográficamente aleatorios tienen

la propiedad de que, a partir de una porci ón de la secuencia arbitrariamente gran-

de, resulta computacionalmente intratable el problema de predecir el siguiente bit de

la secuencia. Adicionalmente, dijimos que podr´ıan no ser buenos como generadores

aleatorios debido a que el conocimiento de la semilla nos permite regenerar la se-

cuencia por completo. Evidentemente, en el caso que nos ocupa, esta caracter´ıstica

se convertirá en una ventaja, ya que es precisamente lo que necesitamos: que por un

lado no pueda calcularse la secuencia completa a partir de una porci ón de ésta, y que

a la vez pueda reconstruirse completamente conociendo una pieza de informaci ón

como la semilla del generador.

11.2.

Tipos de Generadores de Secuencia

Los generadores que se emplean como cifrado de flujo pueden dividirse en dos

grandes grupos, dependiendo de que se empleen o no fragmentos anteriores del

mensaje cifrado a la hora de calcular los valores de la secuencia. Comentaremos bre-

vemente en esta secci ón sus caracter´ısticas básicas.

11.2.1.

Generadores S´ıncronos

Un generador s´ıncrono es aquel en el que la secuencia es calculada de forma inde-

pendiente tanto del texto en claro como del texto cifrado. En el caso general, ilustrado

en la figura 11.1.a, viene dado por las siguientes ecuaciones:

si+1 = g(si, k)

oi = h(si, k)

(11.1)

ci = w(mi, oi)

Donde k es la clave, si es el estado interno del generador, s0 es el estado inicial, oi

es la salida en el instante i, mi y ci son la i–ésima porci ón del texto claro y cifrado

respectivamente, y w es una funci ón reversible, usualmente or exclusivo. En muchos

casos, la funci ón h depende únicamente de si, siendo k = s0.

Cuando empleamos un generador de estas caracter´ısticas, necesitamos que tanto

el emisor como el receptor estén sincronizados para que el texto pueda descifrarse.

Si durante la transmisi ón se pierde o inserta alg ún bit, ya no se estará aplicando en

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

11.2. Tipos de Generadores de Secuencia

169

el receptor un xor con la misma secuencia, por lo que el resto del mensaje será impo-

sible de descifrar. Esto nos obliga a emplear tanto técnicas de verificaci ón como de

restablecimiento de la sincron´ıa.

Otro problema muy com ún con este tipo de técnicas es que si alg ún bit del cripto-

grama es alterado, la sincronizaci ón no se pierde, pero el texto claro se verá modifica-

do en la misma posici ón. Esta caracter´ıstica podr´ıa permitir a un atacante introducir

cambios en nuestros mensajes, simplemente conociendo qué bits debe alterar. Para

evitar esto, deben emplearse mecanismos de verificaci ón que garanticen la integri-

dad del mensaje recibido, como las funciones resumen (ver cap´ıtulo 13).

Existe también una debilidad intr´ınseca a los métodos de cifrado de flujo basados

en generadores s´ıncronos que vale la pena destacar: si un atacante conoce parte del

texto claro, podrá sustituirlo por otro sin que lo advierta el leg´ıtimo destinatario.

Supongamos que mi es una porci ón del mensaje original conocida por el atacante, y

ci el trozo de mensaje cifrado correspondiente a él. Sabemos que

ci = w(mi, oi)

siendo oi el trozo de secuencia pseudoaleatoria que fue combinado con el texto en

claro. Puesto que w es una funci ón reversible, podemos recuperar los oi asociados al

fragmento conocido mi. Calculamos entonces:

c0 = w(m0 , o

i

i

i)

siendo m0 un mensaje falso de nuestra elecci ón. Seguidamente sustituimos los c

i

i ori-

ginales por los c0 que acabamos de obtener. Cuando el destinatario descifre el mensaje

i

alterado, obtendrá la porci ón de mensaje m0, en lugar del original, de forma total-

i

mente inadvertida. Esta circunstancia aconseja emplear estos métodos de cifrado en

combinaci ón con técnicas que garanticen la integridad del mensaje (ver cap´ıtulo 13).

11.2.2.

Generadores As´ıncronos

Un generador de secuencia as´ıncrono o auto-sincronizado es aquel en el que la se-

cuencia generada es funci ón de una semilla, más una cantidad fija de los bits anterio-

res del mensaje cifrado, como puede verse en la figura 11.1.b. Formalmente:

oi = h(k, ci−t, ci−t+1, . . . , ci−1)

(11.2)

ci = w(oi, mi)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

170

11. Cifrados de Flujo

Figura 11.1: Esquema de generadores de secuencia: A: generador s´ıncrono. B: gene-

rador as´ıncrono.

Donde k es la clave, mi y ci son la i–ésima porci ón del texto claro y cifrado respecti-

vamente y w es una funci ón reversible. Los valores c−t, c−t+1, . . . , c−1 constituyen el

estado inicial del generador.

Esta familia de generadores es resistente a la pérdida o inserci ón de informaci ón,

ya que acaba por volver a sincronizarse automáticamente, en cuanto llegan t bloques

correctos de forma consecutiva. También será sensible a la alteraci ón de un mensaje,

ya que si se modifica la unidad de informaci ón ci, el receptor tendrá valores err óneos

de entrada en su funci ón h hasta que se alcance el bloque ci+t, momento a partir del

cual la transmisi ón habrá recuperado la sincronizaci ón. En cualquier caso, al igual

que con los generadores s´ıncronos, habrá que introducir mecanismos de verificaci ón.

Una propiedad interesante de estos generadores es la dispersi ón de las propieda-

des estad´ısticas del texto claro a lo largo de todo el mensaje cifrado, ya que cada d´ıgito

del mensaje influye en todo el criptograma. Esto hace que los generadores as´ıncronos

se consideren en general más resistentes frente a ataques basados en la redundancia

del texto en claro.

11.3.

Registros de Desplazamiento Retroalimentados

Los registros de desplazamiento retroalimentados (feedback shift registers, o FSR

en inglés) son la base de muchos generadores de secuencia s´ıncronos para cifrados

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

11.3. Registros de Desplazamiento Retroalimentados

171

de flujo. Dedicaremos esta secci ón a analizar su estructura básica y algunas de sus

propiedades.

11.3.1.

Registros de Desplazamiento Retroalimentados Lineales

Estos registros, debido a que permiten generar secuencias con per´ıodos muy gran-

des y con buenas propiedades estad´ısticas, además de su bien conocida estructura al-

gebraica y su facilidad para ser implementados por hardware, se encuentran presentes

en muchos de los generadores de secuencia propuestos en la literatura.

Un registro de desplazamiento retroalimentado lineal L es un conjunto de L estados,

{S0, S1, . . . , SL−1}, capaces de almacenar un bit cada uno (fig 11.2.a). Esta estructura

viene controlada por un reloj que coordina los flujos de informaci ón entre los estados.

Durante cada unidad de tiempo se efect úan las siguientes operaciones:

1. El contenido de S0 es la salida del registro.

2. El contenido de Si es desplazado al estado Si−1, para 1 ≤ i ≤ L − 1.

3. El contenido de SL−1 se calcula como la suma m ódulo 2 de los valores de un

subconjunto prefijado de L.

Un generador de estas caracter´ısticas devolverá, en funci ón de los valores iniciales

de los estados, y del subconjunto concreto de L empleado en el paso 3, una secuencia

de salidas de carácter peri ódico —en algunos casos, la secuencia será peri ódica si

ignoramos una cierta cantidad de bits al principio—.

11.3.2.

Registros de Desplazamiento Retroalimentados No Lineales

Un registro de desplazamiento retroalimentado general (o no lineal) L es un conjunto

de L estados, {S0, S1, . . . , SL−1}, capaces de almacenar un bit cada uno (fig 11.2.b).

Durante cada unidad de tiempo se efect úan las siguientes operaciones:

1. El contenido de S0 es la salida del registro.

2. El contenido de Si es desplazado al estado Si−1, para 1 ≤ i ≤ L − 1.

3. El contenido de SL−1 se calcula como una funci ón booleana

f (Sj−1, Sj−2, . . . , Sj−L),

donde Sj−i es el contenido del registro SL−i en el estado anterior.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

172

11. Cifrados de Flujo

Figura 11.2: Registros de Desplazamiento Retroalimentados: A: Registro lineal, en

el que cerrando el circuito en los puntos r0 a rL−1 se puede seleccionar qué estados

se emplearán para calcular el nuevo valor de SL−1. B: Registro no lineal, donde se

emplea una funci ón f genérica.

Obsérvese que si sustituimos la funci ón f en un registro de esta naturaleza por la

suma m ódulo 2 de un subconjunto de L, obtenemos un registro de desplazamiento

lineal.

11.3.3.

Combinaci ón de Registros de Desplazamiento

En la mayor´ıa de los casos, los registros de desplazamiento retroalimentados no

lineales presentan unas mejores condiciones como generadores de secuencia que los

generadores de tipo lineal. Sin embargo, la extrema facilidad de implementaci ón por

hardware de estos últimos ha llevado a los dise ˜nadores a estudiar diferentes combina-

ciones de registros lineales, de tal forma que se puedan obtener secuencias mejores.

En general, se emplear´ıan n generadores lineales y una funci ón f no lineal para

combinar sus salidas, de tal forma que cada bit de la secuencia se obtendr´ıa mediante

la expresi ón

f (R1, R2, . . . , Rn)

(11.3)

siendo Ri la salida del i–ésimo registro de desplazamiento lineal.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

11.4. Otros Generadores de Secuencia

173

Figura 11.3: Esquema del modo de operaci ón OFB, para emplear algoritmos de cifra-

do por bloques como generadores de secuencia s´ıncronos para cifrados de flujo.

11.4.

Otros Generadores de Secuencia

Si bien los registros de desplazamiento son muy interesantes para generar secuen-

cias mediante hardware, en realidad no son especialmente fáciles de implementar, ni

eficientes, si se usan por software. Esto ha llevado a la comunidad a proponer algorit-

mos de generaci ón de secuencia especialmente pensados para ser incorporados por

software. Nosotros vamos a comentar dos de ellos: RC4 y SEAL.

11.4.1.

Cifrados por Bloques en Modo OFB

Existe un modo de operaci ón (ver secci ón 10.6) sobre algoritmos de cifrado por

bloques que puede usarse como generador s´ıncrono, ya que genera, de forma to-

talmente independiente del mensaje, una secuencia pseudoaleatoria basada en una

clave. En la figura 11.3 podemos ver c ómo a partir de una clave K, y de un vector de

inicializaci ón (V.I.), estos algoritmos nos permiten generar una secuencia oi de blo-

ques perfectamente válida para ser empleada dentro de un esquema de cifrado de

flujo s´ıncrono.

11.4.2.

Algoritmo RC4

El algoritmo RC4 fue dise ˜nado por Ron Rivest en 1987 para la compa ˜n´ıa RSA Data

Security. Su implementaci ón es extremadamente sencilla y rápida, y está orientado a

generar secuencias en unidades de un byte, además de permitir claves de diferentes

longitudes. Por desgracia es un algoritmo propietario, lo cual implica que no puede

ser incluido en aplicaciones de tipo comercial sin pagar los royalties correspondientes.

El c ódigo del algoritmo no se ha publicado nunca oficialmente, pero en 1994 al-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

174

11. Cifrados de Flujo

guien difundi ó en los grupos de noticias de Internet una descripci ón que, como poste-

riormente se ha comprobado, genera las mismas secuencias. Dicha descripci ón consta

de una S-Caja de 8*8, que almacenará una permutaci ón del conjunto {0, . . . , 255}. Dos

contadores i y j se ponen a cero. Luego, cada byte Or de la secuencia se calcula como

sigue:

1.

i = (i + 1) mód 256

2.

j = (j + Si) mód 256

3.

Intercambiar los valores de Si y Sj

4.

t = (Si + Sj) mód 256

5.

Or = St

Para calcular los valores iniciales de la S-Caja, se hace lo siguiente:

1.

Si = i

∀0 ≤ i ≤ 255

2.

Rellenar el array K0 a K255 repitiendo la clave tantas veces

como sea necesario.

3.

j = 0

4.

Para i = 0 hasta 255 hacer:

j = (j + Si + Ki) mód 256

Intercambiar Si y Sj.

El algoritmo RC4 genera secuencias en las que los ciclos son bastante grandes, y

es inmune a los criptoanálisis diferencial y lineal, si bien algunos estudios indican

que puede poseer claves débiles, y que es sensible a estudios anal´ıticos del contenido

de la S-Caja. De hecho, algunos afirman que en una de cada 256 claves posibles, los

bytes que se generan tienen una fuerte correlaci ón con un subconjunto de los bytes

de la clave, lo cual es un comportamiento muy poco recomendable.

A pesar de las dudas que existen en la actualidad sobre su seguridad, es un algo-

ritmo ampliamente utilizado en muchas aplicaciones de tipo comercial.

11.4.3.

Algoritmo SEAL

SEAL es un generador de secuencia dise ˜nado en 1993 para IBM por Phil Rogaway

y Don Coppersmith, cuya estructura está especialmente pensada para funcionar de

manera eficiente en computadores con una longitud de palabra de 32 bits. Su fun-

cionamiento se basa en un proceso inicial en el que se calculan los valores para unas

tablas a partir de la clave, de forma que el cifrado propiamente dicho puede llevarse a

cabo de una manera realmente rápida. Por desgracia, también es un algoritmo sujeto

a patentes.

Una caracter´ıstica muy útil de este algoritmo es que no se basa en un sistema

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

11.4. Otros Generadores de Secuencia

175

lineal de generaci ón, sino que define una familia de funciones pseudoaleatorias, de tal

forma que se puede calcular cualquier porci ón de la secuencia suministrando única-

mente un n úmero entero n de 32 bits. La idea es que, dado ese n úmero, junto con la

clave k de 160 bits, el algoritmo genera un bloque k(n) de L bits de longitud. De esa

forma, cada valor de k da lugar a una secuencia total de L · 232 bits, compuesta por la

yuxtaposici ón de los bloques k(0), k(1), . . . , k(232 − 1).

SEAL se basa en el empleo del algoritmo SHA (ver secci ón 13.5) para generar las

tablas que usa internamente. De hecho, existen dos versiones del algoritmo, la 1.0 y

la 2.0, que se diferencian precisamente en que la primera emplea SHA y la segunda

su versi ón revisada, SHA-1.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

176

11. Cifrados de Flujo

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 12

Cifrados Asimétricos

Los algoritmos asimétricos o de clave p ública han demostrado su interés para ser

empleados en redes de comunicaci ón inseguras (Internet). Introducidos por Whit-

field Diffie y Martin Hellman a mediados de los a ˜nos 70, su novedad fundamental

con respecto a la criptograf´ıa simétrica es que las claves no son únicas, sino que

forman pares. Hasta la fecha han aparecido multitud de algoritmos asimétricos, la

mayor´ıa de los cuales son inseguros; otros son poco prácticos, bien sea porque el

criptograma es considerablemente mayor que el mensaje original, bien sea porque

la longitud de la clave es enorme. Se basan en general en plantear al atacante pro-

blemas matemáticos dif´ıciles de resolver (ver cap´ıtulo 5). En la práctica muy pocos

algoritmos son realmente útiles. El más popular por su sencillez es RSA, que ha so-

brevivido a multitud de ataques, si bien necesita una longitud de clave considerable.

Otros algoritmos son los de ElGamal y Rabin.

Los algoritmos asimétricos emplean generalmente longitudes de clave mucho ma-

yores que los simétricos. Por ejemplo, mientras que para algoritmos simétricos se

considera segura una clave de 128 bits, para algoritmos asimétricos —si exceptua-

mos aquellos basados en curvas el´ıpticas— se recomiendan claves de al menos 2048

bits. Además, la complejidad de cálculo que comportan estos últimos los hace consi-

derablemente más lentos que los algoritmos de cifrado simétricos. En la práctica los

métodos asimétricos se emplean únicamente para codificar la clave de sesión (simétri-

ca) de cada mensaje o transacci ón particular.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

178

12. Cifrados Asimétricos

12.1.

Aplicaciones de los Algoritmos Asimétricos

Los algoritmos asimétricos poseen dos claves diferentes en lugar de una, Kp y

KP , denominadas clave privada y clave p ública respectivamente. Una de ellas se em-

plea para codificar, mientras que la otra se usa 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.

12.1.1.

Protecci ón de la Informaci ón

Una de las aplicaciones inmediatas de los algoritmos asimétricos es el cifrado de

la informaci ón sin tener que transmitir la clave de decodificaci ón, lo cual permite su

uso en canales inseguros. Supongamos que A quiere enviar un mensaje a B (figura

12.1). Para ello solicita a B su clave p ública KP . A genera entonces el mensaje cifra-

do EK (m). Una vez hecho esto únicamente quien posea la clave K

P

p —en nuestro

ejemplo, B— podrá recuperar el mensaje original m.

N ótese que para este tipo de aplicaci ón, la clave que se hace p ública es aquella que

permite codificar los mensajes, mientras que la clave privada es aquella que permite

descifrarlos.

12.1.2.

Autentificaci ón

La segunda aplicaci ón de los algoritmos asimétricos es la autentificaci ón de men-

sajes, con ayuda de funciones MDC (ver cap´ıtulo 13), que nos permiten obtener una

signatura o resumen a partir de un mensaje. Dicha signatura es mucho más peque ˜na

que el mensaje original, y es muy dif´ıcil encontrar otro mensaje diferente que dé lugar

al mismo resumen. Supongamos que A recibe un mensaje m de B y quiere comprobar

su autenticidad. Para ello B genera un resumen del mensaje r(m) (ver figura 12.2) y

lo codifica empleando la clave de cifrado, que en este caso será privada. La clave de

descifrado se habrá hecho p ública previamente, y debe estar en poder de A. B env´ıa

entonces a A el criptograma correspondiente a r(m). A puede ahora generar su pro-

pia r0(m) y compararla con el valor r(m) obtenido del criptograma enviado por B.

Si coinciden, el mensaje será auténtico, puesto que el único que posee la clave para

codificar es precisamente B.

N ótese que en este caso la clave que se emplea para cifrar es la clave privada, justo

al revés que para la simple codificaci ón de mensajes.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.1. Aplicaciones de los Algoritmos Asimétricos

179

Figura 12.1: Transmisi ón de informaci ón empleando algoritmos asimétricos. 1. B

env´ıa a A su clave p ública, KP ; 2. A codifica el mensaje y env´ıa a B el criptograma

EK (m); 3. B decodifica el criptograma empleando la clave privada K

P

p.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

180

12. Cifrados Asimétricos

Figura 12.2: Autentificaci ón de informaci ón empleando algoritmos asimétricos. 1. A,

que posee la clave p ública KP de B, recibe un mensaje y quiere autentificarlo; 2. B

genera el resumen r(m) env´ıa a A el criptograma asociado EK (r(m)); 3. A genera

p

por su cuenta r0(m) y decodifica el criptograma recibido usando la clave KP ; 4. A

compara r(m) y r0(m) para comprobar la autenticidad del mensaje m.

En muchos algoritmos asimétricos ambas claves sirven tanto para cifrar como

para descifrar, de manera que si empleamos una para codificar, la otra permitirá de-

codificar y viceversa. Esto ocurre con el algoritmo RSA, en el que un único par de

claves es suficiente tanto para cifrar informaci ón como para autentificarla.

12.2.

Ataques de Intermediario

El ataque de intermediario (figura 12.3) puede darse con cualquier algoritmo asi-

métrico, dando lugar a un grave peligro del que hay que ser consciente, y tratar de

evitar a toda costa. Supongamos que A quiere establecer una comunicaci ón con B, y

que C quiere espiarla. Cuando A le solicite a B su clave p ública KB, C se interpone,

obteniendo la clave de B y enviando a A una clave falsa KC creada por él. A partir

de ese momento puede pasar lo siguiente:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.2. Ataques de Intermediario

181

Figura 12.3: Ataque de intermediario para un algoritmo asimétrico.

Cualquier documento firmado digitalmente por C será interpretado por A co-

mo procedente de B.

Si A cifra un mensaje para B, en realidad estará generando un mensaje cifra-

do para C, que podrá interceptarlo, descifrarlo con su propia clave privada,

volverlo a cifrar con la clave KB correcta, y reenviárselo a B. De esta forma

C tendrá acceso a toda la informaci ón cifrada que viaje de A hasta B sin que

ninguna de sus v´ıctimas advierta el enga ˜no.

La única manera de evitar esto consiste en buscar mecanismos para poder garan-

tizar que la clave p ública que recibe A pertenece realmente a B. Para ello la soluci ón

más obvia consiste en que KB esté firmada digitalmente por un amigo com ún, que

certifique la autenticidad de la clave. Si A y B carecen de amigos comunes, pueden

recurrir a los llamados anillos de confianza, que permiten certificar la autenticidad de

las claves a través de redes sociales, en las que cada usuario está relacionado con unos

cuantos y decide en quiénes conf´ıa, sin necesidad de centralizar el proceso. Por eso

se nos suele recomendar, cuando instalamos paquetes de cifrado asimétrico, como

PGP (cap´ıtulo 18), que firmemos todas las claves sobre las que tengamos certeza de

su autenticidad, y únicamente esas.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

182

12. Cifrados Asimétricos

12.3.

El Algoritmo RSA

De entre todos los algoritmos asimétricos, quizá RSA sea el más sencillo de com-

prender e implementar. Como ya se ha dicho, sus claves sirven indistintamente tanto

para codificar como para autentificar. Debe su nombre a sus tres inventores: Ronald

Rivest, Adi Shamir y Leonard Adleman, y estuvo bajo patente de los Laboratorios

RSA hasta el 20 de septiembre de 2000, por lo que su uso comercial estuvo restrin-

gido hasta esa fecha. De hecho, las primeras versiones de PGP (ver cap´ıtulo 18) lo

incorporaban como método de cifrado y firma digital, pero se desaconsej ó su uso a

partir de la versi ón 5 en favor de otros algoritmos, que por entonces s´ı eran libres.

Sujeto a m últiples controversias, desde su nacimiento nadie ha conseguido probar

o rebatir su seguridad, pero se le tiene como uno de los algoritmos asimétricos más

seguros.

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 (ver secci ón 5.6) o

tendrá que resolver un logaritmo discreto (ver secci ón 5.4.2).

Para generar un par de claves (KP , Kp), en primer lugar se eligen aleatoriamente

dos n úmeros primos grandes, p y q. Después se calcula el producto n = pq.

Escogeremos ahora un n úmero e primo relativo con (p − 1)(q − 1). (e, n) será la

clave p ública. N ótese que e debe tener inversa m ódulo (p − 1)(q − 1), por lo que

existirá un n úmero d tal que

de ≡ 1

(mód (p − 1)(q − 1))

es decir, que d es la inversa de e m ódulo (p−1)(q −1). (d, n) será la clave privada. Esta

inversa puede calcularse fácilmente empleando el Algoritmo Extendido de Euclides.

N ótese que si desconocemos los factores de n, este cálculo resulta prácticamente im-

posible.

La operaci ón de cifrado se lleva a cabo seg ún la expresi ón:

c = me

(mód n)

(12.1)

mientras que el descifrado se hará de la siguiente forma:

m = cd

(mód n)

(12.2)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.3. El Algoritmo RSA

183

ya que

cd = (me)d = med = mk(p−1)(q−1)+1 = (mk)(p−1)(q−1)m

Recordemos que φ(n) = (p − 1)(q − 1), por lo que, seg ún la ecuaci ón (5.3),

(mk)(p−1)(q−1) = 1,

lo cual nos lleva de nuevo a m, siempre y cuando m y n sean primos relativos.

Ya que en nuestro caso n es compuesto, puede ocurrir que no sea primo relati-

vo con m. Para ver lo que ocurre, podemos llevar a cabo el siguiente razonamiento:

buscamos un n úmero a tal que

ma ≡ 1

(mód n)

Tiene que cumplirse que ma ≡ 1 (mód p) y ma ≡ 1 (mód q), ya que p y q dividen a

n. Aplicando el Teorema de Fermat (expresi ón 5.4), tenemos que a debe ser m últiplo

de (p − 1) y de (q − 1), por lo que a = mcm(p − 1, q − 1). Ya que el m´ınimo com ún

m últiplo de (p − 1) y (q − 1) divide a (p − 1)(q − 1), el razonamiento dado inicialmente

para demostrar el buen funcionamiento del algoritmo sigue siendo válido. Por esta

raz ón, en muchos lugares se propone obtener d de forma que:

de ≡ 1

(mód mcm(p − 1, q − 1))

con lo que obtendremos valores más peque ˜nos, y por lo tanto más manejables, para

la clave de descifrado.

En muchos casos, se suele utilizar el Teorema Chino del Resto (secci ón 5.3) para

facilitar los cálculos a la hora de descifrar un mensaje. Para ello se incluyen p y q en

la clave privada, se calcula p1 = p−1 (mód q), y cuando se desea descifrar un mensaje

c, se plantea el siguiente sistema de congruencias:

[c mód p][d mód (p−1)] ≡ m1

(mód p)

[c mód q][d mód (q−1)] ≡ m2

(mód q)

Como ya se vio, estas ecuaciones tienen una soluci ón única m m ódulo n. Para recupe-

rar el mensaje original m, en lugar de usar la f órmula que dimos en la demostraci ón

del teorema, emplearemos otra ligeramente distinta:

m = m1 + p[(m2 − m1)p1

(mód q)]

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

184

12. Cifrados Asimétricos

Es inmediato comprobar que esta expresi ón es igual a m1 m ódulo p. Si por el contra-

rio tomamos m ódulo q, vemos que el segundo sumando es igual a m2 − m1, por lo

que nos quedará m2. Con ello conseguimos que el m ódulo a la hora de hacer las expo-

nenciaciones sea sensiblemente menor, y, en consecuencia, los cálculos más rápidos.

N ótese que los valores [d mód (p−1)], [d mód (q −1)] y p1 pueden tenerse calculados

de antemano —y, de hecho, se suelen incluir en la clave privada—.

En la práctica, cuando queramos generar un par de claves RSA, escogeremos p y

q con un n úmero grande de bits, por ejemplo 512, con lo que n tendrá 1024 bits. A la

hora de cifrar, subdividiremos el mensaje en bloques de, por ejemplo, 1016 bits —de

esta forma queda garantizado que el valor de cada bloque sea menor que n— y efec-

tuaremos la codificaci ón de cada uno. Obtendremos un mensaje cifrado ligeramente

más grande que el original, puesto que cada bloque tendrá ahora 1024 bits. Para de-

codificar, partiremos el mensaje cifrado en trozos de 1024 bits, y nos quedaremos con

los primeros 1016 de cada uno tras aplicar el algoritmo.

El atacante, si quiere recuperar la clave privada a partir de la p ública, debe conocer

los factores p y q de n, y esto representa un problema computacionalmente intratable,

siempre que p y q —y, por lo tanto, n— sean lo suficientemente grandes.

12.3.1.

Seguridad del Algoritmo RSA

Técnicamente no es del todo cierto que el algoritmo RSA deposite su fuerza en el

problema de la factorizaci ón. En realidad el hecho de tener que factorizar un n úmero

para descifrar un mensaje sin la clave privada es una mera conjetura. Nadie ha demos-

trado que no pueda surgir un método en el futuro que permita descifrar un mensaje

sin usar la clave privada y sin factorizar el m ódulo n. De todas formas, este método

podr´ıa ser empleado como una nueva técnica para factorizar n úmeros enteros, por

lo que la anterior afirmaci ón se considera en la práctica cierta. De hecho, existen es-

tudios que demuestran que incluso recuperar s ólo algunos bits del mensaje original

resulta tan dif´ıcil como descifrar el mensaje entero.

Aparte de factorizar n, podr´ıamos intentar calcular φ(n) directamente, o probar

por la fuerza bruta tratando de encontrar la clave privada. Ambos ataques son más

costosos computacionalmente que la propia factorizaci ón de n, afortunadamente.

Otro punto que cabr´ıa preguntarse es qué pasar´ıa si los primos p y q que esco-

gemos realmente fueran compuestos. Recordemos que los algoritmos de prueba de

primos que conocemos son probabil´ısticos, por lo que jamás tendremos la absoluta

seguridad de que p y q son realmente primos. Pero obsérvese que si aplicamos, por

ejemplo, treinta pasadas del algoritmo de Rabin-Miller (secci ón 5.7), las probabilida-

des de que el n úmero escogido pase el test y siga siendo primo son de una contra

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.3. El Algoritmo RSA

185

260: resulta más fácil que nos toque la primitiva y que simultáneamente nos parta

un rayo (cuadro 1.1). Por otra parte, si p o q fueran compuestos, el algoritmo RSA

simplemente no funcionar´ıa correctamente.

12.3.2.

Vulnerabilidades de RSA

Aunque el algoritmo RSA es bastante seguro conceptualmente, existen algunos

puntos débiles en la forma de utilizarlo que pueden ser aprovechados por un atacan-

te. En esta secci ón comentaremos estas posibles vulnerabilidades, as´ı como la forma

de evitar que surjan.

Claves Débiles en RSA

Se puede demostrar matemáticamente que existen ciertos casos para los cuales el

algoritmo RSA deja el mensaje original tal cual, es decir

me ≡ m

(mód n)

(12.3)

En realidad, siempre hay mensajes que quedan inalterados al ser codificados me-

diante RSA, sea cual sea el valor de n. Nuestro objetivo será reducir al m´ınimo el

n úmero de éstos. Se puede comprobar que, siendo n = pq y e el exponente para codi-

ficar,

σn = [1 + mcd(e − 1, p − 1)] · [1 + mcd(e − 1, q − 1)]

es el n úmero de valores de m que quedan igual al ser codificados. Si hacemos que

p = 1 + 2p0 y q = 1 + 2q0, con p0 y q0 primos, entonces mcd(e − 1, p − 1) puede valer

1, 2 ó p0 —análogamente ocurre con q0—. Los valores posibles de σn serán entonces

4, 6, 9, 2(p0 + 1), 2(q0 + 1), 3(p0 + 1), 3(p0 + 1), y (p0 + 1)(q0 + 1). Afortunadamente, los

cinco últimos son extremadamente improbables, por lo que no deben preocuparnos.

No obstante, como medida de precauci ón, se puede calcular σn a la hora de generar

las claves p ública y privada.

Claves Demasiado Cortas

Actualmente se considera segura una clave RSA con una longitud de n de al me-

nos 1024 bits, si bien se recomienda el uso de claves no inferiores a 2048 bits. Hasta

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

186

12. Cifrados Asimétricos

hace relativamente poco se recomendaban 512 bits, pero en mayo de 1999, Adi Shamir

present ó el denominado dispositivo Twinkle, un ingenio capaz de factorizar n úmeros

de manera muy rápida, aprovechando los últimos avances en la optimizaci ón de al-

goritmos espec´ıficos para esta tarea. Este dispositivo, a ún no construido, podr´ıa ser

incorporado en ordenadores de bajo coste y pondr´ıa en serio peligro los mensajes

cifrados con claves de 512 bits o menos.

Teniendo en cuenta los avances de la tecnolog´ıa, y suponiendo que el algoritmo

RSA no sea roto anal´ıticamente, deberemos escoger la longitud de la clave en funci ón

del tiempo que queramos que nuestra informaci ón permanezca en secreto. Efecti-

vamente, una clave de 1024 bits parece a todas luces demasiado corta como para

proteger informaci ón por más de unos pocos a ˜nos.

Ataques de Texto Claro Escogido

Existe una familia de ataques a RSA que explotan la posibilidad de que un usuario

codifique y firme un único mensaje empleando el mismo par de claves. Para que

el ataque surta efecto, la firma debe hacerse codificando el mensaje completo, no

el resultado de una funci ón MDC aplicada sobre él. Por ello se recomienda que las

firmas digitales se lleven a cabo siempre sobre la signatura del mensaje, nunca sobre

el mensaje en s´ı.

Otro tipo de ataque con texto claro escogido podr´ıa ser el siguiente: para falsificar

una firma sobre un mensaje m, se pueden calcular dos mensajes individuales m1 y

m2, aparentemente inofensivos, tales que m1m2 = m, y enviárselos a la v´ıctima pa-

ra que los firme. Entonces obtendr´ıamos un md y md. Aunque desconozcamos d, si

1

2

calculamos

mdmd = md

(mód n)

1

2

obtendremos el mensaje m firmado.

Ataques de M ódulo Com ún

Podr´ıa pensarse que, una vez generados p y q, será más rápido generar tantos

pares de claves como queramos, en lugar de tener que emplear dos n úmeros primos

diferentes en cada caso. Sin embargo, si lo hacemos as´ı, un atacante podrá decodificar

nuestros mensajes sin necesidad de la clave privada. Sea m el texto claro, que codi-

ficamos empleando dos claves de cifrado diferentes e1 y e2. Los criptogramas que

obtenemos son los siguientes:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.3. El Algoritmo RSA

187

c1 = me1

(mód n)

c2 = me2

(mód n)

El atacante conoce pues n, e1, e2, c1 y c2. Si e1 y e2 son primos relativos, el Algorit-

mo Extendido de Euclides nos permitirá encontrar r y s tales que

re1 + se2 = 1

Ahora podemos hacer el siguiente cálculo

crcs = me1rme2s = me1r+e2s ≡ m1

(mód n)

1 2

Recordemos que esto s ólo se cumple si e1 y e2 son n úmeros primos relativos, pero

precisamente eso es lo que suele ocurrir en la gran mayor´ıa de los casos. Por lo tanto,

se deben generar p y q diferentes para cada par de claves.

Ataques de Exponente Bajo

Si el exponente de cifrado e es demasiado bajo —hay implementaciones de RSA

que, por razones de eficiencia emplean valores peque ˜nos, como e = 3— existe la

posibilidad de que un atacante pueda romper el sistema.

En primer lugar, puede que me < n, es decir, que el n úmero que representa el texto

claro elevado al exponente de cifrado resulte inferior que el m ódulo. En ese caso, bas-

tar´ıa con aplicar un logaritmo tradicional para recuperar el mensaje original a partir

del criptograma. Esto se soluciona rellenando los valores para m con bits aleatorios por

la izquierda. Por ejemplo, si n es de 1024 bits, una estrategia razonable ser´ıa tomar

bloques de 1016 bits (que es un n úmero exacto de bytes) e incluirles siete bits alea-

torios por la izquierda. Siempre que los bits a ˜nadidos no sean todos cero, podemos

garantizar que m < n y me > n. Cuando decodifiquemos simplemente ignoraremos

esos siete bits.

Existe otro ataque basado en valores de e bajos. Si, por ejemplo, tenemos tres cla-

ves p úblicas con el mismo valor e = 3 y diferentes m ódulos, n1, n2 y n3, y alguien

cifra un mismo mensaje m con las tres, tendremos tres valores c1, c2 y c3. Como lo

más probable es que los ni sean primos relativos, y se cumple que m3 < n1n2n3, po-

demos aplicar el Teorema Chino del Resto (secci ón 5.3) para encontrar un valor x tal

que x = m3. Calculando la ra´ız c úbica de dicho valor, habremos recuperado el va-

lor de m. Para protegerse de este ataque, basta con a ˜nadir al mensaje, cada vez que

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

188

12. Cifrados Asimétricos

se cifre, los bits aleatorios citados en el anterior párrafo. De esta forma reducimos la

probabilidad de que se emplee exactamente el mismo valor de m en los tres casos.

También existen ataques que se aprovechan de valores bajos en el exponente

de descifrado d, por lo que se recomienda que d tenga aproximadamente el mismo

n úmero de bits que n.

Firmar y Codificar

Con el algoritmo RSA nunca se debe firmar un mensaje después de codificarlo,

por el contrario, debe firmarse primero. Existen ataques que permiten manipular con

éxito mensajes primero codificados y luego firmados, aunque se empleen funciones

resumen.

12.4.

Otros Algoritmos Asimétricos

12.4.1.

Algoritmo de Diffie-Hellman

Es un algoritmo asimétrico, basado en el problema de Diffie-Hellman (secci ón

5.4.3), que se emplea fundamentalmente para acordar una clave com ún entre dos

interlocutores, a través de un canal de comunicaci ón inseguro. La ventaja de este

sistema es que no son necesarias claves p úblicas en el sentido estricto, sino una infor-

maci ón compartida por los dos comunicantes.

Sean A y B los interlocutores en cuesti ón. En primer lugar, se calcula un n úmero

primo p y un generador α de ∗

Z , con 2 ≤ α ≤ p − 2. Esta informaci ón es p ública y

p

conocida por ambos. El algoritmo queda como sigue:

1. A escoge un n úmero aleatorio x, comprendido entre 1 y p − 2 y env´ıa a B el

valor

αx

(mód p)

2. B escoge un n úmero aleatorio y, análogamente al paso anterior, y env´ıa a A el

valor

αy

(mód p)

3. B recoge αx y calcula K = (αx)y (mód p).

4. A recoge αy y calcula K = (αy)x (mód p).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.4. Otros Algoritmos Asimétricos

189

Puesto que x e y no viajan por la red, al final A y B acaban compartiendo el valor

de K, sin que nadie que capture los mensajes transmitidos pueda repetir el cálculo.

12.4.2.

Algoritmo de ElGamal

Fue dise ˜nado en un principio para producir firmas digitales, pero posteriormente

se extendi ó también para codificar mensajes. Se basa en el problema de los logarit-

mos discretos, que está ´ıntimamente relacionado con el de la factorizaci ón, y en el de

Diffie-Hellman.

Para generar un par de claves, se escoge un n úmero primo n y dos n úmeros alea-

torios p y x menores que n. Se calcula entonces

y = px

(mód n)

La clave p ública es (p, y, n), mientras que la clave privada es x.

Escogiendo n primo, garantizamos que sea cual sea el valor de p, el conjunto

{p, p2, p3 . . .} es una permutaci ón del conjunto {1, 2, · · · , n − 1}. N ótese que esto no

es necesario para que el algoritmo funcione, por lo que podemos emplear realmen-

te un n no primo, siempre que el conjunto generado por las potencias de p sea lo

suficientemente grande.

Firmas Digitales de ElGamal

Para firmar un mensaje m basta con escoger un n úmero k aleatorio, que sea primo

relativo con n − 1, y calcular

a = pk

(mód n)

(12.4)

b = (m − xa)k−1

(mód (n − 1))

La firma la constituye el par (a, b). En cuanto al valor k, debe mantenerse en se-

creto y ser diferente cada vez. La firma se verifica comprobando que

yaab = pm

(mód n)

(12.5)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

190

12. Cifrados Asimétricos

Cifrado de ElGamal

Para cifrar el mensaje m se escoge primero un n úmero aleatorio k primo relativo

con (n − 1), que también será mantenido en secreto. Calculamos entonces las siguien-

tes expresiones

a = pk

(mód n)

(12.6)

b = ykm

(mód n)

El par (a, b) es el texto cifrado, de doble longitud que el texto original. Para decodificar

se calcula

m = b · a−x

(mód n)

(12.7)

12.4.3.

Algoritmo de Rabin

El sistema de clave asimétrica de Rabin se basa en el problema de calcular ra´ıces

cuadradas m ódulo un n úmero compuesto. Este problema se ha demostrado que es

equivalente al de la factorizaci ón de dicho n úmero.

En primer lugar escogemos dos n úmeros primos, p y q, ambos congruentes con

3 m ódulo 4 (los dos últimos bits a 1). Estos primos son la clave privada. La clave

p ública es su producto, n = pq.

Para codificar un mensaje m, simplemente se calcula

c = m2

(mód n)

(12.8)

La decodificaci ón del mensaje se hace calculando lo siguiente:

m1 = c(p+1)/4

(mód p)

m2 = (p − c(p+1)/4)

(mód p)

m3 = c(q+1)/4

(mód q)

m4 = (q − c(q+1)/4)

(mód q)

Luego se escogen a y b tales que a = q(q−1 (mód p)) y b = p(p−1 (mód q)). Los

cuatro posibles mensajes originales son

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.4. Otros Algoritmos Asimétricos

191

ma = (am1 + bm3)

(mód n)

mb = (am1 + bm4)

(mód n)

(12.9)

mc = (am2 + bm3)

(mód n)

md = (am2 + bm4)

(mód n)

Desgraciadamente, no existe ning ún mecanismo para decidir cuál de los cuatro es el

auténtico, por lo que el mensaje deberá incluir alg ún tipo de informaci ón para que el

receptor pueda distinguirlo de los otros.

12.4.4.

Algoritmo DSA

El algoritmo DSA (Digital Signature Algorithm) es una parte el estándar de firma

digital DSS (Digital Signature Standard). Este algoritmo, propuesto por el NIST, data

de 1991, es una variante del método asimétrico de ElGamal.

Creaci ón del par clave p ública-clave privada

El algoritmo de generaci ón de claves es el siguiente:

1. Seleccionar un n úmero primo q tal que 2159 < q < 2160.

2. Escoger t tal que 0 ≤ t ≤ 8, y seleccionar un n úmero primo p tal que 2511+64t <

p < 2512+64t, y que además q sea divisor de (p − 1).

3. Seleccionar un elemento g ∈ ∗

Z y calcular α = g(p−1)/q mód p.

p

4. Si α = 1 volver al paso 3.

5. Seleccionar un n úmero entero aleatorio a, tal que 1 ≤ a ≤ q − 1

6. Calcular y = αa mód p.

7. La clave p ública es (p, q, α, y). La clave privada es a.

Generaci ón y verificaci ón de la firma

Siendo h la salida de una funci ón MDC sobre el mensaje m, la generaci ón de una

firma se hace mediante el siguiente algoritmo:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

192

12. Cifrados Asimétricos

1. Seleccionar un n úmero aleatorio k tal que 0 < k < q.

2. Calcular r = (αk mód p) mód q.

3. Calcular k−1 mód q.

4. Calcular s = k−1(h + ar) mód q.

5. La firma del mensaje m es el par (r, s).

El destinatario efectuará las siguientes operaciones, suponiendo que conoce la

clave p ública (p, q, α, y), para verificar la autenticidad de la firma:

1. Verificar que 0 < r < q y 0 < s < q. En caso contrario, rechazar la firma.

2. Calcular el valor de h a partir de m.

3. Calcular ω = s−1 mód q.

4. Calcular u1 = ω · h mód q y u2 = ω · r mód q.

5. Calcular v = (αu1yu2 mód p) mód q.

6. Aceptar la firma si y s ólo si v = r.

12.5.

Criptograf´ıa de Curva El´ıptica

Como vimos en la secci ón 6.4, para curvas el´ıpticas existe un problema análogo

al de los logaritmos discretos en grupos finitos de enteros. Esto nos va a permitir

trasladar cualquier algoritmo criptográfico definido sobre enteros, y que se apoye en

este problema, al ámbito de las curvas el´ıpticas. La ventaja que se obtiene es que, con

claves más peque ˜nas, se alcanza un nivel de seguridad equiparable.

Debido a la relaci ón existente entre ambos, muchos algoritmos que se apoyan en

el problema de la factorizaci ón pueden ser replanteados para descansar sobre los

logaritmos discretos. De hecho, existen versiones de curva el´ıptica de muchos de los

algoritmos asimétricos más populares. A modo de ejemplo, en esta secci ón veremos

c ómo se redefine el algoritmo de cifrado de ElGamal.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

12.6. Ejercicios Resueltos

193

12.5.1.

Cifrado de ElGamal sobre Curvas El´ıpticas

Sea un grupo de curva el´ıptica, definido en GF (n) ó GF (2n). Sea p un punto de

la curva. Sea el conjunto hpi, de cardinal n. Escogemos entonces un valor entero x

comprendido entre 1 y n − 1, y calculamos

y = xp

(12.10)

La clave p ública vendrá dada por (p, y, n), y la clave privada será x.

El cifrado se hará escogiendo un n úmero aleatorio k primo relativo con n. Segui-

damente calculamos las expresiones

a = kp

(12.11)

b = m + ky

siendo m el mensaje original representado como un punto de la curva. El criptograma

será el par (a, b). Para descifrar, será suficiente con calcular

m = −(xa) + b

(12.12)

12.6.

Ejercicios Resueltos

1. Suponga un sistema RSA con los siguientes parámetros:

N = 44173

KP = 25277

C = 8767, 18584, 7557, 4510, 40818, 39760, 4510, 39760, 6813, 7557, 14747

a) Factorizar el m ódulo N .

b) Calcular la clave privada Kp.

c) Descifrar el mensaje C.

Solución:

a) Para factorizar N , basta con emplear el método de tanteo (prueba y error) a

partir de la ra´ız cuadrada de 44173, obteniéndose que N = 271 · 163.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

194

12. Cifrados Asimétricos

b) Kp debe ser la inversa de KP m ódulo φ(N ) = 270 · 162 = 43740. Empleando

el Algoritmo Extendido de Euclides, llegamos a

Kp = K−1 = 25277−1

(mód 43740) = 26633

P

c) El descifrado podemos llevarlo a cabo empleando el Algoritmo Rápido de

Exponenciaci ón:

c0 = 8767

m0 = 8767Kp

(mód 44173) = 75

c1 = 18584

m1 = 18584Kp

(mód 44173) = 114

c2 = 7557

m2 = 7557Kp

(mód 44173) = 105

c3 = 4510

m3 = 4510Kp

(mód 44173) = 112

c4 = 40818

m4 = 40818Kp

(mód 44173) = 116

c5 = 39760

m5 = 39760Kp

(mód 44173) = 111

c6 = 4510

m6 = 4510Kp

(mód 44173) = 112

c7 = 39760

m7 = 39760Kp

(mód 44173) = 111

c8 = 6813

m8 = 6813Kp

(mód 44173) = 108

c9 = 7557

m9 = 7557Kp

(mód 44173) = 105

c10 = 14747

m10 = 14747Kp

(mód 44173) = 115

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 13

Funciones Resumen

En el cap´ıtulo 12 vimos que la criptograf´ıa asimétrica permite autentificar infor-

maci ón, es decir, poder asegurar que un mensaje m proviene de un emisor A y no de

cualquier otro. Asimismo vimos que la autentificaci ón deb´ıa hacerse empleando una

función resumen y no codificando el mensaje completo. En esencia, una funci ón resu-

men (hash, en inglés), proporciona una secuencia de bits de peque ˜na longitud, que va

asociada al mensaje aunque contiene menos informaci ón que éste, y que debe resul-

tar muy dif´ıcil de falsificar. Existen funciones resumen que emplean en sus cálculos

una clave adicional —los denominados MAC (message authentication code), que vere-

mos en la secci ón 13.7—, y otras que no la usan, denominadas genéricamente MDC

(modification detection codes).

13.1.

Propiedades

Sabemos que un mensaje m puede ser autentificado codificando con la llave pri-

vada Kp el resultado de aplicarle una funci ón resumen, EK (r(m)). Esa informaci ón

p

(que denominaremos firma del mensaje m) s ólo puede ser generada por el poseedor

de la clave privada Kp. Cualquiera que tenga la llave p ública correspondiente es-

tará en condiciones de decodificar y verificar la firma. Para que sea segura, la función

resumen r(x) debe cumplir además ciertas caracter´ısticas:

r(m) es de longitud fija, independientemente de la longitud de m.

Dado m, es fácil calcular r(m).

Dado r(m), es computacionalmente intratable recuperar m.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

196

13. Funciones Resumen

Dado m, es computacionalmente intratable obtener un m0 tal que r(m) = r(m0).

Estas propiedades son válidas tanto para los MDC como para los MAC, con la

dificultad a ˜nadida para estos últimos de que el atacante deberá averiguar además la

clave correspondiente. De hecho, conocida la clave, un MAC se comporta exactamen-

te igual que un MDC.

13.2.

Longitud Adecuada para una Signatura

Para decidir cuál debe ser la longitud apropiada de una signatura, veamos prime-

ro el siguiente ejemplo: ¿Cuál es la cantidad n de personas que hay que poner en una

habitaci ón para que la probabilidad P de que el cumplea ˜nos de una de ellas sea el

mismo d´ıa que el m´ıo supere el 50 %? Sabemos que cuando n = 1, P = 1 . Cuando

365

n = 2, la probabilidad de que ning ún cumplea ˜nos coincida con el nuestro es el produc-

to de la probabilidad de que no coincida el primero, por la probabilidad de que no

coincida el segundo, luego:

364

364

P = 1 −

·

365

365

En el caso general,

364 n

P = 1 −

365

Para que P > 0,5, n debe ser al menos igual a 253. Sin embargo, ¿cuál ser´ıa la canti-

dad de gente necesaria para que la probabilidad Q de que dos personas cualesquie-

ra tengan el mismo cumplea ˜nos supere el 50 %? Las dos primeras personas (o sea,

cuando n = 2) tienen una probabilidad 364 de no compartir el cumplea ˜nos; una terce-

365

ra, supuesto que las dos primeras no lo comparten, tiene una probabilidad 363 de no

365

compartirlo con las otras dos, por lo que tenemos 364·363 , y as´ı sucesivamente. En el

365·365

caso general nos queda

364 · 363 . . . (365 − n + 1)

Q = 1 −

con n ≥ 2

365(n−1)

Si hacemos los cálculos, veremos que Q > 0,5 si n > 22, una cantidad sorprendente-

mente mucho menor que 253.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

13.3. Estructura de una Funci ón MDC

197

La consecuencia de este ejemplo, conocido como la paradoja del cumplea ˜nos, es que

aunque resulte muy dif´ıcil dado m calcular un m0 tal que r(m) = r(m0), es conside-

rablemente menos costoso generar muchos valores aleatoriamente, y posteriormente

buscar entre ellos una pareja cualquiera (m, m0), tal que r(m) = r(m0).

En el caso de una signatura de 64 bits, necesitar´ıamos 264 mensajes dado un m pa-

ra obtener el m0, pero bastar´ıa con generar aproximadamente 232 mensajes aleatorios

para que aparecieran dos con la misma signatura —en general, si la primera cantidad

es muy grande, la segunda cantidad es aproximadamente su ra´ız cuadrada—. El pri-

mer ataque nos llevar´ıa 600.000 a ˜nos con una computadora que generara un mill ón

de mensajes por segundo, mientras que el segundo necesitar´ıa apenas una hora.

Hemos de a ˜nadir pues a nuestra lista de condiciones sobre las funciones resumen

la siguiente:

Debe ser dif´ıcil encontrar dos mensajes aleatorios, m y m0, tales que r(m) =

r(m0).

Hoy por hoy se recomienda emplear signaturas de al menos 128 bits, siendo 160

bits el valor más usado.

13.3.

Estructura de una Funci ón MDC

En general, los MDC se basan en la idea de funciones de compresión, que dan como

resultado bloques de longitud fija a a partir de bloques de longitud fija b, con a < b.

Estas funciones se encadenan de forma iterativa, haciendo que la entrada en el paso

i sea funci ón del i-ésimo bloque del mensaje (mi) y de la salida del paso i − 1 (ver

figura 13.1). En general, se suele incluir en alguno de los bloques del mensaje m —al

principio o al final—, informaci ón sobre la longitud total del mensaje. De esta forma

se reducen las probabilidades de que dos mensajes con diferentes longitudes den el

mismo valor en su resumen.

13.4.

Algoritmo MD5

Se trata de uno de los más populares algoritmos de generaci ón de signaturas,

debido en gran parte a su inclusi ón en las primeras versiones de PGP. Resultado de

una serie de mejoras sobre el algoritmo MD4, dise ˜nado por Ron Rivest, procesa los

mensajes de entrada en bloques de 512 bits, y produce una salida de 128 bits.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

198

13. Funciones Resumen

Figura 13.1: Estructura iterativa de una función resumen. R representa la funci ón de

compresi ón, m es el mensaje completo, mi el i-ésimo trozo de m, y ri la salida de la

funci ón en el paso i.

Siendo m un mensaje de b bits de longitud, en primer lugar se alarga m hasta que

su longitud sea exactamente 64 bits inferior a un m últiplo de 512. El alargamiento se

lleva a cabo a ˜nadiendo un 1 seguido de tantos ceros como sea necesario. En segundo

lugar, se a ˜naden 64 bits con el valor de b, empezando por el byte menos significativo.

De esta forma tenemos el mensaje como un n úmero entero de bloques de 512 bits, y

además le hemos a ˜nadido informaci ón sobre su longitud.

Antes de procesar el primer bloque del mensaje, se inicializan cuatro registros de

32 bits con los siguientes valores hexadecimales, seg ún el criterio little endian —el

byte menos significativo queda en la direcci ón de memoria más baja—:

A = 67452301

B = EF CDAB89

C

= 98BADCF E

D = 10325476

Posteriormente comienza el lazo principal del algoritmo, que se repetirá para cada

bloque de 512 bits del mensaje. En primer lugar copiaremos los valores de A,B,C y D

en otras cuatro variables, a,b,c y d. Luego definiremos las siguientes cuatro funciones:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

13.4. Algoritmo MD5

199

F (X, Y, Z) = (X ∧ Y ) ∨ ((¬X) ∧ Z)

G(X, Y, Z) = (X ∧ Z) ∨ ((Y ∧ (¬Z))

H(X, Y, Z) = X ⊕ Y ⊕ Z

I(X, Y, Z) = Y ⊕ (X ∨ (¬Z))

Ahora representaremos por mj el j-ésimo bloque de 32 bits del mensaje m (de 0 a

15), y definiremos otras cuatro funciones:

F F (a, b, c, d, mj, s, ti) representa a = b + ((a + F (b, c, d) + mj + ti) / s)

GG(a, b, c, d, mj, s, ti) representa a = b + ((a + G(b, c, d) + mj + ti) / s)

HH(a, b, c, d, mj, s, ti) representa a = b + ((a + H(b, c, d) + mj + ti) / s)

II(a, b, c, d, mj, s, ti) representa a = b + ((a + I(b, c, d) + mj + ti) / s)

donde la funci ón a / s representa desplazar circularmente la representaci ón binaria

del valor a s bits a la izquierda, con reentrada.

Las 64 operaciones que se realizan en total quedan agrupadas en cuatro rondas.

Primera Ronda:

F F (a, b, c, d, m0, 7, D76AA478)

F F (d, a, b, c, m1, 12, E8C7B756)

F F (c, d, a, b, m2, 17, 242070DB)

F F (b, c, d, a, m3, 22, C1BDCEEE)

F F (a, b, c, d, m4, 7, F 57C0F AF )

F F (d, a, b, c, m5, 12, 4787C62A)

F F (c, d, a, b, m6, 17, A8304613)

F F (b, c, d, a, m7, 22, F D469501)

F F (a, b, c, d, m8, 7, 698098D8)

F F (d, a, b, c, m9, 12, 8B44F 7AF )

F F (c, d, a, b, m10, 17, F F F F 5BB1)

F F (b, c, d, a, m11, 22, 895CD7BE)

F F (a, b, c, d, m12, 7, 6B901122)

F F (d, a, b, c, m13, 12, F D987193)

F F (c, d, a, b, m14, 17, A679438E)

F F (b, c, d, a, m15, 22, 49B40821)

Segunda Ronda:

GG(a, b, c, d, m1, 5, F 61E2562)

GG(d, a, b, c, m6, 9, C040B340)

GG(c, d, a, b, m11, 14, 265E5A51)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

200

13. Funciones Resumen

GG(b, c, d, a, m0, 20, E9B6C7AA)

GG(a, b, c, d, m5, 5, D62F 105D)

GG(d, a, b, c, m10, 9, 02441453)

GG(c, d, a, b, m15, 14, D8A1E681)

GG(b, c, d, a, m4, 20, E7D3F BC8)

GG(a, b, c, d, m9, 5, 21E1CDE6)

GG(d, a, b, c, m14, 9, C33707D6)

GG(c, d, a, b, m3, 14, F 4D50D87)

GG(b, c, d, a, m8, 20, 455A14ED)

GG(a, b, c, d, m13, 5, A9E3E905)

GG(d, a, b, c, m2, 9, F CEF A3F 8)

GG(c, d, a, b, m7, 14, 676F 02D9)

GG(b, c, d, a, m12, 20, 8D2A4C8A)

Tercera Ronda:

HH(a, b, c, d, m5, 4, F F F A3942)

HH(d, a, b, c, m8, 11, 8771F 681)

HH(c, d, a, b, m11, 16, 6D9D6122)

HH(b, c, d, a, m14, 23, F DE5380C)

HH(a, b, c, d, m1, 4, A4BEEA44)

HH(d, a, b, c, m4, 11, 4BDECF A9)

HH(c, d, a, b, m7, 16, F 6BB4B60)

HH(b, c, d, a, m10, 23, BEBF BC70)

HH(a, b, c, d, m13, 4, 289B7EC6)

HH(d, a, b, c, m0, 11, EAA127F A)

HH(c, d, a, b, m3, 16, D4EF 3085)

HH(b, c, d, a, m6, 23, 04881D05)

HH(a, b, c, d, m9, 4, D9D4D039)

HH(d, a, b, c, m12, 11, E6DB99E5)

HH(c, d, a, b, m15, 16, 1F A27CF 8)

HH(b, c, d, a, m2, 23, C4AC5665)

Cuarta Ronda:

II(a, b, c, d, m0, 6, F 4292244)

II(d, a, b, c, m7, 10, 432AF F 97)

II(c, d, a, b, m14, 15, AB9423A7)

II(b, c, d, a, m5, 21, F C93A039)

II(a, b, c, d, m12, 6, 655B59C3)

II(d, a, b, c, m3, 10, 8F 0CCC92)

II(c, d, a, b, m10, 15, F F EF F 47D)

II(b, c, d, a, m1, 21, 85845DD1)

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

13.5. Algoritmo SHA-1

201

II(a, b, c, d, m8, 6, 6F A87E4F )

II(d, a, b, c, m15, 10, F E2CE6E0)

II(c, d, a, b, m6, 15, A3014314)

II(b, c, d, a, m13, 21, 4E0811A1)

II(a, b, c, d, m4, 6, F 7537E82)

II(d, a, b, c, m11, 10, BD3AF 235)

II(c, d, a, b, m2, 15, 2AD7D2BB)

II(b, c, d, a, m9, 21, EB86D391)

Finalmente, los valores resultantes de a,b,c y d son sumados con A,B,C y D, que-

dando listos para procesar el siguiente bloque de datos. El resultado final del algorit-

mo es la concatenaci ón de A,B,C y D.

A modo de curiosidad, diremos que las constantes ti empleadas en cada paso son

la parte entera del resultado de la operaci ón 232 · abs(sin(i)), estando i representado

en radianes.

13.5.

Algoritmo SHA-1

El algoritmo SHA-1 fue desarrollado por la NSA, para ser incluido en el estándar

DSS (Digital Signature Standard). Al contrario que los algoritmos de cifrado propues-

tos por esta organizaci ón, SHA-1 se considera seguro1 y libre de puertas traseras, ya

que el hecho de que el algoritmo sea realmente seguro favorece a los propios intere-

ses de la NSA. Produce firmas de 160 bits, a partir de bloques de 512 bits del mensaje

original.

El algoritmo es similar a MD5, con la diferencia de que usa la ordenaci ón big

endian. Se inicializa de igual manera, es decir, a ˜nadiendo al final del mensaje un uno

seguido de tantos ceros como sea necesario hasta completar 448 bits en el último

bloque, para luego yuxtaponer la longitud en bits del propio mensaje —en este caso,

el primer byte de la secuencia será el más significativo—. A diferencia de MD5, SHA-1

emplea cinco registros de 32 bits en lugar de cuatro, que deben ser inicializados antes

de procesar el primer bloque con los siguientes valores:

1Desafortunadamente, la seguridad de SHA-1 ha quedado puesta en entredicho debido a los avan-

ces conseguidos en 2004 y 2005 por un equipo de cript ólogos chinos, liderado por Xiaoyun Wang.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

202

13. Funciones Resumen

A = 67452301

B = EF CDAB89

C

= 98BADCF E

D = 10325476

E

= C3D2E1F 0

Una vez que los cinco valores están inicializados, se copian en cinco variables, a,

b, c, d y e. El lazo principal tiene cuatro rondas con 20 operaciones cada una:

F (X, Y, Z) = (X ∧ Y ) ∨ ((¬X) ∧ Z)

G(X, Y, Z) = X ⊕ Y ⊕ Z

H(X, Y, Z) = (X ∧ Y ) ∨ (X ∧ Z) ∨ (Y ∧ Z)

La operaci ón F se emplea en la primera ronda (t comprendido entre 0 y 19), la G

en la segunda (t entre 20 y 39) y en la cuarta (t entre 60 y 79), y la H en la tercera (t

entre 40 y 59). Además se emplean cuatro constantes, una para cada ronda:

K0 = 5A827999

K1 = 6ED9EBA1

K2 = 8F 1BBCDC

K3 = CA62C1D6

El bloque de mensaje m se trocea en 16 partes de 32 bits m0 a m15 y se convierte

en 80 trozos de 32 bits w0 a w79 usando el siguiente algoritmo:

wt = mt

para t = 0 . . . 15

wt = (wt−3 ⊕ wt−8 ⊕ wt−14 ⊕ wt−16) / 1 para t = 16 . . . 79

Todos los mi obtenidos se interpretan como enteros en las operaciones del algo-

ritmo empleando la ordenaci ón big endian. Como curiosidad, diremos que la NSA

introdujo en 1995 el desplazamiento a la izquierda para corregir una debilidad del al-

goritmo, que no fue descubierta por los cript ógrafos civiles hasta 2004, lo cual supuso

modificar el nombre del mismo para llamar a partir de entonces SHA-0 a la versi ón

original, y SHA-1 a la modificada.

El lazo principal del algoritmo es entonces el siguiente:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

13.6. Seguridad de las Funciones MDC

203

FOR t = 0 TO 79

i = t div 20

T mp = (a / 5) + A(b, c, d) + e + wt + Ki

e = d

d = c

c = b / 30

b = a

a = T mp

siendo A la funci ón F , G o H seg ún el valor de t (F para t ∈ [0, 19], G para t ∈ [20, 39]

y [60, 79], H para t ∈ [40, 59]). Después los valores de a a e son sumados a los registros

A a E y el algoritmo contin úa con el siguiente bloque de datos. Finalmente, el valor

de la funci ón resumen será la concatenaci ón de los contenidos de los registros A a E

resultantes de procesar el último bloque del mensaje.

13.6.

Seguridad de las Funciones MDC

Puesto que el conjunto de posibles mensajes de longitud arbitraria es infinito, y el

conjunto de posibles valores de una funci ón MDC es finito, inevitablemente habrá va-

lores para la funci ón que se correspondan con más de un mensaje. De hecho, puede

demostrarse que al menos un valor de la funci ón MDC se corresponde necesaria-

mente con infinitos mensajes, y es razonable sospechar que, en general, cada uno

de los posibles valores de la funci ón va a corresponder con infinitos mensajes. En

consecuencia, siempre va a ser posible, dado un valor r(m), encontrar un m0 tal que

r(m) = r(m0). La fortaleza de las funciones MDC radica, pues, en la dificultad que

plantea encontrar el m0.

Llamaremos colisión a un par de mensajes (m, m0) tales que r(m) = r(m0). De

lo argumentado en el párrafo anterior, podemos deducir que todos los algoritmos

MDC presentan colisiones. Distinguiremos no obstante dos tipos de estrategias para

hallarlas, con objeto de delimitar el grado de compromiso que pueden provocar en

un algoritmo concreto:

De preimagen: El atacante parte de un mensaje m, y calcula otro mensaje m0 que

colisiona con el primero.

De colisión propiamente dicha: El atacante se limita a buscar dos valores m y

m0 que colisionen, pero desconoce inicialmente tanto sus valores como el que

tomará la funci ón resumen.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

204

13. Funciones Resumen

En el primer caso, el MDC queda comprometido de manera grave, ya que bas-

tará con sustituir un m con el m0 que hayamos calculado para falsificar un mensaje.

De todas formas, es bastante dif´ıcil que el m0 tenga un aspecto válido. Piénsese por

ejemplo en un mensaje m de texto: nuestra técnica de preimagen tendr´ıa que ser ca-

paz de generar otro mensaje m0, también de texto, y con un significado concreto, para

que la falsificaci ón tuviera interés. Lo más habitual es que el m0 obtenido tenga un as-

pecto más o menos aleatorio, lo cual le conferir´ıa una utilidad mucho más limitada,

como por ejemplo la intoxicaci ón de redes de comunicaci ón con datos err óneos que

puedan pasar por auténticos.

En el segundo, la situaci ón es menos grave. Puesto que no sabemos a priori los

valores m y m0 que vamos a encontrar, dif´ıcilmente podremos emplear una técnica

de este tipo para falsificar una firma digital —a no ser que logremos que la v´ıctima

firme un mensaje sin sentido y luego lo sustituyamos por otro, también sin sentido—.

En la actualidad se han encontrado colisiones para los algoritmos HAVAL-128,

MD4, MD5, RIPEMD, SHA-0 y SHA-1. Afortunadamente, se han calculado a partir

de métodos del segundo tipo, por lo que las repercusiones a las que dan lugar son

limitadas, si bien conviene tener en cuenta esta situaci ón a la hora de utilizar alguno

de estos algoritmos en nuestras aplicaciones. Una estrategia bastante simple, destina-

da a evitar de manera provisional los problemas que estas colisiones pueden causar,

consiste en emplear como signatura del mensaje la concatenaci ón de dos signaturas

obtenidas con algoritmos diferentes, lo cual obligar´ıa a encontrar m y m0 tales que

colisionen para ambos.

13.7.

Funciones de Autentificaci ón de Mensaje

Los MAC se caracterizan por el empleo de una clave secreta para poder calcular

la integridad del mensaje. Puesto que dicha clave s ólo es conocida por el emisor y el

receptor, el receptor es el único que puede, mediante el cálculo de la funci ón corres-

pondiente, comprobar tanto la integridad como la procedencia del mensaje. Podemos

distinguir varios tipos:

Basados en cifrados por bloques: Son los más comunes, y consisten en cifrar el men-

saje empleando un algoritmo por bloques en modo de operaci ón CBC (secci ón

10.6). El valor del MAC será entonces el resultado de cifrar el último bloque del

mensaje.

HMAC: Se basan en el uso de cualquier funci ón MDC existente, aplicada sobre

una versi ón del mensaje a la que se ha a ˜nadido un conjunto de bits, calculados

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

13.7. Funciones de Autentificaci ón de Mensaje

205

a partir de la clave que se quiere emplear. Por ejemplo, la funci ón HMAC a la

que da lugar el algoritmo MD5 tiene la siguiente estructura:

MD5(k ⊕ opad, MD5(k ⊕ ipad, m))

donde k es la clave —alargada con ceros por la derecha hasta tener 64 bytes de

longitud—, opad es el byte con valor hexadecimal 5C repetido 64 veces, ipad es

el valor hexadecimal 36 repetido 64 veces, m es el mensaje, y la coma representa

la concatenaci ón.

Basados en generadores de secuencia: Empleando un generador de secuencia pseu-

doaleatorio el mensaje se parte en dos subcadenas —correspondientes al mensa-

je combinado con la secuencia y a la propia secuencia—, cada una de las cuales

alimenta un Registro de Desplazamiento Retroalimentado (secci ón 11.3). El va-

lor del MAC se obtiene a partir de los estados finales de ambos registros.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

206

13. Funciones Resumen

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 14

Esteganograf´ıa

La palabra esteganograf´ıa proviene de los térmimos griegos στ ´γω (cubierto) y

γρ ´

αϕιν (escritura), por lo que literalmente significa escritura encubierta. A diferencia

del concepto de criptograf´ıa, en el que se habla de escritura oculta, aqu´ı se hace men-

ci ón expl´ıcita de la existencia de una capa superior que cubre el mensaje, de forma

que éste pueda pasar inadvertido. A lo largo de la historia podemos encontrar m últi-

ples ejemplos de técnicas esteganográficas: desde la escritura en la cabeza afeitada

de un mensajero, cuyo pelo se dejaba crecer antes de enviarlo, hasta los micropuntos

empleados en la II Guerra Mundial, que camuflaban páginas enteras de texto micro-

filmadas en un simple signo de puntuaci ón, dentro de una aparentemente inofensiva

carta. Quizás el caso más conocido de esteganograf´ıa en lengua castellana sea el poe-

ma que aparece al principio de La Celestina, en el que el bachiller Fernando de Rojas

codific ó su nombre y lugar de nacimiento empleando las letras iniciales de cada ver-

so.

Podemos decir que criptograf´ıa y esteganograf´ıa son técnicas diferentes, e inclu-

so complementarias. Mientras que la primera se encarga de hacer el mensaje ilegible

frente a agentes no autorizados, sin preocuparse de que éste pueda tener un aspecto

claramente reconocible, la segunda provee mecanismos para hacer que el texto re-

sulte indetectable, independientemente de que se encuentre cifrado o no. De hecho,

en canales de comunicaci ón inseguros, la simple destrucci ón del mensaje por parte

de un atacante puede ser suficiente para sus prop ósitos, independientemente de que

pueda o no acceder a sus contenidos. En este sentido, puede afirmarse que la estega-

nograf´ıa ha sido la técnica más ampliamente utilizada a lo largo de la Historia para

escapar de la censura.

Desde un punto de vista más formal, la esteganograf´ıa toma un mensaje anfitrión,

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

208

14. Esteganograf´ıa

y lo modifica hasta encontrar otro mensaje diferente con el mismo significado1. Ese

proceso de modificaci ón se hace a partir del mensaje huésped que queremos ocultar,

de forma que únicamente aquellos que conozcan el proceso seguido para su ocul-

taci ón puedan recuperarlo de manera satisfactoria. En funci ón de la naturaleza del

mensaje anfitri ón (un texto ASCII, una imagen JPEG, un fragmento de sonido MP3,

etc.), cambiará radicalmente el concepto de significado, y por lo tanto los procesos de

modificaci ón que permitirán alojar el huésped sin despertar sospechas.

Una combinaci ón adecuada de criptograf´ıa y esteganograf´ıa puede permitir que,

aunque el atacante conozca por completo el mecanismo de ocultaci ón del huésped

en el anfitri ón, únicamente recupere algo cuyas propiedades estad´ısticas son iguales

a las del ruido blanco, por lo que el autor del mensaje podrá repudiarlo (ver secci ón

2.6), evitando que se le obligue a facilitar sus claves criptográficas o se le someta a

represalias, ya que resultará matemáticamente imposible demostrar la propia exis-

tencia del mensaje.

14.1.

Métodos Esteganográficos

Dedicaremos esta secci ón a comentar brevemente y de forma general algunas

técnicas esteganográficas. Dependiendo de la naturaleza del mensaje anfitri ón, los

bits que lo componen serán interpretados de una u otra forma, y por lo tanto ten-

dremos que actuar de manera diferente para poder ocultar informaci ón en él. Distin-

guiremos entre archivos de texto, en los que el mensaje es una secuencia de letras,

y archivos que representan alg ún tipo de se ˜nal, ya sea unidimensional —sonido—,

bidimensional —imagen—, o tridimensional —v´ıdeo—, que denominaremos genéri-

camente archivos multimedia.

14.1.1.

En archivos de texto

En un archivo de texto, en general, cada byte viene asociado a una letra, un n úme-

ro, un s´ımbolo o un carácter de control. Por ejemplo, si empleamos la codificaci ón

ASCII, la letra “a” se corresponde con el valor numérico 97. Es posible por tanto con-

siderar el mensaje anfitri ón como una secuencia de caracteres, en lugar de tomarlo

colmo una secuencia de bits. Podemos entonces actuar de dos maneras: modificar un

1En algunos casos, el mensaje anfitrión puede ser generado a partir del mensaje que se pretende

ocultar. En esas situaciones, la única condici ón que el mensaje generado debe cumplir es que posea

alg ún sentido, al menos aparentemente.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

14.1. Métodos Esteganográficos

209

texto existente en funci ón del mensaje que queremos ocultar, sin alterar su significa-

do, o bien generar un texto aparentemente inocuo a partir del mensaje huésped.

En el primer caso podemos jugar con los caracteres de control, introduciendo es-

pacios o retornos de carro superfluos que no alteren el significado del mensaje anfi-

tri ón. Por ejemplo, si queremos codificar un 1, podr´ıamos introducir un espacio doble

entre dos palabras consecutivas, y un espacio simple si queremos representar un 0.

De esta forma será relativamente fácil introducir un mensaje huésped de tantos bits

de longitud como huecos entre palabras contenga el mensaje anfitri ón.

En el segundo caso haremos uso un generador de frases, programado con una

serie de reglas gramaticales y un vocabulario más o menos extenso, que empleará el

mensaje huésped como gu´ıa para generar oraciones correctas gramaticalmente. El

destinatario utilizar´ıa un analizador léxico–sintáctico para deshacer la operaci ón.

Existen aplicaciones que generan, a través de este método, mensajes con aparien-

cia de correos basura (spam), capaces de pasar desapercibidos entre los cientos de

millones de correos de este tipo que cada d´ıa viajan por Internet.

14.1.2.

En archivos multimedia

Un archivo multimedia representa usualmente la digitalizaci ón de alg ún tipo de

se ˜nal anal ógica. Dicha se ˜nal anal ógica, de carácter continuo —con infinitos posibles

valores en cada instante infinitesimal de tiempo— se convierte en una serie de n úme-

ros discretos —que s ólo pueden tomar un n úmero finito de valores en un n úmero

finito de instantes en el tiempo—. En el caso del sonido (figura 14.1), los niveles de

presi ón en el aire se miden un n úmero fijo de veces por segundo (frecuencia de mues-

treo), y se aproximan con n úmeros enteros (precisi ón). Por ejemplo, en un CD de

audio la frecuencia de muestreo es de 44.100Hz, y se emplea un n úmero entero de

16 bits para representar el nivel de se ˜nal en cada canal, lo cual permite representar

65.536 niveles distintos. Eso nos deja un total de 176.400 bytes por cada segundo de

sonido.

Cuando se trata de representar imágenes (figura 14.2), éstas se subdividen en una

matriz de m × n puntos —p´ıxeles—, y para cada uno de ellos se almacena un valor

entero, que representará el nivel de gris si es una imagen monocromática, o un vector

de tres valores si es una imagen en color, que representará usualmente los niveles de

rojo (R), verde (G) y azul (B) del p´ıxel en cuesti ón. En el caso de un v´ıdeo, a ˜nadir´ıamos

una tercera dimensi ón, correspondiente al tiempo.

En general, un archivo multimedia acaba convirtiéndose en una secuencia de

n úmeros que viene a representar una imagen estática o en movimiento, un sonido,

o una combinaci ón de todo lo anterior. Como el lector ya habrá advertido, almace-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

210

14. Esteganograf´ıa

Figura 14.1: Proceso de muestreo de una se ˜nal de audio.

nar directamente los valores recogidos en el proceso de digitalizaci ón dará lugar a

ficheros extremadamente grandes. Por ejemplo, una hora de sonido con calidad CD

ocupa unos 600 MB, mientras que una imagen en color de 2000 × 2000 p´ıxeles tiene

un tama ˜no aproximado de 12MB. Por esta raz ón la inmensa mayor´ıa de los formatos

de almacenamiento de imagen y sonido emplean técnicas de compresi ón, que a su

vez pueden dividirse en dos tipos:

Sin pérdida. El algoritmo de compresi ón permite recuperar exactamente los mis-

mos datos que fueron obtenidos para cada una de las muestras durante en el

proceso de digitalizaci ón. Estas técnicas trabajan eliminando la redundancia de

la cadena de bits correspondiente (ver secci ón 3.6), de forma que al descompri-

mirla obtenemos una copia idéntica a la original.

Con pérdida. El algoritmo no permite recuperar con exactitud los valores de cada

muestra, y por lo tanto da lugar a una imagen o sonido distintos del original,

aunque para el ojo u o´ıdo humanos la diferencia es apenas perceptible. Estas

técnicas permiten obtener grados de compresi ón mucho mayores que las ante-

riores, e incluso establecer un nivel de compromiso entre el tama ˜no del archivo

resultante y el grado de degradaci ón de la imagen o sonido originales.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

14.1. Métodos Esteganográficos

211

Figura 14.2: Proceso de muestreo de una imagen monocromática. En el caso de una

imagen RGB, en cada p´ıxel se recoger´ıan tres valores: el nivel de rojo (R), el nivel de

verde (G), y el nivel de azul (B).

Archivos multimedia sin pérdida

En este caso, después del proceso de digitalizaci ón se aplica un algoritmo de

compresi ón, que da lugar al fichero de imagen o sonido. Este fichero será nuestro

mensaje anfitri ón. Cuando se desee representar el contenido del archivo, se usará un

algoritmo de descompresi ón, que permitirá recuperar exactamente los valores ori-

ginales obtenidos durante el proceso de muestreo de la se ˜nal correspondiente, y se

enviará el resultado al dispositivo que corresponda. A la hora de camuflar nuestro

mensaje huésped, actuaremos directamente sobre los valores de muestreo, antes del

proceso de compresi ón, ya que éstos son únicamente una secuencia de datos numéri-

cos. Obsérvese que todo lo que digamos en este apartado será también válido para

archivos multimedia sin comprimir.

En el caso de un archivo de sonido, una técnica bastante efectiva consiste en ma-

nipular los bits menos significativos de cada muestra, sustituyéndolos por los bits

de nuestro mensaje huésped. Eso introducirá una distorsi ón en el sonido resultante

prácticamente imperceptible para el o´ıdo humano. Por ejemplo, si usamos los dos

bits menos significativos de cada muestra en un archivo con calidad CD, podr´ıamos

llegar a introducir unos 75 MB de datos por cada de sonido, con una distorsi ón en la

se ˜nal manipulada inferior al 0.01 %.

En lo que respecta a los archivos de imagen podemos actuar de la misma forma,

si bien en este caso existen técnicas que, explotando la organizaci ón espacial de los

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

212

14. Esteganograf´ıa

p´ıxeles de la imagen, permiten detectar zonas en las que la distorsi ón provocada

por el mensaje huésped resulta menos perceptible para el ojo humano, con lo que se

consigue ocultar mayor cantidad de informaci ón de forma satisfactoria en una misma

imagen.

Archivos multimedia con pérdida

Los formatos de almacenamiento de imagen y sonido con pérdida dan lugar a

secuencias de valores numéricos distintas de las obtenidas en el proceso de digitali-

zaci ón, por lo que si manipulamos directamente los bits de la secuencia, el proceso

de compresi ón destruirá la informaci ón que hayamos ocultado. Describiremos bre-

vemente el funcionamiento básico de estos algoritmos de compresi ón, para poder

entender c ómo deben tratarse si queremos usarlos a modo de huésped.

Las llamadas transformadas son herramientas matemáticas que permiten represen-

tar cualquier funci ón —continua o discreta— a través de una serie de coeficientes. En

general, necesitaremos un n úmero infinito de coeficientes en el caso continuo, y tan-

tos coeficientes como valores en el caso discreto, para poder representar de manera

absolutamente precisa la se ˜nal. La ventaja que tiene trabajar con transformadas es

que la mayor parte de la informaci ón suele estar concentrada en un n úmero relativa-

mente peque ˜no de coeficientes, por lo que podemos obtener buenas aproximaciones

de la se ˜nal original a partir de un subconjunto de la totalidad de sus coeficientes, que

serán más o menos precisas en funci ón del n úmero de coeficientes que conservemos.

Los formatos de compresi ón de archivos multimedia más comunes emplean dis-

tintos tipos de transformada, como la Transformada de Fourier, o la Transformada

Discreta del Coseno. En el caso de los archivos JPEG, la imagen se divide en regiones

de 8×8 p´ıxeles de tama ˜no, y en el de los archivos MP3 en marcos de un n úmero deter-

minado de muestras, asociados a un intervalo determinado de tiempo. A cada trozo

se le aplica una transformada, y los coeficientes resultantes se truncan —cuantizan—,

siguiendo unas pautas perceptuales2. Finalmente se aplica un algoritmo de compre-

si ón sin pérdida al resultado, y se obtiene el fichero final.

Si queremos ocultar un mensaje dentro de uno de estos archivos, habrá que ma-

nipular directamente los coeficientes cuantizados, e introducir en ellos los bits del

mensaje. Como es l ógico, ya que los bits que se preservan en los coeficientes son los

que mayor cantidad de informaci ón transportan, también serán más sensibles a al-

teraciones, por lo que podremos ocultar muchos menos bits del mensaje huésped si

2Está demostrado que los sentidos del ser humano son más sensibles a determinadas caracter´ısti-

cas, por lo que a la hora de truncar los coeficientes, se les da prioridad a los que mejor percibimos,

para que las distorsiones sean poco perceptibles.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

14.2. Detecci ón de mensajes esteganografiados

213

queremos mantener un nivel de distorsi ón en el resultado final que sea realmente

imperceptible.

Una segunda aproximaci ón para ocultar informaci ón en archivos multimedia con-

siste en manipular la imagen o el sonido originales, antes de pasar por el algoritmo de

compresi ón, introduciendo modificaciones sutiles que puedan sobrevivir a diversos

tipos de transformaciones, como recortes, escalados, rotaciones, diferentes compre-

siones y recompresiones con pérdida, etc. Estas técnicas resultan más complejas y se

suelen basar en superponer a la se ˜nal original alguna funci ón global cuyo espectro3

esté en frecuencias muy bajas, tal que el ser humano no la perciba y las degradacio-

nes surgidas del proceso de compresi ón no la destruyan. Usualmente, las técnicas de

marcas de agua (watermarking) sobre contenidos multimedia digitales se basan en estos

principios.

14.2.

Detecci ón de mensajes esteganografiados

Hasta ahora hemos comentado una serie de métodos más o menos sutiles para

ocultar informaci ón en diferentes tipos de archivo, pero la cuesti ón realmente impor-

tante es la siguiente: ¿es posible detectar si un mensaje cualquiera alberga informa-

ci ón esteganografiada? Esta pregunta resulta crucial, ya que a la postre el objetivo de

las técnicas esteganográficas es impedir –o al menos dificultar– esa detecci ón.

Para decidir si un mensaje cualquiera es en realidad el anfitri ón de otro, tendre-

mos que ponernos en el lugar de quien lo gener ó, y seleccionar en él los bits que

consideremos más adecuados para ocultar informaci ón. Una vez aislados, habrá que

realizar un estudio acerca de su distribuci ón estad´ıstica t´ıpica en un mensaje nor-

mal, y comparar los resultados con los valores extra´ıdos del archivo sospechoso. Po-

dremos considerar que hemos encontrado un indicio de la presencia de un mensaje

oculto si los resultados obtenidos difieren de los que presenta un mensaje limpio. Esto

nos obliga a conocer, al menos a grandes rasgos, qué métodos esteganográficos ha

podido usar nuestro adversario, y a dise ˜nar pruebas espec´ıficas para detectar cada

uno de ellos.

Evidentemente, la recuperaci ón completa del mensaje huésped es una prueba irre-

futable de que éste existe, que siempre puede llegar a conseguirse. No obstante, si el

mensaje huésped se encuentra cifrado, podemos considerar esa posibilidad fuera del

alcance de quien analiza el mensaje anfitri ón. En ese caso, la prueba de la presencia de

un mensaje oculto dentro de otro tendrá que basarse en las propiedades estad´ısticas

de la informaci ón analizada. En general, se puede conseguir que resulte imposible,

3El espectro de una se ˜nal es el rango de los coeficientes no nulos de su transformada.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

214

14. Esteganograf´ıa

desde un punto de vista matemático, demostrar que un mensaje alberga informaci ón

esteganografiada. Para ello han de seguirse las siguientes pautas:

1. Analizar estad´ısticamente los bits del mensaje anfitri ón que van a ser alterados

durante el proceso de esteganografiado.

2. Cifrar el mensaje huésped antes de introducirlo en el anfitri ón.

3. Manipular el mensaje huésped, una vez cifrado, para que presente una distri-

buci ón estad´ıstica similar a la de los bits analizados previamente.

El caso ideal consistir´ıa en seleccionar un subconjunto de bits del mensaje an-

fitri ón que posea una distribuci ón estad´ısticamente aleatoria, y cuya alteraci ón no

resulte perceptible en el fichero resultante, para luego sustituirlos por una versi ón

comprimida y cifrada del mensaje huésped, que también deberá presentar una dis-

tribuci ón estad´ısticamente aleatoria.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 15

Pruebas de Conocimiento Cero

15.1.

Introducci ón

Cuando un agente A pretende convencer a otro B de que posee una cierta infor-

maci ón X, la estrategia más simple e intuitiva consiste en que A proporcione a B

el valor de X. Sin embargo, a partir de ese momento, B conocerá el secreto de A y

podrá contárselo a todo el mundo. O lo que es peor: un atacante C puede espiar la

comunicaci ón entre A y B y robar el secreto.

Si bien este problema puede ser resuelto a partir de criptograf´ıa asimétrica (cap´ıtu-

lo 12) o de funciones resumen (cap´ıtulo 13), como veremos en el cap´ıtulo 17, existe un mecanismo que, a través de un proceso interactivo, permite a A probar a B que

posee el secreto en cuesti ón, sin revelar ning ún tipo de informaci ón acerca de X en

el proceso. En general, estas técnicas, conocidas como Pruebas de Conocimiento Cero,

suelen tener modestos requerimientos computacionales en comparaci ón con otros

protocolos, de ah´ı su interés.

Una prueba de conocimiento cero se basa en la formulaci ón por parte de B de una

serie de preguntas. Si A conoce el valor de X, podrá responder correctamente a todas

ellas; en caso contrario, tendrá una probabilidad determinada de acertar la respuesta

en cada caso —usualmente del 50 %—. De esta forma, la probabilidad de que un

impostor logre superar una prueba de n preguntas es de 1/2n. Otra caracter´ıstica

importante es que ninguno de los mensajes que intercambian A y B a lo largo del

proceso aporta informaci ón a un eventual esp´ıa C sobre el valor de X. Finalmente,

es necesario recalcar que la secuencia de preguntas debe ser diferente y aleatoria en

cada caso, de forma que C no pueda memorizar la secuencia concreta de respuestas y

as´ı enga ˜nar a B.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

216

15. Pruebas de Conocimiento Cero

15.2.

Elementos

A la hora de describir el funcionamiento de una prueba de conocimiento cero, es

interesante definir los distintos elementos que la componen, con objeto de facilitar su

comprensi ón:

Un Secreto X, que puede ser una contrase ˜na, una clave privada, o cualquier otra

informaci ón cuya posesi ón se quiera demostrar.

Un Demostrador (al que llamaremos David a partir de ahora), que es quien pre-

tende demostrar que posee el secreto X.

Un Verificador (al que llamaremos V´ıctor), que es quien debe asegurarse de que

David está en posesi ón de X.

Un Problema —usualmente alg ún problema matemático computacionalmente

costoso— sobre el que basar cada una de las preguntas que se formularán a lo

largo del proceso.

Adicionalmente, habremos de tener en cuenta la posibilidad de que existan agen-

tes que escuchen los mensajes que intercambian V´ıctor y David, e incluso que los eli-

minen, los manipulen, o a ˜nadan mensajes falsos, para poder garantizar la efectividad

de estas pruebas.

15.3.

Desarrollo

Un ejemplo t´ıpico en la literatura para explicar las pruebas de conocimiento ce-

ro se basa en una variante circular de la cueva de Al´ı Babá (figura 15.1), tal que la

entrada se bifurca y las dos ramas resultantes quedan comunicadas por una puerta.

Supongamos que David conoce la contrase ˜na que abre la puerta, y quiere convencer

a V´ıctor de ello sin dec´ırsela. David se introducir´ıa por una de las ramas de la cue-

va sin que V´ıctor supiera cuál, seguidamente V´ıctor entrar´ıa y pedir´ıa a David que

saliera por una de las ramas, escogida de forma aleatoria. Si David conoce la contra-

se ˜na podrá abrir la puerta cuando lo necesite para salir por el lugar solicitado, pero

si la ignora s ólo podrá salir por el lugar correcto la mitad de las veces. Tras repetir un

n úmero razonable de veces este proceso, V´ıctor quedará convencido de que David

posee la contrase ˜na correcta, sin conocerla él mismo. Además, la observaci ón de todo

el proceso por parte de un tercero no servirá a nadie para poder hacerse pasar por

David.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

15.3. Desarrollo

217

Figura 15.1: La cueva de conocimiento cero.

Este ejemplo no es más que una analog´ıa para entender mejor una prueba de

conocimiento cero. De hecho, a David le hubiera bastado con entrar por una rama y

salir por la otra para convencer a V´ıctor. Veamos ahora el proceso desde un punto de

vista más completo y formal. David, para demostrar que se encuentra en posesi ón

del secreto X, construye un problema matemático M , computacionalmente dif´ıcil de

resolver, de forma que X constituya una soluci ón para M —n ótese que David parte

de la soluci ón para elaborar el problema—. Se produce entonces el siguiente diálogo:

1. David transforma M para construir un nuevo problema matemático M 0, cuya

soluci ón X0 se podrá calcular fácilmente a partir de X, y lo env´ıa a V´ıctor.

2. V´ıctor genera un bit aleatorio B y lo remite a David.

3. Si:

B = 0, David demuestra la relaci ón entre M y M 0, sin dar la soluci ón a M 0.

B = 1, David proporciona la soluci ón X0 del problema M 0, sin revelar la

relaci ón entre M y M 0.

Observando el protocolo con atenci ón, puede verse que la única forma de que

David pueda responder correctamente a ambas preguntas es que posea la soluci ón

X. David únicamente revela, o bien la relaci ón entre M y M 0, o bien el valor de X0, y

que cada una de estas cosas por separado resulta in útil para calcular X.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

218

15. Pruebas de Conocimiento Cero

15.4.

Modos de Operaci ón

Fundamentalmente, una prueba de conocimiento cero puede ser planteada de tres

formas diferentes:

Interactiva, de forma que David y V´ıctor generan e intercambian cada mensaje

en l´ınea, realizando los cálculos para el siguiente s ólo cuando han recibido el

anterior.

Paralela, en la que V´ıctor genera un paquete de preguntas, las env´ıa a David, y

éste las contesta todas a la vez.

Fuera de l´ınea, en la que David genera una serie de problemas M, usa una fun-

ci ón resumen (cap´ıtulo 13) aplicada sobre un mensaje concreto m concatenado

con M, emplea los bits del resultado como los diferentes valores de B, y a ˜nade

a (m, M) el conjunto S de soluciones correspondientes a los problemas. De esta

manera cualquiera podrá verificar que el único que pudo generar el mensaje

final (m, M, S) fue David, lo cual puede funcionar como firma digital de David

sobre el mensaje m (ver cap´ıtulo 17).

15.5.

Conocimiento Cero sobre Grafos

Existen muchos problemas matemáticos susceptibles de ser empleados como ba-

se para un protocolo de conocimiento cero. Uno de ellos es el del homomorfismo

de grafos1. Dados dos grafos con el mismo n úmero de nodos, averiguar si reorde-

nando los nodos del primero se puede obtener una copia exacta del segundo —son

homomorfos—, es un problema computacionalmente intratable. Para construir una

prueba de conocimiento cero basada en grafos, David partir´ıa de un grafo G1, y reor-

denando los nodos en funci ón del valor de X calcular´ıa G2. De esta forma, el secreto

X queda asociado a la correspondencia entre G1 y G2. El protocolo quedar´ıa como

sigue:

1. David reordena los nodos de G1, y obtiene un grafo H, que será homomorfo a

G1 y G2.

2. V´ıctor genera el bit aleatorio B.

3. David env´ıa a V´ıctor la correspondencia entre G1 y H si B = 1, o la correspon-

dencia entre G2 y H si B = 0.

1Un grafo es un conjunto de puntos o nodos conectados entre s´ı por arcos

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

15.6. Ataques de Intermediario

219

Obsérvese que para conocer la correspondencia entre G1 y G2 —o sea, el valor

del secreto X— son necesarias simultáneamente las correspondencias entre G1 y H,

y entre H y G2. Puesto que David únicamente revela una de las dos, el protocolo

funciona correctamente.

15.6.

Ataques de Intermediario

Al igual que cualquier otra técnica, las pruebas de conocimiento cero también

presentan puntos débiles, que deben ser conocidos para su correcta utilizaci ón. En

este caso la mayor´ıa de los ataques pueden producirse a través de intermediario.

Supongamos que Andrés quiere suplantar a David frente a V´ıctor. Para conseguir

su objetivo actuar´ıa de la siguiente forma:

1. Andrés, haciéndose pasar por David, solicita a V´ıctor realizar la prueba de co-

nocimiento cero.

2. Andrés, haciéndose pasar por V´ıctor, informa a David de que debe realizar la

prueba.

3. David genera el problema correspondiente, Andrés lo recoge y lo env´ıa a V´ıctor

como si lo hubiera generado él.

4. V´ıctor genera el bit aleatorio B, lo env´ıa Andrés, y Andrés se lo pasa a David.

5. David responde, y Andrés reenv´ıa la respuesta a V´ıctor.

6. El proceso se repite tantas veces como requiera V´ıctor.

Como resultado tenemos que Andrés ha logrado convencer a V´ıctor de que posee

el mismo secreto que David, —aunque no lo conce, ni ha ganado informaci ón sobre

él—. Este ataque resulta indetectable, y puede dar lugar a importantes brechas de

seguridad, especialmente cuando la prueba de conocimiento cero se usa para com-

probar la identidad de alguien.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

220

15. Pruebas de Conocimiento Cero

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte IV

Aplicaciones Criptográficas

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 16

Protocolos de Comunicaci ón Segura

16.1.

Introducci ón

Quizás la aplicaci ón más antigua de la Criptograf´ıa sea precisamente la de estable-

cer canales de comunicaciones seguros entre dos puntos. Desde un soldado galopan-

do a través de territorio enemigo hasta un haz láser, pasando por un hilo telegráfico,

el ser humano ha empleado infinidad de medios para poder enviar sus mensajes,

cada uno de ellos con sus propias peculiaridades. Pero si hay una caracter´ıstica que

podemos considerar com ún a todos los canales de comunicaciones, es la ausencia de

control que sobre el mismo poseen ambos interlocutores. En el caso del jinete, ser´ıa

muy interesante poder crear un pasillo de territorio amigo a lo largo de todo su tra-

yecto, pero en ese caso su propia tarea carecer´ıa prácticamente de sentido. En general,

hemos de considerar que nuestros mensajes son depositados en un medio ajeno a no-

sotros —y usualmente hostil—, y que los medios que apliquemos para su protecci ón

deben ser válidos en los casos más desfavorables.

Un mensaje liberado en un medio hostil se enfrenta principalmente a dos peligros:

Acceso por agentes no autorizados. En un medio sobre el que no podemos ejer-

cer ning ún control, esta posibilidad debe tomarse muy en serio. Tanto que en

lugar de suponer que el enemigo puede acceder al mensaje, hemos de dar por

hecho que va a hacerlo. Por lo tanto, nuestros sistemas de protecci ón deben

centrarse en garantizar que el mensaje resulte ininteligible a nuestro atacante.

Alteraciones en el mensaje. Este problema puede llegar a ser mucho peor que el

anterior, ya que si recibimos un mensaje que ha sido modificado y lo damos por

bueno, las consecuencias para la comunicaci ón pueden ser catastr óficas. En este

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

224

16. Protocolos de Comunicaci ón Segura

sentido, las alteraciones pueden aplicarse tanto sobre el mensaje propiamente

dicho, como sobre la informaci ón acerca de su verdadera procedencia.

La Criptograf´ıa, como ya hemos visto en anteriores cap´ıtulos, proporciona meca-

nismos fiables para evitar los dos peligros que acabamos de mencionar. En general,

cada una de las aplicaciones concretas que necesiten de estas técnicas poseerá unas

caracter´ısticas espec´ıficas, por lo que en cada caso habrá una combinaci ón de algo-

ritmos criptográficos que permitirá proporcionar al sistema el nivel de seguridad ne-

cesario. Estas combinaciones de algoritmos se estructurarán finalmente en forma de

protocolos, para proporcionar métodos de comunicaci ón segura normalizados.

16.2.

Protocolos TCP/IP

El conjunto básico de protocolos sobre los que se construye la red Internet se cono-

ce popularmente como TCP/IP, agrupaci ón de los nombres de dos de los elementos

más importantes, que no los únicos, de la familia: TCP (Transmission Control Protocol)

e IP (Internet Protocol).

El modelo de comunicaciones sobre el que se basa Internet se estructura en for-

ma de capas apiladas, de manera que cada una de ellas se comunica con las capas

inmediatamente superior e inferior, logrando diversos niveles de abstracci ón, que

permiten intercambiar informaci ón de forma transparente entre ordenadores. La con-

secuencia más importante de este enfoque es que dos dispositivos cualesquiera, que

pueden estar conectados a Internet por medios totalmente distintos —fibra óptica, ca-

ble de cobre, láser, ondas electromagnéticas...—, y separados por multitud de enlaces

diferentes —satélite, cables submarinos, redes inalámbricas...—, pueden conectarse

entre ellos simplemente con que dispongan de una implementaci ón de TCP/IP.

A diferencia del modelo OSI, que consta de siete capas, denominadas aplicación,

presentación, sesión, transporte, red, enlace y f´ısica, los protocolos TCP/IP se organizan

únicamente en cinco (figura 16.1). Aunque la correspondencia no es exacta, podemos

decir que, básicamente, los tres niveles superiores del modelo OSI se agrupan en el

nivel de aplicaci ón de TCP/IP. Comentaremos brevemente cada uno de ellos:

Capa F´ısica. Describe las caracter´ısticas f´ısicas de la comunicaci ón, como son el

medio empleado, los voltajes necesarios, la modulaci ón empleada, etc.

Capa de Enlace. Indica c ómo los paquetes de informaci ón viajan a través del me-

dio f´ısico, indicando qué campos de bits se a ˜naden a éstos para que puedan ser

reconocidos satisfactoriamente en destino. Ejemplos de protocolos de enlace:

Ethernet, 802.11 WiFi, Token Ring, etc.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

16.2. Protocolos TCP/IP

225

Figura 16.1: Esquema del conjunto de protocolos TCP/IP, en los que se basa la red

Internet.

Capa de Red. En ella se ubica el protocolo IP, cuyo prop ósito consiste en hacer

llegar los paquetes a su destino a través de una única red. Existen algunos pro-

tocolos de mayor nivel, como ICMP o IGMP, que aunque se construyen sobre IP,

también pertenecen a la capa de red, a diferencia de lo que ocurre en el modelo

OSI.

Capa de Transporte. Su prop ósito es garantizar que los paquetes han llegado a

su destino, y en el orden correcto. El protocolo más importante en este nivel es

TCP, pero existen otros como UDP, DCCP o RTP.

Capa de Aplicación. Esta es la capa a la que acceden de forma directa la mayor´ıa

de las aplicaciones que usan Internet. En ella se reciben los datos, que son pa-

sados a las capas inferiores para que sean enviados a su destino. A este nivel

pertenecen prococolos tales como HTTP, FTP, SSH, HTTPS, IMAP, DNS, SMTP,

IRC, etc.

En la práctica, podemos encontrar protocolos encaminados a obtener comunica-

ciones seguras en prácticamente todos los niveles de este esquema. En las pr óximas

secciones comentaremos brevemente algunos de ellos.

Los distintos protocolos de comunicaci ón segura pueden ser utilizados para cons-

truir las denominadas redes privadas virtuales. Una red privada virtual, en inglés

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

226

16. Protocolos de Comunicaci ón Segura

VPN (Virtual Private Network) es una red de comunicaciones privada construida so-

bre una red p ública. Hacia los usuarios se comporta como si de una red interna se

tratase, ofreciendo acceso únicamente a aquellos que estén autorizados, y resultan-

do inaccesible para los demás, cuando en realidad todas las conexiones se realizan a

través de Internet.

16.3.

Protocolo SSL

El protocolo SSL (Secure Sockets Layer), desarrollado originalmente por la empresa

Netscape, permite establecer conexiones seguras a través de Internet, de forma sen-

cilla y transparente. Se sit úa en la capa de aplicaci ón (figura 16.1), directamente sobre

el protocolo TCP, y aunque puede proporcionar seguridad a cualquier aplicaci ón que

corra sobre TCP, se usa principalmente para proporcionar seguridad a los protocolos

HTTP (web), SMTP (email) y NNTP (news), dando lugar en el primero de los casos

a los servidores web seguros, cuya URL comienza por el prefijo https://. Su fun-

damento consiste en interponer una fase de codificaci ón de los mensajes antes de

enviarlos a través de la red. Una vez que se ha establecido la comunicaci ón, cuando

una aplicaci ón quiere enviar informaci ón a otra computadora, la capa SSL la recoge

y la codifica, para luego enviarla a su destino a través de la red. Análogamente, el

m ódulo SSL del otro ordenador se encarga de decodificar los mensajes y se los pasa

como texto claro a la aplicaci ón destinataria.

SSL también incorpora un mecanismo de autentificaci ón que permite garantizar

la identidad de los interlocutores. T´ıpicamente, ya que este protocolo se dise ˜n ó origi-

nalmente para establecer comunicaciones web, el único que suele autentificarse es el

servidor, aunque también puede realizarse una autentificaci ón mutua.

Una comunicaci ón a través de SSL implica tres fases fundamentalmente:

Establecimiento de la conexi ón y negociaci ón de los algoritmos criptográficos

que van a usarse en la comunicaci ón, a partir del conjunto de algoritmos sopor-

tados por cada uno de los interlocutores.

Intercambio de claves, empleando alg ún mecanismo de clave p ública (ver sec-

ci ón 12.4.1), y autentificaci ón de los interlocutores a partir de sus certificados

digitales (ver cap´ıtulo 17).

Cifrado simétrico del tráfico.

Una de las ventajas de emplear un protocolo de comunicaciones en lugar de un

algoritmo o algoritmos concretos, es que ninguna de las fases del protocolo queda

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

16.4. Protocolo TLS

227

atada a ning ún algoritmo, por lo que si en el futuro aparecen algoritmos mejores, o

alguno de los que se emplean en un momento dado quedara comprometido, el cam-

bio se puede hacer sin modificar el protocolo. En la actualidad, las implementaciones

t´ıpicas de SSL soportan algoritmos como RSA, Diffie-Hellman o DSA para la parte

asimétrica (cap´ıtulo 12); RC2, RC4, IDEA, DES, TripleDES o AES para la simétrica

(cap´ıtulos 10 y 11), y como funciones resumen (cap´ıtulo 13) SHA-1 o MD5.

Las ventajas de SSL son evidentes, ya que liberan a las aplicaciones de llevar a

cabo las operaciones criptográficas antes de enviar la informaci ón, y su transparencia

permite usarlo de manera inmediata sin modificar apenas los programas ya existen-

tes. Desde hace tiempo los principales navegadores de Internet incorporan un m ódu-

lo SSL, que se activa de forma automática cuando es necesario. Hasta diciembre de

1999, debido a las restricciones de exportaci ón de material criptográfico existentes en

los EE.UU., la mayor´ıa de los navegadores incorporaban un nivel de seguridad bas-

tante pobre (claves simétricas de 40 bits), por lo que conviene comprobar qué nivel

de seguridad se está empleando cada vez que hagamos una conexi ón.

Existen implementaciones de SSL que permiten construir los denominados t úne-

les SSL, que permiten dirigir cualquier conexi ón a un puerto TCP a través de una

conexi ón SSL previa, de forma transparente para las aplicaciones que se conectan.

16.4.

Protocolo TLS

TLS (descrito en el documento RFC 2246) es un protocolo basado en la versi ón

3.0 de SSL, si bien con una serie de mejoras que lo hacen incompatible con este últi-

mo. Una de las ventajas que proporciona sobre SSL es que puede ser iniciado a partir

de una conexi ón TCP ya existente, lo cual permite seguir trabajando con los mismos

puertos que los protocolos no cifrados. Mientras que SSL es un protocolo incompati-

ble con TCP, lo cual significa que no podemos establecer una conexi ón de un cliente

TCP a un sevidor SSL ni al revés, y por tanto es necesario diferenciarlos utilizando

distintos n úmeros de puerto (80 para un servidor web normal y 443 para un servidor

web sobre SSL), con TLS puede establecerse la conexi ón normalmente a través de TCP

y el puerto 80, y luego activar sobre el mismo el protocolo TLS.

En este protocolo se emplea una serie de medidas de seguridad adicionales, enca-

minadas a protegerlo de distintos tipos de ataque, en especial de los de intermediario

(secci ón 12.2):

Uso de funciones MAC en lugar de funciones MDC únicamente (ver cap´ıtulo

13).

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

228

16. Protocolos de Comunicaci ón Segura

Numeraci ón secuencial de todos los campos que componen la comunicaci ón, e

incorporaci ón de esta informaci ón al cálculo de los MAC.

Protecci ón frente a ataques que intentan forzar el empleo de versiones antiguas

—menos seguras— del protocolo o cifrados más débiles.

El mensaje que finaliza la fase de establecimiento de la conexi ón incorpora una

signatura (hash) de todos los datos intercambiados por ambos interlocutores.

Si bien el método usado con más frecuencia para establecer conexiones seguras a

través de Internet sigue siendo SSL, cabe esperar que con el tiempo sea paulatinamen-

te reemplazado por TLS, y que este último se convierta en el estándar de seguridad

para las comunicaciones cifradas en Internet.

16.5.

Protocolos IPsec

IPsec es un estándar que proporciona cifrado y autentificaci ón a los paquetes IP,

trabajando en la capa de red (figura 16.1). En lugar de tratarse de un único protocolo,

IPsec es en realidad un conjunto de protocolos, definidos en diversos RFCs (princi-

palmente en el 2401), encaminados a proporcionar autentificaci ón, confidencialidad

e integridad a las comunicaciones IP. Su carácter obligatorio dentro del estándar IPv6

—recordemos que en IPv4, la versi ón más empleada en la actualidad de este proto-

colo, es opcional— hará con seguridad que la popularidad de IPsec crezca al mismo

ritmo que la implantaci ón de la nueva versi ón del protocolo IP.

IPsec puede ser utilizado para proteger una o más rutas entre un par de orde-

nadores, un par de pasarelas de seguridad —ordenadores que hacen de intermediarios

entre otros, y que implementan los protocolos IPsec— o una pasarela y un ordenador.

En funci ón del tipo de ruta que se proteja, se distinguen dos modos de operaci ón:

Modo t únel: Se realiza entre dos pasarelas de seguridad, de forma que éstas se

encargan de crear una ruta segura entre dos ordenadores conectados a ellas, a

través de la cual viajan los paquetes. De este modo se puede disponer dentro

de una red local de un ordenador que desempe ˜ne las labores de pasarela, al

que las computadoras de la propia red env´ıen los paquetes, para que éste les

aplique los protocolos IPsec antes de remitirlos al destinatario —o a su pasare-

la de seguridad asociada—. Este modo permite interconectar de forma segura

ordenadores que no incorporen IPsec, con la única condici ón de que existan

pasarelas de seguridad en las redes locales de cada uno de ellos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

16.5. Protocolos IPsec

229

Modo transporte: En este caso los cálculos criptográficos relativos a los protocolos

IPsec se realizan en cada extremo de la comunicaci ón.

Básicamente, IPsec se compone a su vez de dos protocolos, cada uno de los cuales

a ˜nade una serie de campos, o modifica los ya existentes, a los paquetes IP:

Cabecera de autentificaci ón IP, abreviado como AH (IP Authenticacion Header),

dise ˜nado para proporcionar integridad, autentificaci ón del origen de los paque-

tes, y un mecanismo opcional para evitar ataques por repetici ón de paquetes.

Protocolo de encapsulamiento de carga de seguridad, o ESP (Encapsulating Se-

curity Payload) que, además de proveer integridad, autentificaci ón y protecci ón

contra repeticiones, permite cifrar el contenido de los paquetes.

Debido a que algunos de los servicios que IPsec proporciona necesitan de la dis-

tribuci ón e intercambio de las claves necesarias para cifrar, autentificar y verificar la

integridad de los paquetes, es necesario que éste trabaje en consonancia con un con-

junto externo de mecanismos que permita llevar a cabo esta tarea, tales como IKE,

SKIP o Kerberos.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

230

16. Protocolos de Comunicaci ón Segura

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 17

Autentificaci ón, Certificados y Firmas

Digitales

17.1.

Introducci ón

Cuando se establece una comunicaci ón de cualquier tipo es necesario poder ase-

gurar que los mensajes no han sufrido alteraciones, es decir, que la informaci ón reci-

bida coincide exactamente con la enviada. En muchos casos, existe el requerimiento

adicional de conocer la identidad de nuestro interlocutor —sea éste una persona o

alg ún tipo de dispositivo—, para evitar que sea suplantado por un impostor. Deno-

minaremos en general autentificación (o autenticaci ón) a las operaciones consistentes

en verificar tanto la identidad de nuestro interlocutor como la integridad de los men-

sajes que de él recibimos.

Independientemente de que la operaci ón de autentificaci ón se lleve a cabo sobre

el contenido de una comunicaci ón o sobre los propios interlocutores, ésta puede rea-

lizarse en el mismo momento, de forma interactiva —como cuando se introduce una

contrase ˜na para acceder a un sistema—, o dejarse pospuesta para ser realizada pos-

teriormente fuera de l´ınea —como cuando se firma digitalmente un mensaje, en cuyo

caso la firma puede ser verificada tantas veces como se desee, una vez finalizada la

comunicaci ón—.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

232

17. Autentificaci ón, Certificados y Firmas Digitales

17.2.

Firmas Digitales

Una firma digital es una secuencia de bits que se a ˜nade a una pieza de informa-

ci ón cualquiera, y que permite garantizar su autenticidad de forma independiente

del proceso de transmisi ón, tantas veces como se desee. Presenta una analog´ıa direc-

ta con la firma manuscrita, y para que sea equiparable a esta última debe cumplir las

siguientes propiedades:

Va ligada indisolublemente al mensaje. Una firma digital válida para un docu-

mento no puede ser válida para otro distinto.

S ólo puede ser generada por su leg´ıtimo titular. Al igual que cada persona tie-

ne una forma diferente de escribir, y que la escritura de dos personas diferentes

puede ser distinguida mediante análisis caligráficos, una firma digital s ólo pue-

de ser construida por la persona o personas a quienes legalmente corresponde.

Es p úblicamente verificable. Cualquiera puede comprobar su autenticidad en

cualquier momento, de forma sencilla.

La forma más extendida de calcular firmas digitales consiste en emplear una com-

binaci ón de cifrado asimétrico (cap´ıtulo 12) y funciones resumen (cap´ıtulo 13). El esquema de funcionamiento queda ilustrado en la figura 17.1.

17.3.

Certificados Digitales

Un certificado digital es esencialmente una clave p ública y un identificador, fir-

mados digitalmente por una autoridad de certificación, y su utilidad es demostrar que

una clave p ública pertenece a un usuario concreto. Evidentemente, la citada autori-

dad de certificaci ón debe encargarse de verificar previamente que la clave p ública es

auténtica. En Espa ˜na, por ejemplo, la Fábrica Nacional de Moneda y Timbre act úa como

autoridad certificadora, firmando las claves p úblicas de los ciudadanos y generando

los certificados digitales correspondientes. Cualquier entidad que disponga de la cla-

ve p ública de la FNMT estará en condiciones de verificar sus certificados digitales,

otorgando la confianza correspondiente a las claves p úblicas asociadas a los mismos.

17.3.1.

Certificados X.509

El formato de certificados X.509 (Recomendaci ón X.509 de CCITT:“The Directory -

Autentication Framework”. 1988) es uno de los más comunes y extendidos en la actua-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

17.3. Certificados Digitales

233

Clave Privada

Mensaje

MDC

Mensaje

MDC

=?

Cifrado

Asimétrico

Descifrado

Firma

Firma

Asimétrico

Digital

Digital

Clave Pública

A

B

Figura 17.1: Esquema de una firma digital basada en funciones resumen y algoritmos

de cifrado asimétricos. A: generaci ón de la firma; B: verificaci ón.

lidad.

El estándar X.509 s ólo define la sintaxis de los certificados, por lo que no está atado

a ning ún algoritmo en particular, y contempla los siguientes campos:

Versi ón.

N úmero de serie.

Identificador del algoritmo empleado para la firma digital.

Nombre del certificador.

Periodo de validez.

Nombre del sujeto.

Clave p ública del sujeto.

Identificador único del certificador.

Identificador único del sujeto.

Extensiones.

Firma digital de todo lo anterior generada por el certificador.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

234

17. Autentificaci ón, Certificados y Firmas Digitales

17.3.2.

Certificados de Revocaci ón

Cuando una clave p ública pierde su validez —por destrucci ón o robo de la clave

privada correspondiente, por ejemplo—, es necesario anularla. Para ello se emplean

los denominados certificados de revocación que no son más que un mensaje que identifi-

ca a la clave p ública que se desea anular, firmada por la clave privada correspondien-

te. De esta forma se garantiza que una clave p ública únicamente puede ser revocada

por su leg´ıtimo propietario —si la clave privada resulta comprometida, al atacante

no le interesará revocarla, ya que entonces el material robado perder´ıa su valor—.

Como puede verse, para revocar una clave p ública es necesario estar en posesi ón de

la privada, por lo que si perdemos esta última, jamás podremos hacer la revocaci ón.

Para evitar estos problemas, conviene seguir una serie de pautas:

Generar los pares de claves con un per´ıodo limitado de validez. De esta forma,

si no podemos revocar una clave, expirará por s´ı misma.

Generar el certificado de revocaci ón junto con el propio par de claves, y alma-

cenarlo en lugar seguro.

Algunos protocolos permiten nombrar revocadores para nuestra clave p ública,

que podrán generar un certificado de revocaci ón empleando únicamente sus

propias claves privadas.

Si una clave ha sido anulada por alguna causa, las autoridades que la hubieran

certificado deben cancelar todos sus certificados asociados. Esto hace que todas las

autoridades dispongan de listas de revocación de certificados (CRL), que actualizan pe-

ri ódicamente, además de un servicio de consulta de las mismas. Dicho servicio suele

permitir tanto la consulta de la validez de un certificado concreto, como la descarga

total o parcial de la CRL correspondiente.

17.4.

Verificaci ón de Certificados Digitales

Una autoridad de certificaci ón suele tener un ámbito relativamente local, como

puede ser una empresa, un campus universitario o un pa´ıs entero. Si fuera necesario

verificar un certificado digital de un certificador ajeno, del cual desconocemos su fia-

bilidad, existe la posibilidad de que la clave p ública del propio certificador esté a su

vez firmada por otra entidad de la que s´ı nos fiemos, y de esta forma propagar nues-

tra confianza hacia la entidad certificadora en cuesti ón. Esta circunstancia puede ser

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

17.4. Verificaci ón de Certificados Digitales

235

Figura 17.2: Esquema jerárquico de certificaci ón. Si A quiere comprobar la identidad

de B, empleará la clave p ública de EC1 para verificar el certificado digital de EC3.

Una vez hecha esta comprobaci ón, podrá confiar en EC3 como certificador de la clave

p ública de B.

aprovechada de forma jerárquica —como en las PKI (Infraestructuras de Clave P úbli-

ca o, en inglés Public Key Infrastructure)— o distribuida —como hace PGP (cap´ıtulo

18)—.

17.4.1.

Infraestructuras Jerárquicas

En esta modalidad, las entidades certificadoras se organizan en forma de árbol

por niveles (ver figura 17.2), de tal manera que las entidades certificadoras de un

nivel poseen certificados digitales emitidos por autoridades de niveles superiores.

Podremos verificar satisfactoriamente un certificado digital cualquiera, siempre que

poseamos la clave p ública de un certificador de primer nivel —que son muy pocos e

internacionalmente reconocidos—.

Como es natural, las entidades certificadoras que generen certificados finales —

correspondientes a las hojas del árbol— tendrán la única responsabilidad de com-

probar de manera fehaciente que cada clave p ública pertenece a su propietario. Sin

embargo, aquellas entidades que certifiquen a otras entidades, deberán garantizar

además que estas últimas emplean mecanismos adecuados para comprobar las iden-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

236

17. Autentificaci ón, Certificados y Firmas Digitales

tidades de sus clientes. De lo contrario, alguien podr´ıa crear una autoridad de certi-

ficaci ón, obtener el correspondiente certificado digital de niveles superiores, y luego

emitir certificados falsos.

El esquema jerárquico es realmente simple y efectivo, pero presenta un problema

importante: si uno de los certificadores resulta comprometido, todos sus descendien-

tes en el árbol quedan invalidados. Esto obliga, por un lado, a que las autoridades

de certificaci ón sean lo más transparentes posible, y por otro a que se mantengan

siempre al d´ıa las listas de revocaci ón de certificados.

17.4.2.

Infraestructuras Distribuidas

Frente a la estructura jerárquica, se puede construir un esquema distribuido de

certificaci ón de claves, también conocido como anillo de confianza —ring of trust, en

inglés—, en el que todos los usuarios act úan como autoridades de certificaci ón. Este

sistema presenta la ventaja de ser muy resistente, ya que no depende de un peque ˜no

grupo de entidades certificadoras, pero tiene el inconveniente de ser considerable-

mente más complejo de manejar para los propios usuarios.

Puesto que no existen autoridades de certificaci ón centralizadas, cada usuario tie-

ne que responsabilizarse de lo siguiente:

Verificar la autenticidad de todas aquellas claves p úblicas que le sea posible.

Certificar aquellas claves sobre las que tenga absoluta certeza de que pertenecen

a sus propietarios.

Elegir en qué condiciones confiará en los certificados de otro usuario.

Seg ún el grado de confianza que presente un usuario, uno puede elegir creerse

todos sus certificados, no aceptar ninguno —piénsese en un usuario que certifica todo

lo que cae en sus manos, sin hacer ninguna comprobaci ón—, o aceptar aquellos que,

además, posean firmas de otros usuarios.

Como puede comprobarse, en este esquema la confianza en una entidad certifi-

cadora puede tomar muchos valores, frente a los dos —confiable y no confiable—

que puede tomar en un esquema jerárquico. Se establece, de hecho, una gradaci ón de

niveles de confianza que, como resultado, proporciona a su vez grados de confian-

za sobre las claves p úblicas que nos encontremos, variando desde desconfianza total

hasta confianza absoluta.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

17.5. Autentificaci ón Mediante Funciones Resumen

237

17.5.

Autentificaci ón Mediante Funciones Resumen

En muchos casos, la autentificaci ón se lleva a cabo a partir de una pieza de infor-

maci ón —clave o contrase ˜na— que posee el agente que pretende autentificarse. Des-

cribiremos en esta secci ón dos ejemplos de este tipo: la autentificaci ón de un usuario

mediante una contrase ˜na, y la de un dispositivo —tarjeta inteligente, por ejemplo—

que posee una clave secreta embebida.

17.5.1.

Autentificaci ón por Contrase ˜nas

Existe un caso muy especial de autentificaci ón, cuyo prop ósito es la identificaci ón

de una persona frente a un sistema informático, y que consiste en la introducci ón,

usualmente mediante un teclado, de una palabra o frase secreta —password o passph-

rase en inglés— que únicamente él conoce.

La primera opci ón que cabr´ıa emplear consiste simplemente en que el sistema in-

formático almacene las contrase ˜nas de cada usuario, y que cada vez que un usuario

pretenda acceder, se le pide la palabra clave y después se la compara con el valor

almacenado. El problema es que si alguien logra acceder a la base de datos de con-

trase ˜nas, podrá suplantar fácilmente a todos y cada uno de los usuarios del sistema.

Teniendo en cuenta que un sistema informático moderno suele permitir el acceso de

m últiples usuarios, con diversos niveles de privilegios sobre el mismo, e incluso en

muchos casos existe un usuario genérico invitado, podemos concluir que almacenar

las contrase ˜nas en claro representa un riesgo demasiado elevado. Afortunadamente,

el empleo de funciones resumen nos va a permitir validar las contrase ˜nas sin necesi-

dad de almacenarlas.

Si en lugar de las contrase ˜nas en claro, guardamos en nuestro sistema los valo-

res resultantes de aplicar alguna funci ón resumen (cap´ıtulo 13) sobre las mismas,

podremos verificar las contrase ˜nas introducidas por los usuarios simplemente calcu-

lando la signatura asociada a la clave introducida por el usuario y comparando con

lo que tengamos almacenado. Sin embargo, y debido a las propiedades de las fun-

ciones resumen, resultará extremadamente complejo para un atacante encontrar una

contrase ˜na a partir de una signatura dada. Este sistema, si bien es considerablemente

más seguro que el almacenamiento en claro de las contrase ˜nas, puede ser objeto de

un ataque relativamente sencillo:

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

238

17. Autentificaci ón, Certificados y Firmas Digitales

Ataque de diccionario

Un usuario malicioso puede construir una base de datos con millones de contra-

se ˜nas —un diccionario—, obtenidas a partir de palabras, nombres, fechas, combina-

ciones numéricas más o menos habituales, etc., y calcular la signatura de cada una de

ellas. Una vez obtenido el archivo que contiene las signaturas de las contrase ˜nas de

cada usuario, bastará con buscar en la base de datos el valor correcto. Este dicciona-

rio puede construirse de forma previa e independiente al sistema informático que se

pretenda atacar, y ser reutilizado tantas veces como se desee.

Para protegerse de los ataques de diccionario existen dos estrategias básicas:

Concatenar a cada contrase ˜na un trozo de informaci ón aleatorio —denominado

sal— antes de calcular su signatura, y almacenar en la base de datos tanto la

signatura como la sal. Esto obligar´ıa a un posible atacante a recalcular todo el

diccionario cada vez que quisiera averiguar una contrase ˜na, dificultando enor-

memente su tarea.

Escoger contrase ˜nas dif´ıciles de adivinar. Es fundamental, a la hora de seleccio-

nar las contrase ˜nas de los usuarios, que éstas sean lo suficientemente complejas

como para no aparecer en un diccionario. Para ello es conveniente emplear pro-

gramas espec´ıficos de generaci ón de contrase ˜nas, en lugar de confiar en nuestro

propio ingenio, ya que está demostrado que el ser humano es bastante prede-

cible. Otra medida bastante recomendable, y que ya incorporan bastantes siste-

mas informáticos, es incorporar rutinas de medici ón de la calidad de las contra-

se ˜nas e impedir a los usuarios seleccionar contrase ˜nas demasiado débiles.

Existe no obstante una serie de posibles problemas para un sistema basado en

contrase ˜nas, independientes de su implementaci ón desde el punto de vista l ógico,

que conviene tener en cuenta:

Si el acceso se lleva a cabo desde un terminal remoto, la contrase ˜na debe enviar-

se a través de un canal de comunicaciones, por lo que deber´ıa emplearse una

conexi ón previamente cifrada.

El empleo de un teclado para introducir la palabra secreta puede hacer el sis-

tema susceptible de escuchas. Existen estudios que demuestran que a través de

las radiaciones electromagnéticas de un teclado cualquiera, e incluso del sim-

ple sonido de cada tecla, es posible conocer lo que introduce el usuario en la

consola.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

17.5. Autentificaci ón Mediante Funciones Resumen

239

El modo más seguro de custodiar la contrase ˜na es la propia memoria, pero si

aquella es demasiado compleja, y especialmente si se cambia con frecuencia,

puede resultar dif´ıcil de recordar. En este sentido, hay opiniones para todos los

gustos: desde los que emplean reglas nemotécnicas, hasta aquellos que reco-

miendan tener anotada la contrase ˜na y custodiarla cuidadosamente.

Además de estar bien salvaguardadas, cabr´ıa seguir las siguientes directrices para

que nuestras palabras clave puedan considerarse seguras:

1. Deben permanecer a salvo de terceros. Una contrase ˜na jamás debe ser conocida

por un extra ˜no, lo cual desaconseja llevarla escrita en alg ún sitio, o bien obliga

a custodiar cuidadosamente el lugar donde esté anotada. Existen autores que

abogan por llevar las contrase ˜nas escritas en una tarjeta, y cuidar de ella como

de nuestro dinero o las llaves de nuestra casa.

2. No utilizar la misma clave en diferentes lugares, ya que si uno resulta comprome-

tido, el resto también caerá. Hay aplicaciones que, a partir de una contrase ˜na

maestra, permiten almacenar todas nuestras contrase ˜nas de uso diario, lo cual

facilitará sin duda nuestro d´ıa a d´ıa, permitiéndonos gestionar todas las pala-

bras clave que necesitemos.

3. Ser lo suficientemente complejas. Una buena contrase ˜na debe constar de al menos

ocho letras. Pensemos que si empleamos únicamente seis caracteres alfanuméri-

cos (n úmeros y letras), tenemos solo unos dos mil millones de posibilidades.

Teniendo en cuenta que hay programas para PC capaces de probar más de cua-

renta mil claves en un segundo, una clave de estas caracter´ısticas podr´ıa ser

descubierta en menos de quince horas.

4. Carecer de significado. Una contrase ˜na jamás debe significar nada, puesto que

entonces aumentará la probabilidad de que aparezca en alg ún diccionario. Evi-

temos los nombres propios, en especial aquellos que pertenezcan a lugares o

personajes de ficci ón.

5. Ser fáciles de recordar. Si pretendemos memorizar nuestras claves, carecerá de

sentido emplear contrase ˜nas dif´ıciles de recordar. Para esto podemos seguir re-

glas como que la palabra se pueda pronunciar en voz alta, o que responda a

alg ún acr ónimo más o menos complejo. En este punto no debemos olvidar que

hay que evitar a toda costa palabras que signifiquen algo.

6. Deben ser modificadas con frecuencia. Hemos de partir de la premisa de que toda

palabra clave será comprometida tarde o temprano, por lo que será muy re-

comendable que nuestras contrase ˜nas sean cambiadas peri ódicamente. La fre-

cuencia con la que se produzca el cambio dependerá de la complejidad de las

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

240

17. Autentificaci ón, Certificados y Firmas Digitales

claves y del nivel de seguridad que se desee alcanzar. Y lo más importante: ante

cualquier sospecha, cambiar todas las claves.

17.5.2.

Autentificaci ón por Desaf´ıo

Existen muchas aplicaciones en las que un dispositivo electr ónico —una tarjeta

inteligente, por ejemplo— necesita identificarse frente a un sistema informático. Esto

se puede hacer a través de una clave secreta almacenada en el dispositivo, en alguna

zona de memoria que no pueda ser le´ıda desde el exterior. Como es obvio, en ning ún

caso la clave puede ser enviada en claro en el proceso de autentificaci ón, porque si

no un atacante que intercepte la comunicaci ón podrá suplantar al dispositivo. Tam-

bién es necesario que cada proceso de autentificaci ón involucre mensajes totalmente

distintos, ya que si no el impostor podr´ıa memorizar las respuestas dadas por el dis-

positivo y replicarlas posteriormente. De hecho, debe construirse el protocolo de tal

forma que la informaci ón que pudiese escuchar un atacante resulte completamente

in útil.

Las funciones MAC permiten llevar a cabo de manera sencilla este tipo de autenti-

ficaciones, denominada autentificación por desaf´ıo, y se desarrolla de forma interactiva

entre el sistema anfitri ón y el dispositivo que se autentifica. Consiste en generar una

clave K, de la cual habrá una copia tanto en el servidor como en el dispositivo (figura

17.3). Cuando el dispositivo solicita ser identificado, el servidor genera un valor alea-

torio X y calcula su MAC empleando la clave K. Posteriormente env´ıa el valor de X,

que será distinto en cada realizaci ón del protocolo, al dispositivo, que realizará in-

ternamente los mismos cálculos y devolverá el resultado al servidor. Si la respuesta

recibida por el dispositivo coincide con el valor calculado en el servidor, el proceso

de autentificaci ón habrá tenido éxito.

Un ejemplo de este mecanismo lo tenemos en las tarjetas SIM que emplean los

teléfonos celulares GSM. Dichas tarjetas llevan implementado un algoritmo MAC,

denominado COMP128, que en principio era secreto, fue reconstruido por la comu-

nidad cypherpunk a partir de documentos filtrados e ingenier´ıa inversa, y roto en pocos

d´ıas por criptoanalistas de la Universidad de Berkeley.

Para que este tipo de protocolos funcione correctamente es necesario que el algo-

ritmo MAC sea lo suficientemente bueno, es decir, que a partir de una cantidad arbi-

traria de pares {X, M ACK(X)} resulte computacionalmente imposible recuperar el

valor de K. Este fue precisamente el problema de COMP128, ya que se descubri ó una

forma de recuperar K a partir de unos 100.000 pares {X, M ACK(X)}. El ataque con-

sist´ıa básicamente en suplantar al servidor y enviar 100.000 valores de X escogidos

cuidadosamente al dispositivo, que devolv´ıa sistemáticamente los valores de la fun-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

17.5. Autentificaci ón Mediante Funciones Resumen

241

Figura 17.3: Esquema de autentificaci ón por desaf´ıo.

ci ón MAC correspondiente para cada uno de ellos. Posteriormente se realizanban los

cálculos fuera de l´ınea, obteniéndose como resultado el valor de K, suficiente para

clonar la tarjeta SIM en cuesti ón.

También es necesario que los valores de X que se generen en cada realizaci ón

del algoritmo sean criptográficamente aleatorios, ya que en caso contrario un atacan-

te podr´ıa predecir el valor de X para la siguiente realizaci ón del protocolo, luego

suplantar´ıa al servidor usando ese valor, se pondr´ıa en contacto con el dispositivo

para que éste le devolviera el valor de M ACK(X). Con esta informaci ón en su poder,

podr´ıa solicitar al servidor ser autentificado, y lograr´ıa suplantar con éxito al dispo-

sitivo.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

242

17. Autentificaci ón, Certificados y Firmas Digitales

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 18

PGP

El nombre PGP responde a las siglas pretty good privacy (privacidad bastante bue-

na), y se trata de un proyecto iniciado a principios de los 90 por Phil Zimmermann.

La total ausencia por aquel entonces de herramientas sencillas, potentes y baratas que

acercaran la criptograf´ıa seria al usuario movi ó a su autor a desarrollar una aplicaci ón

que llenara este hueco.

Con el paso de los a ˜nos, PGP se ha convertido en uno de los mecanismos más

populares y fiables para mantener la seguridad y privacidad en las comunicaciones,

especialmente a través del correo electr ónico, tanto para peque ˜nos usuarios como

para grandes empresas.

Actualmente PGP se ha convertido en un estándar internacional (RFC 2440), lo

cual está dando lugar a la aparici ón de m últiples productos PGP, que permiten desde

cifrar correo electr ónico hasta codificar particiones enteras del disco duro (PGPDisk),

pasando por la codificaci ón automática y transparente de todo el tráfico TCP/IP

(PGPnet).

18.1.

Fundamentos e Historia de PGP

PGP trabaja con criptograf´ıa asimétrica, y por ello tal vez su punto más fuerte

sea precisamente la gran facilidad que ofrece al usuario a la hora de gestionar sus

claves p úblicas y privadas. Si uno emplea algoritmos asimétricos, debe poseer las

claves p úblicas de todos sus interlocutores, además de la clave privada propia. Con

PGP surge el concepto de anillo de claves (o llavero), que no es ni más ni menos que el

lugar que este programa proporciona para que el usuario guarde todas las claves que

posee. El anillo de claves es un único fichero en el que se pueden efectuar operaciones

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

244

18. PGP

de extracci ón e inserci ón de claves de manera sencilla, y que además proporciona un

mecanismo de identificaci ón y autentificaci ón de llaves completo y simple de utilizar.

Esta facilidad en la gesti ón de claves es una de las causas fundamentales que han

hecho a PGP tan popular.

La historia de PGP se remonta a comienzos de los a ˜nos 90. La primera versi ón

era completamente diferente a los PGP posteriores, además de ser incompatible con

éstos. La familia de versiones 2.x.x fue la que alcanz ó una mayor popularidad, y sigue

siendo utilizada por mucha gente en la actualidad. Los PGP 2.x.x emplean únicamen-

te los algoritmos IDEA, RSA y MD5.

En alg ún momento una versi ón de PGP atraves ó las fronteras de EE.UU. y na-

ci ó la primera versi ón internacional de PGP, denominada PGPi, lo que le supuso a

Phil Zimmermann una investigaci ón de más de tres a ˜nos por parte del FBI, ya que

supuestamente se hab´ıan violado las restrictivas leyes de exportaci ón de material

criptográfico que poseen los Estados Unidos. Para la versi ón 5 de PGP se subsan ó es-

te problema exportando una versi ón impresa del c ódigo fuente, que luego era recons-

truida y compilada en Europa (más informaci ón en http://www.pgpi.com).

Hasta principios de 2001 la pol´ıtica de distribuci ón de PGP consisti ó en permitir

su uso gratuito para usos no comerciales y en publicar el c ódigo fuente en su integri-

dad, con el objetivo de satisfacer a los desconfiados y a los curiosos. Sin embargo, con

el abandono de la empresa por parte de Zimmermann, en febrero de 2001, el c ódigo

fuente dej ó de publicarse. En la actualidad (finales de 2004), la empresa que gestiona

los productos PGP (PGP Corporation), ha vuelto a publicar el c ódigo fuente de los

mismos.

Paralelamente a la azarosa existencia empresarial de PGP, el proyecto GNU ha

estado desarrollando su propia aplicaci ón de c ódigo abierto compatible con el RFC

2440, denominada GnuPG, y que solo emplea algoritmos libres de patentes.

18.2.

Estructura de PGP

18.2.1.

Codificaci ón de Mensajes

Como el lector ya sabe, los algoritmos simétricos de cifrado son considerable-

mente más rápidos que los asimétricos. Por esta raz ón PGP cifra primero el mensaje

empleando un algoritmo simétrico (ver figura 18.1) con una clave generada aleato-

riamente (clave de sesión) y posteriormente codifica la clave haciendo uso de la llave

p ública del destinatario. Dicha clave es extra´ıda convenientemente del anillo de cla-

ves p úblicas a partir del identificador suministrado por el usuario, todo ello de forma

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

18.2. Estructura de PGP

245

transparente, por lo que únicamente debemos preocuparnos de indicar el mensaje a

codificar y la lista de identificadores de los destinatarios. N ótese que para que el

mensaje pueda ser le´ıdo por m últiples destinatarios basta con que se incluya en la

cabecera la clave de sesi ón codificada con cada una de las claves p úblicas correspon-

dientes.

Cuando se trata de decodificar el mensaje, PGP simplemente busca en la cabecera

las claves p úblicas con las que está codificado y nos pide una contrase ˜na. La con-

trase ˜na servirá para que PGP abra nuestro anillo de claves privadas y compruebe si

tenemos una clave que permita decodificar el mensaje. En caso afirmativo, PGP des-

cifrará el mensaje. N ótese que siempre que queramos hacer uso de una clave privada,

habremos de suministrar a PGP la contrase ˜na correspondiente, por lo que si el anillo

de claves privadas quedara comprometido, un atacante a ún tendr´ıa que averiguar

nuestra contrase ˜na para descifrar nuestros mensajes. No obstante, si nuestro archivo

de claves privadas cayera en malas manos, lo mejor será revocar todas las claves que

tuviera almacenadas y generar otras nuevas.

Como puede comprenderse, gran parte de la seguridad de PGP reside en la cali-

dad del generador aleatorio que se emplea para calcular las claves de sesi ón, puesto

que si alguien logra predecir la secuencia de claves que estamos usando, podrá des-

cifrar todos nuestros mensajes independientemente de los destinatarios a los que va-

yan dirigidos. Afortunadamente, PGP utiliza un método de generaci ón de n úmeros

pseudoaleatorios muy seguro —una secuencia aleatoria pura es imposible de con-

seguir, como se dijo en el cap´ıtulo 8—, y protege criptográficamente la semilla que

necesita1. No obstante, consideraremos sensible al fichero que contiene dicha semi-

lla —normalmente RANDSEED.BIN—, y por lo tanto habremos de evitar que quede

expuesto.

18.2.2.

Firma Digital

En lo que se refiere a la firma digital, las primeras versiones de PGP obtienen en

primer lugar la signatura MD5 (ver secci ón 13.4), que posteriormente se codifica em-

pleando la clave privada RSA correspondiente. Versiones más modernas implemen-

tan el algoritmo DSS, que emplea la funci ón resumen SHA-1 y el algoritmo asimétrico

DSA (secciones 12.4.4 y 13.5).

La firma digital o signatura puede ser a ˜nadida al fichero u obtenida en otro fichero

aparte. Esta opci ón es muy útil si queremos firmar un fichero ejecutable, por ejemplo.

1Algunas implementaciones de PGP emplean otras fuentes de aleatoriedad, como ocurre con

GnuPG, por lo que no necesitan almacenar una semilla aleatoria.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

246

18. PGP

Figura 18.1: Codificaci ón de un mensaje PGP

18.2.3.

Armaduras ASCII

Una de las funcionalidades más útiles de PGP consiste en la posibilidad de gene-

rar una armadura ASCII para cualquiera de sus salidas. Obviamente, todas las salidas

de PGP (mensajes codificados, claves p úblicas extra´ıdas de alg ún anillo, firmas digi-

tales, etc.) consisten en secuencias binarias, que pueden ser almacenadas en archivos.

Sin embargo, en la mayor´ıa de los casos puede interesarnos enviar la informaci ón

mediante correo electr ónico, o almacenarla en archivos de texto.

Recordemos que el c ódigo ASCII original emplea 7 bits para codificar cada letra, lo

cual quiere decir que los caracteres situados por encima del valor ASCII 127 no están

definidos, y de hecho diferentes computadoras y sistemas operativos los interpretan

de manera distinta. También hay que tener en cuenta que entre los 128 caracteres

ASCII se encuentran muchos que representan c ódigos de control, como el retorno de

carro, el fin de fichero, el tabulador, etc. La idea es elegir 64 caracteres imprimibles (que

no sean de control) dentro de esos 128. Con este conjunto de c ódigos ASCII podre-

mos representar exactamente 6 bits, por lo que una secuencia de tres bytes (24 bits)

podrá codificarse mediante cuatro de estos caracteres. Esta cadena de s´ımbolos resul-

tante se trocea colocando en cada l´ınea un n úmero razonable de s´ımbolos, por ejemplo

72. El resultado es una secuencia de caracteres que pueden ser tratados como texto

estándar, además de ser manipulados en cualquier editor. Existe la ventaja adicional

de que esta representaci ón es apropiada para ser enviada por correo electr ónico, ya

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

18.2. Estructura de PGP

247

que muchas pasarelas de correo no admiten caracteres por encima de 127, y además

truncan las l´ıneas demasiado largas, por lo que podr´ıan alterar los mensajes si viajaran

en otro formato.

Como ejemplo incluyo mi clave p ública PGP —firmada con la de Kript ópolis—

en formato ASCII:

-----BEGIN PGP PUBLIC KEY BLOCK-----

Version: GnuPG v1.4.9 (GNU/Linux)

mQGiBDRkk6kRBADKYHrNnFeXlggr14IVGy6FudLG2Cd1wb3yKOaNnodyjZa0a5oi

Ls9jDfDfEdq8K+W6QBLv06w7oVFPNMYsU+ufb0pa/bHWq6IrHxKkTVH4o4PUYTmH

W0jfGjoXEtAUZ0vp9wYR0Yqi7wXO3L/N5KuVNjLj7rXOT7rOmHsOjmY1cQCg//2w

OcyAnkaDCODFNif/VdowntcD/j5midszzU6M7BWmeDJoqEEGzSuxfmRSNyNZe6/6

5k8TFXIVpB0vnxwsZSh0POSlNgz1cmX6VbEmmUXoYsMRfq7iXHSAZ3DLB333yR2b

QUbkrH5WZF75G2vvTO7rKS5KtmROJ8E+vX/py6PGz1f3tBZJ94KwM787g6j43F4X

IYTAA/9L5GZzClHOGt01BtZkioH5YoHnDGHKC8mMXcykXA5KdJvl+9jGz3InUHiG

04StaMxMcDcWLzL5FVLz3LBzlOXGs7jikgH3BYBI3p7dIExfRADucDHyKL/CpIl5

zqHBI+5bxY3Tysu3UlA1UkQloJMsSInlkkjQhwihNYsj8Avr9LQmTWFudWVsIEx1

Y2VuYSBMb3BleiA8bWx1Y2VuYUB1amFlbi5lcz6IXwQTEQIAIAIXgAIZAQUCScPL

PAYLCQgHAwIEFQIIAwQWAgMBAh4BAAoJEEiyUWFpq1eE8i0AmPtKiqRykOhhSdd0

eErIiEsC0o8An3BGAqEiXHCIGkDjzWKtuG8kojKBtC1NYW51ZWwgTHVjZW5hIExv

cGV6IDxtYW5vbG8ubHVjZW5hQGdtYWlsLmNvbT6IYAQTEQIAIAIbAwIeAQIXgAUC

ScPLTAYLCQgHAwIEFQIIAwQWAgMBAAoJEEiyUWFpq1eEsBMAn1ERLe/GIh2XOGqU

v6G6sgLBvD+UAJ0YLBWgKf7fIVGXpDIS1tU9ZrmEz7QsTWFudWVsIEx1Y2VuYSBM

b3BleiA8bWx1Y2VuYUBhcG9sby51amFlbi5lcz6ISQQwEQIACQUCQnNG3AIdIAAK

CRBIslFhaatXhIuJAKCcWHs5Ss6J2FBTu/P9rp1lBGLNcQCgqOY1TAZ+Hsdl0FMj

fv1SfHBymYC0LU1hbnVlbCBMdWNlbmEgTG9wZXogPG1sdWNlbmFAa3JpcHRvcG9s

aXMuY29tPohJBDARAgAJBQJCc0bJAh0gAAoJEEiyUWFpq1eEaGkAn3MNGfcE0xnA

Nw+XObqX9rNaDyWpAKCEtCwFgtwvUJxJb1N3y1J+a40vSrkCDQQ0ZJRfEAgAw/iG

bTW9OaTyfV4RNZdg1HRDGEyasZdEPCM9ihPkfvQyK44nH13OseaikIYoyoA/BFiW

eTNcHvb/4KOuCK2GnO/p/6ohFcAOK5anEygGrhUUttUw8kYZ0rUBFIJnurtDcxwa

wugbPFv3qA+sn756q7XUxjnTtpou+lWyj6VkN/EvrZDf9E7ikPUqRuIsHzJ5PUwy

pWtXaKg2HfClKkZlYFqzdPDCssrXOfjZDx2q6GSek6Sgj5Ph3X4opoXIx6Cfmp4E

LYmvdmnDu4oe6A6l/XIQ8NNhj+GxdtOgTq8QKDRWl2f6M3pQgPnYzBHoDIqnr/ie

8jK4seDezRPtL1/TlQACAgf+JXw03Q1opLBAaO/WZlcs2SiEzqv+gCkFW9vk2bJb

SY4PQHwiLc0HwcPEDi7jIu9QxJfZcHkax8XgXkCvfFJFFmqgqarIOzXp/BgiYyma

6GVAmXcI6lI9ZSgzPvvaNFGe0/7R6Yroee7nJ/9RyxF89SI++5tZY+/bpLuKAbnX

9SA3PEnUWiHD2ah3cC3VXNrus3lsKA7MEh3q9xnoF/8Z7vwldrKUyLZdaDqSM7is

yI5Fe0PWn/mtW4+7/rjboaY7PGJCAqtn8cHDvByRYCZ8kLRlobQHzL8XN1fsdfBv

6WDNeS9IqBCXcPME7R21wytsi2WMDnYL7rQWU/CgLqFx2Ig/AwUYNGSUX0iyUWFp

q1eEEQL3JACfTfvh6A70A9N2SbnRBmktuRBp9NsAn2ZQbpg0eaeVRuzejA2QM7ld

rz53

=r7oL

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

248

18. PGP

-----END PGP PUBLIC KEY BLOCK-----

Como puede verse, los únicos s´ımbolos empleados son las letras may úsculas y

min úsculas, los n úmeros, y los signos ‘/’y ‘+’; el resto de s´ımbolos y caracteres de

control simplemente será ignorado. Cualquiera podr´ıa copiar esta clave p ública a

mano (¡!) o emplear una aplicaci ón OCR2 para introducirla en su anillo de claves

correspondiente, aunque es mejor descargarla a través de Internet.

18.2.4.

Gesti ón de Claves

PGP, como ya se ha dicho, almacena las claves en unas estructuras denominadas

anillos. Un anillo no es más que una colecci ón de claves, almacenadas en un fichero.

Cada usuario tendrá dos anillos, uno para las claves p úblicas (PUBRING.PKR) y otro

para las privadas (SECRING.SKR).

Cada una de las claves, además de la secuencia binaria correspondiente para el

algoritmo concreto donde se emplee, posee una serie de datos, como son el identifi-

cador del usuario que la emiti ó, la fecha de expiraci ón, la versi ón de PGP con que fue

generada, y la denominada huella digital (fingerprint). Este último campo es bastante

útil, pues se trata de una secuencia hexadecimal lo suficientemente larga como para

que sea única, y lo suficientemente corta como para que pueda ser escrita en un pa-

pel, o le´ıda de viva voz. La huella digital se emplea para asegurar la autenticidad de

una clave. Por ejemplo, la huella digital de la clave p ública anterior es:

9E2B 9D14 CBCE FE12 16A8

C103 48B2 5161 69AB 5784

Si alguien quisiera asegurarse de la autenticidad de dicha clave, bastar´ıa con que

llamara por teléfono al autor, y le pidiera que le leyera su huella digital. Afortunada-

mente, las últimas implementaciones de PGP permiten convertir esta cadena hexa-

decimal en una secuencia de palabras fácilmente legibles por teléfono.

18.2.5.

Distribuci ón de Claves y Redes de Confianza

PGP, como cualquier sistema basado en clave p ública, es susceptible a ataques de

intermediario (secci ón 12.2). Esto nos obliga a establecer mecanismos para asegurar-

nos de que una clave procede realmente de quien nosotros creemos. Una de las cosas

que permite esto, aunque no la única, es la huella digital.

2OCR: Optical Character Recognition, reconocimiento óptico de caracteres. Permite convertir texto

escrito a formato electr ónico.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

18.2. Estructura de PGP

249

PGP permite a un usuario firmar claves, y de esta forma podremos confiar en la

autenticidad de una clave siempre que ésta venga firmada por una persona de con-

fianza. Hay que distinguir entonces dos tipos de confianza: aquella que nos permite

creer en la validez de una clave, y aquella que nos permite fiarnos de una persona

como certificador de claves. La primera se puede calcular automáticamente, en fun-

ci ón de que las firmas que contenga una clave pertenezcan a personas de confianza,

pero la segunda ha de ser establecida manualmente. No olvidemos que el hecho de

que una clave sea auténtica no nos dice nada acerca de la persona que la emiti ó. Por

ejemplo, yo puedo tener la seguridad de que una clave pertenece a una persona, pero

esa persona puede dedicarse a firmar todas las claves que le llegan, sin asegurarse de

su autenticidad, por lo que en ning ún caso merecerá nuestra confianza.

Cuando una clave queda comprometida, puede ser revocada por su autor. Para

ello basta con generar y distribuir un certificado de revocación que informará a todos los

usuarios de que esa clave ya no es válida. Para generarlo es necesaria la clave priva-

da, por lo que en muchos casos se recomienda generar con cada clave su certificado

de revocaci ón y guardarlo en lugar seguro, de forma que si perdemos la clave priva-

da podamos revocarla de todas formas. Afortunadamente, las últimas versiones de

PGP permiten nombrar revocadores de claves, que son usuarios capaces de invalidar

nuestra propia clave, sin hacer uso de la llave privada.

18.2.6.

Otros PGP

La rápida popularizaci ón de PGP entre ciertos sectores de la comunidad de Inter-

net, y el desarrollo del estándar p úblico Open PGP, han hecho posible la proliferaci ón

de variantes más o menos complejas del programa de Zimmermann. Muchas de ellas

son desarrolladas por los propios usuarios, para mejorar alguna caracter´ıstica, como

manejar claves de mayor longitud (PGPg), y otras corresponden a aplicaciones de

tipo comercial.

Especial menci ón merece la implementaci ón de Open PGP que está llevando a

cabo el proyecto GNU: GnuPG (GNU Privacy Guard), que funciona en m últiples pla-

taformas, y emplea únicamente algoritmos de libre distribuci ón —entre ellos AES—,

aunque presenta una estructura que la hace fácilmente extensible. De hecho, hoy por

hoy, podr´ıamos decir que es la implementaci ón de PGP más completa, segura y útil

para cualquier usuario.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

250

18. PGP

18.3.

Vulnerabilidades de PGP

Seg ún todo lo dicho hasta ahora, parece claro que PGP proporciona un nivel de

seguridad que nada tiene que envidiar a cualquier otro sistema criptográfico jamás

desarrollado. ¿Qué sentido tiene, pues, hablar de sus vulnerabilidades, si éstas parecen

no existir?

Como cualquier herramienta, PGP proporcionará un gran rendimiento si se em-

plea correctamente, pero su uso inadecuado podr´ıa convertirlo en una protecci ón

totalmente in útil. Es por ello que parece interesante llevar a cabo una peque ˜na reca-

pitulaci ón acerca de las buenas costumbres que harán de PGP nuestro mejor aliado.

Escoger contrase ˜nas adecuadas. Todo lo comentado en la secci ón 17.5.1 es válido

para PGP.

Proteger adecuadamente los archivos sensibles. Estos archivos serán, l ógicamente,

nuestros llaveros (anillos de claves) y el fichero que alberga la semilla aleatoria.

Esta protecci ón debe llevarse a cabo tanto frente al acceso de posibles curio-

sos, como frente a una posible pérdida de los datos (¡recuerde que si pierde el

archivo con su clave privada no podrá descifrar jamás ning ún mensaje!).

Emitir revocaciones de nuestras claves al generarlas y guardarlas en lugar seguro.

Serán el único mecanismo válido para revocar una clave en caso de pérdida del

anillo privado. Afortunadamente, la versi ón 6 de PGP permite nombrar revoca-

dores para nuestras claves, de forma que éstos podrán invalidarla en cualquier

momento sin necesidad de nuestra clave privada.

Firmar sólo las claves de cuya autenticidad estemos seguros. Es la única manera de

que las redes de confianza puedan funcionar, ya que si todos firmáramos las

claves alegremente, podr´ıamos estar certificando claves falsas.

Al margen de un uso correcto, que es fundamental, debemos mencionar que últi-

mamente han sido detectados algunos fallos en las diversas implementaciones de

PGP. Clasificaremos dichas vulnerabilidades en dos grupos claramente diferencia-

dos:

Debidas a la implementación: Estos agujeros de seguridad son provocados por

una implementaci ón defectuosa de PGP, y corresponden a versiones concretas

del programa. Por ejemplo, el fallo descubierto en la versi ón 5.0 de PGP para

UNIX, que hac´ıa que las claves de sesi ón no fueran completamente aleatorias,

o el encontrado en todas las versiones para Windows, desde la 5.0 a la 7.0.4,

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

18.3. Vulnerabilidades de PGP

251

en la que un inadecuado procesamiento de las armaduras ASCII permit´ıa a un

atacante introducir ficheros en la computadora de la v´ıctima.

Intr´ınsecas al protocolo: En este apartado habr´ıa que rese ˜nar aquellos agujeros de

seguridad que son inherentes a la definici ón del estándar Open PGP. En este

sentido, a principios de 2001 se hizo p ública una técnica que permit´ıa a un ata-

cante falsificar firmas digitales. En cualquier caso, se necesita acceso f´ısico a la

computadora de la v´ıctima para manipular su clave privada, por lo que el fallo

carece de interés práctico.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

252

18. PGP

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte V

Seguridad en Computadores

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Cap´ıtulo 19

Introducci ón a la Seguridad

Informática

El término seguridad, del lat´ın securitas, viene definido en el Diccionario de la Real

Academia como ”Cualidad de seguro”. En cuanto al término seguro, la definici ón es

inequ´ıvoca: ”Libre y exento de todo peligro, da ˜no o riesgo”. Podemos entender que, en

general, una entidad es segura si se comporta como se espera de ella, sin que tengan

lugar sucesos considerados anormales.

Puesto que el prop ósito de los computadores no es otro que el de almacenar, pro-

cesar y transmitir informaci ón, consideraremos que un sistema informático es seguro

si maneja de forma correcta la informaci ón. Cabr´ıa entonces preguntarse cuáles son

las condiciones que debe cumplir la informaci ón para que podamos determinar su

calidad para, en un paso posterior, determinar qué podemos hacer para garantizarla.

Los sistemas informáticos incorporan medidas para garantizar su seguridad prácti-

camente a todos los niveles, desde el hardware hasta los interfaces de usuario, pasando

por todas las capas del Sistema Operativo, los elementos dedicados a comunicacio-

nes, etc. Dedicaremos esta secci ón del libro a concretar y formalizar todos estos con-

ceptos.

19.1.

Propiedades de la Informaci ón

Hay ciertas cosas que un sistema que maneja informaci ón no puede permitirse.

Por ejemplo, resultar´ıa inaceptable que los datos que introducimos en el mismo su-

frieran alteraciones cuando vamos a recuperarlos, o que fuera posible para terceros

acceder a la informaci ón sin permiso. En general, se definen tres propiedades de la

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

256

19. Introducci ón a la Seguridad Informática

informaci ón fundamentales que deben garantizar los sistemas informáticos: confi-

dencialidad, integridad y disponibilidad.

Confidencialidad

Decimos que una informaci ón posee la caracter´ıstica de confidencialidad si s ólo

pueden tener acceso a la misma las entidades que están autorizadas para ello. Gran

parte de la informaci ón que hoy d´ıa manejan nuestros sistemas informáticos perder´ıa

su valor si se hiciera p ública —estrategias de empresas, secretos industriales, etc.—,

mientras que en otros casos su revelaci ón ser´ıa sencillamente inaceptable —expedien-

tes médicos, informaci ón acerca de orientaciones pol´ıticas, religiosas o sexuales de un

individuo, etc.—.

Como el lector ya habrá advertido, no es lo mismo salvaguardar la confidenciali-

dad en un ordenador personal, con un acceso limitado al exterior, que en un sistema

compuesto por m últiples computadoras interconectadas, y posiblemente dispersas

geográficamente.

Integridad

La integridad garantiza que los datos almacenados en nuestro sistema —o los colo-

camos en un extremo de un canal de comunicaciones—, van a ser exactamente iguales

cuando los recuperemos —o al llegar al otro extremo del canal—. Es fácil imaginar

situaciones en las que una informaci ón corrompida o manipulada puede llegar a ser

altamente da ˜nina.

Para garantizar la integridad se emplean desde mecanismos de bajo nivel, que evi-

tan que los datos se pierdan o se corrompan accidentalmente —discos duros RAID,

sistemas de alimentaci ón ininterrumpida—, hasta mecanismos basados en funciones

resumen (cap´ıtulo 13), c ódigos CRC, o firmas digitales (cap´ıtulo 17).

Existen principalmente dos familias de técnicas orientadas a la integridad. La pri-

mera de ellas busca evitar que se produzcan alteraciones en los datos, mientras que

la segunda tiene como objetivo la detecci ón —y eventual correcci ón— de dichas alte-

raciones.

Disponibilidad

La informaci ón suele alcanzar su verdadero valor cuando se utiliza. En muchos

casos, es crucial poder emplearla en el momento oportuno, por lo que un buen siste-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.2. Problemas de los Sistemas de Informaci ón

257

ma de informaci ón tendrá que proporcionar una adecuada flexibilidad a la hora de

acceder a los datos. A la capacidad de tener acceso a la informaci ón en todo momento

la denominaremos disponibilidad.

En cierto modo, facilitar la disponibilidad puede poner en riesgo la confidenciali-

dad y viceversa, por lo que las tres caracter´ısticas que acabamos de describir han de

ser tenidas en cuenta de forma global a la hora de dise ˜nar un sistema de informaci ón

seguro.

19.2.

Problemas de los Sistemas de Informaci ón

Cualquier situaci ón en la vida está sujeta a posibles situaciones no deseadas. En

particular, todos los sistemas de informaci ón están sujetos a la posibilidad de ex-

perimentar un funcionamiento an ómalo, ya sea de manera fortuita o provocada. El

objetivo de la Seguridad Informática consistirá en evitar que se produzcan esas si-

tuaciones. Para ello se tomarán medidas a todos los niveles: dise ˜no, implementaci ón,

pol´ıticas de uso, monitorizaci ón, análisis, etc.

Con objeto de enfrentarnos más eficazmente a ellos, definiremos de una manera

algo más formal esos fallos en los sistemas informáticos.

Da ˜no

Definiremos como da ˜no el perjuicio que se produce cuando un sistema informáti-

co falla. Dicho perjuicio debe de ser cuantificable: el coste econ ómico de los datos

perdidos, el tiempo y esfuerzo necesarios para volver al estado normal, etc. El da ˜no

puede ser provocado, o producirse de manera accidental.

Ataque

Un ataque es el acto deliberado de intentar provocar un da ˜no concreto en un siste-

ma. Los ataques constituyen una de las mayores amenazas a la seguridad informáti-

ca, ya que pueden llegar a ser extremadamente sofisticados. Sin embargo, nunca de-

bemos desestimar las situaciones de da ˜no producidas de manera fortuita —fallos en

el hardware, cortes en el suministro eléctrico, desastres naturales, etc.—.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

258

19. Introducci ón a la Seguridad Informática

Riesgo

Una vez que hemos definido el concepto de da ˜no, nuestro objetivo será proteger

el sistema frente al mayor n úmero posible de situaciones de este tipo. Sin embargo, la

cantidad de recursos que podremos asignar a esta tarea estará siempre limitada, por

lo que a la hora de priorizar nuestro trabajo tendremos que medir de alguna manera

el peligro asociado a cada situaci ón de da ˜no.

Definiremos el riesgo (R) como el producto entre la magnitud de un da ˜no (d), y la

probabilidad de que éste tenga lugar (pd):

R = d · pd

(19.1)

A la vista de esta definici ón, es fácil observar que una situaci ón con un elevado

nivel de da ˜no, pero muy poco probable, puede suponer menor riesgo —y, por tanto,

merecer menos atenci ón— que una situaci ón con un nivel de da ˜no moderado, pero

mucho más probable. Siempre y cuando hagamos una buena estimaci ón de los da ˜nos

y las probabilidades de que se produzcan, obtendremos unos valores de riesgo útiles.

Amenaza

Entendemos por amenaza aquella situaci ón de da ˜no cuyo riesgo de producirse es

significativo. Puesto que el valor de riesgo R tiene un carácter relativo, será nuestra

tarea definir un umbral a partir del cual consideraremos que un riesgo merece la pena

ser tenido en cuenta, o lo que es lo mismo, constituye una amenaza.

Vulnerabilidad

Una vulnerabilidad es una deficiencia en un sistema susceptible de producir un

fallo en el mismo. Como puede observarse, existen vulnerabilidades de todo tipo, ya

que ning ún sistema es perfecto. No obstante, y a efectos prácticos, s ólo tendremos

en consideraci ón aquellas vulnerabilidades que constituyen una amenaza. Nuestro

objetivo será, por tanto, conocer y eliminar —o al menos mitigar— el mayor n úmero

posible de vulnerabilidades en nuestros sistemas.

Exploit

Llamaremos exploit a cualquier técnica que permita aprovechar una vulnerabi-

lidad de un sistema para producir un da ˜no en el mismo. Usualmente, los exploits

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.2. Problemas de los Sistemas de Informaci ón

259

son publicados como prueba de concepto, para demostrar que una vulnerabilidad

es capaz de dar lugar a un da ˜no determinado. De hecho, es muy habitual encontrar

vulnerabilidades potenciales en los sistemas, que aunque pueden suponer un riesgo,

en realidad se desconoce si son realmente útiles para perpetrar un ataque.

Black Hats versus White Hats

Habitualmente, a las personas que buscan vulnerabilidades en los sistemas, as´ı co-

mo métodos de ataque para aprovecharlas, se les suele denominar genéricamente

hackers. Sin embargo, esta actividad puede realizarse con dos enfoques bien distin-

tos: buscar formas para hacer realmente da ˜no a los sistemas, sin prestar atenci ón a

(o buscando deliberadamente) que sus descubrimientos puedan usarse para delin-

quir —robos, ciberterrorismo, espionaje, etc.—, o bien mejorar los propios sistemas de

seguridad. A los primeros se les llama black hats, mientras que a los segundos se les

conoce como white hats. Si bien la actividad de los white hats resulta positiva e incluso

necesaria para la sociedad, en ocasiones la l´ınea divisoria entre ambas comunidades

resulta demasiado difusa.

19.2.1.

Identificaci ón Un´ıvoca de Vulnerabilidades

Los CVE (Common Vulnerabilities and Exposures) proporcionan un método para

construir un identificador único, reconocido internacionalmente, para todas las vul-

nerabilidades que se detectan en los productos software.

Un CVE posee los siguientes elementos:

Un c ódigo numérico compuesto por el a ˜no y un n úmero asignado por la CNA

(Candidate Numbering Authority). Por ejemplo, CVE-2010-0038.

El estado: candidato (candidate) si se encuentra en proceso de de revisi ón, o en-

trada (entry) si ya ha sido admitido oficialmente.

Una descripci ón del problema.

Una lista de referencias.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

260

19. Introducci ón a la Seguridad Informática

19.3.

Tipos de Vulnerabilidades

Puesto que cualquier deficiencia en un sistema puede dar lugar a fallos, podre-

mos hablar de vulnerabilidades en la práctica totalidad de los niveles de un sistema

informático. As´ı, podemos hablar de vulnerabilidades:

Debidas al dise ˜no: Suelen ser las más delicadas, ya que su correcci ón puede tener

impacto a todos los niveles, complicando el sistema y aumentando los costes de

manera inaceptable, o incluso pueden resultar imposibles de eliminar. Por esta

raz ón es esencial que los temas de seguridad sean tenidos en cuenta a la hora

de dise ˜nar un sistema informático.

Pensemos, por ejemplo, en un sistema operativo dise ˜nado sin tener en cuenta la

posibilidad de existencia de m últiples usuarios. Esto da en la práctica unos pri-

vilegios excesivos de uso, al no separar las tareas administrativas —que pueden

ser potencialmente da ˜ninas si se realizan mal o de manera maliciosa— de las

actividades diarias, lo cual representa una clara vulnerabilidad. Lo ideal ser´ıa

modificar el dise ˜no para incorporar esta caracter´ıstica, pero eso probablemente

hará que muchos programas escritos para el sistema antiguo dejen de funcionar.

Debidas a la implementación: Todos los programas tienen fallos, debidos a un

c ódigo fuente incorrecto, a una mala utilizaci ón de las caracter´ısticas del com-

pilador, a una comprensi ón deficiente de las especificaciones, etc. Este tipo de

errores es, con mucho, la mayor fuente de vulnerabilidades en los productos

informáticos actuales, por lo que todo administrador deberá conocerlos en la

medida de lo posible. Asimismo, los programadores deben seguir una serie de

directrices básicas para evitarlos a la hora de escribir c ódigo.

Aunque suele tenerse menos en cuenta, debido a la alt´ısima fiabilidad de los

componentes f´ısicos actuales, la configuraci ón de hardware escogida para un

sistema también forma parte de su implementaci ón, y puede dar lugar a la apa-

rici ón de determinadas vulnerabilidades.

Debidas al uso: De nada sirve tener el mejor sistema de contrase ˜nas del mundo

si luego anotamos nuestra palabra clave en un papelito y lo pegamos al moni-

tor con cinta adhesiva. Aunque suele dejarse de lado en demasiados casos, las

condiciones concretas y los protocolos espec´ıficos de utilizaci ón de cualquier

sistema informático deben ser dise ˜nados cuidadosamente por un lado, y segui-

dos escrupulosamente por otro. En caso contrario, un sistema bien dise ˜nado e

implementado puede volverse del todo inseguro.

Otra situaci ón muy com ún, especialmente en el software comercial, es la inclu-

si ón, en aras de la usabilidad, de opciones y configuraciones inseguras por defec-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.4. Detecci ón de Vulnerabilidades

261

to. Una instalaci ón apresurada o poco cuidadosa del sistema puede por lo tanto

dar lugar a una configuraci ón claramente vulnerable.

19.4.

Detecci ón de Vulnerabilidades

Parece claro que un administrador de seguridad debe conocer las vulnerabilida-

des de su sistema. Sin embargo, la elevada complejidad de los sistemas actuales, uni-

da al hecho de que normalmente ninguno o casi ninguno de sus componentes sue-

le haber sido dise ˜nado e implementado por el propio administrador, hace del todo

imposible dedicar el tiempo necesario a analizar el sistema para conocer todas sus

vulnerabilidades. Por lo tanto, será necesario adoptar una serie de estrategias para

que no se nos escape ninguna vulnerabilidad:

Listas bugtraq: Existen m últiples listas de distribuci ón especializadas en la pu-

blicaci ón de las vulnerabilidades que se van descubriendo en todo tipo de soft-

ware. Junto con cada vulnerabilidad, suele indicarse también cuál es la forma de

protegerse de ella.

Sistemas automáticos de análisis: En general, los métodos automáticos de identi-

ficaci ón de vulnerabilidades, se basan en dos aproximaciones fundamentales,

en funci ón de si conocemos o no la vulnerabilidad en cuesti ón que queremos

detectar:

• Para el primer caso existen programas, llamados escáneres, que analizan

sistemas en en ejecuci ón en busca de una bater´ıa de vulnerabilidades co-

nocidas. En muchos casos, los propios tests pueden ser potencialmente

da ˜ninos, por lo que deben emplearse con cuidado.

• Las Redes Trampa están dise ˜nadas servir de se ˜nuelo frente a posibles intru-

sos. El objetivo es que sea el propio atacante el que lanze el exploit, que

quedará registrado en el sistema trampa, para su posterior análisis y estu-

dio.

• Auditor´ıa automática de código. Es un hecho conocido que un gran porcentaje

de las vulnerabilidades en muchos sistemas provienen de errores comunes

a la hora de escribir el c ódigo fuente (verificaci ón incorrecta de los l´ımites

de los arrays, uso inadecuado de punteros, etc.), por lo que poco a poco van

surgiendo herramientas espec´ıficas que detectan estas deficiencias.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

262

19. Introducci ón a la Seguridad Informática

Figura 19.1: Fases de la ventana de exposici ón

19.5.

La Ventana de Exposici ón

Es un hecho conocido que todos los sistemas tienen vulnerabilidades. El descono-

cimiento de su existencia no implica seguridad, pero en el caso de vulnerabilidades

susceptibles de ser aprovechadas para practicar un ataque, parece claro que si nadie

conoce su existencia, no van a ser aprovechadas contra nuestro sistema.

En cualquier caso, un hecho es claro: si nosotros detectamos una vulnerabilidad

en nuestro sistema, nada nos asegura que nadie más lo haya hecho, por lo que a partir

de ese momento debemos considerar que el sistema está expuesto.

Llamamos ventana de exposición al espacio de tiempo que transcurre desde que

se detecta una vulnerabilidad, hasta que la misma es corregida. A la vista de esta

definici ón, parece claro que lo único que podemos conocer con certeza acerca de una

ventana de exposici ón es el momento en el que la misma se cierra.

Desde que se considera abierta, la ventana de exposici ón atraviesa por diversas

fases (figura 19.1):

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.5. La Ventana de Exposici ón

263

Descubrimiento: La vulnerabilidad es detectada. A partir de ese momento, sa-

bemos que el sistema está expuesto.

Anuncio: La vulnerabilidad es publicada, por lo que el riesgo aumenta, ya que

crece el n úmero de personas que la conocen.

Popularizaci ón: Si la vulnerabilidad es explotable, será empleada cada vez por

más gente para provocar da ˜nos.

Liberaci ón del parche: El fabricante publica una nueva versi ón del software, o

las modificaciones precisas que hay que hacer en el mismo para eliminar la

vulnerabilidad.

Instalaci ón del parche por parte de los usuarios: Es evidente que si, aunque se

conozca la soluci ón, los usuarios no la aplican, sus sistemas seguirán estando

expuestos. Afortunadamente, la mayor parte de los productos software actua-

les proporcionan mecanismos automáticos para instalar los parches de forma

rápida y sencilla.

Está muy claro que el prop ósito de cualquier administrador de seguridad consis-

tirá en minimizar el tama ˜no de las ventanas de exposici ón de su sistema. Para ello

deberá conocer las vulnerabilidades del mismo y eliminarlas cuanto antes. En la in-

mensa mayor´ıa de los casos, el sistema administrado estará integrado por una serie

de componentes f´ısicos (hardware) y l ógicos (software), fabricados por terceros. Si se

trata de empresas serias, ellas mismas suministrarán peri ódicamente informes sobre

las últimas vulnerabilidades detectadas en sus productos, as´ı como instrucciones pa-

ra eliminarlas o minimizar su impacto. Sin embargo, las estrategias adoptadas a la

hora de proporcionar este servicio suelen ser muy variopintas. Aunque lo que vamos

a comentar puede aplicarse tanto al hardware como al software, nos centraremos en el

segundo caso:

Revelación total (full disclosure): Consiste en publicar las vulnerabilidades en

cuanto son descubiertas. Si el descubridor del problema es el propio fabricante,

suele esperar el tiempo suficiente como para desarrollar los parches necesarios

para corregirla, de forma que se dan a conocer de forma simultánea tanto el pro-

blema como la soluci ón. Si el descubridor es ajeno a la empresa, suele informar

en primer lugar a ésta y, tras un per´ıodo de gracia, hacerla p ública.

Desde el punto de vista del usuario, quizás sea esta la estrategia que garantice

unas ventanas de exposici ón de menor tama ˜no. Sin embargo, el hecho de que

se conozca de un elevado n úmero de vulnerabilidades suele tener un impacto

negativo desde el punto de vista de la imagen comercial del producto, por lo

que las empresas no siempre lo consideran rentable.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

264

19. Introducci ón a la Seguridad Informática

No revelación: La empresa analiza su producto, identifica sus vulnerabilidades, y

eventualmente las corrige, pero lo hace a través de parches genéricos o nuevas

versiones del producto, sin informar a los clientes sobre las vulnerabilidades

corregidas. Esta estrategia puede funcionar en algunos casos, ya que podr´ıa

razonarse que de esta forma no se suministra informaci ón a posibles atacantes

para que la aprovechen. Sin embargo, deja a los administradores en situaci ón

de indefensi ón, ya que les impide desarrollar sus propias contramedidas, al

desconocer los riesgos reales que corre su sistema, y al mismo tiempo no evita

que los atacantes puedan detectar las vulnerabilidades por otros medios.

Negación de las vulnerabilidades: Afortunadamente, cada vez son menos las em-

presas que niegan ciertas vulnerabilidades en sus productos, e incluso atacan a

quienes las descubren y hacen p úblicas alegando que violan su propiedad inte-

lectual. Es un hecho que esta inaceptable actitud acaba pasando factura a largo

plazo.

Reconocimiento de las vulnerabilidades, y negación de su impacto: En muchos ca-

sos, se detectan vulnerabilidades en sistemas informáticos que luego no se sabe

aprovechar para producir un da ˜no. Para la imagen de una empresa suele ser

mucho menos da ˜nino reconocer un fallo en su sistema, y negar acto seguido

que dicho fallo suponga un riesgo. Adicionalmente, supone una excusa per-

fecta para no invertir recursos en la correcci ón del problema. Para evitar esto,

la mayor parte de las vulnerabilidades publicadas suelen ir acompa ˜nadas del

exploit correspondiente, a modo de prueba de concepto.

Reconocimiento de las vulnerabilidades, sin publicar correcciones: En no pocas ocasio-

nes suele ocurrir que la correcci ón de una vulnerabilidad implica cambios pro-

fundos en el software. Esto hace que muchas más veces de las que ser´ıa deseable

las empresas prefieren aplazar esta tarea, con la esperanza de que los da ˜nos pro-

vocados por la ventana de exposici ón que deliberadamente están prolongando

sean peque ˜nos. En algunos casos, se remite a futuras versiones del producto en

cuesti ón como única soluci ón.

19.6.

La Seguridad como Proceso

Un sistema informático solo puede comprenderse desde un punto de vista dinámi-

co, ya que cualquier operaci ón de entrada de datos, almacenamiento, recuperaci ón,

o proceso de los mismos, supone una modificaci ón del estado en el propio sistema.

Por lo tanto, un sistema de estas caracter´ısticas debe entenderse y analizarse como

algo que evoluciona en el tiempo, pasando por diferentes estados, que entendidos de

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.6. La Seguridad como Proceso

265

manera aislada pierden la práctica totalidad de su sentido. De la misma manera, la

seguridad de un sistema de informaci ón únicamente adquiere sentido si la enfoca-

mos como una entidad dinámica. De hecho, un sistema estático que no evolucionara

a lo largo del tiempo jamás podr´ıa tener problemas de seguridad, ya que no podr´ıan

entrar ni salir datos de él, ni modificarse los que eventualmente albergara.

Podemos afirmar que un sistema dinámico es seguro o inseguro en tanto que lo es

su funcionamiento. En consecuencia, un producto informático no podrá considerarse

seguro o inseguro de forma absoluta, sino que habrá situaciones y entornos en los que

su funcionamiento será correcto —y por tanto seguro—, junto con otras en las que el

citado producto fallará. Salvo en casos muy simples, lo más que podemos decir acerca

de un producto informático es que no conocemos las condiciones de funcionamiento

en las que manifiesta fallos o vulnerabilidades.

19.6.1.

La seguridad absoluta no existe

Debido a la enorme flexibilidad de los sistemas informáticos actuales, a la com-

plejidad de las interacciones que se dan en su interior, y a la cantidad de elementos

diferentes que los integran, resulta prácticamente imposible contemplar todas y cada

una de las condiciones posibles en las que un producto software tendrá que trabajar.

Lo más probable es que, independientemente de la calidad de un programa, se pue-

dan producir con mayor o menor dificultad condiciones en las que acabe fallando.

Afirmar, pues, que un producto es seguro resulta, cuando menos, aventurado.

En general, cualquier entorno de trabajo debe considerarse intr´ınsecamente in-

seguro. Por tanto, debemos desconfiar de soluciones milagrosas que supuestamente

garantizan la seguridad en un sistema, sin que tengamos que preocuparnos de na-

da. Estos productos lo único que generan es una falsa sensaci ón de seguridad, que

se convierte en auténtica desconfianza cuando acaban aflorando sus fallos. Un ad-

ministrador de seguridad sensato debe tener como objetivo minimizar el n úmero de

vulnerabilidades en el sistema administrado, as´ı como estar preparado para que el

da ˜no sea m´ınimo en el caso de que se produzca un fallo. Esto solo puede conseguirse

a través de un proceso de vigilancia y supervisi ón constante, que pasa por:

El control de los dise ˜nos. El administrador debe supervisar todos los productos

que integran su sistema, c ómo las condiciones de uso en las que deben funcio-

nar.

No asumir riesgos innecesarios. En no pocas ocasiones, las configuraciones por de-

fecto de determinados productos resultan inseguras. En otros casos, se activan

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

266

19. Introducci ón a la Seguridad Informática

elementos o servicios que, resultando superfluos, dan lugar a la aparici ón de

vulnerabilidades.

Aprender de errores pasados, para evitar que se repitan en el futuro.

19.6.2.

Los costes de la seguridad

En el contrato de licencia de la mayor parte de los productos software que se ven-

den en la actualidad exonera de toda responsabilidad sobre mal funcionamiento al

fabricante. Esta situaci ón ser´ıa impensable en otro tipo de industrias, donde las em-

presas indemnizan a los clientes cuando estos sufren da ˜nos provocados por defec-

tos de fabricaci ón en sus productos. Quizás si esta práctica se extendiera más en el

mundo del software, las empresas invertir´ıan más recursos en la seguridad de sus

programas.

En cualquier caso, el desarrollo de productos software más seguros incrementa los

costes de producci ón, ralentiza el desarrollo, y no elimina por completo los futuros

problemas de seguridad. En este sentido cabe remarcar que las tradicionales pruebas

beta no suelen ser útiles para detectar vulnerabilidades en un sistema. Para encon-

trarlas es necesario llevar a cabo pruebas muy complejas y espec´ıficas; de hecho gran

parte de ellas son descubiertas de manera fortuita, incluso mucho después de de la

salida comercial del producto en cuesti ón.

Otro elemento realmente significativo es la escasa o nula formaci ón desde el pun-

to de vista de la seguridad que tienen muchos directivos, programadores e incluso

analistas de las empresas de desarrollo de software. Por fortuna, en los planes de es-

tudio de los futuros profesionales de la Informática, este tema poco a poco va siendo

contemplado con la atenci ón que merece.

Todas estas circunstancias, unidas a la competencia feroz que sufre el mercado,

obligan a las empresas a optar por una cierta relajaci ón de los requisitos de seguridad

en las fases de dise ˜no y desarrollo de sus productos, lo que aumenta la probabilidad

de aparici ón de vulnerabilidades en los mismos.

19.6.3.

La seguridad es un proceso, no un producto

La seguridad no puede entenderse como un producto, sino como un proceso que

debe estar presente en todas las fases del ciclo de vida de un sistema:

El dise ˜no. Incluimos aqu´ı tanto el dise ˜no de cada uno de los elementos hardware y

software que integrarán el sistema, sobre los que en la mayor parte de los casos el

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.7. Pol´ıticas de Seguridad

267

administrador de seguridad carecerá de control, como el de la propia estructura

del sistema final, que especifica los componentes concretos, y su integraci ón.

El desarrollo e implantación. Todo lo que hemos dicho en el párrafo anterior acerca

del dise ˜no es igualmente aplicable a este punto.

La definición de cómo debe usarse el sistema. Esto implica decidir qué cosas van a

estar permitidas y cuáles no, as´ı como qué elementos deberán ser supervisados,

de qué manera y con qué frecuencia.

A modo de resumen, podemos decir que todo administrador de seguridad debe

tener siempre presente lo siguiente:

Todos los sistemas tienen vulnerabilidades y fallos.

Hay que dar por hecho que, tarde o temprano, se van a producir fallos.

Es necesario tener previsto c ómo enfrentarse a los problemas, antes de que estos

se manifiesten.

Las tareas de un administrador de seguridad incluyen, entre otras:

• Realizaci ón frecuente de copias de seguridad, para poder recuperarse fren-

te a eventuales pérdidas o alteraciones de los datos.

• En caso de fallo, análisis de la evoluci ón pasada del sistema para identificar

el origen del problema.

• Supervisi ón constante del funcionamiento del sistema, para detectar posi-

bles riesgos de forma inmediata.

• Detecci ón de eventos sospechosos, que permitan anticiparse a posibles fa-

llos.

• Revisi ón constante de la organizaci ón del sistema.

19.7.

Pol´ıticas de Seguridad

A la hora de sistematizar el uso y funcionamiento de un sistema informático en

producci ón, es necesario definir y documentar las condiciones de trabajo desde el

punto de vista de la seguridad. Para ello es necesario llevar a cabo una reflexi ón

realista, que permita minimizar tanto las vulnerabilidades del sistema, como trans-

currido desde la detecci ón de un fallo o ataque, hasta su completa neutralizaci ón. De

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

268

19. Introducci ón a la Seguridad Informática

Pol´ıtica

Procedimiento

Práctica

Proteger el servidor ftp

Mantener actualizado el

Descargar e instalar dia-

frente a accesos no auto-

servidor.

riamente los parches de

rizados.

seguridad.

Monitorizar intentos de

Ejecutar diariamente el

acceso sospechosos.

programa DenyHosts.

Figura 19.2: Ejemplo de pol´ıtica procesal de seguridad

nada sirve ignorar determinados riesgos, dedicar demasiados recursos a los menos

probables, o carecer de un plan de contingencias adecuado.

Definiremos pues, las Expectativas de Seguridad como el funcionamiento real espe-

rado de un sistema, incluyendo los posibles riesgos de seguridad. Por lo tanto, las

pol´ıticas de seguridad serán el resultado de documentar las expectativas de seguridad

de un sistema.

Dependiendo del método que se emplee para analizar y documentar las expecta-

tivas de seguridad, las pol´ıticas de seguridad pueden ser de dos tipos: procesales o

formales.

19.7.1.

Pol´ıticas Procesales de Seguridad

Plasman directamente, de una manera más o menos informal, la filosof´ıa de segu-

ridad de la empresa. Este enfoque permite recoger de forma directa y expl´ıcita cada

uno de los elementos relacionados con la seguridad, pero no proporciona una meto-

dolog´ıa sistemática para definir y detectar todos y cada uno de ellos. Esto obliga a ser

muy cuidadosos, para que ning ún aspecto relevante quede excluido.

Para cada una de las pol´ıticas, se definen los siguientes elementos (ver figura 19.2):

El objetivo: Cada pol´ıtica debe perseguir un objetivo concreto, encaminado a

proteger el sistema o una parte de él.

El procedimiento: Se describe, de una forma más o menos abstracta, c ómo de-

ben realizarse, de forma general, las tareas básicas en el sistema.

La práctica: Definici ón precisa de cada una de las tareas individuales que cons-

tituyen el procedimiento.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

19.7. Pol´ıticas de Seguridad

269

19.7.2.

Pol´ıticas Formales de Seguridad

Las pol´ıticas de seguridad formales proporcionan un modelo abstracto del siste-

ma, usualmente basado en aut ómatas finitos, que permite definir de forma sistemáti-

ca y completa todos los estados por los que puede pasar el sistema en su funcio-

namiento diario. Las metodolog´ıas formales emplean normalmente un lenguaje de

representaci ón, que no solo permite definir correctamente las pol´ıticas de seguridad,

sino que permite, a diferencia de las pol´ıticas procesales, su aplicaci ón de manera

automatizada.

Presentan una ventaja fundamental sobre los enfoques procesales, ya que abarcan

todos los posibles estados en los que puede encontrarse el sistema, las transiciones

entre éstos, y las operaciones permitidas en cada estado, evitando de forma eficaz que

quede alguna situaci ón sin contemplar. Es, por tanto, el método más potente, ya que

ayuda a detectar y modelar claramente todas las situaciones de peligro. Sin embargo,

definir este tipo de pol´ıticas puede convertirse en una tarea ardua y compleja, por lo

que en sistemas de complejidad media y baja suele optarse por las pol´ıticas de tipo

procesal.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

270

19. Introducci ón a la Seguridad Informática

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Parte VI

Apéndices

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Apéndice A

Criptograf´ıa Cuántica

La F´ısica Cuántica estudia el comportamiento de la materia a escalas muy pe-

que ˜nas, del orden de los átomos. En el mundo cuántico las reglas que rigen la Mecáni-

ca Clásica dejan de tener validez, y se producen fen ómenos tan sorprendentes como

interesantes, que abren las puertas a posibilidades de aplicaci ón casi incre´ıbles en

muchos campos, entre los que se encuentra, por supuesto, la Criptograf´ıa.

Cabe recordar que hoy por hoy ya existen algunas aplicaciones prácticas de la

Mecánica Cuántica en Criptograf´ıa, mientras que otras, como las basadas en los compu-

tadores cuánticos, siguen perteneciendo al ámbito de la especulaci ón, ya que la tec-

nolog´ıa que podr´ıa permitirnos desarrollar dispositivos de este tipo a ún no existe.

A.1.

Mecánica Cuántica y Criptograf´ıa

Una de las aplicaciones directas de los fen ómenos cuánticos en Criptograf´ıa viene

de un principio básico de esta teor´ıa: un objeto no puede interaccionar con otro sin

experimentar alguna modificaci ón. Esto está permitiendo fabricar canales de comu-

nicaci ón en los que los datos viajan en forma de fotones individuales con diferentes

caracter´ısticas. El hecho aqu´ı es que si un atacante intentara interceptar la comuni-

caci ón no tendr´ıa más remedio que interactuar con esos fotones, modificándolos de

manera detectable por el receptor.

Este tipo de propiedades permite construir l´ıneas de comunicaci ón totalmente im-

posibles de interceptar sin ser descubierto, y de hecho ya se han llevado a cabo algu-

nos experimentos en los que se ha logrado transmitir informaci ón a distancias y ve-

locidades respetables. Evidentemente, estos canales ultraseguros dif´ıcilmente serán

tan rápidos o tan baratos como las l´ıneas eléctricas y ópticas actuales, pero en un

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

274

A. Criptograf´ıa Cuántica

Figura A.1: Experimento con espejos para comprobar la superposici ón cuántica de

estados en un fot ón. A es una fuente emisora de fotones, B y C son receptores, 1 y

4 son espejos totalmente reflectantes, y 2 y 3 son espejos que reflejan exactamente la

mitad de la luz y dejan pasar la otra mitad. Contrariamente a lo que dir´ıa la intuici ón,

en B no se detecta nada.

futuro pr óximo constituirán medios id óneos para transmitir informaci ón de carácter

sensible.

A.2.

Computaci ón Cuántica

Existe un fen ómeno en Mecánica Cuántica realmente dif´ıcil de entender para

nuestras clásicas mentes. Obsérvese la figura A.1. En ella se ilustra un conocido y

sorprendente experimento. A es una fuente capaz de emitir fotones, 1 y 4 dos espejos

completamente reflectantes, y 2 y 3 espejos semirreflectantes, que reflejan la mitad

de la luz y dejan pasar la otra mitad. Si situamos en B y C detectores de fotones, la

intuici ón —y la Mecánica Clásica— nos dir´ıan que cada fot ón acabará excitando B o

C con un 50 % de probabilidades. Pues bien, lo que en realidad ocurre es que C se ex-

cita siempre y B no lo hace nunca. Esto demuestra que, a nivel subat ómico, cualquier

part´ıcula puede estar en dos sitios simultáneamente, o más propiamente, en una super-

posición cuántica de dos estados, lo cual significa que está realmente en esos dos estados,

en lugar de estar en uno u otro con determinada probabilidad.

Supongamos ahora que logramos construir un dispositivo capaz de representar

bits mediante estados cuánticos de una o muy pocas part´ıculas. Si colocamos dichas

part´ıculas en una combinaci ón de los dos estados básicos, tendr´ıamos un bit cuántico

(o qubit), capaz de representar un 1 y un 0. . . ¡al mismo tiempo!.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

A.3. Expectativas de Futuro

275

Estas ideas, que datan de los a ˜nos 80, se han barajado más bien como simples en-

tretenimientos para mentes inquietas, hasta que a mediados de los 90 se propuso el

primer algoritmo capaz de ser ejecutado en una computadora cuántica. Dicho algorit-

mo podr´ıa, de forma eficiente, factorizar n úmeros enteros muy grandes. Imag´ınense

las implicaciones que esto tiene para la Criptograf´ıa moderna, ya que supondr´ıa la

ca´ıda de la gran mayor´ıa de los algoritmos asimétricos, que basan su funcionamiento

en el problema de la factorizaci ón de grandes enteros, y la necesidad inmediata de

alargar considerablemente las longitudes de claves para algoritmos simétricos. Evi-

dentemente, estos resultados han provocado que mucha gente tome muy en serio este

tipo de computadoras, y que en la actualidad haya importantes grupos dedicados a

la investigaci ón en este campo.

A.3.

Expectativas de Futuro

Por fortuna —o por desgracia, seg ún se mire—, los modelos cuánticos de compu-

taci ón hoy por hoy no pasan de meras promesas, ya que la tecnolog´ıa actual no per-

mite confinar part´ıculas individuales de forma que preserven su estado cuántico. Los

más optimistas aseguran que en pocos a ˜nos tendremos los primeros microprocesa-

dores cuánticos en funcionamiento, mientras que la gran mayor´ıa opina que todav´ıa

transcurrirán décadas antes de poder disponer del primer dispositivo realmente ope-

rativo —si es que lo conseguimos alg ún d´ıa—.

Lo que s´ı podemos afirmar con rotundidad es que los modelos criptográficos ac-

tuales seguirán siendo válidos durante algunos a ˜nos más. En cualquier caso, no con-

viene perder de vista estas promesas tecnol ógicas, ya que cuando se conviertan en

realidades, obligarán a replantear muchas cuestiones, y no s ólo en el ámbito de la

Criptograf´ıa.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

276

A. Criptograf´ıa Cuántica

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Apéndice B

Ayudas a la Implementaci ón

Incluiremos en este apéndice informaci ón útil para facilitar al lector la implemen-

taci ón de diferentes algoritmos criptográficos. Aquellos que no sepan programar, o

que simplemente no deseen escribir sus propias versiones de los criptosistemas que

aparecen en este libro, pueden prescindir de esta secci ón.

B.1.

DES

En el cap´ıtulo dedicado a algoritmos simétricos por bloques se ha hecho una des-

cripci ón completa del algoritmo DES, pero se han omitido deliberadamente algunos

detalles que s ólo son útiles de cara a la implementaci ón, como pueden ser los valores

concretos de las S-Cajas y de las permutaciones que se emplean en este algoritmo.

B.1.1.

S-Cajas

La tabla B.1 representa las ocho S-Cajas 6*4 que posee DES. Para aplicarlas basta

con coger el n úmero de seis bits de entrada b0b1b2b3b4b5, y buscar la entrada corres-

pondiente a la fila b0b5, columna b1b2b3b4. Por ejemplo, el valor de la tercera S-Caja

para 110010 corresponde a la fila 2 (10), columna 9 (1001), es decir, 1 (0001).

B.1.2.

Permutaciones

DES lleva a cabo permutaciones a nivel de bit en diferentes momentos. Las tablas

que aqu´ı se incluyen deben leerse por filas de arriba a abajo, y sus entradas corres-

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

278

B. Ayudas a la Implementaci ón

Columna

Fila

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

S-Caja

0

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7

1

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

S1

2

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

3

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

0

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10

1

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

S2

2

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15

3

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9

0

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8

1

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

S3

2

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7

3

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12

0

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15

1

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

S4

2

10

6

9

0

12

11

7

13

15

1

3

14

5

2

8

4

3

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14

0

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9

1

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

S5

2

4

2

1

11

10

13

7

8

15

9

12

5

6

3

0

14

3

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3

0

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11

1

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

S6

2

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6

3

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13

0

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1

1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

S7

2

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2

3

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12

0

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7

1

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

S8

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8

3

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11

Cuadro B.1: S-Cajas de DES.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.1. DES

279

Permutaci ón Inicial Pi

58

50

42

34

26

18

10

2

60

52

44

36

28

20

12

4

62

54

46

38

30

22

14

6

64

56

48

40

32

24

16

8

57

49

41

33

25

17

9

1

59

51

43

35

27

19

11

3

61

53

45

37

29

21

13

5

63

55

47

39

31

23

15

7

Permutaci ón Final Pf

40

8

48

16

56

24

64

32

39

7

47

15

55

23

63

31

38

6

46

14

54

22

62

30

37

5

45

13

53

21

61

29

36

4

44

12

52

20

60

28

35

3

43

11

51

19

59

27

34

2

42

10

50

18

58

26

33

1

41

9

49

17

57

25

Cuadro B.2: Permutaciones Inicial (Pi) y Final (Pf ) del algoritmo DES.

ponden al n úmero de bit del valor inicial (empezando por el 1) que debe aparecer

en la posici ón correspondiente. Por ejemplo, la primera tabla de B.2 lleva el valor

b1b2b3 . . . b64 en b58b50b42 . . . b7.

Permutaciones Inicial y Final

La tabla B.2 contiene las permutaciones inicial y final Pi y Pf del algoritmo DES.

La primera de ellas se lleva a cabo justo al principio, antes de la primera ronda, y la

segunda se aplica justo al final. N ótese que cada una de estas permutaciones es la

inversa de la otra.

Funci ón f

En el cálculo de la funci ón f se emplean dos permutaciones, E y P (ver figura

10.3). Dichas permutaciones se detallan en la tabla B.3. E es una permutaci ón de expansi ón, por lo que da como salida 48 bits a partir de los 32 de entrada.

Generaci ón de las Ki

En la figura 10.4 podemos observar el proceso de generaci ón de los 16 valores

de Ki, en el que se emplean dos nuevas permutaciones (EP1 y EP2), detalladas en la

tabla B.4. La primera toma como entrada 64 bits, de los que conserva s ólo 56, mientras

que la segunda toma 56, y devuelve 48.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

280

B. Ayudas a la Implementaci ón

Permutaci ón E

32

1

2

3

4

5

4

5

6

7

8

9

8

9

10

11

12

13

12

13

14

15

16

17

16

17

18

19

20

21

20

21

22

23

24

25

24

25

26

27

28

29

28

29

30

31

32

1

Permutaci ón P

16

7

20

21

29

12

28

17

1

15

23

26

5

18

31

10

2

8

24

14

32

27

3

9

19

13

30

6

22

11

4

25

Cuadro B.3: Permutaciones E y P para la funci ón f de DES.

Permutaci ón EP1

57

49

41

33

25

17

9

1

58

50

42

34

26

18

10

2

59

51

43

35

27

19

11

3

60

52

44

36

63

55

47

39

31

23

15

7

62

54

46

38

30

22

14

6

61

53

45

37

29

21

13

5

28

20

12

4

Permutaci ón EP2

14

17

11

24

1

5

3

28

15

6

21

10

23

19

12

4

26

8

16

7

27

20

13

2

41

52

31

37

47

55

30

40

51

45

33

48

44

49

39

56

34

53

46

42

50

36

29

32

Cuadro B.4: Permutaciones EP1 y EP2 para DES.

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.1. DES

281

B.1.3.

Valores de prueba

Una vez que tengamos implementado nuestro algoritmo DES, conviene asegurar-

se de que funciona adecuadamente. Se incluyen en esta secci ón algunos valores de

prueba, que contienen todos los datos intermedios que se emplean en el algoritmo,

para que el lector pueda compararlos y asegurarse de que su programa es correcto.

Los datos están representados en hexadecimal, de izquierda a derecha.

Subclaves

Clave : 0123456789ABCDEF

Eleccion permutada :F0CCAA0AACCF00 -> L=F0CCAA0 R=AACCF00

Llaves Intermedias (Ki):

K01=0B02679B49A5 K02=69A659256A26 K03=45D48AB428D2 K04=7289D2A58257

K05=3CE80317A6C2 K06=23251E3C8545 K07=6C04950AE4C6 K08=5788386CE581

K09=C0C9E926B839 K10=91E307631D72 K11=211F830D893A K12=7130E5455C54

K13=91C4D04980FC K14=5443B681DC8D K15=B691050A16B5 K16=CA3D03B87032

-----

Clave : 23FE536344578A49

Eleccion permutada :42BE0B26F32C26 -> L=42BE0B2 R=6F32C26

Llaves Intermedias (Ki):

K01=A85AC6026ADB K02=253612F02DC3 K03=661CD4AE821F K04=5EE0505777C2

K05=0EC53A3C8169 K06=EE010FC2FC46 K07=2B8A096CA7B8 K08=0938BAB95C4B

K09=11C2CC6B1F64 K10=10599698C9BA K11=342965455E15 K12=836425DB20F8

K13=C907B4A1DB0D K14=D492A91236B6 K15=939262FD09A5 K16=B0AA1B27E2A4

Codificaci ón

Codificando con

Clave : 0123456789ABCDEF

Texto Claro

:0000000000000000

Bloque permutado :0000000000000000

Paso01 : L=00000000 R=2F52D0BD

Paso02 : L=2F52D0BD R=0CB9A16F

Paso03 : L=0CB9A16F R=15C84A76

Paso04 : L=15C84A76 R=8E857E15

Paso05 : L=8E857E15 R=20AC7F5A

Paso06 : L=20AC7F5A R=526671A7

Paso07 : L=526671A7 R=D1AE9EE9

Paso08 : L=D1AE9EE9 R=6C4BBB2C

Paso09 : L=6C4BBB2C R=92882868

Paso10 : L=92882868 R=694A6072

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

282

B. Ayudas a la Implementaci ón

Paso11 : L=694A6072 R=A0A3F716

Paso12 : L=A0A3F716 R=0A0D3F66

Paso13 : L=0A0D3F66 R=E672C20E

Paso14 : L=E672C20E R=C0DBACF2

Paso15 : L=C0DBACF2 R=0B78E40C

Paso16 : L=0B78E40C R=2F4BCFCD

Resultado sin permutar:2F4BCFCD0B78E40C

Resultado final

:D5D44FF720683D0D

-----

Codificando con

Clave : 0000000000000000

Texto Claro

:123456789ABCDEF0

Bloque permutado :CCFF6600F0AA7855

Paso01 : L=F0AA7855 R=E0D40658

Paso02 : L=E0D40658 R=BA8920BC

Paso03 : L=BA8920BC R=90264C4F

Paso04 : L=90264C4F R=2E3FA1F4

Paso05 : L=2E3FA1F4 R=8D42B315

Paso06 : L=8D42B315 R=8769003E

Paso07 : L=8769003E R=9F14B42F

Paso08 : L=9F14B42F R=E48646E9

Paso09 : L=E48646E9 R=6B185CDC

Paso10 : L=6B185CDC R=4E789B16

Paso11 : L=4E789B16 R=F3AA9FA8

Paso12 : L=F3AA9FA8 R=56397838

Paso13 : L=56397838 R=541678B2

Paso14 : L=541678B2 R=A4C1CE1A

Paso15 : L=A4C1CE1A R=191E936E

Paso16 : L=191E936E R=8C0D6935

Resultado sin permutar:8C0D6935191E936E

Resultado final

:9D2A73F6A9070648

-----

Codificando con

Clave : 23FE536344578A49

Texto Claro

:123456789ABCDEF0

Bloque permutado :CCFF6600F0AA7855

Paso01 : L=F0AA7855 R=A8AEA01C

Paso02 : L=A8AEA01C R=71F914D1

Paso03 : L=71F914D1 R=BC196339

Paso04 : L=BC196339 R=6893EC61

Paso05 : L=6893EC61 R=D5C2706F

Paso06 : L=D5C2706F R=ABD6DDAC

Paso07 : L=ABD6DDAC R=017151AF

Paso08 : L=017151AF R=3FB9D8DA

Paso09 : L=3FB9D8DA R=3AAAC260

Paso10 : L=3AAAC260 R=283E370C

Paso11 : L=283E370C R=FBA98CD4

Paso12 : L=FBA98CD4 R=65FBC266

Paso13 : L=65FBC266 R=FCA1C494

Paso14 : L=FCA1C494 R=F7A90537

Paso15 : L=F7A90537 R=745EBD6A

Paso16 : L=745EBD6A R=86810420

Resultado sin permutar:86810420745EBD6A

Resultado final

:1862EC2AA88BA258

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.1. DES

283

Decodificaci ón

Decodificando con Clave : 0123456789ABCDEF

Texto Cifrado

:0000000000000000

Bloque permutado :0000000000000000

Paso01 : L=00000000 R=01BA8064

Paso02 : L=01BA8064 R=A657157E

Paso03 : L=A657157E R=C4DEA13D

Paso04 : L=C4DEA13D R=0C766133

Paso05 : L=0C766133 R=95AD3310

Paso06 : L=95AD3310 R=C5C12518

Paso07 : L=C5C12518 R=1FFFFF76

Paso08 : L=1FFFFF76 R=33571627

Paso09 : L=33571627 R=CA47EDD9

Paso10 : L=CA47EDD9 R=5B462EE4

Paso11 : L=5B462EE4 R=DB9C4677

Paso12 : L=DB9C4677 R=E0B23FE6

Paso13 : L=E0B23FE6 R=8A5D943F

Paso14 : L=8A5D943F R=3ABFFA37

Paso15 : L=3ABFFA37 R=FE6A1216

Paso16 : L=FE6A1216 R=5CBDAD14

Resultado sin permutar:5CBDAD14FE6A1216

Resultado final

:14AAD7F4DBB4E094

-----

Decodificando con Clave : 0000000000000000

Texto Cifrado

:123456789ABCDEF0

Bloque permutado :CCFF6600F0AA7855

Paso01 : L=F0AA7855 R=E0D40658

Paso02 : L=E0D40658 R=BA8920BC

Paso03 : L=BA8920BC R=90264C4F

Paso04 : L=90264C4F R=2E3FA1F4

Paso05 : L=2E3FA1F4 R=8D42B315

Paso06 : L=8D42B315 R=8769003E

Paso07 : L=8769003E R=9F14B42F

Paso08 : L=9F14B42F R=E48646E9

Paso09 : L=E48646E9 R=6B185CDC

Paso10 : L=6B185CDC R=4E789B16

Paso11 : L=4E789B16 R=F3AA9FA8

Paso12 : L=F3AA9FA8 R=56397838

Paso13 : L=56397838 R=541678B2

Paso14 : L=541678B2 R=A4C1CE1A

Paso15 : L=A4C1CE1A R=191E936E

Paso16 : L=191E936E R=8C0D6935

Resultado sin permutar:8C0D6935191E936E

Resultado final

:9D2A73F6A9070648

-----

Decodificando con Clave : 23FE536344578A49

Texto Cifrado

:123456789ABCDEF0

Bloque permutado :CCFF6600F0AA7855

Paso01 : L=F0AA7855 R=3C272434

Paso02 : L=3C272434 R=0349A079

Paso03 : L=0349A079 R=57DB85A0

Paso04 : L=57DB85A0 R=2456EB13

Paso05 : L=2456EB13 R=0664691A

Paso06 : L=0664691A R=A7E17FC4

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

284

B. Ayudas a la Implementaci ón

Paso07 : L=A7E17FC4 R=5C492B70

Paso08 : L=5C492B70 R=5DA12B1E

Paso09 : L=5DA12B1E R=A8F499FD

Paso10 : L=A8F499FD R=3556E6F4

Paso11 : L=3556E6F4 R=DA8A4F75

Paso12 : L=DA8A4F75 R=D544F4AE

Paso13 : L=D544F4AE R=6A25EFF3

Paso14 : L=6A25EFF3 R=30E29C71

Paso15 : L=30E29C71 R=5F3B58B8

Paso16 : L=5F3B58B8 R=AF054FAE

Resultado sin permutar:AF054FAE5F3B58B8

Resultado final

:F4E5D5EFAA638C43

B.2.

IDEA

Incluimos ahora valores de prueba para el algoritmo IDEA, tanto para las claves

intermedias Zi de codificaci ón y decodificaci ón, como para los valores de las Xi en

cada ronda. Los datos, al igual que en el caso de DES, están representados en he-

xadecimal. N ótese que la interpretaci ón numérica de cada registro de 16 bits es, a

diferencia de algoritmos como MD5, de tipo big endian. Esto significa que el primer

byte en la memoria es el más significativo.

Subclaves

Clave: 0123 4567 89AB CDEF 0123 4567 89AB CDEF

Claves Intermedias Zi (Codificacion):

Ronda 1 : 0123 4567 89AB CDEF 0123 4567

Ronda 2 : 89AB CDEF CF13 579B DE02 468A

Ronda 3 : CF13 579B DE02 468A 37BC 048D

Ronda 4 : 159E 26AF 37BC 048D 159E 26AF

Ronda 5 : 1A2B 3C4D 5E6F 7809 1A2B 3C4D

Ronda 6 : 5E6F 7809 9ABC DEF0 1234 5678

Ronda 7 : 9ABC DEF0 1234 5678 E024 68AC

Ronda 8 : F135 79BD E024 68AC F135 79BD

Ronda 9 : 59E2 6AF3 7BC0 48D1

Claves Intermedias Zi (Decodificacion):

Ronda 1 : 74E6 950D 8440 BBF8 F135 79BD

Ronda 2 : AC8A 1FDC 8643 8794 E024 68AC

Ronda 3 : 6378 EDCC 2110 2CAD 1234 5678

Ronda 4 : 743E 6544 87F7 77DA 1A2B 3C4D

Ronda 5 : 1E4E A191 C3B3 E01F 159E 26AF

Ronda 6 : B2B4 C844 D951 7A66 37BC 048D

Ronda 7 : 963D 21FE A865 A086 DE02 468A

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.2. IDEA

285

Ronda 8 : 3F93 30ED 3211 4F6A 0123 4567

Ronda 9 : 35AA BA99 7655 153B

-----

Clave: 6382 6F7E 8AB1 0453 BFED 93DC D810 9472

Claves Intermedias Zi (Codificacion):

Ronda 1 : 6382 6F7E 8AB1 0453 BFED 93DC

Ronda 2 : D810 9472 FD15 6208 A77F DB27

Ronda 3 : B9B0 2128 E4C7 04DE 114E FFB6

Ronda 4 : 4F73 6042 51C9 8E09 BDFA 2AC4

Ronda 5 : 6C9E E6C0 84A3 931C 137B F455

Ronda 6 : 8822 9DFF 8109 4726 3826 F7E8

Ronda 7 : AB10 453B FED9 3DCD 4C70 4DEF

Ronda 8 : D156 208A 77FD B27B 9B02 128E

Ronda 9 : DFA2 AC41 14EF FB64

Claves Intermedias Zi (Decodificacion):

Ronda 1 : 77BD 53BF EB11 C3BE 9B02 128E

Ronda 2 : CB03 8803 DF76 063B 4C70 4DEF

Ronda 3 : FF28 0127 BAC5 A8F7 3826 F7E8

Ronda 4 : 3921 7EF7 6201 B97D 137B F455

Ronda 5 : 6334 7B5D 1940 8F7B BDFA 2AC4

Ronda 6 : 7FF2 AE37 9FBE 470C 114E FFB6

Ronda 7 : DBFB 1B39 DED8 B150 A77F DB27

Ronda 8 : 3989 02EB 6B8E FB04 BFED 93DC

Ronda 9 : 2E3D 9082 754F B125

-----

Clave: 1111 2222 3333 4444 5555 6666 7777 8888

Claves Intermedias Zi (Codificacion):

Ronda 1 : 1111 2222 3333 4444 5555 6666

Ronda 2 : 7777 8888 4466 6688 88AA AACC

Ronda 3 : CCEE EF11 1022 2244 1111 5555

Ronda 4 : 9999 DDDE 2220 4444 8888 CCCD

Ronda 5 : AB33 33BB BC44 4088 8911 1199

Ronda 6 : 9A22 22AA 7778 8881 1112 2223

Ronda 7 : 3334 4445 5556 6667 0222 2444

Ronda 8 : 4666 6888 8AAA ACCC CEEE F111

Ronda 9 : 888C CCD1 1115 5559

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

286

B. Ayudas a la Implementaci ón

Claves Intermedias Zi (Decodificacion):

Ronda 1 : D747 332F EEEB 199A CEEE F111

Ronda 2 : 2F67 7556 9778 9C34 0222 2444

Ronda 3 : AAAD AAAA BBBB 0005 1112 2223

Ronda 4 : 9791 8888 DD56 54A1 8911 1199

Ronda 5 : E637 43BC CC45 6BF7 8888 CCCD

Ronda 6 : 2AAA DDE0 2222 DFFF 1111 5555

Ronda 7 : CF04 EFDE 10EF 3F3E 88AA AACC

Ronda 8 : 5B6D BB9A 7778 D973 5555 6666

Ronda 9 : 7FF9 DDDE CCCD DFFF

Codificaci ón

Codificando con Clave: 0123 4567 89AB CDEF 0123 4567 89AB CDEF

X1

X2

X3

X4

Texto Claro: 0000 0000 0000 0000

Ronda

1

: 101C 6769 FD5D 8A28

Ronda

2

: 5F13 2568 288F 1326

Ronda

3

: BA0B A218 1F43 D376

Ronda

4

: 700D 8CE7 C7EE 4315

Ronda

5

: 7EC9 402F 8593 58EE

Ronda

6

: 478C FFA0 EBFF 2668

Ronda

7

: 348A 5D2B DFD1 E289

Ronda

8

: 5500 73E7 FAD6 5353

Resultado

: EC29 65C9 EFA7 4710

-----

Codificando con Clave: 6382 6F7E 8AB1 0453 BFED 93DC D810 9472

X1

X2

X3

X4

Texto Claro: 0123 4567 89AB CDEF

Ronda

1

: 14E6 1CEF 9EE7 5701

Ronda

2

: E7A7 30E6 FFE5 B63C

Ronda

3

: 79A2 D4C4 EDCA 4B56

Ronda

4

: 095B 4ACF B0B8 B584

Ronda

5

: C6B0 D5D9 CCF4 C359

Ronda

6

: 4FB9 7BFD BF7A BB4E

Ronda

7

: 8219 6501 11EB B6EC

Ronda

8

: F2A5 C848 9746 6910

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.2. IDEA

287

Resultado

: 7374 4387 DD37 5315

-----

Codificando con Clave: 1111 2222 3333 4444 5555 6666 7777 8888

X1

X2

X3

X4

Texto Claro: 6E63 7F8A 8B8C 8394

Ronda

1

: B370 EDF7 C835 49A3

Ronda

2

: E798 CE57 118E 94EA

Ronda

3

: 6A74 FE29 618B 52D9

Ronda

4

: 8C64 BCB9 5E6C 0DE6

Ronda

5

: 1DE0 615A FB09 D5CD

Ronda

6

: 1872 CF37 E332 557B

Ronda

7

: A47C 34B1 F343 A473

Ronda

8

: C87D F1BD 131B 6E87

Resultado

: A16D DFEC 02D2 1B16

Decodificaci ón

Decodificando con Clave: 0123 4567 89AB CDEF 0123 4567 89AB CDEF

X1

X2

X3

X4

Texto Cifrado: 0000 0000 0000 0000

Ronda

1

: 39EB 36B0 E85D 3959

Ronda

2

: 9FDD 04DB B915 178F

Ronda

3

: C190 33CE 5D6F D44F

Ronda

4

: 3AB1 172A CDBE 744D

Ronda

5

: B874 B1F9 2D7B 9A42

Ronda

6

: 4A76 9475 6BA5 B114

Ronda

7

: BFB0 1DD6 83A0 F4A3

Ronda

8

: 02DE 8519 C980 CBD8

Resultado

: DCD3 8419 FB6E A1E1

-----

Decodificando con Clave: 6382 6F7E 8AB1 0453 BFED 93DC D810 9472

X1

X2

X3

X4

Texto Cifrado: 0123 4567 89AB CDEF

Ronda

1

: 4490 2B63 85DB 5A10

Ronda

2

: 61D8 C3DB 881D 2404

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

288

B. Ayudas a la Implementaci ón

Ronda

3

: C7DB 9502 4CE9 C1FC

Ronda

4

: AFB0 58F8 1920 4DA6

Ronda

5

: E988 A044 DCCC D5A7

Ronda

6

: 0C98 B5C8 CD67 9A95

Ronda

7

: A38B 5982 EA9C D31D

Ronda

8

: 5D35 58BD FD37 4D2F

Resultado

: AACC 8DB9 CE0C 7163

-----

Decodificando con Clave: 1111 2222 3333 4444 5555 6666 7777 8888

X1

X2

X3

X4

Texto Cifrado: 6E63 7F8A 8B8C 8394

Ronda

1

: F4C7 EB12 C708 F851

Ronda

2

: 19DF 90E0 E5F2 B16B

Ronda

3

: 6C8A 4D53 8F75 C3EB

Ronda

4

: 497E BA5D E167 26BB

Ronda

5

: C558 D308 3327 BA26

Ronda

6

: 9114 9FD0 784A 2A59

Ronda

7

: 8C36 FE0F D3B9 420F

Ronda

8

: E658 1F85 E165 736D

Resultado

: 4073 BF43 EC52 8795

B.3.

AES

Para el algoritmo AES vamos a representar, en primer lugar, los conjuntos de sub-

claves Ki para ejemplos de claves de cifrado de 128, 192 y 256 bits respectivamente.

Cada subclave se ha representado como un conjunto de n úmeros hexadecimales de

ocho d´ıgitos, cada uno de los cuales corresponder´ıa a una columna de la matriz de

clave (ver cuadro 10.5, en la página 154), de forma que los dos primeros d´ıgitos del primer n úmero corresponden al valor k0,0, los dos siguientes a k1,0, y as´ı sucesivamente

Clave

: 0123456789ABCDEF0123456789ABCDEF (128 bits)

Total rondas : 10

Subclaves de cifrado:

K00 : 67452301 EFCDAB89 67452301 EFCDAB89

K01 : C09A9E62 2F5735EB 481216EA A7DFBD63

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.3. AES

289

K02 : 3BC6001A 149135F1 5C83231B FB5C9E78

K03 : 87C94A15 93587FE4 CFDB5CFF 3487C287

K04 : 90D15D38 038922DC CC527E23 F8D5BCA4

K05 : D9905E4D DA197C91 164B02B2 EE9EBE16

K06 : 9EB855C3 44A12952 52EA2BE0 BC7495F6

K07 : DCDDC7A9 987CEEFB CA96C51B 76E250ED

K08 : 89E55F7A 1199B181 DB0F749A ADED2477

K09 : 7C700A57 6DE9BBD6 B6E6CF4C 1B0BEB3B

K10 : 9EDF2188 F3369A5E 45D05512 5EDBBE29

Clave

: 8765F4765A8594E74635D86950B78432C756365A15326D0E (192 bits)

Total rondas : 12

Subclaves de cifrado:

K00 : 76F46587 E794855A 69D83546 3284B750

K01 : 5A3656C7 0E6D3215 2F5F59A5 C8CBDCFF

K02 : A113E9B9 93975EE9 C9A1082E C7CC3A3B

K03 : CD991227 0552CED8 A4412761 37D67988

K04 : FE7771A6 39BB4B9D 938BF890 96D93648

K05 : 32981129 054E68A1 FB391907 C282529A

K06 : 2BAEEB98 BD77DDD0 8FEFCCF9 8AA1A458

K07 : 7198BD5F B31AEFC5 8DC34957 30B49487

K08 : BF5B587E 35FAFC26 44624179 F778AEBC

K09 : E8ABF593 D81F6114 6744396A 52BEC54C

K10 : 16DC8435 E1A42A89 4F53BC36 974CDD22

K11 : F008E448 A2B62104 B46AA531 55CE8FB8

K12 : 23AF37C5 B4E3EAE7 44EB0EAF E65D2FAB

Clave

: 8765F4765A8594E74635D86950B78432

C756365A15326DE012345678E214320A (256 bits)

Total rondas : 14

Subclaves de cifrado:

K00 : 76F46587 E794855A 69D83546 3284B750

K01 : 5A3656C7 E06D3215 78563412 0A3214E2

K02 : EE93467C 0907C326 60DFF660 525B4130

K03 : 5A0FD5C3 BA62E7D6 C234D3C4 C806C726

K04 : 197B29B8 107CEA9E 70A31CFE 22F85DCE

K05 : C94E9948 732C7E9E B118AD5A 791E6A7C

K06 : 09CD5BBE 19B1B120 6912ADDE 4BEAF010

K07 : 7AC91582 09E56B1C B8FDC646 C1E3AC3A

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

290

B. Ayudas a la Implementaci ón

K08 : 89B54A27 9004FB07 F91656D9 B2FCA6C9

K09 : 4D79315F 449C5A43 FC619C05 3D82303F

K10 : FC925933 6C96A234 9580F4ED 277C5224

K11 : 81693169 C5F56B2A 3994F72F 0416C710

K12 : 36601ED5 5AF6BCE1 CF76480C E80A1A28

K13 : 1A0E935D DFFBF877 E66F0F58 E279C848

K14 : 64F8A87D 3E0E149C F1785C90 197246B8

Seguidamente representaremos los valores intermedios de cifrado y descifrado

de un bloque de datos para estas tres claves. En cada l´ınea se representa la matriz de

estado (ver cuadro 10.4, página 154), de forma análoga a la que se ha empleado para representar la matriz de clave.

Clave

: 0123456789ABCDEF0123456789ABCDEF (128 bits)

CIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01 : 201D4467 70B06937 8FBFA93C 1D4757CF

Ronda 02 : 0486AEC2 951CEAA5 87BCD35D CE92939C

Ronda 03 : EDEF12D7 E6C5DB1E E2E45A51 8D1F89E9

Ronda 04 : C398674B C9822958 E84F1592 0C4556C0

Ronda 05 : C707CA8E A5C9F7EE C2BB119F D177A68A

Ronda 06 : D4D13E6C 46952EB2 F24BAAEC 6D5929FE

Ronda 07 : 508F2AEF 746D34C0 D13BF25D 288DCBBA

Ronda 08 : E500843A 4302ADE4 5E7E684E DE924E02

Ronda 09 : 5585CDD0 43ADC584 1B81F49C 1EBB3594

Ronda 10 : 74B460BC 4496A083 BDBF6D1A 5B297D80

Cifrado

: 74B460BC 4496A083 BDBF6D1A 5B297D80

DESCIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01

: B319F6D6 F00601B2 031D107C 1E876239

Ronda 02

: 3968DE25 C6266F04 A33BA0FF D7C06313

Ronda 01

: 9706478A 462565BA 164FF166 8FECC208

Ronda 02

: 87C9E8FB 25B34D03 D74DE19C 5FA360A5

Ronda 01

: C808ECD8 A3E29DAE 94293CCB 6304742C

Ronda 02

: 6528BC87 22719EE4 FD034F6F 2EF66891

Ronda 01

: 6FA21399 A1A4D30D 45B2E47D B5A718DF

Ronda 02

: 60C97EE2 7509D120 7C04EB6C 8DE033A3

Ronda 01

: 75C4C689 5B36142C A18AEADD 22F1EB70

Ronda 10

: 3E08FE25 DE23F126 F00782B7 1D64561D

Descifrado: 3E08FE25 DE23F126 F00782B7 1D64561D

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.3. AES

291

Clave

: 8765F4765A8594E74635D86950B78432C756365A15326D0E (192 bits)

CIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01 : 160FB8C4 526A9EC9 D0AFCB25 70621BF8

Ronda 02 : 6FCAABF7 D15A8F7D 9A5EDF3E 37A5BC37

Ronda 03 : B1FE1D21 418746AA 9DCA21F6 FA2C13FA

Ronda 04 : C4A63E0D 9C5AAA4F B71F18E7 DCDA3D84

Ronda 05 : 3AD99ABB AD937C2E 81572FED D9E7C4E8

Ronda 06 : 726C6E54 FA30A491 CF114FD5 289E7E5A

Ronda 07 : E9DC1656 D1F328F5 5BEEFF85 55D84773

Ronda 08 : CCE9EE83 33D87F86 099585FE 6D8EC86F

Ronda 09 : 99765788 F3391287 2F36C0DD 7F13F5B7

Ronda 10 : D732AFDE BED82C86 D7A9B478 DDFE7792

Ronda 11 : 35EBB790 C52B1D57 C609E1EC 8927113C

Ronda 12 : 53C657C8 41EB61D4 1BC2421F 0CC6F928

Cifrado

: 53C657C8 41EB61D4 1BC2421F 0CC6F928

DESCIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01

: 8A102DA6 32EE44E5 0F5EA9B9 85A8D1DB

Ronda 02

: EAC1F79A C3EE67FB F8AAA566 5C1EF22D

Ronda 01

: 109FC072 45BC7406 7AE5206B 0DBD735E

Ronda 02

: FD4EEFDE 3CC42E4F 50BB5BE9 673BA16D

Ronda 01

: 623F847F 2246E5C3 FDADA89E 5AA2D81C

Ronda 02

: 8ADB4E04 97319AB8 52A9E478 F16FEFB9

Ronda 01

: 48A546C4 56732D30 A735D297 8292A0A3

Ronda 02

: C253B1A9 D32607F4 E6D6C966 623A15C6

Ronda 01

: 6076F92C D62A52EA 10204094 B9CB8884

Ronda 02

: 88241F51 3CBD888F 6CBEEFBC F7BB9655

Ronda 01

: 7DA56D33 B33A0C47 7BAA5759 51C5B996

Ronda 12

: 94622E60 11AC4FF2 45976B5C 20D50554

Descifrado: 94622E60 11AC4FF2 45976B5C 20D50554

Clave

: 8765F4765A8594E74635D86950B78432

C756365A15326DE012345678E214320A (256 bits)

CIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01 : 160FB8C4 526A9E27 67C2C272 6DAAE23A

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

292

B. Ayudas a la Implementaci ón

Ronda 02 : 51EA071B CD262D8C 3E4861B7 99CCC7EB

Ronda 03 : 7E32CCE3 2800F0B7 C7C7F049 02E624F7

Ronda 04 : 04FB5028 8002D19E 02A99DAD F2D8E262

Ronda 05 : DACD92A2 DD89451C 4FE6B50C CF2A40F9

Ronda 06 : AEA43CAB 0356A2B2 2AB55277 535718FA

Ronda 07 : B4A5EBA6 412FAC38 A684D752 EF68376F

Ronda 08 : BF57D255 45579B83 B0DFB737 F7DD1C5F

Ronda 09 : C4A02922 46505017 D1CA1979 8C482CE5

Ronda 10 : F35D1EF6 FE10F4BA 326AB6DB 32AE9F4F

Ronda 11 : FCE5A501 D8E0274E D865B039 841FCCFB

Ronda 12 : 7E4AF5E5 C3E6C807 BC97AAF4 38B13938

Ronda 13 : 828F3938 6332099E F21541F6 70E4B9B0

Ronda 14 : 6E8B7B83 674D5839 19356AFA E935735B

Cifrado

: 6E8B7B83 674D5839 19356AFA E935735B

DESCIFRADO:

Bloque

: 7563957A 7C6E9274 6E87F937 A2F4AB04

(128 bits)

Ronda 01

: D90293DE EFCBC692 87620BEC A9E1A3D9

Ronda 02

: 6DF747AF 78006F1F 40DAFBE8 D333B4C3

Ronda 01

: 496618FA C59E36F5 3ABC05F3 7011CFA5

Ronda 02

: 13502465 4FB09CFA 6745440A BFC062A8

Ronda 01

: 639BEB46 25C9AD76 242C9AA9 39066FDC

Ronda 02

: F87CDE96 69CB5302 C8AE6B76 B2FEAF5B

Ronda 01

: FC6D0433 C8E51A5D DE349F93 2D113855

Ronda 02

: 8F872F53 D54D5DAA 1E8CB849 E8B2DC30

Ronda 01

: 33CB011A 1DE03C16 A468722A 2C2A38AA

Ronda 02

: 68CE0A4D 3FB38D7D FC8060FB BCCD1AB9

Ronda 01

: 14D2CABB 7D3AAFE8 48675BF3 B5133A20

Ronda 02

: BEF20489 FF3AD947 5B211677 4EB766DA

Ronda 01

: 28C8A02E B3526182 0C735A92 ACDA0765

Ronda 14

: 691FB267 1134AC93 C77D9FD5 FA385CF1

Descifrado: 691FB267 1134AC93 C77D9FD5 FA385CF1

B.4.

MD5

En esta secci ón detallaremos todos los valores intermedios que se obtienen al apli-

car el algoritmo MD5 a cuatro ejemplos diferentes. El primer campo es la cadena que

se va a procesar, excluyendo las comillas. El segundo es el bloque de 512 bits de

entrada —todos los ejemplos que se han incluido producen un único bloque— escri-

to en hexadecimal, que dicha cadena genera, en el que se puede apreciar c ómo tras

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.4. MD5

293

los c ódigos ASCII correspondientes aparece el valor 80, es decir, un uno seguido de

ceros, y c ómo los últimos 64 bits —correspondientes a los dieciséis últimos d´ıgitos

hexadecimales— representan la longitud total, en bits, de la cadena. Seguidamente,

se especifican los valores de los registros a, b, c y d que se obtienen en cada paso, y

para terminar se da el resultado final de 128 bits, en formato hexadecimal. N ótese

que, en este caso, la representaci ón como valores enteros de los registros de 32 bits es

de tipo little endian, es decir, que el byte que primero aparece en el bloque es el menos

significativo del valor entero correspondiente.

Cadena: "a" (8 bits)

Bloque: 618000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000000800000000000000

Inicio

: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

Ronda

4: a=A56017F4

b=607D9686

c=E65857A7

d=F2D58361

Ronda

8: a=3A9D5BCC

b=A8AF6DA5

c=D31DDC83

d=E0A07DB7

Ronda 12: a=BE580957

b=68493D6A

c=F5FDD933

d=F386BEA6

Ronda 16: a=44244CF8

b=F01E3CE2

c=6360A45F

d=D0FE9B27

Ronda 20: a=9C341767

b=8D25CC66

c=E39FFD23

d=970AB3A9

Ronda 24: a=8C444930

b=373BEAB0

c=2DACB8A3

d=7267097A

Ronda 28: a=F175E3AD

b=C8F891B4

c=87B7F475

d=9D5DF67E

Ronda 32: a=93842E98

b=3745961F

c=94A2EBEE

d=C7043B64

Ronda 36: a=BD607D1E

b=DAF7F308

c=BF8B4F98

d=A6F72085

Ronda 40: a=35A82A7A

b=CF7E60DB

c=5ABE099C

d=89E0EC97

Ronda 44: a=75C151E2

b=CC6F5E9E

c=0C0E6AC4

d=942E0C86

Ronda 48: a=0AC50E18

b=918F93BB

c=8A4A6356

d=79CA7845

Ronda 52: a=CAB8FE42

b=1EE405EB

c=36269C3F

d=6A4DAEEE

Ronda 56: a=982C7861

b=893501C0

c=71FC7709

d=6812A362

Ronda 60: a=FEBD62FD

b=AA4D8AE3

c=53E33526

d=28936A74

Ronda 64: a=52309E0B

b=B8E94637

c=49DEE633

d=50F422F3

Resultado: 0CC175B9C0F1B6A831C399E269772661

Cadena: "test" (32 bits)

Bloque: 746573748000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000002000000000000000

Inicio

: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

Ronda

4: a=DED2A12E

b=DAF27C2C

c=F1824515

d=0F74EDAC

Ronda

8: a=C5ADAD00

b=E95CAA49

c=480530DA

d=B7AC6179

Ronda 12: a=D2B0528F

b=39C7F222

c=E81C99B1

d=3A68633F

Ronda 16: a=70426956

b=02F9BE0B

c=1C3DC813

d=6C99C85B

Ronda 20: a=E6BCA679

b=DCE63C0F

c=A1551890

d=95200EE0

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

294

B. Ayudas a la Implementaci ón

Ronda 24: a=090098DD

b=EB97FA59

c=04BA62B4

d=15C03EC7

Ronda 28: a=7F3420DE

b=E2416EB4

c=89F5CC1E

d=D933566E

Ronda 32: a=1DFC71B1

b=377D2CE4

c=8841B1FD

d=4CB69E35

Ronda 36: a=4F880ED5

b=796304FE

c=52B55B13

d=38CC24FB

Ronda 40: a=EF7A4FEE

b=42FB05F0

c=0F3B052F

d=A79F8A38

Ronda 44: a=6A509FA0

b=4995D409

c=190065DE

d=9009C912

Ronda 48: a=95B45DE9

b=A5B6C91B

c=412D4C7B

d=D02E07C9

Ronda 52: a=F09D8296

b=32C92920

c=10F833EA

d=FAA53851

Ronda 56: a=79F7507F

b=CA8F6F9D

c=19E4244E

d=3DE059DA

Ronda 60: a=1176200C

b=82BC77EB

c=997A7EAD

d=08C989F3

Ronda 64: a=66266C08

b=840575BD

c=EA9401CC

d=E681D2B0

Resultado: 098F6BCD4621D373CADE4E832627B4F6

Cadena: "experimento" (88 bits)

Bloque: 6578706572696D656E746F80000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000005800000000000000

Inicio

: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

Ronda

4: a=5D5C19A7

b=46C38F9E

c=9D66E599

d=C18D8C6C

Ronda

8: a=5A1B370A

b=F00B0D14

c=C2337BF6

d=2BBE5411

Ronda 12: a=999F88DB

b=DD5473D0

c=4E1035F1

d=860ED16D

Ronda 16: a=827A70F9

b=5225BF6B

c=D7A665AF

d=FE0775F8

Ronda 20: a=878C66F1

b=40BEF53B

c=8A5ABAE0

d=23DC997C

Ronda 24: a=0C045617

b=468F7087

c=46F386B6

d=960E2AF4

Ronda 28: a=E34880F5

b=B0C9B131

c=58BCA90E

d=0790302C

Ronda 32: a=6BEE14CD

b=538F2F39

c=FD147E9E

d=249FB3A8

Ronda 36: a=B2623128

b=34B78DF5

c=D3D94D7C

d=0AB7F770

Ronda 40: a=DB335B6F

b=5A3DCDEA

c=A5C3B46A

d=7E4B5806

Ronda 44: a=B27D89A2

b=6841550D

c=257A8EB5

d=B9C1C281

Ronda 48: a=7D088655

b=789F1C2C

c=060B818B

d=02DB24DB

Ronda 52: a=0E3F05A0

b=545B70C4

c=7660DA54

d=A86030D5

Ronda 56: a=AABCB829

b=47D564F9

c=6CDBF4D6

d=F1E81106

Ronda 60: a=A4298EC8

b=B5246707

c=B26DA205

d=DBB56A4C

Ronda 64: a=553D262F

b=A4F73804

c=55138A82

d=83130C35

Resultado: 304982BC8DE3C4948067CEEDAB604593

Cadena: "kriptopolis" (88 bits)

Bloque: 6B726970746F706F6C697380000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000005800000000000000

Inicio

: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.5. SHA-1

295

Ronda

4: a=D9D91CAC

b=24B06776

c=E5B4EE28

d=3E1ABFD1

Ronda

8: a=2CC5E57D

b=C013F682

c=937C5146

d=5C1CDC32

Ronda 12: a=F17F3A1B

b=3AF41990

c=84045E90

d=45F1B4B2

Ronda 16: a=45781161

b=499471DB

c=9521F17B

d=2DD56DA0

Ronda 20: a=E1077423

b=E2B7D25E

c=288A1472

d=382A7B92

Ronda 24: a=DDD330B8

b=0C9BCC03

c=060CC302

d=2A9772C2

Ronda 28: a=96B3C004

b=7E2F1EAC

c=2F65093C

d=5B41A3FC

Ronda 32: a=55C59563

b=E8FC5DA2

c=25D8CAE4

d=3D5795BE

Ronda 36: a=4C297776

b=6518EC96

c=0F032874

d=078CF1A4

Ronda 40: a=441953E2

b=73C80FB2

c=2B495D85

d=B6DBBFED

Ronda 44: a=24C417D7

b=8A6D297C

c=C3FD834A

d=81C5AC48

Ronda 48: a=F94C1268

b=18268270

c=39A9E934

d=E9406B33

Ronda 52: a=55703A51

b=F4D6A7B3

c=EF9EDE35

d=460E123F

Ronda 56: a=42081E66

b=50A3C1E5

c=F85BC50F

d=ABE4D855

Ronda 60: a=F4D3A73C

b=9E487E08

c=BEAE5BB7

d=8DC8E081

Ronda 64: a=DC5B1FD3

b=C48CAC59

c=72B24EFA

d=3AAD460B

Resultado: D442A043E2575AB4F82B6D0B819ADF4A

B.5.

SHA-1

Se incluyen aqu´ı los valores intermedios del algoritmo SHA-1 para las mismas

cuatro cadenas de la secci ón anterior. Recordemos que en este caso el orden de los

bytes a la hora de representar enteros es big endian, de forma que, por ejemplo, en la

representaci ón de la longitud b del mensaje total el último byte es el menos significa-

tivo.

Cadena: "a" (8 bits)

Bloque: 618000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000000000000000000008

Ini: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

e=C3D2E1F0

R02: a=8D43E36D

b=013498B3

c=59D148C0

d=7BF36AE2

e=98BADCFE

R04: a=98ECF029

b=178D2F08

c=6350F8DB

d=C04D262C

e=59D148C0

R06: a=24FDDFA9

b=9531EFB8

c=663B3C0A

d=05E34BC2

e=6350F8DB

R08: a=1706BD51

b=628293E2

c=493F77EA

d=254C7BEE

e=663B3C0A

R10: a=B48452FD

b=E6E3DBB3

c=45C1AF54

d=98A0A4F8

e=493F77EA

R12: a=06A530AF

b=910E0091

c=6D2114BF

d=F9B8F6EC

e=45C1AF54

R14: a=94A32E14

b=DE9B35CA

c=C1A94C2B

d=64438024

e=6D2114BF

R16: a=2ECAE907

b=3CD2D518

c=2528CB85

d=B7A6CD72

e=C1A94C2B

R18: a=16FFEBFC

b=5FADB00B

c=CBB2BA41

d=0F34B546

e=2528CB85

R20: a=3AD1E596

b=AB5979F5

c=05BFFAFF

d=D7EB6C02

e=CBB2BA41

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

296

B. Ayudas a la Implementaci ón

R22: a=57668EF8

b=0DD747B1

c=8EB47965

d=6AD65E7D

e=05BFFAFF

R24: a=587C3B69

b=57212656

c=15D9A3BE

d=4375D1EC

e=8EB47965

R26: a=37225DA7

b=94A32676

c=561F0EDA

d=95C84995

e=15D9A3BE

R28: a=D72C806E

b=C073A57E

c=CDC89769

d=A528C99D

e=561F0EDA

R30: a=229C3156

b=831D03EB

c=B5CB201B

d=B01CE95F

e=CDC89769

R32: a=94F65775

b=B4F37984

c=88A70C55

d=E0C740FA

e=B5CB201B

R34: a=C174A741

b=2A032F9B

c=653D95DD

d=2D3CDE61

e=88A70C55

R36: a=25E95D6B

b=481844C5

c=705D29D0

d=CA80CBE6

e=653D95DD

R38: a=42285BB1

b=FC08D9F3

c=C97A575A

d=52061131

e=705D29D0

R40: a=AC15A69D

b=A3B72B37

c=508A16EC

d=FF02367C

e=C97A575A

R42: a=504F64C1

b=E6CD1F2C

c=6B0569A7

d=E8EDCACD

e=508A16EC

R44: a=7D09F328

b=B45FC818

c=5413D930

d=39B347CB

e=6B0569A7

R46: a=B44DB2B6

b=7B7354D5

c=1F427CCA

d=2D17F206

e=5413D930

R48: a=F9ADD677

b=C43968F2

c=AD136CAD

d=5EDCD535

e=1F427CCA

R50: a=2D5EDB70

b=5432B748

c=FE6B759D

d=B10E5A3C

e=AD136CAD

R52: a=7C1B92B1

b=5C350FCB

c=0B57B6DC

d=150CADD2

e=FE6B759D

R54: a=C530EAD6

b=C60F44D9

c=5F06E4AC

d=D70D43F2

e=0B57B6DC

R56: a=AF4F737E

b=D7A11B36

c=B14C3AB5

d=7183D136

e=5F06E4AC

R58: a=68346C20

b=81923337

c=ABD3DCDF

d=B5E846CD

e=B14C3AB5

R60: a=C682F53F

b=80C84724

c=1A0D1B08

d=E0648CCD

e=ABD3DCDF

R62: a=CEEC2B04

b=193B35BD

c=F1A0BD4F

d=203211C9

e=1A0D1B08

R64: a=377A9914

b=829ED919

c=33BB0AC1

d=464ECD6F

e=F1A0BD4F

R66: a=CD6D6C13

b=DAC285B9

c=0DDEA645

d=60A7B646

e=33BB0AC1

R68: a=D3FCDF01

b=639762AA

c=F35B5B04

d=76B0A16E

e=0DDEA645

R70: a=C4B7981A

b=3E5A0CC1

c=74FF37C0

d=98E5D8AA

e=F35B5B04

R72: a=42650D26

b=26F94DF5

c=B12DE606

d=4F968330

e=74FF37C0

R74: a=65E8D295

b=9487B5C9

c=90994349

d=49BE537D

e=B12DE606

R76: a=CE8E1721

b=064CC166

c=597A34A5

d=6521ED72

e=90994349

R78: a=22890379

b=A6E259D2

c=73A385C8

d=81933059

e=597A34A5

R80: a=1FB2C136

b=0AD7FC73

c=48A240DE

d=A9B89674

e=73A385C8

Resultado: 86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8

Cadena: "test" (32 bits)

Bloque: 746573748000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000000000000000000020

Ini: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

e=C3D2E1F0

R02: a=69F251EF

b=141A0C27

c=59D148C0

d=7BF36AE2

e=98BADCFE

R04: a=D698D619

b=AD78FF44

c=DA7C947B

d=C5068309

e=59D148C0

R06: a=27A84E9E

b=4FED19DC

c=75A63586

d=2B5E3FD1

e=DA7C947B

R08: a=D1725C31

b=8FBF195D

c=89EA13A7

d=13FB4677

e=75A63586

R10: a=C43997BA

b=985E8C80

c=745C970C

d=63EFC657

e=89EA13A7

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.5. SHA-1

297

R12: a=E671210F

b=DF9D4AEF

c=B10E65EE

d=2617A320

e=745C970C

R14: a=3A4BF38D

b=4E12148F

c=F99C4843

d=F7E752BB

e=B10E65EE

R16: a=0690C1E0

b=4F049361

c=4E92FCE3

d=D3848523

e=F99C4843

R18: a=28D8607D

b=ED827927

c=01A43078

d=53C124D8

e=4E92FCE3

R20: a=A594E7C5

b=D7E2BB59

c=4A36181F

d=FB609E49

e=01A43078

R22: a=3E7F1747

b=89CF51DE

c=696539F1

d=75F8AED6

e=4A36181F

R24: a=08667DF4

b=C1714F43

c=CF9FC5D1

d=A273D477

e=696539F1

R26: a=F78CDC7E

b=63420FC9

c=02199F7D

d=F05C53D0

e=CF9FC5D1

R28: a=301C99FA

b=C11D04BC

c=BDE3371F

d=58D083F2

e=02199F7D

R30: a=31E08911

b=2563E943

c=8C07267E

d=3047412F

e=BDE3371F

R32: a=63D791B9

b=99B4D18E

c=4C782244

d=C958FA50

e=8C07267E

R34: a=66AA9C75

b=0525A937

c=58F5E46E

d=A66D3463

e=4C782244

R36: a=3E4E8518

b=BF1CD105

c=59AAA71D

d=C1496A4D

e=58F5E46E

R38: a=B32B1931

b=18AB89BD

c=0F93A146

d=6FC73441

e=59AAA71D

R40: a=80F549BF

b=ED3E0D75

c=6CCAC64C

d=462AE26F

e=0F93A146

R42: a=04BDFD86

b=B6353C2E

c=E03D526F

d=7B4F835D

e=6CCAC64C

R44: a=875C7539

b=02132FC0

c=812F7F61

d=AD8D4F0B

e=E03D526F

R46: a=567A94C8

b=64C62440

c=61D71D4E

d=0084CBF0

e=812F7F61

R48: a=CA454844

b=AE30686B

c=159EA532

d=19318910

e=61D71D4E

R50: a=D24F0B76

b=F039F33C

c=32915211

d=EB8C1A1A

e=159EA532

R52: a=E0D4BBAF

b=46A89C74

c=B493C2DD

d=3C0E7CCF

e=32915211

R54: a=3F042183

b=9E1A2F5D

c=F8352EEB

d=11AA271D

e=B493C2DD

R56: a=13496F6A

b=ACB50C2A

c=CFC10860

d=67868BD7

e=F8352EEB

R58: a=646566EF

b=B3E7F37D

c=84D25BDA

d=AB2D430A

e=CFC10860

R60: a=1387E9E4

b=2A106003

c=D91959BB

d=6CF9FCDF

e=84D25BDA

R62: a=FC461EB0

b=7A8ACB6F

c=04E1FA79

d=CA841800

e=D91959BB

R64: a=F00B178D

b=4E7E642E

c=3F1187AC

d=DEA2B2DB

e=04E1FA79

R66: a=3810D68A

b=39938A7E

c=7C02C5E3

d=939F990B

e=3F1187AC

R68: a=02152E1A

b=11876ADB

c=8E0435A2

d=8E64E29F

e=7C02C5E3

R70: a=DFEB6670

b=69F18CE7

c=80854B86

d=C461DAB6

e=8E0435A2

R72: a=25C49F67

b=4F6EC7D7

c=37FAD99C

d=DA7C6339

e=80854B86

R74: a=A3CEFF95

b=882DA0C9

c=C97127D9

d=D3DBB1F5

e=37FAD99C

R76: a=5173678F

b=24CEC91C

c=68F3BFE5

d=620B6832

e=C97127D9

R78: a=0E44ADD6

b=0D7E5447

c=D45CD9E3

d=0933B247

e=68F3BFE5

R80: a=42056CE4

b=DCE3F01D

c=83912B75

d=C35F9511

e=D45CD9E3

Resultado: A94A8FE5CCB19BA61C4C0873D391E987982FBBD3

Cadena: "experimento" (88 bits)

Bloque: 6578706572696D656E746F80000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000000000000000000058

Ini: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

e=C3D2E1F0

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

298

B. Ayudas a la Implementaci ón

R02: a=7EBB5D72

b=052D0918

c=59D148C0

d=7BF36AE2

e=98BADCFE

R04: a=75DD0E53

b=B4F0DF48

c=9FAED75C

d=014B4246

e=59D148C0

R06: a=BF3915DD

b=05A16415

c=DD774394

d=2D3C37D2

e=9FAED75C

R08: a=9B5914B1

b=0E916082

c=6FCE4577

d=41685905

e=DD774394

R10: a=E406B102

b=F304AC67

c=66D6452C

d=83A45820

e=6FCE4577

R12: a=7E5DA8FA

b=ADCB3390

c=B901AC40

d=FCC12B19

e=66D6452C

R14: a=C474F542

b=860F061D

c=9F976A3E

d=2B72CCE4

e=B901AC40

R16: a=14CC37BD

b=519A992D

c=B11D3D50

d=6183C187

e=9F976A3E

R18: a=B07CDCEE

b=DAD274C5

c=45330DEF

d=5466A64B

e=B11D3D50

R20: a=DBA8A460

b=3C5ABB3E

c=AC1F373B

d=76B49D31

e=45330DEF

R22: a=CF0B1462

b=D9B84C74

c=36EA2918

d=8F16AECF

e=AC1F373B

R24: a=00FA7488

b=B5017A00

c=B3C2C518

d=366E131D

e=36EA2918

R26: a=678F9C3D

b=55535315

c=003E9D22

d=2D405E80

e=B3C2C518

R28: a=36ED4BC6

b=2C053172

c=59E3E70F

d=5554D4C5

e=003E9D22

R30: a=D46C6C32

b=CEF800E2

c=8DBB52F1

d=8B014C5C

e=59E3E70F

R32: a=31B75696

b=7109F222

c=B51B1B0C

d=B3BE0038

e=8DBB52F1

R34: a=7CAE903B

b=5BC99A55

c=8C6DD5A5

d=9C427C88

e=B51B1B0C

R36: a=7B134BC7

b=522A73DB

c=DF2BA40E

d=56F26695

e=8C6DD5A5

R38: a=AF987330

b=A90C28E7

c=DEC4D2F1

d=D48A9CF6

e=DF2BA40E

R40: a=3A793DF9

b=8847DFE3

c=2BE61CCC

d=EA430A39

e=DEC4D2F1

R42: a=79238476

b=B7083A1D

c=4E9E4F7E

d=E211F7F8

e=2BE61CCC

R44: a=6381087C

b=860C3C86

c=9E48E11D

d=6DC20E87

e=4E9E4F7E

R46: a=4601F05C

b=2DCC49C0

c=18E0421F

d=A1830F21

e=9E48E11D

R48: a=8EB6C83B

b=1C149969

c=11807C17

d=0B731270

e=18E0421F

R50: a=D5D79282

b=5666238B

c=E3ADB20E

d=4705265A

e=11807C17

R52: a=0C947120

b=0823F989

c=B575E4A0

d=D59988E2

e=E3ADB20E

R54: a=C218BAA5

b=920A30EA

c=03251C48

d=4208FE62

e=B575E4A0

R56: a=B5022079

b=F30D765D

c=70862EA9

d=A4828C3A

e=03251C48

R58: a=E70F5DFB

b=766D14A3

c=6D40881E

d=7CC35D97

e=70862EA9

R60: a=110BCB99

b=46BA94E7

c=F9C3D77E

d=DD9B4528

e=6D40881E

R62: a=F200718D

b=63A74A72

c=4442F2E6

d=D1AEA539

e=F9C3D77E

R64: a=23F6D36A

b=21C432A4

c=7C801C63

d=98E9D29C

e=4442F2E6

R66: a=C210491B

b=7973CC2D

c=88FDB4DA

d=08710CA9

e=7C801C63

R68: a=34DC1778

b=383D5D93

c=F0841246

d=5E5CF30B

e=88FDB4DA

R70: a=674E55A5

b=463558B7

c=0D3705DE

d=CE0F5764

e=F0841246

R72: a=E452151C

b=DB6379D9

c=59D39569

d=D18D562D

e=0D3705DE

R74: a=CE40A960

b=95A1780C

c=39148547

d=76D8DE76

e=59D39569

R76: a=42B352EB

b=7994D2F8

c=33902A58

d=25685E03

e=39148547

R78: a=E3B07323

b=ADDFDC73

c=D0ACD4BA

d=1E6534BE

e=33902A58

R80: a=21D68E46

b=6F2351DF

c=F8EC1CC8

d=EB77F71C

e=D0ACD4BA

Resultado: 891BB1475EF0FD6891A6F9C6FBAA4B92947FB6AA

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

B.5. SHA-1

299

Cadena: "kriptopolis" (88 bits)

Bloque: 6B726970746F706F6C697380000000000000000000000000

000000000000000000000000000000000000000000000000

00000000000000000000000000000058

Ini: a=67452301

b=EFCDAB89

c=98BADCFE

d=10325476

e=C3D2E1F0

R02: a=400081DD

b=0B270223

c=59D148C0

d=7BF36AE2

e=98BADCFE

R04: a=61557CFE

b=D9886E7F

c=50002077

d=C2C9C088

e=59D148C0

R06: a=B62CB646

b=3145031C

c=98555F3F

d=F6621B9F

e=50002077

R08: a=2D45AF5F

b=46807E85

c=AD8B2D91

d=0C5140C7

e=98555F3F

R10: a=F43BF9F6

b=A85EF180

c=CB516BD7

d=51A01FA1

e=AD8B2D91

R12: a=072108C8

b=697D55A9

c=BD0EFE7D

d=2A17BC60

e=CB516BD7

R14: a=DF29879C

b=3503FAD9

c=01C84232

d=5A5F556A

e=BD0EFE7D

R16: a=0678F27A

b=481EB2E3

c=37CA61E7

d=4D40FEB6

e=01C84232

R18: a=A15AB731

b=3EE9ADE2

c=819E3C9E

d=D207ACB8

e=37CA61E7

R20: a=AB2F7D99

b=5704D5FE

c=6856ADCC

d=8FBA6B78

e=819E3C9E

R22: a=28A91B1F

b=D90DB07B

c=6ACBDF66

d=95C1357F

e=6856ADCC

R24: a=C2BE33DB

b=4B342F34

c=CA2A46C7

d=F6436C1E

e=6ACBDF66

R26: a=1DAB7331

b=27F1416F

c=F0AF8CF6

d=12CD0BCD

e=CA2A46C7

R28: a=D85BDF45

b=AB5927D5

c=476ADCCC

d=C9FC505B

e=F0AF8CF6

R30: a=43B8E8A4

b=74386A94

c=7616F7D1

d=6AD649F5

e=476ADCCC

R32: a=3DAAE44F

b=774E7172

c=10EE3A29

d=1D0E1AA5

e=7616F7D1

R34: a=4FDC1B88

b=5D5610F1

c=CF6AB913

d=9DD39C5C

e=10EE3A29

R36: a=7E58EA7B

b=EA9DF552

c=13F706E2

d=5755843C

e=CF6AB913

R38: a=B94B8784

b=7CDB656F

c=DF963A9E

d=BAA77D54

e=13F706E2

R40: a=19B56EA2

b=88361E28

c=2E52E1E1

d=DF36D95B

e=DF963A9E

R42: a=C5C402CE

b=B4AA1C2E

c=866D5BA8

d=220D878A

e=2E52E1E1

R44: a=087893C1

b=E5C8DD17

c=B17100B3

d=AD2A870B

e=866D5BA8

R46: a=10C39FA5

b=8781E3DC

c=421E24F0

d=F9723745

e=B17100B3

R48: a=FCA2E4E9

b=00DB97DB

c=4430E7E9

d=21E078F7

e=421E24F0

R50: a=29675B14

b=E07CFB83

c=7F28B93A

d=C036E5F6

e=4430E7E9

R52: a=30C83C92

b=E8C85C50

c=0A59D6C5

d=F81F3EE0

e=7F28B93A

R54: a=873B832C

b=4D5329BE

c=8C320F24

d=3A321714

e=0A59D6C5

R56: a=EA05D012

b=5EEE15EE

c=21CEE0CB

d=9354CA6F

e=8C320F24

R58: a=2E5309FD

b=C3E8ACC8

c=BA817404

d=97BB857B

e=21CEE0CB

R60: a=63129A6C

b=9D77469B

c=4B94C27F

d=30FA2B32

e=BA817404

R62: a=10600A4F

b=EB9C641B

c=18C4A69B

d=E75DD1A6

e=4B94C27F

R64: a=B67A32B2

b=7326BFF5

c=C4180293

d=FAE71906

e=18C4A69B

R66: a=844649E5

b=E8A707A8

c=AD9E8CAC

d=5CC9AFFD

e=C4180293

R68: a=F701EFA0

b=5EF992A0

c=61119279

d=3A29C1EA

e=AD9E8CAC

R70: a=57E47E05

b=70BF4F9C

c=3DC07BE8

d=17BE64A8

e=61119279

R72: a=A84D0A88

b=4B833CB9

c=55F91F81

d=1C2FD3E7

e=3DC07BE8

R74: a=0B3CD293

b=2B01A32B

c=2A1342A2

d=52E0CF2E

e=55F91F81

R76: a=C79E506D

b=A1584161

c=C2CF34A4

d=CAC068CA

e=2A1342A2

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

300

B. Ayudas a la Implementaci ón

R78: a=761449FA

b=DB91E0C7

c=71E7941B

d=68561058

e=C2CF34A4

R80: a=8AB36355

b=2F2C07DB

c=9D85127E

d=F6E47831

e=71E7941B

Resultado: F1F886561EF9B364363FEF7C0716CCA735BA760B

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Bibliograf´ıa

[1] Bruce Schneier. Applied Cryptography. Second Edition. John Wiley & sons, 1996.

[2] Alfred J. Menezes, Paul C. van Oorschot y Scott A. Vanstone. Handbook of Applied

Cryptography. CRC Press, 1996.

[3] Seberry, J., Pieprzyk, J. Cryptography. An Introduction to Computer Security. Pren-

tice Hall. Australia, 1989.

[4] Wikipedia.

http://www.wikipedia.org

[5] Juan Manuel Velázquez y Arturo Quirantes. Manual de PGP 5.53i. 1998.

[6] John D. Lipson. Elements of Algebra and Algebraic Computing. Addison-Wesley,

1981.

[7] RFC 2440: Open PGP Message Format.

http://www.ietf.org/rfc/rfc2440.txt

[8] RFC 1750: Randomness Recommendations for Security.

http://www.it.kth.se/docs/rfc/rfcs/rfc1750.txt

[9] Página Web de Kriptópolis.

http://www.kriptopolis.org

[10] Página Web de PGP International.

http://www.pgpi.org

[11] Página Web de Zedz Consultants (antes Replay).

http://www.zedz.net

[12] Página Web de los Laboratorios RSA.

http://rsasecurity.com/rsalabs/

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

302

BIBLIOGRAFÍA

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Índice alfabético

Acceso a los Datos

Blum Blum Shub, Generador Pseudoalea-

Control de, 38

torio, 123

AES, 152

Bomba, 134

ByteSub, 155

CBC, Cipher Book Chaining Mode, 161

Cálculo de Subclaves, 157

Certificados Digitales, 232

DesplazarFila, 156

Listas de Revocaci ón de, 234, 236

Estructura, 153

X.509, 232

MezclarColumnas, 157

César, Algoritmo de, 128

Rondas, 155

CFB, Cipher-Feedback Mode, 162

Seguridad, 159

Chino del Resto, Teorema, 76

Valores de Prueba, 288

Cicl ómetro, 134

AH, IP Authentication Header, 229

Cifrado de Producto, 141

Algoritmo, 59

Cifrados de Flujo, 167

Algoritmos

Cifrados por Bloques, 141

Polinomiales, 63

Modo CBC, 161

Probabil´ısticos, 65

Modo CFB, 162

Subexponenciales, 63

Modo ECB, 159

Teor´ıa de, 60

Modo OFB, 173

Amenaza, 258

Modos de Operaci ón, 159

Anonimato, 39

Clave de Sesi ón, 115

Aplicaci ón, Capa de, 225

Clave Publica

Aritmética Modular, 69

Certificados de Revocaci ón de, 234

Armaduras ASCII, 246

Clave Privada, 178

Ataque, 35, 257

Clave P ública, 178

Autentificaci ón, 38, 178, 231

Claves Débiles, 33

de un Dispositivo, 39

en DES, 147

del Mensaje, 39

en RSA, 185

mediante Contrase ˜nas, 39, 237

C ódigo

por Desaf´ıo, 240

Auditor´ıa de, 261

Bits Aleatorios, Obtenci ón de, 119

C ódigos de Redundancia C´ıclica, 52

Black Hat, 259

Colossus, Máquina, 137

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

304

ÍNDICE ALFAB ÉTICO

Common Vulnerabilites and Exposures (CVE), Da ˜no, 257

259

DES, 146

Complejidad Algor´ıtmica, 61

Cláves Débiles, 147

Clases, 64

Con S-Cajas Alternativas, 150

Orden de Complejidad, 61

Con Subclaves Independientes, 149

Compresi ón de Datos, 51

Generalizado, 149

Computaci ón Cuántica, 274

M últiple, 149

Confidencialidad, 37, 256

Permutaciones de, 277

Confusi ón, 53

S-Cajas, 277

Conocimiento Cero

Valores de Prueba, 281

Demostrador, 216

Desinformaci ón, 52

Desarrollo de una prueba, 217

Diccionario, Ataque de, 238

Elementos, 216

Diferencial, Par, 164

Modos de Operaci ón, 218

Diffie–Hellman, Algoritmo de, 188

Problema, 216

Diffie-Hellman

Protocolos de, 215

Problema de, 78

Pruebas de, 215

Difusi ón, 53

Secreto, 216

Disponibilidad, 37, 256

sobre Grafos, 218

Distancia de Unicidad, 53

Verificador, 216

DSA, Algoritmo, 191

Contrase ˜nas, 237

ECB, Electronic Codebook, 159

Criptoanálisis, 31

ElGamal

Diferencial, 35, 163

Cifrado, 190

Imposible, 164

Firma Digital, 189

Lineal, 35, 164

ElGamal, Algoritmo de, 189

Criptograf´ıa, 31

Sobre Curvas El´ıpticas, 193

Asimétrica, 177

ENIGMA, Máquina, 127, 133, 135

Cuántica, 273

Enlace, Capa de, 224

Criptograma, 32

Enteros Largos

Criptolog´ıa, 32

Aritmética Modular, 113

Criptoanálisis, 34

Divisi ón, 109

Criptosistema, 32

Producto, 106

Asimétrico, 32

Representaci ón, 103

Seguro de Shannon, 49, 53

Resta, 105

Simétrico, 32

Suma, 104

CRL, 234, 236

Entrop´ıa, 45

Curvas El´ıpticas, 93

Condicionada, 48

en GF (n), 97

Ley de Entrop´ıas Totales, 48

en R, 94

Teorema de Disminuci ón de, 48

Grupo de, 94

Escáneres, 261

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE ALFAB ÉTICO

305

Escitalo, 131

IKE, 229

ESP, Encapsulating Security Payload, 229

Informaci ón

Esteganograf´ıa, 34, 207

Propiedades, 255

detecci ón, 213

Informaci ón

en archivos de texto, 208

Cantidad de, 43

en archivos multimedia, 209

entre dos Variables, 48

Estructura de Grupo, Cifrados con, 144

Teor´ıa de la, 43

Euclides

Infraestructuras de Clave P ública, 235

Algoritmo de, 71

Integridad, 37, 256

Algoritmo Extendido de, 74

Intermediario, Ataque del

Euler

En Algoritmos Asimétricos, 180

Funci ón de, 73

En Pruebas de Conocimiento Cero, 219

Expectativas de Seguridad, 268

Internet, Protocolos, 224

Exploit, 258, 264

Invarianza

Exponenciaci ón, 77

Principio de, 60

Algoritmo Rápido de, 77

Inversa

Existencia de, 72

Factorizaci ón, 79

IPsec, Protocolos, 228

Algoritmos de, 80

Método de Fermat, 81

Kasiski, Método de, 130

Método de Pollard, 81

Kerberos, 229

Métodos Cuadráticos, 82

Lenguaje

Feistel, Red de, 142

Índice Absoluto de un, 51

Fermat

Índice de un, 50

Peque ˜no Teorema de, 74

Logaritmos Discretos, 77

Firma Digital, 232

Problema de los, 78

F´ısica, Capa, 224

Problema en Curvas El´ıpticas, 98

Full Disclosure, 263

Lorenz, Cifrado de, 127, 137, 138

Funciones Resumen, 195

Longitud Adecuada, 196

MAC, Message Autentication Codes, 195, 204

Propiedades, 195

Marcas de Agua, 213

MD5, 197

Generadores de Secuencia

Valores de Prueba, 292

As´ıncronos, 169

MDC

S´ıncronos, 168

Colisi ón, 203

GnuPG, 244

Estructura, 197

Hacker, 259

Seguridad, 203

HMAC, 204

MDC, Modification Detection Codes, 195

Mensaje anfitri ón, 207

IDEA, 150

Mensaje huésped, 207

Valores de Prueba, 284

Monoalfabético General, Cifrados, 129

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

306

ÍNDICE ALFAB ÉTICO

Monoalfabéticos, Cifrados, 128

No Lineales, 171

Criptoanálisis, 129

Riesgo, 258

Rijndael, 152

No Repudio, 38

RSA, Algoritmo, 182

N úmeros Primos

Seguridad, 184

Importancia de, 79

Vulnerabilidades, 185

Primos Fuertes, 86

S-Cajas, 145

OFB, Output Feedback Mode, 173

de DES, 277

Paradoja del Cumplea ˜nos, 196

de RC4, 173

PGP, 243

Sal, 238

Codificaci ón de Mensajes, 244

SEAL, Algoritmo, 174

Firma Digital, 245

Secuencias Aleatorias

Gesti ón de Claves, 248

Criptográficamente, 117

Revocaci ón de Claves, 249

Estad´ısticamente, 116

PKI, 235

Generaci ón de, 118

Polialfabéticos, Cifrados, 129

Totalmente, 117

Criptoanálisis, 130

Seguridad, 255

Polinomios

de la Informaci ón, 37

Anillos de, 86

del Canal, 38

Anillos en

Expectativas de, 268

Zn, 88

Pol´ıticas de Seguridad, 267

F´ısica, 38

Formales, 269

Pol´ıticas de, 267

Procesales, 268

Sesgo, eliminaci ón, 121

Probabilidad

Mediante Bits de Paridad, 121

Ley de Probabilidad Total, 48

Mediante Funciones Resumen, 122

PURPLE, Máquina, 136

Método Von Neumann, 122

SHA-1, 201

Rabin

Valores de Prueba, 295

Algoritmo de, 190

SIGABA, Máquina, 136

RC4, Algoritmo, 173

Signatura, 178, 195

Red, Capa de, 225

SKIP, 229

Redes Privadas Virtuales, 225

Skipjack, Algoritmo, 164

Redes Trampa, 261

Software Libre, 25

Redundancia, 50

Solitaire, Algoritmo, 25

de un Lenguaje, 51

SSL, Protocolo, 226

Índice de, 51

T úneles, 227

Registros de Desplazamiento Retroalimen- Stecker, 133

tados, 170

Suplantaci ón, 38

Combinaci ón de, 172

Sustituci ón Af´ın, Cifrado de, 129

Lineales, 171

Sustitucion Homof ónica, Cifrados de, 130

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

ÍNDICE ALFAB ÉTICO

307

Sustituci ón, Cifrados de, 128

TCP/IP, Protocolos, 224

Tests de Primalidad, 84

Lehmann, 84

Rabin-Miller, 85

Texto Claro, 32

TLS, Protocolo, 227

Transporte, Capa de, 225

Transposici ón, Cifrados de, 131

Criptoanálisis, 132

Turing, Máquina Universal de, 137

ULTRA, Proyecto, 134

Variable Aleatoria, 44

Vector de Inicializaci ón, 161

Ventana de Exposici ón, 262

Vernam, Cifrado de, 167

Vigenère, Cifrado de, 130

VPN, Virtual Private Network, 225

Vulnerabilidad, 258

Vulnerabilidades

Detecci ón de, 261

Identificaci ón de, 259

Tipos de, 260

Watermarking, 213

White Hat, 259

X.509, Certificados, 232

X9.17, Generador Aleatorio, 123

Manuel J. Lucena L ópez

Criptograf´ıa y Seguridad en Computadores

Document Outline

I Preliminares

Introducción

Cómo Leer esta Obra

Algunas notas sobre la Historia de la Criptografía

Números Grandes

Acerca de la Terminología Empleada

Notación Algorítmica

Conceptos Básicos

Criptografía

Criptosistema

Esteganografía

Criptoanálisis

Compromiso entre Criptosistema y Criptoanálisis

Seguridad en Sistemas Informáticos

Tipos de Autentificación

II Fundamentos Teóricos de la Criptografía

Teoría de la Información

Cantidad de Información

Entropía

Entropía Condicionada

Cantidad de Información entre dos Variables

Criptosistema Seguro de Shannon

Redundancia

Desinformación y Distancia de Unicidad

Confusión y Difusión

Ejercicios Resueltos

Ejercicios Propuestos

Complejidad Algorítmica

Concepto de Algoritmo

Complejidad Algorítmica

Operaciones Elementales

Algoritmos Polinomiales, Exponenciales y Subexponenciales

Clases de Complejidad

Algoritmos Probabilísticos

Conclusiones

Aritmética Modular

Concepto de Aritmética Modular

Algoritmo de Euclides

Complejidad de las Operaciones Aritméticas en Zn

Cálculo de Inversas en Zn

Existencia de la Inversa

Función de Euler

Algoritmo Extendido de Euclides

Teorema Chino del Resto

Exponenciación. Logaritmos Discretos

Algoritmo Rápido de Exponenciación

El Problema de los Logaritmos Discretos

El Problema de Diffie-Hellman

Importancia de los Números Primos

Algoritmos de Factorización

Método de Fermat

Método p-1 de Pollard

Métodos Cuadráticos de Factorización

Tests de Primalidad

Método de Lehmann

Método de Rabin-Miller

Consideraciones Prácticas

Primos fuertes

Anillos de Polinomios

Polinomios en Zn

Ejercicios Resueltos

Ejercicios Propuestos

Curvas Elípticas en Criptografía

Curvas Elípticas en R

Suma en E(R)

Curvas Elípticas en GF(n)

Curvas Elípticas en GF(2n)

Suma en E(GF(2n))

El Problema de los Logaritmos Discretos en Curvas Elípticas

Ejercicios Resueltos

Ejercicios Propuestos

Aritmética Entera de Múltiple Precisión

Representación de enteros largos

Operaciones aritméticas sobre enteros largos

Suma

Resta

Producto

División

Aritmética modular con enteros largos

Ejercicios Resueltos

Ejercicios Propuestos

Criptografía y Números Aleatorios

Tipos de Secuencias Aleatorias

Secuencias estadísticamente aleatorias

Secuencias criptográficamente aleatorias

Secuencias totalmente aleatorias

Utilidad de las secuencias aleatorias en Criptografía

Generación de Secuencias Aleatorias Criptográficamente Válidas

Obtención de Bits Aleatorios

Eliminación del Sesgo

Generadores Aleatorios Criptográficamente Seguros

III Algoritmos Criptográficos

Criptografía Clásica

Algoritmos Clásicos de Cifrado

Cifrados de Sustitución

Cifrados de Transposición

Máquinas de Rotores. La Máquina ENIGMA

Un poco de Historia

Consideraciones Teóricas Sobre la Máquina ENIGMA

Otras Máquinas de Rotores

El Cifrado de Lorenz

Consideraciones Teóricas sobre el Cifrado de Lorenz

Ejercicios Propuestos

Cifrados por Bloques

Introducción

Redes de Feistel

Cifrados con Estructura de Grupo

S-Cajas

El Algoritmo DES

Claves Débiles en DES

Variantes de DES

DES Múltiple

DES con Subclaves Independientes

DES Generalizado

DES con S-Cajas Alternativas

El algoritmo IDEA

El algoritmo Rijndael (AES)

Estructura de AES

Elementos de AES

Las Rondas de AES

Cálculo de las Subclaves

Seguridad de AES

Modos de Operación para Algoritmos de Cifrado por Bloques

Modo ECB

Modo CBC

Modo CFB

Otros Modos

Criptoanálisis de Algoritmos de cifrado por Bloques

Criptoanálisis Diferencial

Criptoanálisis Lineal

Criptoanálisis Imposible

Cifrados de Flujo

Secuencias Pseudoaleatorias

Tipos de Generadores de Secuencia

Generadores Síncronos

Generadores Asíncronos

Registros de Desplazamiento Retroalimentados

Registros de Desplazamiento Retroalimentados Lineales

Registros de Desplazamiento Retroalimentados No Lineales

Combinación de Registros de Desplazamiento

Otros Generadores de Secuencia

Cifrados por Bloques en Modo OFB

Algoritmo RC4

Algoritmo SEAL

Cifrados Asimétricos

Aplicaciones de los Algoritmos Asimétricos

Protección de la Información

Autentificación

Ataques de Intermediario

El Algoritmo RSA

Seguridad del Algoritmo RSA

Vulnerabilidades de RSA

Otros Algoritmos Asimétricos

Algoritmo de Diffie-Hellman

Algoritmo de ElGamal

Algoritmo de Rabin

Algoritmo DSA

Criptografía de Curva Elíptica

Cifrado de ElGamal sobre Curvas Elípticas

Ejercicios Resueltos

Funciones Resumen

Propiedades

Longitud Adecuada para una Signatura

Estructura de una Función MDC

Algoritmo MD5

Algoritmo SHA-1

Seguridad de las Funciones MDC

Funciones de Autentificación de Mensaje

Esteganografía

Métodos Esteganográficos

En archivos de texto

En archivos multimedia

Detección de mensajes esteganografiados

Pruebas de Conocimiento Cero

Introducción

Elementos

Desarrollo

Modos de Operación

Conocimiento Cero sobre Grafos

Ataques de Intermediario

IV Aplicaciones Criptográficas

Protocolos de Comunicación Segura

Introducción

Protocolos TCP/IP

Protocolo SSL

Protocolo TLS

Protocolos IPsec

Autentificación, Certificados y Firmas Digitales

Introducción

Firmas Digitales

Certificados Digitales

Certificados X.509

Certificados de Revocación

Verificación de Certificados Digitales

Infraestructuras Jerárquicas

Infraestructuras Distribuidas

Autentificación Mediante Funciones Resumen

Autentificación por Contraseñas

Autentificación por Desafío

PGP

Fundamentos e Historia de PGP

Estructura de PGP

Codificación de Mensajes

Firma Digital

Armaduras ASCII

Gestión de Claves

Distribución de Claves y Redes de Confianza

Otros PGP

Vulnerabilidades de PGP

V Seguridad en Computadores

Introducción a la Seguridad Informática

Propiedades de la Información

Problemas de los Sistemas de Información

Identificación Unívoca de Vulnerabilidades

Tipos de Vulnerabilidades

Detección de Vulnerabilidades

La Ventana de Exposición

La Seguridad como Proceso

La seguridad absoluta no existe

Los costes de la seguridad

La seguridad es un proceso, no un producto

Políticas de Seguridad

Políticas Procesales de Seguridad

Políticas Formales de Seguridad

VI Apéndices

Criptografía Cuántica

Mecánica Cuántica y Criptografía

Computación Cuántica

Expectativas de Futuro

Ayudas a la Implementación

DES

S-Cajas

Permutaciones

Valores de prueba

IDEA

AES

MD5

SHA-1

Bibliografía

Índice alfabético