INGENIERÍA EN
DESARROLLO Y GESTIÓN DE
SOFTWARE
Seguridad Informática
Unidad II. Criptografía
Temario
2. Criptografía
• Algoritmos de cifrado
• Algoritmos hash
Algoritmos de cifrado
Introducción
• La criptografía es el método que se aplica a un mensaje
para cifrar y descifrar de tal manera que solo sea visible el
texto en claro para el emisor y el receptor de dicho mensaje
• La principal característica es ser totalmente ilegible para
cualquiera que lo intercepte en mitad de la transmisión, y a
su vez, que sea lo suficientemente seguro como para
aguantar cualquier ataque que pueda comprometer la
información que se está transmitiendo.
Introducción
Existen dos tipos de cifrado según el tipo de sus claves:
• La criptografía cuyos algoritmos solo usan una clave, o
criptografía simétrica, y
• la criptografía de algoritmos de dos llaves, criptografía
asimétrica.
Criptografía simétrica
● Un sistema de cifrado simétrico es un tipo de cifrado que
usa una misma clave para cifrar y para descifrar.
● Las dos partes que se comunican mediante el cifrado
simétrico deben estar de acuerdo en la clave a usar de
antemano.
● Una vez de acuerdo, el remitente cifra un mensaje usando
la clave, lo envía al destinatario, y éste lo descifra usando
la misma clave.
Criptografía simétrica
Enigma
Éste es un sistema que fue usado por Alemania, en el que las
claves se distribuían a diario en forma de libros de códigos.
Cada día, un operador de radio, receptor o transmisor,
consultaba su copia del libro de códigos para encontrar la
clave del día.
Todo el tráfico enviado por ondas de radio durante aquel día
era cifrado y descifrado usando las claves del día.
Aplicación actual
Puesto que el cifrado simétrico es más rápido y eficiente que el
cifrado asimétrico, se suele utilizar más para el cifrado de grandes
cantidades de datos.
❏ Aplicaciones de pago, por ejemplo, en transacciones con
tarjetas en las que es preciso proteger el PIN para evitar el
robo de identidad.
❏ Conseguir certificar y afirmar que el emisor del mensaje es la
persona que dice ser.
❏ Protección en comunicación digital, internet o tv digital.
DES (Estándar de cifrado de datos)
• DES fue desarrollado por IBM a principios de la década de
1970 para proporcionar una forma segura de cifrar datos
que es fácil de usar e implementar.
• DES divide los datos en bloques de bits de 64 bits y
utiliza una clave de 56 bits para cifrar los datos. Sin
embargo, se considera que DES es menos seguro y NIST
lo retiró como estándar de cifrado.
DES (Estándar de cifrado de datos)
• El problema con este algoritmo es que no se considera seguro
por el tamaño de la clave de 56 bits.
• La baja cantidad de bits de seguridad hace que este sistema sea
susceptible a ataques de fuerza bruta, es decir, la generación de
claves aleatorias hasta encontrar la correcta.
• El número de claves posibles de este algoritmo puede calcularse
elevando 562, lo cual da un número total de opciones que una
computadora sería capaz de probar en un ciberataque.
3DES (Triple estándar de cifrado de
datos)
• Este algoritmo se basa en el algoritmo DES, que aplica
una serie de operaciones básicas para convertir un texto
en otro cifrado, empleando una clave criptográfica.
• 3DES es el algoritmo que hace triple cifrado del DES; se
basa en aplicarlo tres veces, con tres claves distintas, por
lo que resulta mucho más seguro.
• Este método está siendo paulatinamente sustituido por el
AES, ya que este es hasta seis veces más rápido.
AES (Estándar de cifrado avanzado)
• El algoritmo AES, también conocido como AES GCM, AES-
256-GCM o Rijndael, es una función matemática de
encriptación creada en Bélgica y adoptada por el gobierno
de los Estados Unidos como estándar en el año 2001.
• Desde entonces, se conoce como el método de cifrado
por bloques más seguro que existe, ya que en la práctica
no se puede romper y, además, es rápido y eficiente.
AES (Estándar de cifrado avanzado)
• El algoritmo AES fue descubierto gracias al concurso
Advanced Encryption Standard, al cual se presentó con su
nombre original, Rijndael, que luego fue reemplazado con
el mismo nombre del premio.
• El concurso lo organizó el gobierno de los Estados Unidos
con el fin de reemplazar al algoritmo DES (Data
Encryption Standard), que se utilizaba desde 1976, pero
era demasiado vulnerable a un ataque de fuerza bruta.
AES (Estándar de cifrado avanzado)
• Con una seguridad de 128, 192 o AES-256-GCM bits y un
tamaño de bloque de 128 bits, se puede afirmar que el
algoritmo AES GCM es seguro, rápido y eficiente.
• Por eso es el algoritmo de cifrado por bloques más
utilizado de la actualidad y la mayoría de procesadores
incluyen instrucciones para cifrar y descifrar información
con este método.
AES (Estándar de cifrado avanzado)
• Con una seguridad de 128, 192 o AES-256-GCM bits y un
tamaño de bloque de 128 bits, se puede afirmar que el
algoritmo AES GCM es seguro, rápido y eficiente.
• Por eso es el algoritmo de cifrado por bloques más
utilizado de la actualidad y la mayoría de procesadores
incluyen instrucciones para cifrar y descifrar información
con este método.
Algoritmo general de AES
Funcionamiento
Texto en claro (128bits):
Contrary to play, Lorem Ipsum is not simply random text. It
has roots in a piece of classical Latin literature from 45 BC,
making it over 2000 years old. Richard McClintock, a Latin
professor at Hampden-Sydney College in Virginia, looked up
one of the more obscure Latin words, consectetur, from a
Lorem Ipsum passage, and going through the cites of the
word in classical literature, discovered the undoubtable
source.
Funcionamiento
Texto en claro (128bits):
C o n t r a r y t o p l a y (ASCII)
43 6F 6E 74 72 61 72 79 20 74 6F 20 70 6C 61 79 (Hex)
Clave de cifrado:
c l a v e d e 1 2 8 b i t s (ASCII)
63 6C 61 76 65 20 64 65 20 31 32 38 62 69 74 73 (Hex)
* Puede ser de 128, 192 o 256 bits
Funcionamiento
Matriz de estado:
C r p
43 72 20 70
Operaciones sobre la
o a t l matriz:
6F 61 74 6C
● Sustitución
n r o a ● Permutación
6E 72 6F 61
● Polinómicas
t y y
74 79 20 79
Funcionamiento
Texto en claro
Inicio
Clave de cifrado:
c l a v e d e 1 2 8 b i t s (ASCII) 9
rondas
63 6C 61 76 65 20 64 65 20 31 32 38 62 69 74 73
(Hex)
Ronda
* Para clave de 192 o 256 bits serán 12 y 14
10
vueltas respectivamente
Criptograma
Funcionamiento
Clave128 Texto en claro
En cada una de estas vueltas se K0 Inicio
usará una clave de vuelta
generada a partir de la clave
N-1
principal. Ki
rondas
Ronda
Kn
N
Criptograma
Funciones principales
En esta operación realiza la suma XOR exclusiva de la
AddRoundKey
clave de cada vuelta con los valores de la matriz de
estado.
En esta operación se ejecuta una sustitución de cada uno
SubBytes
de los 16 bytes de la matriz de estado mediante una
tabla.
En esta operación consiste en una permutación de las
ShiftRows filas del estado, de forma que la primera fila no rota, la
segunda rota 1 byte, la tercera 2 bytes y la cuarta 3
bytes.
En esta operación es más compleja, que consiste en
MixColumns multiplicar cada una de las columnas de la matriz de
estado por un polinomio fijo.
Funciones principales
Aquí se inicia y se realiza la Clave128 Texto en claro
suma XOR entre bytes de
mensaje y clave K0 AddRoundKe
y
63 65 20 62 43 72 20 70
6C 20 31 69 ⊕ 6F 61 74 6C
N-1
61 64 32 74 6E 72 6F 61 Ki
rondas
76 65 38 73 74 79 20 79
Clave Mensaj
20 17 00 12 e Ronda
Kn
03 41 45 05 N
0F 16 5D 15
02 1C 18 0A Resultad Criptograma
o
• , Lorem Ipsum is
63 65 20 62
6C 20 31 69
⊕
61 64 32 74
76 65 38 73
Clave Mensaj
e
Resultad
o
Funciones principales
Clave128 Texto en claro
Se calcularán 10 subclaves
para 128 bits, una para cada K0 AddRoundKe
y
vuelta mediante una función
llamada expansión de clave.
N-1
Ki
K0 rondas
K1 K2 K3 K4 K5 Ronda
Kn
N
K6 K7 K8 K9 K1 Criptograma
Funciones principales
Texto en claro
Clave128
Se realizarán las 4
AddRoundKe
operaciones durante 9 K0 y
vueltas.
SubBytes
ShiftRows
Ki
Al finalizar, solo se ejecutarán MixColumns
AddRoundKe
3 operaciones. y
SubBytes
Kn
ShiftRows
AddRoundKe
y
Criptograma
Criptograma
Matriz de estado:
5D D4 63 59 Criptograma resultante del primer
bloque:
42 A1 EA 31
5D42A7AB D4A11FE4 63EAFE15
A7 1F FE 69 593169A2
AB E4 15 A2
Descifrado
Texto en claro
Clave128
Para el descifrado se
InvAddRoundK
recorrerá el algoritmo en K0 ey
sentido inverso y cada
operación tiene su función InvSubBytes
inversa. Ki
InvShiftRows
InvMixColumns
InvAddRoundK
ey
InvSubBytes
Kn
InvShiftRows
InvAddRoundK
ey
Criptograma
Criptografía asimétrica
● El principal problema con los sistemas de cifrado
simétrico no está ligado a su seguridad, sino al
intercambio de claves, básicamente el canal de
comunicación de la clave.
● Otro problema es el número de claves que se necesitan,
porque si tenemos un número de n personas, entonces se
necesitan n(n-1)/2 claves para cada pareja de personas
que tengan que comunicarse de modo privado.
● Los sistemas de cifrado de clave pública se inventaron
con el fin de evitar por completo el problema del
intercambio de claves.
Criptografía asimétrica
● Un sistema de cifrado de clave pública usa un par de
claves para el envío de mensajes.
● Las dos claves pertenecen a la misma persona a la que
se ha enviado el mensaje.
● Una clave es pública y se puede entregar a cualquier
persona.
● La otra clave es privada y el propietario debe guardarla
para que nadie tenga acceso a ella.
● El remitente usa la clave pública del destinatario para
cifrar el mensaje, y una vez cifrado, sólo la clave privada
del destinatario podrá descifrar este mensaje.
Criptografía asimétrica
● No hay necesidad de que el remitente y el destinatario
tengan que ponerse de acuerdo en una clave.
● Todo lo que se requiere es que, antes de iniciar la
comunicación secreta, el remitente consiga una copia de la
clave pública del destinatario.
● Es más, esa misma clave pública puede ser usada por
cualquiera que desee comunicarse con su propietario. Por
tanto, se necesitarán sólo n pares de claves por cada n
personas que deseen comunicarse entre ellas.
Aplicación actual
La criptografía de clave pública suele utilizarse en:
• el tráfico de correo electrónico, en el método de cifrado
estándar S/MIME,
• en las firmas digitales y en
• protocolos criptográficos como SSL/TLS, SSH y HTTPS
Algoritmos hash
Función Hash
• Una función hash es un proceso que transforma cualquier
conjunto arbitrario de datos en una nueva serie de
caracteres con una longitud fija, independientemente del
tamaño de los datos de entrada.
• El resultado obtenido se denomina hash, resumen, digest
o imagen. Muchas veces, el término “hash” se utiliza tanto
para referirse a la función hash como al valor resultado de
ejecutar dicha función sobre un mensaje en particular.
Función Hash
• A los datos que van a ser procesados por la función hash
se le denomina mensaje o preimagen.
• El conjunto de todos los posibles mensajes o preimágenes
es el dominio o espacio de mensajes.
Función Hash
• A los datos que van a ser procesados por la función hash
se le denomina mensaje o preimagen.
• El conjunto de todos los posibles mensajes o preimágenes
es el dominio o espacio de mensajes.
Función Hash
Por ejemplo, si se utiliza la función hash SHA2562 para determinar el
valor hash de “Hola” se obtendrá como resultado el siguiente
resumen:
SHA256(Hola) =
E633F4FC79BADEA1DC5DB970CF397C8248BAC47CC3ACF9915BA60B5D76B0E8
8F
En este caso, “Hola” se traduce en un conjunto de bits, a partir de los
cuales y tras una serie de operaciones, se obtiene una cadena de 256
bits (representados aquí con su valor en decimal).
Función Hash
Si, por el contrario, se introduce en la función hash un
mensaje más complejo, por ejemplo, el texto completo del
libro de El Quijote en formato pdf (471 páginas), el resultado
de la función hash será distinto, pero el resultado será un
resumen con el mismo tamaño en bits:
SHA256 (<<Texto de El Quijote en pdf>>) =
6030695808272962748720037573007478266683539207
7101919947310301380935652572169
Propiedades de una Función Hash
Las propiedades ideales de una función hash son:
• Permite ejecutarse sobre contenido digital de cualquier tamaño y
formato. Al final, todo contenido digital son números para el
ordenador: textos, fotografías, videos, etc.
• Dada una entrada cualquiera, produce una salida numérica de
tamaño fijo.
• Reconstruir el mensaje original a partir del resultado de la función
hash debe ser extremadamente costoso, sino imposible.
• Una mínima variación en el mensaje original (un bit) ha de producir
un hash totalmente distinto (difusión).
Propiedades de una Función Hash
• Si se selecciona un mensaje de entrada, encontrar otro mensaje que
tenga el mismo resumen ha de resultar extremadamente costoso
(colisión débil).
• También ha de ser extremadamente costoso encontrar dos mensajes
cualesquiera que tengan el mismo resumen (colisión fuerte).
• El algoritmo de hash deberá cubrir de forma uniforme todo el espacio
de hash, los que significa que cualquier resultado de la función hash
tiene, a priori, la misma probabilidad de ocurrencia que cualquier
otro.
Descripción de una Función Hash
En general, una función hash funciona de la siguiente forma:
• El mensaje de entrada se divide en bloques.
• Un fórmula calcula el hash, un valor con un tamaño fijo, para
el primer bloque.
• Se calcula el hash del siguiente bloque y suma al resultado
anterior.
• Se realiza el mismo proceso sucesivamente hasta que se
recorren todos los bloques.
Ejemplo de una Función Hash
Un ejemplo muy sencillo de función hash lo podemos plantear a
continuación.
• Diseñemos una función hash que a partir de un texto genera un
hash de tamaño tres dígitos decimales (del 000 al 999). A su
vez, como mensaje para calcular el hash sea el texto de El
Quijote:
En un lugar de la Mancha de cuyo nombre no quiero acordarme
no ha mucho tiempo que vivía un hidalgo de los de lanza en
astillero … etc.
Ejemplo de una Función Hash
En primer lugar, se dividiría el texto en bloques de, para este
ejemplo, veinte caracteres. De esta forma, en la siguiente
tabla cada fila representa un bloque:
Ejemplo de una Función Hash
A continuación, a cada carácter se le asignaría un valor
numérico, por ejemplo: A=1; B=2; C=3; ….
Y finalmente cero para el espacio. Para el primer bloque del
ejemplo se obtendría la siguiente codificación:
Ejemplo de una Función Hash
El valor de hash se podría calcular de muchas formas, por ejemplo, se
puede multiplicar el valor asociado a un carácter con su posición en el
bloque y, a continuación, sumar todos los resultados.
Para este bloque en concreto, dicho proceso daría como resultado el
valor 1331.
Como se ha comentado que esta función hash tendrá como resultado
sólo tres dígitos decimales, podemos truncar el resultado
directamente eliminando los dígitos por encima del tercero, por lo
tanto, el valor obtenido del hash para el primer bloque sería 331.
Ejemplo de una Función Hash
A continuación, se procedería con la segunda fila o bloque:
Operando la función hash sobre el mismo bloque se
obtendría el valor 1947,trucando por encima del tercer
dígito el resultado final sería 947.
Ejemplo de una Función Hash
A continuación, se encadenarían los dos bloques mediante
una operación de suma del resultado de los dos bloques
331+947 = 1278, truncando de nuevo el valor de hash de
los dos primeros bloques tendría como resultado 278.
El proceso se repetiría con todas las filas o bloques hasta
obtener el resultado final.
Ejemplo de una Función Hash
El sistema aquí presentado no tiene unas buenas
propiedades como función hash: el valor del hash tiene una
longitud demasiado pequeña (solo existen 1000 valores
posibles), hay medios puede alterar el texto y preservar el
hash9, no es eficiente su implementación, etc.
Por ello, se han desarrollado otros tipos de funciones hash
más adecuadas como la familia SHA10, MD511 u otros12.