Criptografía.
El tema de la criptografía, o el arte de ocultar mensajes de los enemigos
potenciales, ha existido durante miles de años.
Evolucionó enormemente con el advenimiento de la tecnología moderna, las
computadoras y las telecomunicaciones.
La encriptación es el acto de tomar un mensaje, llamado texto sin formato, y
aplicarle una operación llamada cifrado, de modo que como salida, recibas un
mensaje ilegible y confuso llamado, texto cifrado.
El proceso inverso, tomar la salida confusa y transformarla de nuevo en texto sin
formato legible, se llama desencriptación.
Hay muchos cifrados o algoritmos mucho más complejos y seguros, los cuales
veremos más adelante .
En realidad, un cifrado consta de dos componentes:
El algoritmo de encriptación y
La clave.
El algoritmo de encriptación es la lógica o proceso subyacente que se aplica para
convertir texto sin formato en texto cifrado.
Estos algoritmos suelen ser operaciones matemáticas muy complejas.
Pero también hay algunos algoritmos muy básicos que podemos estudiar más de
cerca y que no necesariamente requieren un amplio conocimiento en matemáticas
para su comprensión.
El otro componente crucial de un cifrado es la clave que introduce algo único en tu
cifrado.
Sin la clave, cualquier persona que use el mismo algoritmo sería capaz de
decodificar tu mensaje y, en realidad, no tendrías ningún secreto.
En resumen, primero eliges un algoritmo de encriptación que te gustaría usar para
codificar tu mensaje, a continuación, eliges una clave. Y como resultado tienes un
cifrado.
Dado que el propósito subyacente de la criptografía es proteger tus secretos para
que personas no autorizadas no puedan leerlos, tendría sentido que, al menos,
algunos de los componentes de un cifrado deban permanecer en secreto también,
Podemos decir que al mantener en secreto el algoritmo, tus mensajes están a
salvo de que un tercero los husmee, y técnicamente está bien.
A este concepto global de criptografía se lo denomina principio de Kerckhoffs.
Este principio establece que un criptosistema o colección de algoritmos para
generación de claves y operaciones de encriptación y desencriptación que
comprenden un servicio criptográfico debe permanecer seguro, incluso si se
conoce todo sobre él, excepto su clave.
Lo que esto significa es que aun cuando el atacante conozca el algoritmo de
encriptación exacto que usamos para proteger nuestros datos, no puede
recuperar el texto sin formato de un texto cifrado interceptado.
También algunas veces a este principio se lo denomina máxima de Shannon
o "El enemigo conoce el sistema". Las implicaciones son las mismas.
El sistema debe permanecer seguro, incluso si el atacante sabe exactamente
qué tipo de sistemas de encriptación estmos empleando, siempre que nuestras
claves permanezcan seguras.
Ya definimos el cifrado, pero la disciplina general que abarca
la práctica de codificar y ocultar mensajes de la vista de los demás se llama
criptografía.
Al estudio de esta práctica se lo conoce como criptología.
Lo contrario a estas técnicas, sería buscar mensajes ocultos o intentar descifrar
mensajes codificados, se le conoce como criptoanálisis.
Estos dos campos han evolucionado conjuntamente a lo largo de la historia, con
nuevos cifrados y criptosistemas desarrollados a medida que los anteriores se
descifraban o resultaban vulnerables.
Una de las primeras descripciones registradas del criptoanálisis es de un
matemático árabe del Siglo IX, quien describió un método para el análisis de
frecuencia para descifrar mensajes codificados.
La esteganografía es una práctica relacionada, pero claramente diferente de la
criptografía.
Es la práctica de ocultar información de los atacantes o cualquier persona, pero
sin codificarla.
Las técnicas esteganográficas modernas incluyen la inserción de mensajes y
hasta de archivos en otros archivos como imágenes o videos.
Para una persona normal, solo se vería una imagen cualquiera o una canción.
Pero si agregamos a esa imagen análisis mediante software de
esteganografía, este extraería un mensaje oculto del archivo de imagen.
Es lógico que si tienes que enviar un mensaje protegido a alguien,
tu desearías que tu destinatario sea capaz de descifrarlo y leerlo,
y tal vez incluso que responda con un mensaje propio codificado.
Así que vamos a ver la primera categoría amplia de algoritmos de cifrado y
entrar en más detalles acerca de cómo funciona junto con algunos pros y contras.
Cuando cubrimos a principio de Kerchhoff antes,
¿Recuerdas cual es el componente crucial del cifrado para mantener el secreto? Así es.
La clave debe mantenerse privada para asegurarse de que
los espías no son capaces de decodificar mensajes encriptados.
En este escenario, nosotros estamos suponiendo que el algoritmo en
uso es lo que se conoce como algoritmo de clave simétrica.
Estos tipos de algoritmos de cifrado se llaman simétricos porque
utilizan la misma clave para cifrar y descifrar mensajes.
Tomemos un simple ejemplo de un algoritmo de cifrado de clave simétrica
para ver todo el proceso de cifrado y descifrado de un mensaje.
Un cifrado por sustitución es un mecanismo de cifrado
que sustituye partes de tu texto plano con texto cifrado.
Recuerdas el ejemplo de Hola mundo de antes.
Es un ejemplo de cifrado por sustitución
ya que estamos sustituyendo algunos caracteres con otros diferentes.
En este caso, la clave sería la asignación de caracteres entre
texto plano y texto cifrado sin saber cuales letras son reemplazadas.
Tu podrías descodificar el texto cifrado y asi recuperar el texto plano fácilmente.
Si tienes la clave o la tabla de sustitución,
entonces puedes revertir el proceso fácilmente y descifrar
el mensaje cifrado sólo realizando la operación inversa.
Un ejemplo bien conocido de un cifrado por sustitución es el cifrado de César,
que es un alfabeto de sustitución.
En este caso, tu estas reemplazando caracteres en el alfabeto con
otros generalmente por desplazamiento o rotación del alfabeto,
un conjunto de números o caracteres.
El número de desvío es la clave.
Otro ejemplo popular de esto se conoce como R O T 13 o ROT-13,
donde el alfabeto es desplazado13 lugares,
pero realmente ROT-13 es una cifrado de Cesar que utiliza una clave de 13.
Volvamos a nuestro ejemplo de Hola mundo y continuemos
la codificación usando nuestro cifrado ROT-13.
Nuestro criptograma acaba siendo URYYB JBEYQ.
Para revertir este proceso y volver al texto,
sólo realizamos la operación inversa
buscando en la tabla los caracteres asignados a las salidas.
Tu podrías notar algo acerca de la tabla de asignación de ROT-13
o el hecho de que estamos compensando el alfabeto por 13 caracteres.
Trece es exactamente la mitad del alfabeto.
Esto resulta en la cifra de ROT-13 es un inverso de sí mismo.
Lo que significa que puedes recuperar el texto plano del
texto cifrado mediante la realización de la operación de ROT-13 en el texto cifrado.
Si tuviéramos que elegir una clave diferente, digamos que ocho,
¿podemos hacer lo mismo? Vamos a ver.
Esta es la tabla de asignación para un desplazamiento de ocho,
que nos da el texto cifrado de OLSSV DVYSK.
Si realizamos esto a través del cifrado una vez más,
obtenemos la siguiente salida VSZZC KCFZR.
Eso no funciona para revertir el proceso de cifrado, verdad?
Hay dos categorías más de cifrado de clave simétrica.
Eston son cifrados de bloque o son cifrados de flujo.
Esto se refiere a cómo funcionan los algoritmos de cifrado para cifrar el texto plano.
Un cifrado de flujo como su nombre indica,
toma una cadena de entrada y la cifra un carácter o un dígito a la vez,
saliendo un carácter cifrado o dígito cifrado a la vez.
Por lo tanto, hay una relación uno a uno entre los datos de entrada y los datos cifrados de
salida.
La otra categoría de cifrados simétricos es el cifrado de bloques.
El cifrado toma los datos de entrada
los ubica en un cubo o bloque de datos que son de un tamaño fijo,
Después codifica ese bloque entero como una unidad.
Si los datos a cifrar no son lo suficientemente grandes como para llenar el bloque,
el espacio adicional se rellena para asegurar que el texto encaja dentro de los bloques
uniformemente.
Ahora hablando en términos generales, el cifrados de flujo es más rápido y menos complejo
de implementar,
pero puede ser menos seguros que el cifrado de bloque.
Si la generación y manejo de la clave no se hace correctamente,
Si se utiliza la misma clave para cifrar datos dos o más veces,
es posible romper el cifrado y recuperar el texto plano.
Para evitar la reutilización de claves,
se utiliza el vector de inicialización o IV.
Esto es una cantidad de datos aleatorios que se integran en
la clave de cifrado y la clave combinada resultante se usa para cifrar los datos.
La idea detrás de esto es si tienes una clave maestra compartida,
entonces genera una clave de cifrado una sola vez.
Esta clave de cifrado se utiliza solamente una vez cada que se genera
una nueva clave usando la clave maestra y el IV.
Para que el mensaje cifrado sea decodificado,
el IV debe ser enviado en texto plano junto con el mensaje cifrado.
Un buen ejemplo de esto puede verse al inspeccionar la
trama 802.11 de un paquete cifrado inalámbrico WEP .
El IV se incluye como texto plano antes de la carga de datos cifrados.
En el siguiente video, exploraremos el cifrado simétrico más detalladamente,
ilustrando algunos de los más populares algoritmos
y sumergiéndote en los pros y contras del uso de cifrado simétrico.
En la última sección,
vimos los fundamentos precisos de los algoritmos de cifrado simétricos
y te dimos un ejemplo básico del cifrado César, un tipo de cifrado por sustitución.
No podríamos proteger nada de valor con ese cifrado, ¿verdad?
Debe haber algoritmos simétricos más complejos y seguros, ¿no?
Por supuesto, los hay.
Uno de los primeros estándares de encriptación es DES, que significa
estándar de cifrado de datos.
DES fue diseñado en la década de 1970 por IBM,
con algunas aportaciones de la Agencia de Seguridad Nacional de los Estados Unidos.
DES fue adoptado como FIPS
—Estándar federal de procesamiento de información— oficial para los EE. UU.
Esto significa que el DES fue adoptado como norma federal para el cifrado
y protección de los datos del gobierno.
DES es un cifrado de bloque simétrico que usa tamaños de clave de 64 bits
y opera en bloques de 64 bits de tamaño.
Aunque el tamaño de la clave es, técnicamente, de 64 bits de longitud,
8 bits se utilizan solamente para la comprobación de paridad, una forma simple de
comprobación de errores.
Esto significa que la longitud real de la clave para DES es solo de 56 bits.
Play video starting at 1 minute 18 seconds and follow transcript1:18
Una nota rápida sobre los tamaños de clave de encriptación, ya que todavía no hablamos de
eso.
En algoritmos de encriptación simétrica,
la misma clave se utiliza para encriptar y desencriptar, todo lo demás es lo mismo.
Play video starting at 1 minute 30 seconds and follow transcript1:30
La clave es la pieza única que protege tus datos y la clave simétrica debe mantenerse en
secreto
para garantizar la confidencialidad de los datos que se protegen.
El tamaño de la clave, definido en bits, es el número total de bits
o de datos que conforman la clave de encriptación.
Puedes pensar en el tamaño de la clave como el límite superior
para el total de claves posibles para un algoritmo de encriptación dado.
La longitud de la clave es importantísima en criptografía, ya que básicamente
define la resistencia potencial máxima del sistema.
Imagina un algoritmo de encriptación simétrica ideal que no tenga defectos
ni debilidades intrínsecas.
En esta situación, la única manera posible en que un adversario vulnere tu encriptación
sería atacar la clave en lugar del algoritmo.
Un método de ataque es, justamente, adivinar la clave y ver si el mensaje se decodifica de
manera correcta.
Esto se conoce como ataque de fuerza bruta.
Las claves más largas protegen contra este tipo de ataque.
Tomemos como ejemplo la clave DES.
64 bits de longitud menos los 8 bits de paridad nos da una longitud de clave de 56 bits.
Esto significa que hay un máximo de 2 a la potencia 56 (2^56),
o 72,000 billones de claves posibles.
Eso parece una inmensidad de claves, y en la década del 70, lo era.
Pero a medida que la tecnología avanzó y las computadoras se volvieron más rápidas y
eficientes,
las claves de 64 bits rápidamente resultaron ser demasiado pequeñas.
Lo que antes eran solo ataques teóricos sobre un tamaño de clave
se hizo realidad en 1998 cuando la EFF, Electronic Frontier Foundation,
desencriptó un mensaje con encriptación DES en tan solo 56 horas.
Debido a la fragilidad inherente del pequeño tamaño de la clave DES,
se diseñaron y propusieron algoritmos de reemplazo.
Aparecieron varios nuevos en los años 1980 y 1990.
Muchos mantuvieron el tamaño de bloque de 64 bits, pero usan un tamaño de clave mayor,
lo que permite el reemplazo más fácil de DES.
En 1997, el NIST, Instituto Nacional de Normas y Tecnología de los EE. UU.,
quiso reemplazar DES con un nuevo algoritmo, y en 2001,
adoptó AES, o estándar de cifrado avanzado, después de un concurso internacional.
AES es también el primer y único cifrado público aprobado para su uso
con información súper secreta por la Agencia de Seguridad Nacional de los Estados Unidos.
AES es también un cifrado en bloque simétrico, similar a DES, al cual reemplazó.
Pero AES usa bloques de 128 bits, el doble del tamaño de los bloques DES,
y admite longitudes de clave de 128 bits, 192 bits o 256 bits.
Debido al gran tamaño de la clave, los ataques de fuerza bruta a AES son solo teóricos por
ahora,
porque la potencia de cálculo requerida (o el tiempo requerido usando tecnología moderna)
supera cualquier cosa factible en la actualidad.
Quiero señalar que estos algoritmos son, en sí mismos, los diseños generales
de los cifrados.
Estos diseños, entonces, deben implementarse en cualquier software o hardware
antes de que las funciones de encriptación puedan aplicarse y usarse.
Algo importante a tener en cuenta al considerar diversos algoritmos de encriptación
es su velocidad y facilidad de implementación.
De manera ideal, un algoritmo no debería ser demasiado difícil de implementar
porque una implementación complicada puede dar lugar a errores
y a la pérdida potencial de seguridad.
La velocidad es importante porque, a veces, los datos se encriptarán
haciéndolos pasar a través del cifrado varias veces.
Estos tipos de operaciones criptográficas terminan siendo realizadas
muy a menudo por dispositivos, por lo que cuanto más rápido se las pueda lograr
con un mínimo impacto al sistema, mejor.
Es por esto que algunas plataformas implementan estos algoritmos criptográficos en el
hardware
para acelerar los procesos y eliminar algo de la carga de la CPU.
Por ejemplo, las CPU modernas de Intel o AMD
tienen instrucciones AES incorporadas en las propias CPU.
Esto permite una velocidad computacional
y una eficiencia mucho mayores al operar con cargas de trabajo criptográficas.
Hablemos brevemente de lo que alguna vez fue un algoritmo muy usado y popular,
pero desde entonces se ha demostrado que es débil y se desaconseja su uso.
RC4, o Rivest Cipher 4, es un cifrado de flujo simétrico
que fue adoptado generalizadamente debido a su sencillez y velocidad.
RC4 admite tamaños de clave desde 40 bits a 2,048 bits.
La debilidad de RC4 no se debe a los ataques de fuerza bruta,
sino a que el cifrado en sí tiene debilidades y vulnerabilidades inherentes
que no solo son teóricamente posibles. Hay muchos ejemplos de RC4 descifrados.
Un ejemplo reciente de RC4 descifrado es el ataque RC4 NOMORE.
Este ataque fue capaz de recuperar una cookie de autenticación
de una conexión con encriptación TLS en tan solo 52 horas.
Como este es un ataque al mismísimo cifrado RC4,
cualquier protocolo que use este cifrado es potencialmente vulnerable al ataque.
Aun así, RC4 se usó en un montón de protocolos de encriptación populares,
como WEP para encriptación inalámbrica y WPA, el sucesor de WEP.
También se lo admitió en SSL y TLS hasta 2015, cuando RC4 fue descartado
en todas las versiones de TLS a causa a sus debilidades inherentes.
Por este motivo, los navegadores más importantes descartaron por completo la compatibilidad
con RC4,
junto con todas las versiones de SSL, y usan TLS en su lugar.
La configuración segura preferida es TLS 1.2 con AES GCM,
un modo específico de operación
para el cifrado de bloques AES que, básicamente, lo convierte en un cifrado de flujo.
GCM, o modo Galois/contador, trabaja tomando un valor inicial aleatorizado,
aumentándolo y encriptando el valor,
lo que crea bloques de texto cifrado secuencialmente numerados.
Luego se incorporan los textos cifrados al texto sin formato que se encriptará.
GCM es muy popular debido a que su seguridad se basa en la encriptación AES,
junto con su desempeño, y el hecho de que puede ejecutarse en paralelo con gran eficacia.
Puedes leer más sobre el ataque RC4 NOMORE en la siguiente lectura.
Ahora que vimos la encriptación simétrica
y algunos ejemplos de algoritmos de encriptación simétrica, ¿cuáles son los beneficios
o las desventajas de usar encriptación simétrica?
Debido a la naturaleza simétrica del proceso de encriptación y desencriptación,
su implementación y su mantenimiento son relativamente sencillos.
Ese es un secreto compartido que debes mantener y proteger.
Piensa en tu contraseña de Wi-Fi en casa.
Hay un secreto compartido, tu contraseña de Wi-Fi,
que permite que todos los dispositivos se conecten.
¿Te imaginas tener una contraseña de Wi-Fi específica para cada uno de tus dispositivos?
Eso sería una pesadilla, además de dificilísimo de rastrear.
Los algoritmos simétricos también son muy rápidos y eficientes para encriptar
y desencriptar grandes lotes de datos.
¿Cuáles son las desventajas de usar cifrado simétrico?
Si bien tener un secreto compartido que encripta y desencripta
parece conveniente desde el inicio, esto en realidad puede presentar algunas complicaciones.
¿Qué ocurre si tu secreto se pone en riesgo?
Imagina que te roben tu contraseña de Wi-Fi y ahora tienes que cambiarla.
Tienes que actualizar tu contraseña de Wi-Fi en todos tus dispositivos
y en cualquier dispositivo que tus amigos o tu familia podrían traer.
¿Qué tienes que hacer cuando un amigo o un familiar vienen de visita
y quieren conectarse a tu Wi-Fi?
Debes proporcionarles tu contraseña de Wi-Fi,
o el secreto compartido que protege tu red Wi-Fi.
Esto generalmente no es un problema, ya que es de esperar que conozcas a la persona
tú confías en ella, y por lo general es solo una o dos personas a la vez.
¿Pero qué tal si tuvieras una fiesta en tu casa con 50 extraños?
Nota al margen, ¿por qué tendrías una fiesta en tu casa con 50 extraños?
De todos modos, ¿cómo pudiste darle la contraseña de Wi-Fi
solo a las personas en las que confías sin que los extraños la escucharan?
Las cosas podrían ponerse realmente peligrosas en poco tiempo.
En la próxima lección, exploraremos otras formas, aparte de los algoritmos de clave simétrica,
para proteger los datos y la información.
Encriptación Aismétrica
En la lección anterior,
vimos una de las dos categorías principales
a las que corresponden los cifrados de encriptación, los cifrados de clave simétrica.
En esta lección, veremos la segunda clase de cifrados,
denominada cifrados asimétricos o de clave pública.
¿Recuerdas por qué a los cifrados simétricos los llamamos así?
Es porque se usa la misma clave para encriptar y desencriptar.
Esto contrasta con los sistemas de encriptación asimétrica porque, como su nombre lo indica,
se usan diferentes claves para encriptar y desencriptar.
Entonces, ¿cómo funciona eso exactamente?
Bueno, imaginemos que aquí hay
dos personas que querrían comunicarse de manera segura.
Los llamaremos Suzanne y Daryll.
Ya que están usando encriptación asimétrica en este ejemplo,
lo primero que deben hacer es generar una clave privada,
luego, con esta clave privada,
se obtiene una clave pública.
La resistencia del sistema de encriptación asimétrica
proviene de la dificultad computacional de averiguar
la clave privada correspondiente dada una clave pública.
Una vez que Suzanne y Daryll generaron pares de claves públicas y privadas,
intercambian las claves públicas.
A partir de los nombres, podrías haber adivinado
que la clave pública es pública y puede compartirse con cualquiera,
mientras que la clave privada debe mantenerse en secreto.
Una vez que Suzanne y Daryll intercambiaron claves públicas,
están listos para comenzar a intercambiar mensajes seguros.
Cuando Suzanne quiere enviar un mensaje encriptado a Daryll,
ella usa la clave pública de Daryll para encriptar el mensaje y luego enviar el texto cifrado.
Daryll puede usar su clave privada para desencriptar el mensaje y leerlo.
Debido a la relación entre claves privadas y públicas,
solo la clave privada de Daryll puede desencriptar los mensajes encriptados mediante la clave
pública de Daryll.
Lo mismo ocurre con los pares de claves de Suzanne.
Cuando Daryll esté listo para responder al mensaje de Suzanne,
usará la clave pública de Suzanne para codificar su mensaje
y Suzanne usará su clave privada para desencriptarlo.
¿Puedes ver por qué se llama criptografía de clave pública o asimétrica?
Acabamos de describir las operaciones de encriptación y desencriptación
mediante un criptosistema asimétrico,
pero hay otra función muy útil que el sistema puede realizar, las firmas de claves públicas.
Volvamos con nuestros amigos Suzanne y Daryll.
Supongamos que Suzanne quiere enviarle un mensaje a Daryll
y quiere asegurarse de que Daryll sepa que el mensaje vino de ella y de nadie más,
y que el mensaje no fue modificado ni manipulado.
Ella podría hacer esto redactando el mensaje y combinándolo
con su clave privada para generar una firma digital.
A continuación, envía este mensaje junto con la firma digital asociada a Daryll.
Estamos suponiendo que Suzanne y Daryll
ya intercambiaron claves públicas previamente en este caso.
Daryll ahora puede verificar el origen y la autenticidad del mensaje combinando el mensaje,
la firma digital y la clave pública de Suzanne.
Si el mensaje fue firmado con la clave privada de Suzanne
y no con la de alguien más, y si el mensaje no se modificó en absoluto,
entonces la firma digital debería validarse.
Si el mensaje fue modificado,
incluso por un carácter de espacio en blanco,
la validación fallará y Daryll no debería confiar en él.
Este es un componente importante del criptosistema asimétrico.
Sin verificación de mensaje, cualquiera podría usar
la clave pública de Daryll y enviarle un mensaje encriptado que diga que es de Suzanne.
Los tres conceptos que nos otorga un criptosistema asimétrico son:
confidencialidad, autenticidad y no repudio.
La confidencialidad se otorga a través del mecanismo de encriptación/desencriptación,
ya que nuestros datos encriptados se mantienen en secreto y confidencialidad ante terceros
no autorizados.
La autenticidad es otorgada por el mecanismo de firma digital,
ya que se puede autenticar o verificar que el mensaje no fue manipulado.
No repudio significa que el autor del mensaje
no puede poner en duda su origen.
En otras palabras, esto nos permite asegurar
que el mensaje vino de la persona que dice ser su autor.
¿Puedes ver la ventaja de usar
un algoritmo de encriptación asimétrico contra uno simétrico?
La encriptación asimétrica permite una comunicación segura a través de un canal no
confiable,
pero con la encriptación simétrica
necesitamos alguna forma de comunicar de manera segura el secreto compartido o la clave a
la otra parte.
Si ese es el caso, parece que la encriptación asimétrica es mejor,
¿verdad? Bueno, algo así.
Si bien la encriptación asimétrica funciona realmente bien en entornos no confiables,
también es más costosa y compleja desde el punto de vista computacional.
Por otra parte, los algoritmos de encriptación simétrica son más rápidos
y más eficientes, y encriptan grandes cantidades de datos.
De hecho, lo que muchos esquemas de comunicaciones seguras hacen
es aprovechar las ventajas relativas de ambos tipos de encriptación y usan ambas, para
diferentes propósitos.
Se elige un algoritmo de encriptación asimétrica como un mecanismo de intercambio de clave
o cifrado.
Lo que esto significa, es que la clave de cifrado simétrica
o el secreto compartido se transmiten de forma segura
a la otra parte
mediante la encriptación asimétrica para mantener el secreto compartido seguro en tránsito.
Una vez recibido el secreto compartido,
los datos pueden enviarse con rapidez,
eficiencia y seguridad por medio de un cifrado de encriptación asimétrica.
¿Inteligente?
Un último tema a mencionar está de algún modo relacionado
con la encriptación asimétrica y son los MAC, o códigos de autenticación de mensajes.
No deben confundirse con el control de acceso a los medios o las direcciones MAC.
Un MAC es un trozo de información que permite la autenticación de un mensaje recibido,
lo que garantiza que el mensaje proviene
del presunto remitente y no de un tercero que se hace pasar por él.
También garantiza que el mensaje no fue modificado
de ninguna manera, con el fin de brindar integridad de los datos.
Esto suena muy similar a las firmas digitales
que usan criptografía de clave pública, ¿no?
Aunque es muy similar, difiere ligeramente en que la clave secreta
que se usa para generar el MAC es la misma que se usa para verificarlo.
En este sentido, es similar al sistema de encriptación simétrica y la clave secreta
debe ser acordada de antemano o compartida de algún modo seguro por todas las partes que
intervienen en la comunicación.
Esto describe un tipo popular y seguro de MAC
llamado HMAC, o código de autenticación de mensajes en clave-hash.
HMAC utiliza una función criptográfica de hash junto con una clave secreta para generar un
MAC.
Se puede usar cualquier función criptográfica de hash como SHA-1 o MD5,
y la resistencia o seguridad del MAC
depende de la seguridad subyacente de la función criptográfica de hash empleada.
El MAC se envía junto con el mensaje que se debe verificar.
El receptor verifica el MAC
realizando la misma operación sobre el mensaje recibido,
luego compara el MAC computado con el que se recibió con el mensaje.
Si los MAC son iguales,
entonces el mensaje se autentica.
También hay MAC basados en cifrados de encriptación simétrica,
ya sean en bloque o de flujo, como DES o AES,
que se denominan CMAC, o códigos de autenticación de mensajes basados en cifrado.
El proceso es similar a HMAC,
pero en lugar de usar una función de hash para elaborar un resumen,
se usa un cifrado simétrico con claves compartidas para encriptar el mensaje
y la salida resultante se usa como MAC.
Un ejemplo específico y popular de un CMAC, aunque ligeramente diferente,
es CBC-MAC, o códigos de autenticación de mensajes por encadenamiento de bloques de
cifrado.
CBC-MAC es un mecanismo para crear MAC por medio de cifrados de bloque.
Esto funciona tomando un mensaje y encriptándolo
mediante un cifrado de bloque que funciona en modo CBC.
El modo CBC es un modo de operación para cifrados de bloque
que incorpora un texto de cifrado de bloque pre encriptado en el texto sin formato del bloque
siguiente.
Así, genera una cadena de bloques encriptados que requieren
la totalidad de la cadena sin modificar para su desencriptación.
Esta cadena de bloques interdependientemente cifrados implica que cualquier modificación
al texto sin formato dará lugar
a una salida final diferente al final de la cadena, lo que garantiza la integridad del mensaje.
En la siguiente sección, veremos algunos ejemplos comunes
de sistemas y algoritmos de encriptación asimétrica. Te veré allá.
Algoritmos de cifrado asimétrico:
Uno de los primeros sistemas prácticos de criptografía asimétrica que se desarrolló es RSA,
cuyo nombre contiene las iniciales de sus tres inventores.
Ron Rivest, Adi Shamir y Leonard Adleman.
Este sistema criptográfico se patentó en 1983
y fue lanzado al dominio público por RSA Security en el año 2000.
El sistema RSA especifica mecanismos de generación y distribución de claves
junto con la operación de encriptación y desencriptación que usa estas claves.
No vamos a entrar en los detalles de las matemáticas involucradas,
ya que es un asunto de alto nivel y está fuera del alcance de esta clase.
Pero es importante saber
que el proceso de generación de claves depende de elegir dos números primos
exclusivos, aleatorios y generalmente muy grandes.
DSA, o algoritmo de firma digital, es otro ejemplo de un sistema de encriptación asimétrica,
aunque se utiliza para firmar y verificar datos.
Fue patentado en 1991 y forma parte
del Estándar federal de procesamiento de información del Gobierno de los Estados Unidos.
De manera similar a RSA, la especificación abarca
el proceso de generación de claves junto con la firma y verificación de los datos mediante los
pares de claves.
Es importante señalar que la seguridad de este sistema
depende de la elección de un valor inicial aleatorio que se incorpora en el proceso de firma.
Si este valor se filtró o si se puede inferir si el número primo no es realmente aleatorio,
entonces es posible que un atacante recupere la clave privada.
Esto realmente le sucedió en 2010 a Sony con su consola de juegos PlayStation 3.
Resulta que no estaban asegurando que este valor aleatorio se cambiará para cada firma.
Esto dio lugar a que un grupo de hackers llamado failOverflow
pudiera recuperar la clave privada que Sony usó para firmar el software para su plataforma.
A su vez, esto permitió a quienes modifican código escribir y firmar software personalizado
que pudo ejecutarse en la plataforma de la consola, por lo demás muy bloqueada.
Esto provocó que la piratería de juegos se convirtiera en un problema para Sony,
ya que facilitó la copia
y distribución ilegal de juegos que causó importantes pérdidas en las ventas.
Incluí vínculos a más información sobre esto en la siguiente lectura
en caso de que quieras profundizar más.
Antes hablamos sobre cómo los sistemas asimétricos se usan comúnmente
como mecanismos de intercambio de claves
para establecer un secreto compartido que se usará con cifrado simétrico.
Otro algoritmo de intercambio de claves popular
es DH, o Diffie-Hellman, que lleva el nombre de sus inventores.
Veamos cómo funciona el algoritmo de intercambio de claves DH.
Supongamos que tenemos dos personas que desean comunicarse a través de un canal no
seguro.
Los llamaremos Suzanne y Daryll.
Me encariñe mucho con ellos.
Primero, Suzanne y Daryll acuerdan
en el número inicial, que será un entero muy grande y aleatorio.
Este número debe ser diferente para cada sesión y no necesita ser secreto.
A continuación, cada persona elige otro número grande aleatorio, pero este se mantiene en
secreto.
Luego, combinan su número compartido
con su respectivo número secreto y se envían la combinación resultante uno al otro.
Luego, cada persona combina su número secreto
con el valor combinado que recibieron en el paso anterior.
El resultado es un nuevo valor que es el mismo en ambos lados,
sin tener que revelar suficiente información
para que cualquier potencial espía descubra el secreto compartido.
Este algoritmo fue diseñado únicamente para el intercambio de claves,
aunque ha habido esfuerzos para adaptarlo a fines de encriptación.
Incluso se lo usó como parte de un sistema PKI o de infraestructura de clave pública.
Veremos los sistemas PKI en profundidad más adelante en este curso.
La criptografía de curva elíptica, o ECC, es un sistema de encriptación de clave pública
que usa la estructura algebraica
de curvas elípticas sobre campos finitos para generar claves seguras.
¿Qué significa eso?
Bueno, los sistemas tradicionales de clave pública
usan la factorización de números primos grandes, mientras que ECC hace uso de curvas
elípticas.
Y la curva elíptica se compone de un conjunto de coordenadas que se ajustan a una
ecuación,
algo similar a y² = x³ + ax + b.
Las curvas elípticas tienen un par de propiedades interesantes y únicas.
Una es la simetría horizontal,
lo que significa que cualquier punto de la curva se puede reflejar
a lo largo del eje x y aun así se forma la misma curva.
Además de esto, cualquier línea no vertical intersecará la curva en tres lugares como
máximo.
Es esta última propiedad que permite que las curvas elípticas se utilicen en el cifrado.
La ventaja de los sistemas de encriptación basados en curvas elípticas es que son capaces de
lograr
seguridad similar a los sistemas tradicionales de clave pública, con tamaños de clave más
pequeños.
Así, por ejemplo, una clave de curva elíptica de 256 bits
sería comparable a una clave RSA de 3,072 bits.
Esto es realmente ventajoso, ya que reduce la cantidad de datos
que se deben almacenar y transmitir cuando se trata de claves.
Tanto Diffie-Hellman como DSA tienen variantes de curva elíptica,
conocidas como ECDH y ECDSA, respectivamente.
El Equipo de Apoyo de Emergencia Nuclear de los EE.UU (US NEST) recomienda el uso de
encriptación EC,
y la Agencia de Seguridad Nacional de EE. UU. (NSA) permite proteger datos ultrasecretos
con claves EC de 384 bits.
Pero la NSA ha expresado su preocupación porque la encriptación EC
sea potencialmente vulnerable a los ataques de computación cuántica,
a medida que la tecnología de computación cuántica siga evolucionando y madurando.
Voy a comprarles una bebida a Suzanne y Daryll hoy por todo su trabajo duro.
Mientras tanto, preparamos una tarea para ti
que pondrá a prueba tus habilidades de encriptación y desencriptación.
Tómate tu tiempo para decodificar todos los detalles
y nos encontraremos en la próxima lección.
Hashes
Hasta ahora, hablamos de dos formas de encriptación: simétrica y asimétrica.
En esta lección, vamos a hablar de un tipo especial de función
que se usa ampliamente en informática, en especial en el campo de la seguridad, los hashes.
No, no hablo de los que tomamos en el desayuno, aunque esos son deliciosos.
Los hashes o la función hash es un tipo de función
o de operación que toma una entrada de datos arbitraria
y la mapea a una salida de un tamaño fijo, llamado hash o resumen.
El tamaño de salida suele especificarse en bits de datos
y se incluye a menudo en el nombre de la función hash.
Lo que esto significa exactamente es que alimentas cualquier cantidad de datos en una
función hash
y la salida resultante siempre será del mismo tamaño.
Pero la salida deberá ser exclusiva para esa entrada
tal que dos entradas diferentes nunca deban producir el mismo resultado.
Las funciones hash tienen un gran número de aplicaciones en informática en general.
Normalmente se las usa para identificar datos de forma única.
Tal vez hayas escuchado el término tabla de hash anteriormente, en el contexto de la
ingeniería de software.
Este es un tipo de estructura de datos que usa hashes para acelerar las búsquedas de datos.
Los hashes también se pueden usar para identificar conjuntos de datos duplicados en bases
de datos o archivos
con el objeto de acelerar la búsqueda de tablas o para eliminar datos duplicados a fin de
ahorrar espacio.
Dependiendo de la aplicación, hay varias propiedades que se pueden desear
y existe una variedad de funciones de hash para diversas aplicaciones.
Nos interesan principalmente las funciones hash criptográficas
que se usan para diversas aplicaciones como autenticación, integridad de mensajes,
huellas digitales, detección de corrupción de datos y firmas digitales.
El hash criptográfico difiere claramente de la encriptación
porque las funciones hash criptográficas deben ser unidireccionales.
Lo similar es que puedes ingresar texto sin formato en la función hash
y obtener una salida que es ininteligible, pero no se puede tomar la salida del hash
y recuperar el texto sin formato.
La función hash criptográfica ideal debe ser determinista,
lo que significa que el mismo valor de entrada debe devolver siempre el mismo valor de hash.
La función debe ser rápida de computar y eficiente.
No debe ser posible revertir la función
y recuperar el texto sin formato a partir del resumen del hash.
Un pequeño cambio en la entrada debería dar como resultado un cambio en la salida,
por lo que no hay correlación entre el cambio en la entrada
y el cambio resultante en la salida.
Por último, la función no debe dar cuenta
de las colisiones de hash, es decir, que dos entradas diferentes mapeen a la misma salida.
Las funciones hash criptográficas son muy similares a los cifrados de bloque de clave
simétrica,
ya que operan sobre bloques de datos.
De hecho, muchas funciones populares de hash se basan, en realidad, en cifrados de bloque
modificados.
Tomemos un ejemplo básico para demostrar rápidamente cómo funciona una función hash.
Usaremos una función hash imaginaria a los efectos de esta demostración.
Supongamos que tenemos una string "Hello World" de entrada y la alimentamos
en una función hash que genera el hash resultante E49A00FF.
Cada vez que alimentemos esta string en nuestra función,
obtenemos la misma salida de resumen de hash.
Ahora vamos a modificar la entrada muy levemente
de modo que se convierta en "hello world", todo en minúscula ahora.
Si bien este cambio nos parece pequeño,
la salida de hash resultante es extremadamente diferente, FF1832AE.
Aquí está el mismo ejemplo, pero con una función hash verdadera, en este caso md5sum.
Play video starting at 3 minutes 35 seconds and follow transcript3:35
Con suerte, el concepto de funciones hash tiene sentido para ti ahora.
En la siguiente sección, exploraremos algunos ejemplos de algoritmos de hash
y veremos en profundidad las debilidades o los ataques a las funciones hash.