CRIPTOGRAFIA
La Criptografía Moderna
Introducción
Del griego kryptos (ocultar) y grafos (escribir), literalmente escritura
oculta, la criptografía es el "arte de escribir con clave secreta o de un
modo enigmático" (DRAE). En otras palabras es el arte o ciencia de
cifrar y descifrar información utilizando técnicas matemáticas que
hagan posible el intercambio de mensajes de manera que sólo puedan
ser leídos por las personas a quienes van dirigidos.
Cuando hablamos de este área de conocimiento como ciencia,
deberíamos hablar de criptología, que engloba tanto las técnicas de
cifrado, la criptografía propiamente dicha, como sus técnicas
complementarias, el criptoanálisis, que estudia los métodos que se
utilizan para romper textos cifrados con objeto de recuperar la
información original en ausencia de la clave.
La finalidad de la criptografía es, en primer lugar,
garantizar el secreto en la comunicación entre dos
entidades (personas, organizaciones, etc), y, en segundo
lugar, asegurar que la información que se envía es
auténtica en un doble sentido: que el remitente sea
realmente quien dice ser; y por último impedir que el
contenido del mensaje enviado (habitualmente
denominado criptograma) sea modificado en su tránsito.
Otro método utilizado para ocultar el contenido
de un mensaje es ocultar el propio mensaje en
un canal de información, pero en puridad, esta
técnica no se considera criptografía, sino
esteganografía.
La esteganografía es la disciplina en la que se
estudian y aplican técnicas que permiten el
ocultamiento de mensajes u objetos, dentro de
otros, llamados portadores, de modo que no se
perciba su existencia. Es una mezcla de artes y
técnicas que se combinan para conformar la
práctica de ocultar y enviar información sensible
en un portador que pueda pasar desapercibido.
Si bien la esteganografía suele confundirse con la criptografía, por ser
ambas parte de los procesos de protección de la información, son
disciplinas bastante distintas, tanto en su forma de implementar como
en su objetivo mismo. Mientras que la criptografía es utilizada para
cifrar o codificar información de manera que ella sea ininteligible para
un probable intruso, a pesar del conocimiento de su existencia, la
esteganografía oculta la información en un portador de manera que no
sea advertido el hecho mismo de su existencia y envío. De esta última
manera un probable intruso ni siquiera sabrá que se está transmitiendo
información sensible.
Sin embargo, la criptografía y la esteganografía pueden
complementarse, dando un nivel de seguridad extra a la información, es
decir, es muy común (aunque no imprescindible) que el mensaje a
esteganografiar sea previamente cifrado; de tal modo que a un eventual
intruso no sólo le costará advertir la presencia misma de la mensajería
oculta, sino que si la llegara a obtener, la encontraría cifrada.
El origen de esta palabra deriva de la composición de los vocablos
griegos steganos, que significa cubierto u oculto, y graphos, que
significa escritura. La esteganografía en el moderno sentido de la
palabra, y en términos informáticos, se refiere a la información o
a un archivo cualesquiera que se encuentra oculto dentro de
otro, normalmente multimedial, es decir el portador es una
imagen digital, un video o archivo de audio.
Historia….
Heródoto: Probablemente uno de los ejemplos más antiguos del uso de la
criptografía sea el referido por Herodoto en Las historias. En este libro describe
como un personaje tomó un cuadernillo de dos hojas o tablillas; rayó bien la
cera que las cubría y en la madera misma grabó el mensaje y lo volvió a cubrir
con cera regula. Otra historia, en el mismo libro, describe como otro personaje
había rasurado a navaja la cabeza de su esclavo más confiable, le tatuó el
mensaje en el cuero cabelludo, esperó después que le volvieran a crecer el
cabello, y lo mando con el receptor del mensaje, con instrucciones que le
rasuraran la cabeza.
Siglo XV: El científico italiano Giovanni Porta, descubrió como esconder un
mensaje dentro de un huevo cocido, el método consistía en preparar una tinta
mezclando una onza de alumbre y una pinta de vinagre, y luego se escribía en la
cáscara. La solución penetra la cáscara porosa y deja un mensaje en la superficie
de la albúmina del huevo duro, que sólo se puede leer si se pela el huevo.
Primer libro:El origen del vocablo esteganografía vocablo se remonta a
principios del siglo XVI. El abad alemán Johannes Trithemius escribió un
libro al que tituló Steganographia. En él se trataban temas referentes a
la ocultación de mensajes, pero también métodos para conjurar a los
espíritus. Aparte de este libro, también publicó Polygraphiae Libri Sex,
un compendio de 6 libros sobre criptografía que no participaba de los
elementos esotéricos de su otro gran libro.
Otros libros: En el libro de Francesco Colonna (1499), Hypnerotomachia
Poliphili (Ed. Aldus Manutius), al tomar la primera letra de los 38
capítulos: se puede obtener la frase ‘Poliam frater Franciscus Columna
peramavit’(‘El hermano Francesco Colonna ama apasionadamente a
Polia ). Gaspar Schott (1665) Schola steganographica.
Segunda Guerra Mundial: Durante la segunda guerra mundial se usaron
los microfilmes, en los puntos de las i’s o en signos de puntuación para
enviar mensajes. Los prisioneros usan i, j, t, y f para ocultar mensaje en
código morse. Pero uno de los sistemas más ingenioso se conoce con el
nombre de "Null Cipher". Este último consiste en enviar un mensaje, de
lo más común posible, y elegir cierta parte de él para ocultar el
mensaje. Un ejemplo es el texto siguiente: Apparently neutral's protest
is thoroughly discounted and ignored. Isman hard hit. Blockade issue
affects pretext for embargo on by products, ejecting suets and vegetable
oils. (Al parecer la protesta neutral es completamente descontada e
ignorada. Isman afectados. Cuestión de bloqueo afecta pretexto de
embargo sobre los productos, consigue expulsar sebo y aceites
vegetales). Si tomamos la segunda letra de cada palabra aparece el
mensaje: Pershing sails from NYr June i
Tintas invisibles: No esta claro desde que época se comenzaron a
utilizar, pero sin duda se han ocupado a lo largo de la historia hasta la
actualidad. Las más conocidas se pueden clasificar en dos categorías:
◦ Básicas: sustancias con alto contenido en carbono (leche, orina, zumo de
limón, jugo de naranja, jugo de manzana, jugo de cebolla, solución
azucarada, miel diluida, coca cola diluida, vino, vinagre, etc) . Básicamente,
sin importar cual de las “tintas” mencionadas se utilicen, al calentar la
superficie en donde se oculta el mensaje, el carbono reacciona y muestra el
mensaje en un tono café.
◦ Más sofisticadas: aparecen tras una reacción química, o tras ser expuestas a
luz en una cierta longitud de onda (IR, UV, ...)
Esteganografía Clásica vs. Moderna
Esteganografía “clásica”: métodos completamente oscuros.
◦ Protección basada en desconocer el canal encubierto específico que se está
usando.
Esteganografía moderna: uso de canales digitales:
◦ Archivo de texto (inc. páginas web, código fuente, ...)
◦ Audio digital
◦ Imágenes y vídeo digitales
◦ Archivos Ejecutables
◦ Protocolos de comunicaciones
Técnicas Digitales
Enmascaramiento y filtrado (Masking and Filtering): En este caso la información
se oculta dentro de una imagen digital utilizando marcas de agua que incluyen
información como el derecho de autor, la propiedad, o licencias. El objetivo es
diferente de la esteganografía tradicional (básicamente comunicación
encubierta) ya que es añadir un atributo a la imagen que actúa como cubierta,
de este modo se amplía la cantidad de información presentada.
Algoritmos y Transformaciones (Algorithms and Transformations): Esta técnica
oculta datos basado funciones matemáticas que se utilizan a menudo en
algoritmos de la compresión de datos. La idea de este método es ocultar el
mensaje en los bits de datos menos importantes.
Inserción en el bit menos significativo (Least Significant Bit Insertion): Este es el
método moderno más común y popular usado para esteganografía, también es
uno de los llamados Métodos de Sustitución. Consiste en hacer uso del bit
menos significativo de los pixels de una imagen y alterarlos, esto es, usar LSB
(Least Significant Bit).
Técnicas más utilizadas según el tipo de medio
En texto: El uso de esteganografía en los documentos puede funcionar con sólo añadir un
espacio en blanco y las fichas a los extremos de las líneas de un documento. Este tipo de
esteganografía es extremadamente eficaz, ya que el uso de los espacios en blanco y tabs
no es visible para el ojo humano, al menos en la mayoría de los editores de texto y se
producen de forma natural en los documentos, por lo que en general es muy difícil que
levante sospechas.
En imágenes: El método más utilizado es el LSB ya que para un ordenador un archivo de
imagen es simplemente un archivo que muestra diferentes colores e intensidades de luz
en diferentes áreas de una imagen. El mejor tipo de archivo de imagen para ocultar la
información es dentro de una imagen de 24 Bit BMP (Bitmap). La razón es que este es el
mayor tipo de archivo y que normalmente es de la más alta calidad, aunque algunas
personas pueden optar por la aplicación de 8 bit BMP o posiblemente otro formato de
imagen como el GIF, debido a que es el desplazamiento de grandes imágenes en la
Internet puede despertar sospechas. Cuando una imagen es de alta calidad y resolución es
mucho más fácil de ocultar y enmascarar la información dentro de este. Es importante
recordar que si se oculta información dentro de un archivo de imagen y el archivo se
convierte a otro formato de imagen, lo más probable es la información oculta dentro se
perderá.
En audio: Cuando ocultamiento de inf ormación dentro de archivos de audio
por lo general la técnica utilizada es low bit encoding (baja bit de codificación)
que es similar a la LSB que se utiliza generalmente en las imágenes. El problema
con el low bit encoding es que en general es perceptible para el oido humano.
Spread Spectrum funciona mediante la adición de ruidos al azar a la señal de
que la información se oculta dentro de una compañía aérea y la propagación en
todo el espectro de frecuencias. Otro método es Echo data hiding. Este método
usa los ecos en archivos de sonido con el fin de tratar de ocultar la información.
Simplemente añadiendo extra de sonido a un eco dentro de un archivo de
audio, la información puede ser ocultado.
En video: En video, usualmente se utiliza el método DCT (Discrete Cocine
Transform). DCT funciona cambiando ligeramente cada una de las imágenes en
el vídeo, sólo de manera que no sea perceptible por el ojo humano.
Esteganografía en video es similar a la aplicada en las imágenes, además de la
información está oculta en cada fotograma de vídeo. Cuando sólo una pequeña
cantidad de información que está oculto dentro del código fuente por lo general
no es perceptible a todos, sin embargo a mayor información que se oculta, más
notable se convertirá.
Herramientas para Esteganografía
MP3Stego oculta información en archivos MP3 durante el proceso de compresión.
Los datos son primero comprimidos, cifrados y luego escondidos en el flujo de bits.
http://www.petitcolas.net/fabien/steganography/mp3stego/
JPHIDE y JPSEEK son programas que permiten ocultar un archivo en una imagen jpeg.
http://linux01.gwdg.de/~alatham/stego.html
El Blindside utilidad puede ocultar un fichero (o ficheros) de cualquier variedad,
dentro de una imagen de mapa de bits de Windows (archivo BMP).
http://www.mirrors.wiretapped.net/security/steganography/blindside/
El programa GIFShuffle se utiliza para ocultar los mensajes de imágenes GIF de
revolver el mapa de colores, lo que deja la imagen visible sin cambios. GIFShuffle
trabaja con todas las imágenes GIF, incluyendo aquellas con transparencia y
animación, y además proporciona compresión y cifrado de los mensajes ocultos.
http://www.darkside.com.au/gifshuffle/
wbStego es una herramienta que oculta cualquier tipo de archivo de mapa de bits en
imágenes, archivos de texto, archivos HTML o archivos PDF de Adobe. El archivo en
el que ocultar los datos no es ópticamente cambiado. http://wbstego.wbailer.com/
Herramientas para Esteganografía
MSU StegoVideo permite ocultar cualquier archivo en una secuencia de vídeo. Cuando el
programa fue creado, diferentes códec populares se analizaron y un algoritmo se eligió que
prevé la pérdida de datos pequeños después de compresión de vídeo. Puede utilizar MSU
StegoVideo VirtualDub como filtro o como programa .exe autónomo, independiente de
VirtualDub. http://compression.ru/video/stego_video/index_en.html
Stegdetect: http://www.outguess.org/download.php
MSU StegoVideo permite ocultar cualquier archivo en una secuencia de vídeo. Cuando el
programa fue creado, diferentes códec populares se analizaron y un algoritmo se eligió que
prevé la pérdida de datos pequeños después de compresión de vídeo. Puede utilizar MSU
StegoVideo VirtualDub como filtro o como programa .exe autónomo, independiente de
VirtualDub. http://compression.ru/video/stego_video/index_en.html
Digital Invisible Ink Toolkit: Este proyecto proporciona una herramienta simple que puede
esconder un mensaje dentro de una imagen de color de 24 bits de manera que a sabiendas de
cómo se incrustados, o la realización de análisis estadístico, no por ello es más fácil encontrar la
información oculta. http://sourceforge.net/project/showfiles.php?group_id=139031
StegAlyzerSS tiene la capacidad para escanear todos los archivos en los medios de comunicación
para sospechar la presencia de patrones de byte hexadecimal, o firmas, de particular
aplicaciones de esteganografía en los archivos. Si una firma conocida se detecta, puede ser
posible extraer la información escondida. http://www.sarc-wv.com/stegalyzerss.aspx
Imagen original Imagen modificada
Conceptos básicos
En la jerga de la criptografía, la información original que debe protegerse se
denomina texto plano.
El cifrado es el proceso de convertir el texto plano en un galimatías ilegible,
denominado texto cifrado o criptograma.
Por lo general, la aplicación concreta del algoritmo de cifrado (también
llamado cifra) se basa en la existencia de una clave: información secreta que
adapta el algoritmo de cifrado para cada uso distinto.
El descifrado es el proceso inverso que recupera el texto plano a partir del
criptograma y la clave.
El protocolo criptográfico especifica los detalles de cómo se utilizan los
algoritmos y las claves (y otras operaciones primitivas) para conseguir el
efecto deseado.
El conjunto de protocolos, algoritmos de cifrado, procesos de gestión de
claves y actuaciones de los usuarios, en su globalidad es lo que constituyen un
criptosistema, que es con lo que el usuario final trabaja e interactúa.
Conceptos básicos
La Criptografía fue considerada un arte, hasta que Shannon publicó en
1949 la "Teoría de las comunicaciones secretas", la cual fue aplicada por
el NBS (National Bureau of Standars) de EU para desarrollar el sistema
criptográfico DES (Data Encryption Standard). Entonces la criptografía
empezó a ser considerada una ciencia aplicada, debido a su relación con
otras ciencias, como la estadística, la teoría de números, la teoría de la
información y la teoría de la complejidad computacional.
Ahora bien, la criptografía corresponde sólo a una parte de la
comunicación secreta. Si se requiere secreto para la comunicación, es
porque existe desconfianza o peligro de que el mensaje transmitido sea
interceptado por un enemigo. Este enemigo, si existe, utilizará todos los
medios a su alcance para descifrar esos mensajes secretos mediante un
conjunto de técnicas y métodos que constituyen una ciencia conocida
como criptoanálisis. Al conjunto de ambas ciencias, criptografía y
criptoanálisis se le denomina criptología.
En los procesos de almacenamiento y transmisión de la información
normalmente aparece el problema de la seguridad. En el
almacenamiento, el peligro lo representa el robo del soporte del
mensaje o simplemente el acceso no autorizado a esa información,
mientras que en las transmisiones lo es la intervención del canal.
La protección de la información se lleva a cabo variando su forma. Se
llama cifrado (o transformación criptográfica) a una transformación del
texto original (llamado también texto inicial o texto claro) que lo
convierte en el llamado texto cifrado o criptograma. Análogamente, se
llama descifrado a la transformación que permite recuperar el texto
original a partir del texto cifrado.
Cada una de estas transformaciones está determinada por un
parámetro llamado clave. El conjunto de sus posibles valores se
denomina espacio de claves K. La familia de transformaciones
criptográficas se llama sistema criptográfico T={Tk/k K}.
Para cada transformación criptográfica Tk se definen las imágenes de
cada una de las palabras de n letras. Es decir, el sistema criptográfico se
puede describir como T={Tk^n:1<=n<ì}., siendo Tk^n(x)=y, donde y es la
palabra cifrada que corresponde a la palabra original x. En adelante se
usará el termino n-palabra en lugar de palabra de n letras.
Para evitar ambigüedades, se hacen las siguientes suposiciones:
◦ Tk^n es biyectiva (función de doble sentido).
◦ Se usa el mismo alfabeto para ambos textos, original y cifrado.
◦ Se define el cifrado de todas las posibles palabras,
independientemente de si existen o no.
◦ Cada n-palabra se cifra en una n-palabra, teniéndose así que el
cifrado no cambia la longitud del texto original.
En general no es necesario imponer simultáneamente todas estas
condiciones aunque en algunos casos, como el procesamiento de
información digital, si es recomendable, porque:
◦ Se trabaja únicamente con alfabeto binario.
◦ Debe existir el cifrado de todas las palabras posibles.
◦ Si el cifrado cambiara la longitud del texto, sería necesario usar un nuevo
formato para el texto cifrado.
En particular, si el texto se alargara al cifrarse:
◦ El programador tendría que prevenirlo reservando suficiente memoria.
◦ En una base de datos organizada por campos, la expansión de uno de ellos
obligaría a reformatearlos todos.
La teoría de la información estudia el proceso de la
transmisión ruidosa de un mensaje:
canal ruidoso mensaje recibido
mensaje transmitido
Por otro lado, la criptografía estudia el proceso de cifrado
de un texto.
texto original
Transformación criptográfica texto cifrado
En el primer caso, la distorsión del mensaje transmitido no es
intencionada, sino que se debe al canal. Además, el receptor trata de
recuperar el mensaje transmitido, usando para ello el mensaje recibido
y una descripción probabilística del canal ruidoso. En el otro caso, la
distorsión si es intencionada y el interceptor intenta obtener el texto
original, usando para ello el criptograma y una descripción parcial del
proceso de cifrado.
En cuanto a objetivos, en la teoría de la información se intenta
transmitir el mensaje lo más claro posible, mientras que en criptografía
se trata de lo contrario; es decir, hacer el mensaje incompresible para el
enemigo. Sin embargo, aunque opuestos, estos propósitos se pueden
combinar para proteger los mensajes contra el enemigo y el ruido a la
vez. Para ello, primero hay que cifrar el mensaje y luego hay que aplicar
al criptograma resultante un código corrector de errores.
Shannon, padre de la teoría de la información, ya mencionó en 1949 la
relación existente entre ésta y la criptografía. Desde entonces se usan
su teoría y nomenclatura para el estudio teórico de la criptografía.
Como ya se ha dicho, la criptología representa una lucha entre el
criptógrafo, que trata de mantener en secreto un mensaje usando para
ello una familia de transformaciones, y el enemigo, que intenta
recuperar el texto inicial. Como en toda lucha, es necesario establecer
unas reglas.
Reglas de Kerckhoffs
Kerckhoffs (s. XIX), en su trabajo titulado "La criptografía militar",
recomendó que los sistemas criptográficos cumpliesen las siguientes reglas,
que efectivamente han sido adoptadas por gran parte de la comunidad
criptográfica:
◦ No debe existir ninguna forma de recuperar mediante el criptograma el texto
inicial o la clave. Esta regla se considera cumplida siempre que la complejidad del
proceso de recuperación del texto original sea suficiente para mantener la
seguridad del sistema.
◦ Todo sistema criptográfico debe estar compuesto por dos tipos distintos de
información.
◦ Pública, como es la familia de algoritmos que lo definen.
◦ Privada, como es la clave que se usa en cada cifrado particular. En los sistemas de clave
pública, parte de la clave es también información pública.
◦ La forma de escoger la clave debe ser fácil de recordar y modificar.
◦ Debe ser factible la comunicación del criptograma por los medios de transmisión
habituales.
◦ La complejidad del proceso de recuperación del texto original debe
corresponderse con el beneficio obtenido.
Tipos de ataques
Para el estudio de los sistemas criptográficos es conveniente conocer la
situación del enemigo. Se tienen los siguientes ataques posibles:
◦ Ataque sólo con texto cifrado. Esta es la peor situación posible para el
criptoanalista, ya que se presenta cuando sólo conoce el criptograma.
◦ Ataque con texto original conocido. Consiste en que el criptoanalista tiene
acceso a una correspondencia del texto inicial y cifrado. Se da este caso, por
ejemplo, cuando conoce el tema del que trata el mensaje, pues eso
proporciona una correspondencia entre las palabras más probables y las
palabras cifradas mas repetidas.
◦ Ataque con texto original escogido. Este caso se da cuando el enemigo
puede obtener, además del criptograma que trata de descifrar, el cifrado de
cualquier texto que él elija, entendiéndose que no es que él sepa cifrarlo,
sino que lo obtiene ya cifrado.
◦ Ataque con texto cifrado escogido. Se presenta cuando el enemigo puede
obtener el texto original correspondiente a determinados textos cifrados de
su elección.
Retomando la primera regla de Kerckhoffs, se pueden distinguir dos
tipos de secreto:
◦ el secreto teórico o incondicional y
◦ el secreto práctico o computacional.
El primero se basa en que la información disponible para el enemigo
no es suficiente para romper el sistema. Por ejemplo, se da este caso
cuando el enemigo sólo conoce una cantidad de criptograma
insuficiente para el criptoanálisis. Por el contrario, el secreto práctico
se mide de acuerdo con la complejidad computacional del
criptoanálisis. Según las necesidades actuales, y debido
principalmente a la gran cantidad de información que se transmite
habitualmente, los diseñadores de sistemas criptográficos deben
suponer que el enemigo puede hacer al menos un ataque del
segundo tipo, luego deben intentar conseguir al menos secreto
práctico.
Existen muchos puntos en común entre la teoría de la información y la
criptografía. En concreto, entre codificación y criptografía se tiene que la
codificación representa una forma alternativa de esconder un mensaje. La
diferencia esencial entre un cifrado y un código estriba en que este último
es un diccionario fijo; es decir, a cada palabra le corresponde siempre la
misma palabra código.
Las principales desventajas del código cuando se utiliza como cifrado son:
◦ Sólo se pueden transmitir aquellas palabras que tengan traducción asignada en
el diccionario del código.
◦ El receptor debe tener el diccionario para poder decodificar; es decir, el código
completo constituye la clave.
◦ Su implementación, sobre todo a la hora de cambiar el código, es muy costosa.
◦ El criptoanálisis se puede basar en un análisis de frecuencias.
◦ La ventaja de este sistema es la compresión de la información siempre que las
palabras de códigos usadas sean más cortas que las palabras originales.
El diseñador de un criptosistema, además de escoger un modelo para la
fuente del texto, tiene que elegir los símbolos matemáticos necesarios
para representar las unidades del texto.
Fuente del texto
En primer lugar hay que distinguir, según la fuente que proporciona el texto,
el cifrado digital del analógico. Si dicha fuente es digital, los mensajes están
constituidos por grupos de elementos pertenecientes a una colección finita
denominada alfabeto. Por otro lado, se dice que la fuente es analógica si
genera un continuo de valores. El cifrado de fuentes analógicas no resulta
en absoluto seguro, por lo que es necesario previamente digitalizar los
mensajes analógicos.
En los cifrados digitales, tanto el texto original como el texto cifrado están
formados por letras de un alfabeto. Se considera, además del alfabeto
A={a1,a2,...,am}, los alfabetos formados a partir de la concatenación de sus
letras A^n={(a1,...(n,a1),...,(am,...,(n,am)}. Sus m^n elementos son las
llamadas n-palabras. Por motivos prácticos se sustituyen las letras por
números, usándose entonces como alfabeto el conjunto de enteros
Zm={0,1,...,m-1}. Al conjunto de n-palabras correspondiente a este alfabeto
se le denota Zm,n. Principalmente se usan dos alfabetos numéricos, el
alfabeto decimal Z10={0,1,...9,} y el alfabeto binario {0,1}.
Tipos de cifrado
Existen dos grandes grupos de cifras: los algoritmos que utilizan una
única clave tanto en el proceso de cifrado como en el de descifrado y los
que utilizan una clave para cifrar mensajes y una clave distinta para
descifrarlos. Los primeros se denominan cifras simétricas o de clave
simétrica y son la base de los algoritmos de cifrado clásico. Los
segundos se denominan cifras asimétricas de clave asimétrica o de
clave pública y clave privada y forman en núcleo de las técnicas de
cifrado modernas.
La criptografía simétrica se refiere al conjunto de métodos que
permiten tener comunicación segura entre las partes siempre y
cuando anteriormente se hayan intercambiado la clave
correspondiente que llamaremos clave simétrica. La simetría se
refiere a que las partes tienen la misma llave tanto para cifrar como
para descifrar.
Este tipo de criptografía se conoce también como criptografía de
clave privada o criptografía de llave privada.
Existe una clasificación de este tipo de criptografía en tres familias,
la criptografía simétrica de bloques (block cipher), la criptografía
simétrica de lluvia (stream cipher) y la criptografia simétrica de
resumen (hash functions).
Criptografía de clave secreta
En los cifrados de clave secreta, la seguridad depende de un secreto
compartido exclusivamente por emisor y receptor.
La principal amenaza criptoanalítica proviene de la alta redundancia de la
fuente. Shannon sugirió por ello dos métodos básicos para frustrar un
criptoanálisis estadístico: la difusión y la confusión.
El propósito de la difusión consiste en anular la influencia de la redundancia
de la fuente sobre el texto cifrado. Hay dos formas de conseguirlo. La
primera, conocida como transposición, evita los criptoanálisis basados en
las frecuencias de las n-palabras. La otra manera consiste en hacer que cada
letra del texto cifrado dependa de un gran número de letras del texto
original.
El objetivo de la confusión consiste en hacer que la relación entre la clave y
el texto cifrado sea lo más compleja posible, haciendo así que las
estadísticas del texto cifrado no estén muy influidas por las del texto
original. Eso se consigue normalmente con la técnica de la sustitución. En
solitario, ni confusión ni difusión constituyen buenas técnicas de cifrado.
Transposición, sustitución y producto
Se puede hacer otra gran división de los cifrados según el tipo de operación que
se realiza en el cifrado. Dadas la característica finita del alfabeto y la hipótesis
de no variación de la longitud del texto, existen dos opciones para el cifrado. La
primera, llamada transposición, consiste en crear el texto cifrado simplemente
desordenando las unidades que forman el texto original. La segunda, llamada
sustitución, consiste en sustituir las unidades del texto original por otras.
El cifrado por transposición consiste en la alteración del orden de las unidades
del texto original según una clave. El cifrado por sustitución consiste en el
reemplazamiento de las unidades del texto original según una clave.
Se llama cifrado producto a la aplicación iterativa de cifrados sobre textos ya
cifrados, es decir, a la composición de varios cifrados. En general, los cifrados
simétricos son cifrados producto de las dos operaciones mencionadas,
sustitución y transposición.
Sustitución y transposición no resultan muy efectivos usados individualmente,
sin embargo constituyen la base de sistemas mucho más difíciles de
criptoanalizar. Algunos de estos esquemas fueron usados en los años veinte
para el diseño de las máquinas de rotor.
1- Cifrado en bloque, DES
Independientemente de la clasificación realizada en el apartado anterior según la
fuente que genera el texto, los cifrados simétricos se pueden clasificar en dos
grandes grupos: los correspondientes a fuentes que generan n-palabras y los
correspondientes a fuentes que generan letras. En el primer caso se habla de
cifrados en bloque y en el segundo de cifrados en flujo.
El cifrado en bloque opera sobre textos formados por n-palabras, convirtiendo cada
una de ellas en una nueva n-palabra.
Sin duda el cifrado en bloque más conocido es el llamado DES. Este sistema se puede
catalogar como un cifrado en bloque que es a la vez un cifrado producto de
transposiciones y sustituciones.
A finales de los años cuarenta, Shannnon sugirió nuevas ideas para futuros sistemas
de cifrado. Sus sugerencias se referían al uso de operaciones múltiples que
mezclaran transposiciones y sustituciones. Estas ideas fueron aprovechadas por IBM
en los años setenta, cuando desarrolló un nuevo sistema llamado LUCIFER. Poco
después en 1976, el gobierno de EEUU adoptó como estándar un sistema de cifrado
basado en el LUCIFER y denominado DES (Data Encryption Standard). En
consecuencia casi todos los gobiernos del mundo aceptaron el mismo cifrado o parte
de él como estándar en las comunicaciones de las redes bancarias y comerciales.
Ejemplos
Algunos ejemplos de algoritmo de cifrado simétrico son:
◦ DES
◦ TDES
◦ IDEA
◦ AES
◦ Blowfish
DATA ENCRIPTION STANDARD (DES)
DES fue publicado en el 1977 por el Buró Internacional de Estándares
(NSA) para uso comercial y aplicaciones no-clasificadas del Gobierno de
los EU. Fue diseñado por IBM basado en su propio cifrado Lucifer y
entrada de NSA. DES usa una llave de 56 bit, y mapea un bloque de
entrada de 64 bits en un bloque de salida de 64 bits. La llave
actualmente luce como una de 64 bits, pero un bit dentro de cada uno
de los 8 octetos es utilizado para paridad impar en cada octeto. Por
consiguiente, solo 7 bits en cada octeto son en realidad representativos
como llave.
¿Porqué 56 bits?
El uso de una llave de 56 bits es uno de los puntos mas controversiales
de DES. Aun antes de DES fuese adoptado, personas afuera de la
comunidad de inteligencia se quejaba de que 56 bits proveía una
seguridad inadecuada. ¿Entonces porque solo 56 de los 64 bits de una
llave en DES eran utilizados en el algoritmo? La desventaja de usar 8 bits
de la llave para chequeo de paridad hacia a DES considerablemente
menos segura (256 veces menos segura en contra de una búsqueda
exhaustiva).
Entonces, ¿Cuál es la desventaja de usar 8 bits de la llave para paridad?
Digamos que se recibe una llave por medio electrónico, y se desea
revisar si realmente es una llave. Si se revisa la paridad de la cantidad, y
resulta incorrecta, entonces sabremos que algo salió incorrecto.
Existen dos problemas con este razonamiento. El primero es que existe la
posibilidad de 1 en 256 (en el esquema de paridad) que se reciban los 64
bits de basura y que el resultado de la paridad sea correcto y parezca una
llave. El segundo problema es que no hay terrible en recibir una mala llave.
Solo sabrás que es incorrecta cuando sea usada para cifrar o descifrar.
La llave, a 56 bits, es bien sabido universalmente ser muy pequeña para ser
segura. A lo mejor podríamos argumentar que una llave mas pequeña es
una ventaja porque guarda espacio – pero este argumento es débil ya que
nadie comprime datos en una llave de 64 bits para que quepan en 56 bits.
Entonces, que beneficio hay en usurparle 8 bits para paridad que no me
garantiza la perdida en seguridad?
Hay personas que sugieren que el gobierno conscientemente decidió
debilitar la seguridad de DES lo suficiente para que la NSA pueda romperlo.
Los avances en la tecnología de semiconductores han hecho mas critica
el tema de la longitud de la llave. Las velocidades de los chip han
avanzado de forma que las llaves de DES puedan ser rotas con un poco
de astucia y búsqueda exhaustiva. A lo mejor la llave de 64 bits hubiese
podido prolongar su utilidad unos cuantos anos mas. Tomando el
mejoramiento del hardware y su precio/rendimiento cerca de un 40 %
por ano, las llaves debieron haber crecido 1 bit cada 2 anos. Asumiendo
que 56 bits eran suficientes en 1979 (cuando DES fue estandarizado),
64 bits hubiesen sido suficientes en el 1995, y 128 bits para el 2123.
¿Cómo es DES seguro?
Actualmente los chips comerciales de DES no permiten hacer
búsquedas exhaustivas de llave, solo permiten cifrar mucho dato con
una llave particular. La velocidad relativa de cargar la llave es mucho
menor que la velocidad de cifrar dato. Es casi una necesidad de diseñar
y manufacturar un chip de búsqueda de llave de DES.
En 1977, Diffie y Hellman [DIF77] hicieron un análisis detallado de lo
que costaría construir una máquina rompe-DES y concluyeron que con
US $ 20 millones se puede construir una maquina con un millón de chip
que puede encontrar la llave DES en doce horas (dado un par <texto
plano, texto cifrado>). En 1998, EFF (Electronic Frontier Foundation)
[EFF98] construyeron un máquina de propósito especial rompe-DES,
llamada ‘EFF DES Cracker’ por debajo de $250K. Fue diseñado para
encontrar la llave DES en 4 días ½ . Con este diseño hecho, el costo de
una réplica de la máquina estaba por debajo de los $150K.
Aunque se ha publicado más información sobre el criptoanálisis de DES
que de ningún otro cifrado de bloque, el ataque más práctico hoy en día
sigue siendo por fuerza bruta. Se conocen varias propiedades
criptoanalíticas menores, y son posibles tres tipos de ataques teóricos
que, aún requiriendo una complejidad teórica menor que un ataque por
fuerza bruta, requieren una cantidad irreal de textos planos
conocidos o escogidos para llevarse a cabo, y no se tienen en cuenta en
la práctica.
Ataque por fuerza bruta: Para cualquier tipo de cifrado, el método de ataque más
simple es el ataque por fuerza bruta — probando una por una cada posible clave. La
longitud de clave determina el número posible de claves, y por tanto la factibilidad
del ataque.
Ataques más rápidos que la fuerza bruta: Existen tres ataques conocidos que
pueden romper las dieciséis rondas completas de DES con menos complejidad que
un ataque por fuerza bruta: el criptoanálisis diferencial (CD), el criptoanálisis
lineal (CL) y el ataque de Davies. De todas maneras, éstos ataques son sólo teóricos y
no es posible llevarlos a la práctica; éste tipo de ataques se denominan a veces
debilidades certificacionales.
◦ El criptoanálisis diferencial fue descubierto a finales de los 80 por Eli Biham y Adi Shamir,
aunque era conocido anteriormente tanto por la NSA como por IBM y mantenido en secreto.
Para romper las 16 rondas completas, el criptoanálisis diferencial requiere 247 textos planos
escogidos. DES fue diseñado para ser resistente al CD.
◦ El criptoanálisis lineal fue descubierto por Mitsuru Matsui, y necesita 243 textos planos
conocidos; el método fue implementado, y fue el primer criptoanálisis experimental de DES
que se dio a conocer.
◦ El ataque mejorado de Davies: mientras que el análisis lineal y diferencial son técnicas
generales y pueden aplicarse a multitud de esquemas diferentes, el ataque de Davies es una
técnica especializada para DES.
Funcionamiento de DES: estructura básica
La entrada de 64 bits esta sujetada a una permutación inicial para obtener
un resultado de 64 bits. La llave de 56 bits es usada para generar 16 llaves
de 48 bits por ronda, tomando un diferente subconjunto de 48 bits de los
56 bits para cada una de las llaves. Cada ronda toma como entrada los 64
bits de la salida de la ronda previa, y la llave de 48 bits por ronda, y
produce una salida de 64 bits. Luego de la ronda 16, la salida de 64 bits
tiene sus mitades intercambiada y después se sujeta a otra permutación,
que sucede ser lo contrario de la permutación inicial.
Esa es una visión del funcionamiento de la encriptación. El descifrado
funciona esencialmente corriendo DES de atrás hacia atrás. Para descifrar
un bloque, primero se debe de correr a través de la permutación inicial
hasta llegar a la permutación final (las permutaciones iniciales y finales son
inversas una a la otra). Se hace el mismo procedimiento de generación de
llaves sin embargo se usan las llaves en el orden opuesto (primero se usa
k16, la llave que se genero de último). Luego se corren 16 rondas igual que
en la encriptación. Después de las 16 rondas de descifrado, la salida tiene
sus mitades intercambiada y luego se sujeta a la permutación final (para
revertir la permutación inicial).
Permutaciones del dato
DES realiza una permutación inicial y final en el dato, el cual hace
esencialmente nada mas que aumentar la seguridad de DES. La razón
mas marcada para estas permutaciones es para hacer DES menos
eficiente en la implementación de software.
La manera en que las permutaciones de hacen en DES se especifican en
esta forma:
Ronda DES
Salida de 64 bits
Entrada de 64 bits
Ln de 32 bits Rn de 32 bits Ln de 32 bits Rn de 32 bits
Kn Kn
Función Función
Manglar Manglar
Ln+1 de 32 bits Rn+1 de 32 bits Ln+1 de 32 bits Rn+1 de 32 bits
Salida de 64 bits Entrada de 64 bits
Encriptación Desencriptación
Generando las Llaves por Rondas
La llave DES luce como una cadena de 64 bits de longitud, pero en
realidad 8 bits son de paridad. Si enumeramos los bits de la llave DES de
izquierda a derecha 1, 2,…, 64. Los bits 8, 16, .., 64 son los bits de
paridad. DES realiza una función, en estos 64 bits para generar 16 llaves
de 48 bits, las cuales son K1, K2,.., K16.
La función manglar
La función manglar toma una entrada de 32 bits Rn, la cual llamaremos
simplemente R, y los 48 bits de Kn, que llamaremos K, y produce una
salida de 32 bits en la cual, cuando (+) con Ln, produzca Rn+1.
La función manglar primero expande R de un valor de 32 bits a uno de
48 bits. Esto lo hace dividiendo a R en 8 partes de 4 bits y luego
expandiendo cada uno de esas partes a 6 bits tomando el bit adyacente
y concatenándolo a la parte. Los bis de mas a la izquierda y los de mas a
ala derecha son considerados adyacentes.
Los 48 bits se dividen en o partes de 6 bits. La parte i de la R expandida
es con la parte i de K que se agrega a la salida de 6 bits. Esta salida de 6
bits alimenta una S-caja, una sustitución que produce una salida de 4
bits para cada posible entrada de 6 bits. Como existen 64 posibles
valores de entrada (6 bits) y solo 16 posibles valores de salida (4 bits), la
S-caja claramente mapea varios valores de entrada al mismo valor de
salida.
Como resultado, hay exactamente 4 valores de entrada que mapean
para cada posible valor de la salida. Cada S-caja puede ser ideada como
cuatro separadores de 4 bits a 4 bits, con los restantes 4 bits de la parte
de 6 bits sirviendo como entrada, y los 2 bits del extremo seleccionan
cual de las cuatro S-cajas se va a utilizar.
S-cajas
La salida de 4 bits de cada una de las 8 S-cajas se combinan en una
cantidad de 32 bits cuyos bits son permutados. Una permutación en
este punto es de valor de seguridad para DES en orden para asegurar
que los bits de la salida de una S-caja en una ronda de DES afecte la
entrada de múltiples S-cajas en la siguiente ronda. Sin esta
permutación, un bit de entrada en la izquierda afectara mayormente los
bits de salida en la izquierda.
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
Propiedades
DES es un algoritmo simétrico, con clave de 64 bits, de los cuales 8 son
bits de paridad, lo cual deja una clave efectiva de 56 bits. DES opera
cifrando sobre bloques de 64 bits y este se somete a 16
interacciones.
Dependiendo de la naturaleza de la aplicación DES tiene
4 modos de operación para poder implementarse:
◦ ECB (Electronic Codebook Mode) para mensajes cortos, de menos
de 64 bits,
◦ CBC (Cipher Block Chaining Mode) para mensajes largos,
◦ CFB (Cipher Block Feedback) para cifrar bit por bit ó byte por byte
y
◦ OFB (Output Feedback Mode) el mismo uso pero evitando
propagación de error.
Demo 1 (DES animation)
Demo 2
TDES o 3DES
Triple DES es el algoritmo que hace triple cifrado del DES. También es
conocido como TDES o 3DES, fue desarrollado por IBM en 1978.
No llega a ser un cifrado múltiple, porque no son independientes todas las
subclases. Este hecho se basa en que DES tiene la característica matemática
de no ser un grupo, lo que implica que si se cifra el mismo bloque dos veces
con dos claves diferentes se aumenta el tamaño efectivo de la clave.
La variante más simple del Triple DES funciona de la siguiente manera:
Donde M es el mensaje a cifrar y k1, k2 y k3 las respectivas claves DES.
DEMO
International Data Encryption Algorithm (IDEA)
IDEA fue diseñado para ser eficiente de computar en software.
Encripta un bloque de 64 bits de texto plano en un bloque de 64
bits de texto cifrado usando una llave de 128 bits. Fue publicado en
1991, de modo que los criptoanalistas han tenido tiempo para
encontrar las debilidades. Hasta el momento no se han encontrado,
al menos por “the good guys” (los que publican sus resultados).
IDEA es similar a DES en cierta forma. Ambos operan en rondas, y
ambos tienen una función manglar compleja que no tiene que ser
reversible para el funcionamiento de la desencriptación. En lugar, la
función manglar se corre en la misma dirección para cifrar y
descifrar, en ambos IDEA y DES. De hecho, ambos tienen la
propiedad de que la encriptación y desencriptación son idénticas
excepto por la expansión de la llave. Con DES, la misma llave es
usada en orden reverso; con IDEA las llaves de encriptación y
desencriptación están relacionadas en una forma mas compleja.
IDEA nace en Europa como respuesta a la falta de
seguridad a largo plazo de DES. El algoritmo se realiza
en colaboración por el Swiss Federal Institute of
Technology de Zürich y Ascom.
IDEA esta disponible a todo el mundo, totalmente
especificado, no tiene restricciones de exportación, y
es de fácil comprensión.
IDEA cifra en bloques. Esto quiere decir que con un
bloque de 64 bits (texto en claro) y una clave de 128
bits obtenemos un nuevo bloque de 64 bits
(criptotexto).
MODOS ALGORITMO IDEA
ECB (electronic codebook o libro de códigos electrónico) va bien para
datos aleatorios, tales como encriptar otras claves. Puesto que los
datos son cortos y aleatorios, las desventajas de ECB tienen un efecto
negativo favorable.
CBC (cipher block chaining o cifrado en bloque encadenado) es
especialmente útil para encriptar ficheros, donde incrementa
significativamente la seguridad por encima de ECB.
CFB (cipher feedback o cifrado realimentado) es el mejor modo de
encriptar flujos de bytes donde cada byte debe ser encriptado.
OFB (output feedback o salida realimentada) es comparable al CFB,
pero puede usarse en aplicaciones donde la propagación de errores
no puede tolerarse.
Seguridad
En primer lugar, el ataque por fuerza bruta resulta impracticable, ya que
sería necesario probar 1038 claves, cantidad imposible de manejar con
los medios informáticos actuales. Los diseñadores analizaron IDEA para
medir su fortaleza frente al criptoanálisis diferencial y concluyeron que
es inmune bajo ciertos supuestos. No se han informado de debilidades
frente al criptoanálisis lineal o algebraico. Se han encontrado algunas
claves débiles, las cuales en la práctica son poco usadas siendo
necesario evitarlas explícitamente. Es considerado por muchos como
uno de los cifrados en bloque más seguros que existen.
Expansión de la llave
La llave de 128 bits es expandida en 52 llaves de 16 bits, K1, K2,…, K52. La
expansión de la llave se hace de forma diferente para la encriptación
que para la desencriptación. Una vez que las 52 llaves han sido
generadas, la encriptación y desencriptación son las mismas.
Las 52 llaves de la encriptación son generadas escribiendo la llave de
128 bits y, empezando desde la izquierda, escogiendo 16 bits a la vez.
Esto genera 8 llaves de 16 bits.
Las siguientes 8 llaves son generadas empezando en el bit 25, y
mapeando regresando al comienzo cuando el final sea alcanzado:
Las siguientes ocho llaves son generadas dejando (intercalando) 25 bits
mas, hasta que las 52 llaves sean generadas. La ultima selección
empieza en el bit 23 y solo necesita 4 llaves.
Una ronda
Como DES, IDEA se efectúa en rondas. Tiene 17 rondas, donde las
rondas impares difieren de las pares.
Cada ronda toma la entrada, una cantidad de 64 bits, y la trabaja como
4 cantidades de 16 bits.
Las rondas impares utilizaran 4 de las llaves generadas Ki.
Las rondas pares utilizaran 2 de las llaves generadas Ki.
Ronda Impar
La ronda impar es bien sencilla, como se muestra en la figura de abajo.
Note que es reversible fácilmente, de modo que en la desencriptación,
las rondas impares corren con el inverso multiplicativo de las llaves. Esto
deshará el trabajo previamente hecho durante esa ronda en la
encriptación.
Ronda Par
AES (Advance Encryption Standard)
El mundo necesitaba de un estándar de clave secreta. La llave de
DES era muy pequeña. Triple DES era muy lento. IDEA tenía patente
de protección, sospechoso y lento. El Instituto Nacional de
Estándares y Tecnología (NIST) decide que quería facilitar la
creación de un nuevo estándar, pero tenia problemas técnicos y
políticos.
NIST realmente quería ayudar en la creación de un excelente
estándar en seguridad. El nuevo estándar debería ser eficiente,
flexible, seguro y libre para implementarse.
En enero 2 del 1997, NIST anuncia un concurso para seleccionar un
nuevo estándar para ser usado para proteger información del
gobierno de EU sensitiva, no clasificada. Las propuestas se
aceptarían de cualquier persona y de cualquier parte del mundo.
Las candidatos deberían cumplir con una serie de requisitos,
incluyendo tener un análisis razonado documentado del
diseño. Pasaron varios años en los cuales se presentaron
propuestas (papers) en conferencias analizando a los
candidatos. Había un grupo de criptógrafos de alta motivación
buscando defectos en las propuestas. Y NIST también corrió
pruebas a los candidatos evaluando el funcionamiento y otras
características.
Después de muchas investigaciones y discusiones en la
comunidad criptográfica, NIST escogió un algoritmo llamado
Rijndael, llamado así por dos criptógrafos belgas quienes
desarrollaron y lo presentaron. El 26 de noviembre del 2001,
AES, la estandarización de Rijndael, es un estándar para
procesar información federal (FIPS01).
Rijndael provee para una variedad de bloques de información
y tamaño de llaves. Estos dos parámetros pueden ser
elegidos independientemente entre 128, 160, 192, 224 y 256
bits (en particular, el tamaño de la llave y del bloque de
información pueden ser diferentes).
AES maneja un tamaño de bloques de 128 bits, y escoge el
tamaño de la llave entre 128, 192 y 256 bits.
S-Cajas para Rijndael
Expansión de la llave
Seguridad
Hasta 2005, no se ha encontrado ningún ataque exitoso contra el AES.
El método más común de ataque hacia un cifrador por bloques consiste
en intentar varios ataques sobre versiones del cifrador con un número
menor de rondas. El AES tiene 10 rondas para llaves de 128 bits, 12
rondas para llaves de 192 bits, y 14 rondas para llaves de 256 bits. Hasta
2005, los mejores ataques conocidos son sobre versiones reducidas a 7
rondas para llaves de 128 bits, 8 rondas para llaves de 192 bits, y 9
rondas para llaves de 256 bits (Ferguson et al, 2000).
Algunos criptógrafos muestran preocupación sobre la seguridad del
AES. Ellos sienten que el margen entre el número de rondas
especificado en el cifrador y los mejores ataques conocidos es muy
pequeño. El riesgo es que se puede encontrar alguna manera de
mejorar los ataques y de ser así, el cifrado podría ser roto. En el
contexto criptográfico se considera "roto" un algoritmo si existe algún
ataque más rápido que una búsqueda exhaustiva (ataque por fuerza
bruta). De modo que un ataque contra el AES de llave de 128 bits que
requiera 'solo' 2120 operaciones sería considerado como un ataque que
"rompe" el AES aun tomando en cuenta que por ahora sería un ataque
irrealizable. Hasta el momento, tales preocupaciones pueden ser
ignoradas. El ataque de fuerza bruta más largamente publicitado y
conocido ha sido contra una clave de 64 bits RC5.
Otra preocupación es la estructura matemática de AES. A diferencia de
la mayoría de cifradores de bloques, AES tiene una descripción
matemática muy ordenada. Esto no ha llevado todavía a ningún ataque,
pero algunos investigadores están preocupados que futuros ataques
quizá encuentren una manera de explotar esta estructura.
En 2002, un ataque teórico, denominado “ataque XSL", mostrando una
potencial debilidad en el algoritmo AES. Varios expertos criptográficos
han encontrado problemas en las matemáticas que hay por debajo del
ataque propuesto, sugiriendo que los autores quizá hayan cometido un
error en sus estimaciones. Si esta línea de ataque puede ser tomada
contra AES, es una cuestión todavía abierta. Hasta el momento,
el ataque XSL contra AES parece especulativo; es improbable que nadie
pudiera llevar a cabo en la práctica este ataque.
Los ataques de canal auxiliar no atacan al cifrador en sí, sino a las
implementaciones del cifrador en sistemas que revelan datos inadvertidamente.
En abril de 2005, Daniel Bernstein anunció un ataque temporizado de cache que
solía romper un servidor a medida que usaba el cifrado AES para OpenSSL. Este
servidor fue diseñado para dar la mayor cantidad de información acerca de los
tiempos de ejecución como fuera posible, y el ataque requería cerca de 200
millones de ficheros de texto en claro. Se dice que el ataque no es práctico en
implementaciones del mundo real; Bruce Schneier llamó a esta investigación
un "bonito ataque de tiempos“.
En octubre de 2005, Adi Shamir y otros dos investigadores presentaron un
artículo demostrando varios ataques de tiempos de cache7 contra AES. Uno de
los ataques obtuvo una clave de AES entera después de tan solo 800 escrituras,
en 65 milisegundos. Este ataque requiere que el atacante pueda ejecutar
programas en el mismo sistema que realiza el cifrado de AES.
Blowfish
Blowfish es un codificador de bloques simétricos, diseñado por Bruce
Schneier en 1993 e incluido en un gran número de conjuntos de
codificadores y productos de cifrado. Mientras que ningún analizador de
cifrados de Blowfish efectivo ha sido encontrado hoy en día, se ha dado más
atención de la decodificación de bloques con bloques más grandes,
como AES y Twofish.
Schneier diseñó Blowfish como un algoritmo de uso general, que intentaba
reemplazar al antiguo DES y evitar los problemas asociados con otros
algoritmos. Al mismo tiempo, muchos otros diseños eran propiedad
privada, patentados o los guardaba el gobierno. Schneier declaró “Blowfish
no tiene patente, y así se quedará en los demás continentes. El algoritmo
está a disposición del público, y puede ser usado libremente por
cualquiera”.
https://www.schneier.com/blowfish.html
El diagrama muestra la acción de DIAGRAMA DE BLOWFISH
Blowfish. Cada línea representa 32
bits. El algoritmo guarda 2
matrices de subclaves: la matriz P
de 18 entradas y 4 S-cajas de 256
entradas. Una entrada de la matriz
P es usada cada ronda, después de
la ronda final, a cada mitad del
bloque de datos se le aplica un
XOR con uno de las 2 entradas de
la matriz P que no han sido
utilizadas.
DIAGRAMA DE LA FUNCIÓN F DE La función divide las entrada de 32
BLOWFISH bits en 4 bloques de 8 bits, y usa los
bloques como entradas para las S-
Cajas. Las salidas deben estar en
módulo 232 y se les aplica un XOR para
producir la salida final de 32 bits.
Blowfish usa bloques de 64 bits y claves que van desde los 32 bits hasta
448 bits. Es un codificador de 16 rondas Feistel y usa llaves que
dependen de las S-Cajas. Tiene una estructura similar a CAST-128, el
cual usa S-Cajas fijas.
Debido a que Blowfish está en la red Feistel, puede ser invertido
aplicando un XOR entre P17 y P18 al bloque texto codificado, y así
sucesivamente se usan las P-entradas en orden reversivo.
La generación de claves comienza inicializando las matrices P y las S-
Cajas con los valores derivados de los dígitos hexadecimales de pi, los
cuales no contienen patrones obvios. A la clave secreta se le aplica un
XOR con las P-entradas en orden (ciclando la clave si es necesario).
Demo
RC5
Como la mayoría de nuevos algoritmos, permite diferentes longitudes
de clave. Fuera de los EE.UU. sólo se puede exportar la versión con
clave de 56 bits.
Funciona como un generador de números aleatorios que se suman al
texto mediante una OR-EXCLUSIVA.
Se pueden configurar muchos parámetros: número de iteraciones,
longitud de clave y tamaño de bloque. Esto permite adaptarse a las
necesidades de velocidad/seguridad de cada aplicación.
RC5 tiene tamaño variable de bloques (32, 64 o 128 bits), con
tamaño de clave (entre 0 y 2040 bits) y número de vueltas
(entre 0 y 255). La combinación sugerida originalmente era:
bloques de 64 bits, claves de 128 bits y 12 vueltas. Una
característica importante de RC5 es el uso de rotaciones
dependientes de los datos; uno de los objetivos de RC5 era
promover el estudio y evaluación de dichas operaciones como
primitivas de criptografía. RC5 también contiene algunas
unidades de sumas modulares y de Puertas O-exclusivo (XOR).
La estructura general del algoritmo es una red tipo Feistel. La
simplicidad del algoritmo junto con la novedad de las
rotaciones dependientes de los datos han hecho de RC5 un
objeto de estudio atractivo para los criptoanalistas.
Modos de Operación
RC5 hace uso de tres parámetros diferentes para operar así que, para
determinar de manera específica lo seleccionado, el algoritmo se
designa como RC5-w/r/b; por ejemplo, RC5-32/12/16 se trata de un RC5
que cifra mensajes de 64 bits, en 12 rondas y con una clave de 16 bytes
(128 bits). Para elevar la efectividad de RC5 en las implementaciones,
RFC2040 define cuatro modos diferentes de operación los cuales son:
◦ RC5-cifrador en bloque: Este algoritmo de cifrado considera entradas de tamaño fijo y
genera un criptograma de igual longitud mediante un proceso de transformación que
depende de la clave k. Esto se hace utilizando la modalidad ECB que consiste en
trabajar bloques de 64 bits de mensaje en claro (Mcla) y cifrar cada uso de manera
independiente utilizando siempre la misma clave.
◦ RC5-CBC: este modo de cifrado se basa en la modalidad CBC la cual representa una
seguridad más elevada en comparación con la que usa ECB, ya que aquí aun cuando se
repitan bloques de mensaje en claro el criptograma correspondiente es diferente en
cada ocasión.
◦ RC5-CBC-relleno: Utiliza la modalidad CBC con una variante, el algoritmo considera el
uso de mensaje en claro de longitud variable por lo que el criptograma
correspondiente será de la misma longitud. Lo que hace esta modalidad es procesar
información (Mcla/Cripto) en múltiplos de un bloque sencillo RC5 por lo que si se
requiere, éste se rellena.
◦ RC5-CTS: Se trata de un cifrado que se apoya en CBC y que es muy similar a CBC-
relleno, ya que puede manejar bloques de información de cualquier tamaño y para
poder operar requiere procesar bits en múltiplos de bytes por lo que realiza un
relleno. La diferencia consiste en que cuando el criptograma correspondiente debe ser
almacenado en la misma localidad de memoria (en sustitución) que ocupa el mensaje
en claro, resulta que el criptograma es de mayor longitud (debido al relleno) por lo que
ahora es necesario sustraer el excedente.
2- Cifrado en flujo
Para algunas aplicaciones, tales como el cifrado de conversaciones
telefónicas, el cifrado en bloques es inapropiada porque los flujos de
datos se producen en tiempo real en pequeños fragmentos. Las
muestras de datos pueden ser tan pequeñas como 8 bits o incluso de 1
bit, y sería un desperdicio rellenar el resto de los 64 bits antes de cifrar
y transmitirlos.
Los cifradores de flujo son algoritmos de cifrado que pueden realizar el
cifrado incrementalmente, convirtiendo el texto en claro en texto
cifrado bit a bit. Esto se logra construyendo un generador de flujo de
clave. Un flujo de clave es una secuencia de bits de tamaño arbitrario
que puede emplearse para oscurecer los contenidos de un flujo de
datos combinando el flujo de clave con el flujo de datos mediante la
función XOR. Si el flujo de clave es seguro, el flujo de datos cifrados
también lo será.
Se puede construir un generador de flujo de clave iterando una función
matemática sobre un rango de valores de entrada para producir un flujo
continuo de valores de salida. Los valores de salida se concatenan
entonces para construir bloques de texto en claro, y los bloques se
cifran empleando una clave compartida por el emisor y el receptor.
Para conservar la calidad de servicio del flujo de datos, los bloques del
flujo de clave deberían producirse con un poco de antelación sobre el
momento en que vayan a ser empleados, además el proceso que los
produce no debiera exigir demasiado esfuerzo de procesamiento como
para retrasar el flujo de datos.
Un generador pseudoaleatorio es un algoritmo que, a partir de un mismo
valor de entrada o clave, genera el mismo flujo de bits de salida, que tiene
el aspecto de secuencia aleatoria.
Cifrado en flujo
El primero en proponer un cifrado en el Código-Baudot
Caracteres de Escape
que el texto cifrado resulta de combinar o.... Espacio, Usa la tabla de letras
mediante una operación eficiente el .o... Espacio, Usa la tabla de números
texto original con el flujo de bits secretos oo... Borra el último carácter
fue Vernam (1917). El cifrado de Vernam
se basa en el operador or-exclusivo .. o..
Tabla de Letras
A oo o.. K
Tabla de Números
.. o.. 1 o. o.. .
(suma módulo 2). Esta operación resulta .. oo. É oo oo. L .. .o. 2 o. .o. 9
/
especialmente indicada para este tipo de .. .o. E oo .o. M .. ..o 3 o. ..o 7
/
cifrado, ya que *^-1=*. .. .oo I oo .oo N .. o.o 4 o. o.o ²/
.. ooo O oo ooo P .. ooo 5 o. ooo '
En el cifrado de Vernam, primero se .. o.o U oo o.o Q .. oo. 1
/ o. oo. :
codifica cada letra del alfabeto según el .. ..o Y oo ..o R .. .oo ³/ o. .oo ?
código de Baudot, es decir .o ..o B o. ..o S .o o.. 6 oo o.. (
A=11000,...,Z=10001, y luego se le suma .o o.o C o. o.o T .o .o. 7 oo .o. )
en módulo 2 la clave expresada en .o ooo D o. ooo V .o ..o 8 oo ..o -
binario. .o .oo F o. .oo W .o o.o 9 oo o.o /
.o.o. G o. .o. X .o ooo 0 oo ooo +
4
.o oo. H o. oo. Z .o oo. / oo oo. =
5
.o o.. J o. o.. - .o .oo / oo .oo £
Los cifrados en flujo pueden dividirse en cifrados síncronos y cifrados
asíncronos, según la dependencia entre la función de transición de
estados y el espacio de los elementos de entrada.
Los cifrados síncronos son aquellos en los que cada estado sólo
depende anterior y no de los caracteres de la secuencia del mensaje
original. En otras palabras, la función de transición de estados es
independiente del mensaje. Esto implica que si durante la transmisión
se pierde un símbolo del criptograma, entonces se pierde la
sincronización entre emisor y receptor, por lo que ambos tienen que
sincronizar sus generadores de clave antes de continuar. Sin embargo,
como ventaja se tiene que una distorsión en la transmisión de un
símbolo se traduce sólo en un símbolo mal descifrado.
Los cifrados autosíncronos, por el contrario, se caracterizan porque cada
símbolo del texto cifrado depende de un número fijo de símbolos del
texto cifrado anterior. Eso elimina la necesidad de sincronización, pero a
cambio un error de transmisión o una pérdida de un carácter origina la
pérdida o mala obtención de un número de símbolos del mensaje
original; es decir propaganda de errores.
La secuencia cifrante ideal es una secuencia infinita, determinada por
una clave de manera que parezca aleatoria y que ningún enemigo
pueda generarla.
3- Funciones Hash
En informática, Hash se refiere a una función o método para
generar claves o llaves que representen de manera casi unívoca
a un documento, registro, archivo, etc., resumir o identificar un
dato a través de la probabilidad, utilizando una función hash o
algoritmo hash. Un hash es el resultado de dicha función o
algoritmo.
Una función de hash es una función para resumir o identificar
probabilísticamente un gran conjunto de información, dando
como resultado un conjunto imagen finito generalmente menor
(un subconjunto de los números naturales por ejemplo). Varían
en los conjuntos de partida y de llegada y en cómo afectan a la
salida similitudes o patrones de la entrada. Una propiedad
fundamental del hashing es que si dos resultados de una misma
función son diferentes, entonces las dos entradas que generaron
dichos resultados también lo son.
Es posible que existan claves resultantes iguales para objetos diferentes,
ya que el rango de posibles claves es mucho menor que el de posibles
objetos a resumir (las claves suelen tener en torno al centenar de bits,
pero los ficheros no tienen un tamaño límite).
Son usadas en múltiples aplicaciones, como los arrays asociativos,
criptografía, procesamiento de datos y firmas digitales, entre otros. Una
buena función de hash es una que experimenta pocas colisiones en el
conjunto esperado de entrada; es decir que se podrán identificar
unívocamente las entradas.
Muchos sistemas relacionados con la seguridad informática usan
funciones o tablas hash.
Las funciones hash (o primitivas hash) pueden operar como: MDC
(Modification Detection Codes) ó MAC (Message Authentication
Codes).
Los MDC sirven para resolver el problema de la integridad de la
información, al mensaje se le aplica un MDC (una función hash) y se
manda junto con el propio mensaje, al recibirlo el receptor aplica la
función hash al mensaje y comprueba que sea igual al hash que se
envió antes.
Los MAC sirven para autenticar el origen de los mensajes (junto con
la integridad), un MAC. Es decir, se combina el mensaje M con una
clave privada K y se les aplica un hash h(M,K), si al llegar a su
destino h(M, K) se comprueba de integridad de la clave privada K,
entonces se demuestra que el origen es solo el que tiene la misma
clave K, probando así la autenticidad del origen del mensaje.
Las propiedades que deben de tener las primitivas hash son:
1. Resistencia a la preimagen: significa que dada cualquier imagen, es
computacionalmente imposible encontrar un mensaje x tal que
h(x)=y. Otra forma como se conoce esta propiedad es que h sea de un
solo sentido.
2. Resistencia a una 2° preimagen: significa que dado x, es
computacionalmente imposible encontrar una x’ tal que h(x)=h(x’).
Otra forma de conocer esta propiedad es que h sea resistente a una
colisión suave.
3. Resistencia a colisión: significa que es computacionalmente
imposible encontrar dos diferentes mensajes x, x’ tal que h(x)=h(x’).
Esta propiedad también se conoce como resistencia a colisión fuerte.
SHA
La familia SHA (Secure Hash Algorithm, Algoritmo de Hash Seguro) es un
sistema de funciones hash criptográficas relacionadas de la Agencia de
Seguridad Nacional de los Estados Unidos y publicadas por el National
Institute of Standards and Technology (NIST). El primer miembro de la
familia fue publicado en 1993 es oficialmente llamado SHA. Sin
embargo, hoy día, no oficialmente se le llama SHA-0 para evitar
confusiones con sus sucesores. Dos años más tarde el primer sucesor de
SHA fue publicado con el nombre de SHA-1. Existen cuatro variantes
más que se han publicado desde entonces cuyas diferencias se basan en
un diseño algo modificado y rangos de salida incrementados: SHA-224,
SHA-256, SHA-384, y SHA-512 (llamándose SHA-2 a todos ellos).
En 1998, un ataque a SHA-0 fue encontrado pero no fue reconocido
para SHA-1, se desconoce si fue la NSA quien lo descubrió pero
aumentó la seguridad del SHA-1.
SHA-1 ha sido examinado muy de cerca por la comunidad criptográfica pública,
y no se ha encontrado ningún ataque efectivo. No obstante, en el año 2004, un
número de ataques significativos fueron divulgados sobre funciones
criptográficas de hash con una estructura similar a SHA-1; lo que ha planteado
dudas sobre la seguridad a largo plazo de SHA-1.
SHA-0 y SHA-1 producen una salida resumen de 160 bits de un mensaje que
puede tener un tamaño máximo de 264 bits, y se basa en principios similares a
los usados por el profesor Ronald L. Rivest del MIT en el diseño de los
algoritmos de resumen de mensaje MD4 y MD5.
La resistencia del algoritmo SHA-1 se ha visto comprometida a lo largo del año
2005. Después de que MD5, entre otros, quedara seriamente comprometido en
el 2004 por parte de un equipo de investigadores chinos, el tiempo de vida de
SHA-1 quedó visto para sentencia.
El mismo equipo de investigadores chinos ha demostrado que son capaces de
romper el SHA-1 en al menos 269 operaciones, unas 2000 veces más rápido que
un ataque de fuerza bruta (que requeriría 280 operaciones). Los últimos ataques
contra SHA-1 han logrado debilitarlo hasta 263
La importancia de la rotura de una función hash se debe interpretar en el
siguiente sentido: Un hash permite crear una huella digital, teóricamente
única, de un archivo. Una colisión entre hashes supondría la posibilidad de
la existencia de dos documentos con la misma huella. La inicial similitud
propuesta con la equivalencia a que hubiese personas que compartiesen las
mismas huellas digitales, o peor aún, el mismo ADN no es adecuada pues,
aunque fuera trivial encontrar dos ficheros con el mismo resumen
criptográfico ello no implicaría que los ficheros fueran congruentes en el
contexto adecuado. Siguiendo con la hipótesis de la similitud biométrica de
dos personas, sería el equivalente a necesitar modificar el número de
brazos en una persona para que su impresión dactilar fuera igual a la de
otra.
A pesar de que el NIST contempla funciones de SHA de mayor tamaño (por
ejemplo, el SHA-512, de 512 bits de longitud), expertos de la talla de Bruce
Schneier abogan por, sin llamar a alarmismos, buscar una nueva función
hash estandarizada que permita sustituir a SHA-1. Los nombres que se
mencionan al respecto son Tiger, de los creadores de Serpent, y
WHIRLPOOL, de los creadores de AES.
http://www.sha1-online.com/
http://www.xorbin.com/tools/sha256-hash-calculator
http://www.sha1.cz/
http://www.timestampgenerator.com/tools/sha1-generator/
MD5
MD5 (abreviatura de Message-Digest Algorithm 5, Algoritmo de
Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de
128 bits ampliamente usado.
MD5 es uno de los algoritmos de reducción criptográficos diseñados por
el profesor Ronald Rivest del MIT (Massachusetts Institute of
Technology, Instituto Tecnológico de Massachusetts). Fue desarrollado
en 1991 como reemplazo del algoritmo MD4 después de que Hans
Dobbertin descubriese su debilidad.
A pesar de su amplia difusión actual, la sucesión de problemas de
seguridad detectados desde que, en 1996, Hans Dobbertin anunciase
una colisión de hash plantea una serie de dudas acerca de su uso
futuro.
A pesar de haber sido considerado criptográficamente seguro en un
principio, ciertas investigaciones han revelado vulnerabilidades que hacen
cuestionable el uso futuro del MD5. En agosto del 2004, Xiaoyun Wang,
Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron el descubrimiento de
colisiones de hash para MD5. Su ataque se consumó en una hora de cálculo
con un clúster IBM P690.
Aunque dicho ataque era analítico, el tamaño del hash (128 bits) es lo
suficientemente pequeño como para que resulte vulnerable frente a
ataques de 'fuerza bruta' tipo 'cumpleaños' (Ataque de cumpleaños). El
proyecto de computación distribuida MD5CRK arrancó en marzo del 2004
con el propósito de demostrar que MD5 es inseguro frente a uno de tales
ataques, aunque acabó poco después del aviso de la publicación de la
vulnerabilidad del equipo de Wang.
Debido al descubrimiento de métodos sencillos para generar colisiones de
hash, muchos investigadores recomiendan su sustitución por algoritmos
alternativos tales como SHA-1 o RIPEMD-160.
Los resúmenes MD5 se utilizan extensamente en el mundo del software
para proporcionar la seguridad de que un archivo descargado de
internet no se ha alterado. Comparando una suma MD5 publicada con
la suma de comprobación del archivo descargado, un usuario puede
tener la confianza suficiente de que el archivo es igual que el publicado
por los desarrolladores. Esto protege al usuario contra los 'Caballos de
Troya' o 'Troyanos' y virus que algún otro usuario malicioso pudiera
incluir en el software. La comprobación de un archivo descargado
contra su suma MD5 no detecta solamente los archivos alterados de
una manera maliciosa, también reconoce una descarga corrupta o
incompleta.
Para comprobar la integridad de un archivo descargado de Internet se
puede utilizar una herramienta MD5 para comparar la suma MD5 de
dicho archivo con un archivo MD5SUM con el resumen MD5 del primer
archivo. En los sistemas UNIX, el comando de md5sum es un ejemplo de
tal herramienta. Además, también está implementado en el lenguaje de
scripting PHP como MD5("") entre otros.
En sistemas UNIX y GNU/Linux se utiliza el algoritmo MD5 para cifrar las
claves de los usuarios. En el disco se guarda el resultado del MD5 de la
clave que se introduce al dar de alta un usuario, y cuando éste quiere
entrar en el sistema se compara la entrada con la que hay guardada en
el disco duro, si coinciden, es la misma clave y el usuario será
autenticado. He ahí el problema de encontrar y generar colisiones de
hash a voluntad.
El MD5 también se puede usar para comprobar que los correos
electrónicos no han sido alterados usando claves públicas y privadas.
Demo 1
Demo 2
Demo 3
Criptografía de clave pública
En los cifrados asimétricos o de clave pública la clave de descifrado no se
puede calcular a partir de la de cifrado.
En 1975, dos ingenieros electrónicos de la Universidad de Stanford,
Whitfield Diffie y Martin Hellman, sugieren usar problemas
computacionalmente irresolubles para el diseño de criptosistemas seguros.
La idea consiste básicamente en encontrar un sistema de cifrado
computacionalmente fácil (o al menos no difícil), de tal manera que el
descifrado sea, por el contrario, computacionalmente irresoluble a menos
que se conozca la clave. Para ello, hay que usar una transformación
criptográfica Tk de fácil aplicación, pero de tal forma que sea muy difícil
hallar la transformación inversa Tk' sin la clave de descifrado. Dicha función
Tk es, desde el punto de vista computacional, no inversible sin cierta
información adicional (clave de descifrado) y se llama función de una vía o
función trampa.
En estos esquemas se utiliza una clave de cifrado (clave pública) k que
determina la función trampa Tk, y una clave de descifrado (clave secreta o
privada) que permite el cálculo de la inversa Tk'.
La criptografía asimétrica es el método criptográfico que 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 de
modo que nadie tenga acceso a ella. Además, los métodos criptográficos
garantizan que esa pareja de claves sólo se puede generar una vez, de modo
que se puede asumir que no es posible que dos personas hayan obtenido
casualmente la misma pareja de claves.
Si el remitente usa la clave pública del destinatario para cifrar el mensaje, una
vez cifrado, sólo la clave privada del destinatario podrá descifrar este mensaje,
ya que es el único que la conoce. Por tanto se logra la confidencialidad del envío
del mensaje, nadie salvo el destinatario puede descifrarlo.
Si el propietario del par de claves usa su clave privada para cifrar el mensaje,
cualquiera puede descifrarlo utilizando su clave pública. En este caso se
consigue por tanto la identificación y autentificación del remitente, ya que se
sabe que sólo pudo haber sido él quien empleó su clave privada (salvo que
alguien se la hubiese podido robar). Esta idea es el fundamento de la firma
electrónica.
Los sistemas de cifrado de clave pública o sistemas de cifrado
asimétricos se inventaron con el fin de evitar por completo el problema
del intercambio de claves de los sistemas de cifrado simétricos. Con las
claves públicas no es necesario que el remitente y el destinatario se
pongan de acuerdo en la clave a emplear. 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 sí.
Propiedades de los algoritmos de clave pública
Según Diffie y Hellman, todo algoritmo de clave pública debe
cumplir las siguientes propiedades de complejidad computacional:
◦ Cualquier usuario puede calcular sus propias claves pública y privada
en tiempo polinomial.
◦ El emisor puede cifrar su mensaje con la clave pública del receptor
en tiempo polinomial.
◦ El receptor puede descifrar el criptograma con la clave privada en
tiempo polinomial.
◦ El criptoanalista que intente averiguar la clave privada mediante la
pública se encontrará con un problema intratable.
◦ El criptoanalista que intente descifrar un criptograma teniendo la
clave pública se encontrará con un problema intratable.
En líneas generales, un esquema a seguir para la construcción de
un criptosistema de clave pública es el siguiente:
◦ Escoger un problema difícil P, a ser posible intratable.
◦ Escoger un subproblema de P fácil, Pfácil, que se resuelva en tiempo
polinomial preferiblemente en tiempo lineal.
◦ Transformar el problema Pfácil de tal manera que el problema
resultante Pdifícil, no se parezca al inicial, pero sí al problema original
P.
◦ Publicar el problema Pdifícil y la forma en que debe ser usado,
constituyendo este proceso la clave (pública) de cifrado. La
información sobre cómo se puede recuperar el problema Pfácil a
partir del problema Pdifícil se mantiene en secreto y constituye la
clave (secreta) de descifrado.
Es más difícil diseñar un sistema de clave pública seguro contra un
ataque con texto original escogido que un sistema de clave secreta
seguro frente al mismo tipo de ataque.
En la construcción de criptosistemas se pueden observar diferencias
entre los algoritmos para sistemas simétricos y los usados en clave
publica. En primer lugar, existen mayores restricciones de diseño para
un algoritmo asimétrico que para uno simétrico, debido a que la clave
pública representa información adicional que potencialmente un
enemigo puede usar para llevar a cabo el criptoanálisis. Normalmente,
el algoritmo de clave pública basa su seguridad en la dificultad de
resolver algún problema matemático conocido, mientras que algunos
algoritmos simétricos, cómo el DES, se diseñan de tal manera que las
ecuaciones matemáticas que los describen son tan complejas que no
son resolubles analíticamente.
En segundo lugar, existen grandes diferencias en la generación de claves. En los
algoritmos simétricos, en los que el conocimiento de la clave de cifrado es
equivalente al de la de descifrado, y viceversa, la clave se puede seleccionar de
forma aleatoria. Sin embargo, en los algoritmos asimétricos, cómo la relación
entre clave de cifrado y de descifrado no es pública, se necesita un
procedimiento para calcular la pública a partir de la clave privada que sea
computacionalmente eficiente y tal que el cálculo inverso sea imposible de
realizar.
Hace algunos años, este tipo de sistemas no parecía tener ninguna ventaja en el
mundo criptográfico, porque tradicionalmente la criptografía se usaba sólo con
propósitos militares y diplomáticos, y en estos casos el grupo de usuarios es lo
suficientemente pequeño cómo para compartir un sistema de claves. Sin
embargo, en la actualidad, las aplicaciones de la criptografía han aumentado
progresivamente, hasta alcanzar muchas otras áreas donde los sistemas de
comunicación tienen un papel vital. Cada vez con mayor frecuencia se pueden
encontrar grandes redes de usuarios en las que es necesario que dos
cualesquiera sean capaces de mantener secretas sus comunicaciones entre sí.
En estos casos, el intercambio continuo de claves no es una solución muy
eficiente.
Por otro lado, hay que resaltar la ventaja que representa en los sistemas
asimétricos la posibilidad de iniciar comunicaciones secretas sin haber tenido
ningún contacto previo.
Como con los sistemas de cifrado simétricos buenos, con un buen sistema de
cifrado de clave pública toda la seguridad descansa en la clave y no en el
algoritmo. Por lo tanto, el tamaño de la clave es una medida de la seguridad del
sistema, pero no se puede comparar el tamaño de la clave del cifrado
simétrico con el del cifrado de clave pública para medir la seguridad. En
un ataque de fuerza bruta sobre un cifrado simétrico con una clave del tamaño
de 80 bits, el atacante debe probar hasta 280-1 claves para encontrar la clave
correcta. En un ataque de fuerza bruta sobre un cifrado de clave pública con
una clave del tamaño de 512 bits, el atacante debe factorizar un número
compuesto codificado en 512 bits (hasta 155 dígitos decimales). La cantidad de
trabajo para el atacante será diferente dependiendo del cifrado que esté
atacando. Mientras 128 bits son suficientes para cifrados simétricos, dada la
tecnología de factorización de hoy en día, se recomienda el uso de claves
públicas de 1024 bits para la mayoría de los casos.
En la actualidad la criptografía asimétrica o de clave
pública se divide en tres familias según el problema
matemático del cual basan su seguridad:
Problema de Factorización Entera PFE: como el sistema
RSA, y el de Rabin Williams RW.
Problema del Logaritmo Discreto PLD, a esta familia
pertenece el sistema de Diffie Hellman DH de
intercambio de claves y el sistema DSA de firma digital.
Problema del Logaritmo Discreto Elíptico PLDE, en este
caso hay varios esquemas tanto de intercambio de
claves como de firma digital que existen como el DHE
(Diffie Hellman Elíptico), DSAE, (Nyberg-Rueppel) NRE,
(Menezes, Qu, Vanstone) MQV , etcétera.
Aunque a las familias anteriores pertenecen los
sistemas asimétricos más conocidos, existen otro tipo
de sistemas que basan su seguridad en problemas
diferentes como por ejemplo, en el Problema del
Logaritmo Discreto Hiperelíptico, sobre problemas de
retículas y sobre subconjuntos de clases de campos
numéricos reales y complejos.
La mayor ventaja de la criptografía asimétrica es que se puede cifrar con
una clave y descifrar con la otra, pero este sistema tiene bastantes
desventajas:
◦ Para una misma longitud de clave y mensaje se necesita mayor tiempo de
proceso.
◦ Las claves deben ser de mayor tamaño que las simétricas.
◦ El mensaje cifrado ocupa más espacio que el original.
◦ El sistema de criptografía de curva elíptica representa una alternativa menos
costosa para este tipo de problemas.
Herramientas como PGP, SSH o la capa de seguridad SSL para la
jerarquía de protocolos TCP/IP utilizan un híbrido formado por la
criptografía asimétrica para intercambiar claves de criptografía
simétrica, y la criptografía simétrica para la transmisión de la
información.
Sistemas de clave pública más
transcendentes
A continuación, nombramos algunos de los sistemas de clave pública que
han tenido más trascendencia.
◦ Sistema RSA. Se basa en el hecho de que no existe una forma eficiente de
factorizar números que sean productos de dos grandes primos.
◦ Sistema de Rabin. Se basa también en la factorización.
◦ Sistema de ElGamal. Se basa en el problema del logaritmo discreto.
◦ Sistema de Merkle-Hellman. Esta basado en el problema de la mochila.
◦ Sistema de McEliece. Se basa en la teoría de la codificación algebraica, utilizando
el hecho de que la decodificación de un código lineal general es un problema NP-
completo.
◦ Sistemas basados en curvas elípticas. En 1985, la teoría de las curvas elípticas
encontró de la mano de Miller aplicación en la criptografía. La razón fundamental
que lo motivó fue que las curvas elípticas definidas sobre cuerpos finitos
proporcionan grupos finitos abelianos, donde los cálculos se efectúan con la
eficiencia que requiere un criptosistema, y donde el cálculo de logaritmos es aún
más difícil que en los cuerpos finitos. Además, existe mayor facilidad para escoger
una curva elíptica que para encontrar un cuerpo finito, lo que da una ventaja más
frente a su predecesor, el sistema de ElGamal.
Sistema probabilístico. Aunque la criptografía de clave pública resuelve
el importante problema de la distribución de claves que se presenta en
la criptografía de clave secreta; en clave pública se presenta otro
problema, el texto cifrado C=Ek (M) siempre deja escapar alguna
información sobre el texto original porque el criptoanalista puede
calcular por sí mismo la función de cifrado con la clave pública sobre
cualquier texto que quiera.
Dado cualquier M' de su elección, puede fácilmente descubrir si el
mensaje original M=M', pues esto se cumple si, y sólo si Ek(M')=C.
Incluso aunque recuperar M a partir de C fuera efectivamente infactible,
no sabemos cómo medir la información que deja escapar sobre M.
El propósito de la criptografía probabilística es cifrar mensajes de
manera que no exista cálculo factible que pueda producir información
en lo que respecta al texto original correspondiente. Hay que decir que
estos sistemas no ofrecen verdadero secreto perfecto, son totalmente
inseguros contra criptoanalistas con poder de cálculo ilimitado.
La principal diferencia técnica entre el cifrado probabilístico y los
criptosistemas de clave pública es que los algoritmos de cifrado son
probabilísticos en lugar de determinísticos: el mismo mensaje original
puede dar lugar a un gran número de criptogramas distintos. En
consecuencia, un criptoanalista que tenga un candidato para el texto
original no podría verificar su suposición cifrándolo y comparando el
resultado con el criptograma interceptado.
Sistema RSA
La seguridad del RSA se basa en el hecho de que no existe una forma
eficiente de factorizar números que sean productos de dos grandes primos.
Fue desarrollado en 1977 por Ronald Rivest, Adi Shamir y Leonard Adleman,
de ahí el nombre de RSA, que corresponde a las iniciales de los apellidos de
sus autores.
En la siguiente descripción del algoritmo señalamos entre paréntesis que
partes del sistema se consideran publicas y cuales secretas.
◦ Encontrar dos grandes números primos, p y q (secretos), y calcular el número n
(publico) mediante su producto, n=p*q.
◦ Encontrar la clave de descifrado constituida por un gran número entero impar, d
(secreto), que es primo con el número F(n) (secreto), obtenido mediante F(n)=(p-
1)*(q-1). Siendo F(n) la función de Euler.
◦ Calcular el entero e (publico) tal que 1 ó e ó F(n), mediante la formula: e*d-1(mod
F(n)).
◦ Hacer publica la clave de cifrado (e,n).
◦ Para cifrar un texto, es necesario previamente codificar el texto en un
sistema numérico, bien decimal o bien binario, y dividir en bloques Mi de
tamaño j o j-1 de forma que, según sea el alfabeto usado el decimal o el
binario cumpla en cada caso: 10^(j-1) < n < 10^j o 2^(j-1) < n < 2^j. Cuando
se toma como tamaño j, el descifrado del texto puede no ser único, por
tanto esta elección se hace solo cuando la unicidad del descifrado no es
importante.
◦ Cifrar cada bloque Mi transformándolo en un nuevo bloque de números Ci
de acuerdo con la expresión: Ci-Mi^e(mod n).
◦ Para descifrar el bloque Ci, se usa la clave privada d según la expresión: Mi-
Ci^d(mod n).
Los procesos de cifrado y descifrado pueden ser implementados
mediante algunos algoritmos conocidos.
Las dos principales dificultades en la implementación del RSA son:
◦ Potencias modulares.
◦ Búsqueda de números primos.
Para aumentar las dificultades, la seguridad del RSA estriba en que los
primos p y q elegidos han de ser muy grandes. Para encontrar los
grandes primos p y q se pueden utilizar varios algoritmos, como el de
Solovay-Strassen, y el de Lehman y Peralta, que sirven para comprobar
la primalidad.
Tipos de ataques al RSA
Para analizar la seguridad del sistema, se supone que el criptoanalista
tiene una cantidad ilimitada de pares (M,C) de mensajes originales y sus
correspondientes criptogramas. Las posibles maneras que tiene de
atacar el sistema son las siguientes:
◦ Factorizar n.
◦ Calcular F(n).
◦ Ataque por iteración.
◦ Ataque de Blakley y Borosh.
Diffie-Hellman
El protocolo Diffie-Hellman (debido a Whitfield Diffie y Martin
Hellman) permite el intercambio secreto de claves entre dos partes
que no han tenido contacto previo, utilizando un canal inseguro, y de
manera anónima (no autenticada).
Se emplea generalmente como medio para acordar claves simétricas
que serán empleadas para el cifrado de una sesión. Siendo no
autenticado, sin embargo provee las bases para varios protocolos
autenticados. Su seguridad radica en la extrema dificultad
(conjeturada, no demostrada) de calcular logaritmos discretos en un
campo finito.
Para dos partes A y B que intentan establecer una clave secreta y un
adversario E, la versión básica es como sigue:
◦ Se establecen un primo p y un generador . Estos son públicos,
conocidos no sólo por las partes A y B sino también por el adversario E.
◦ A escoge al azar, calcula X = gxmod p, y envía X a B
◦ B escoge al azar, calcula Y = gymod p, y envía Y a A
Nótese que Xy = (gx)y = gxy = (gy)x = Yx, con todas las operaciones en el
grupo . Llamemos K a esta cantidad común: el hecho destacable es
que ambas partes pueden calcularla, y por lo tanto obtener una clave
compartida.
Un adversario E que poseyera p, g, X e Y, podría calcular el secreto compartido
si tuviera también uno de los valores privados (x o y) o lograse invertir la
función. Pero calcular x dado X es el problema del logaritmo discreto en , un
problema que se cree intratable computacionalmente. El mismo protocolo, y
otros basados en este, pueden llevarse a cabo en cualquier grupo en que a la
vez la exponenciación sea simple y el logaritmo discreto difícil, como el grupo
multiplicativo análogo de los campos de Galois o el grupo de puntos
definidos por una curva elíptica sobre un campo finito.
Sin embargo, el protocolo es sensible a ataques activos del tipo "hombre en el
medio" (mitm, man-in-the-middle). Si la comunicación es interceptada por un
tercero, éste se puede hacer pasar por el emisor cara al destinatario y viceversa,
ya que no se dispone de ningún mecanismo para validar la identidad de los
participantes en la comunicación. Así, el "hombre en el medio" podría acordar
una clave con cada participante y retransmitir los datos entre ellos, escuchando
la conversación en ambos sentidos.
Versiones más complejas
El protocolo El Gamal de negociación de claves provee negociación en
un solo paso y autenticación unilateral (del receptor hacia el emisor) si
la clave pública del receptor es conocida de antemano por el emisor.
El protocolo MTI/A0, empleando dos mensajes y sin requerir firmas,
proporciona claves de sesión variables en el tiempo con mutua
autenticación implícita de claves contra ataques pasivos.
El protocolo STS es una variante de tres pasos de la versión básica que
permite el establecimiento de una clave secreta compartida entre dos
partes con mutua autenticación de entidades y mutua autenticación
explícita de las claves. El protocolo también facilita el anonimato: las
identidades de A y B pueden protegerse contra el adversario E. El
método emplea firmas digitales.
DSA
DSA (Digital Signature Algorithm, en español Algoritmo de Firma
digital) es un estándar del Gobierno Federal de los Estados Unidos de
América o FIPS para firmas digitales. Fue un Algoritmo propuesto por el
Instituto Nacional de Normas y Tecnología de los Estados Unidos para su
uso en su Estándar de Firma Digital(DSS), especificado en el FIPS 186.
DSA se hizo público el 30 de agosto de 1991, este algoritmo como su
nombre lo indica, sirve para firmar y no para cifrar información. Una
desventaja de este algoritmo es que requiere mucho más tiempo de
cómputo que RSA.
Generación de llaves
•Elegir un número primo p de L bits, donde 512 ≤ L ≤ 1024 y L es divisible
por 64.
•Elegir un número primo q de 160 bits, tal que p−1 = qz, donde z es algún
número natural.
•Elegir h, donde 1 < h < p − 1 tal que g = hz(mod p) > 1.
•Elegir x de forma aleatoria, donde 1 < x < q-1.
•Calcular y = gx(mod p).
•Los datos públicos son p, q, g e y. x es la llave privada.
Firma
•Elegir un número aleatorio s, donde 1 < s < q.
•Calcular s1 = (gs mod p)mod q.
•Calcular s2 = s-1(H(m)+s1*x)mod q, donde H(m) es la función hash SHA-
1 aplicada al mensaje m.
•La firma es el par (s1, s2).
•Si s1 o s2 es cero, se vuelve a repetir el procedimiento.
Verificación
Calcular w = (s2)-1(mod q).
Calcular u1 = H(m)*w(mod q).
Calcular u2 = s1*w(mod q).
Calcular v = [gu1*yu2mod p]mod q.
La firma es válida si v = s1.
Demo RSA
Demo ElGamal
Aplicaciones Criptográficas
Luego queda claro que esas condiciones no resultan muy propicias para
la seguridad de las comunicaciones.
A pesar de las ventajas evidentes de este esquema frente a los sistemas
de clave secreta, hay que subrayar que en la actualidad la principal
desventaja del RSA estriba en que es mucho más lento que el DES y que
los cifrados en flujo. Como cifras ilustrativas, se puede señalar que el
DES trabaja a unos 20 megabits por segundo, mientras que el RSA
funciona a una velocidad 1000 veces menor, y aunque la investigación
para acelerar el proceso es intensa, es de esperar que esta proporción
se mantenga, ya que también se realiza para los cifrados simétricos.
El punto más débil del RSA es su velocidad (comparándola con la de
otros cifrados, como el cifrado en flujo).
Aplicaciones criptográficas
Entre las muchas aplicaciones de la criptografía, se
encuentran la autenticación, la firma digital, la identificación
de usuario, seguridad en redes y protocolos criptográficos.
Autenticación
◦ Criptoanalistas pasivos: Su único propósito es escuchar mensajes
transmitidos por el canal.
◦ Criptoanalista activo: No sólo escucha, si no que intenta inyectar mensajes
propios para que el receptor crea que fueron enviados por un emisor
legítimo.
El propósito de un esquena de autenticación es la detección de la
presencia de criptoanalistas activos.
Siempre que un receptor B reciba un mensaje que parezca provenir del
emisor A, el esquema debe permitirle averiguar no sólo si el mensaje
viene de A, si no si fue modificado por el camino. Se supone que este
tipo de intrusos tiene acceso a la escucha de cuantos mensajes quiera y
que su meta es conseguir que un mensaje falsificado no sea detectado
por el receptor.
Un sistema proporciona:
◦ Secreto, si permite determinar quién puede recibir un mensaje.
◦ autenticidad, si permite determinar quién puede enviar un mensaje.
Hay dos posibles situaciones en las que se pueden encontrar los
interlocutores. Puede que sea suficiente la comprobación de que un
mensaje no ha sido modificado por un tercero, o bien puede ser necesario
que el receptor sea capaz de demostrar que realmente recibió el mensaje
del emisor legítimo tal y como éste lo envió. La solución a la primera
situación protege a ambos comunicantes de la acción de posibles enemigos,
pero no protege contra los fraudes cometidos por uno de ellos. En la
segunda situación, si se produce un fraude cometido por uno de los dos
comunicantes, se presenta el llamado problema de la disputa, que se
resuelve proporcionando una demostración de la identidad del emisor al
receptor. El primer problema se afronta con la llamada autenticación,
mientras que el segundo problema se resuelve mediante las llamadas
firmas digitales.
Se distinguen aquellos esquemas de autenticación en los que el
enemigo conoce la información que se transmite (llamados con secreto)
de los esquemas en los que el enemigo ignora la información que se
transmite (llamados sin secreto). En el primero el mensaje se codifica
según una regla de codificación acordada por ambos comunicantes,
mientras que en el segundo el mensaje se cifra utilizando una clave
también acordada por ambos usuarios.
Las actividades del adversario pueden consistir en:
◦ Bloquear el flujo de información.
◦ Grabar información y repetirla luego en una transmisión falsa.
◦ Cambiar la información borrando, insertando y/o reordenándola.
Tal y como se definieron los esquemas de autenticación con y sin
secreto se tiene que en el primero, un autenticador conocido por
emisor y receptor se añade al texto que se desea autenticar y luego
se cifra. De esta manera al texto resultante se le proporciona al
mismo tiempo secreto y autenticación. En el segundo caso, al texto
simplemente se le añade un código de autenticación. Si en alguno de
estos dos casos se usa un sistema simétrico, entonces emisor y
receptor han de confiar plenamente el uno en el otro, porque ambos
comparten la misma clave.
Por tanto se pueden clasificar claramente los métodos de
autenticación, según si se utiliza criptografía simétrica o asimétrica,
en:
◦ Métodos basados en criptosistemas simétricos.
◦ Métodos basados en criptosistemas asimétricos.