Esta es otra área donde se usan mucho las funciones de hashes. Las blockchains como Bitcoin, Ethereum, NEO o TRON hacen uso de contratos inteligentes para potenciar distintas aplicaciones. Estas aplicaciones son manejadas por un contrato público entre partes. Sin embargo, muchos de estos datos son muy sensibles, o simplemente es demasiada información para ser almacenada en una blockchain. Por lo que la mejor forma de solventar estos escenarios es a través de funciones de hash. De esta manera, todo el contrato es público pero información enlazada o que se quiere mantener privada no es publicada. Estos datos pueden incluir nombres, direcciones, direcciones de monederos, datos de terceros participantes. Es decir; información privilegiada y solo de interés entre partes.
Los hashes también son usados para versionar los contratos. Es decir, un contrato público tiene un hash único que viene dado por lo que dice el contrato. Si el contrato es modificado, el contrato anterior es terminado y se genera uno nuevo con un nuevo hash. De esta manera el hash determina el contrato correcto a usar dentro de aplicación descentralizado facilitando su control. Otro uso de las hash en contratos inteligentes es; para marcar la validez y autenticidad del mismo. Un ejemplo puede ser; un contrato hecho para la venta de una casa con un pago hecho en criptomonedas. La realización del contrato y su hash serán testigos inalterables de venta realizada entre las partes.
¿Para qué sirven estos códigos?
Como estos códigos representan un valor único para cada documento, sus usos pueden verse en infinidad de operaciones:
Firma electrónica: asegura la identificación de un documento de forma inequívoca y la no modificación del mismo después de la firma. El hash antes de la firma y el que se genera después de la misma deben coincidir lo que supone un gran beneficio para la seguridad de la operación.
Antivirus: para saber si un archivo es malicioso (malware) utilizan, de forma exclusiva, los códigos hash.
Gestor de contraseñas: servicios como Google, a la hora de guardar nuestras contraseñas, lo hacen mediante código hash en un texto que no sea plano, lo cual le dará más seguridad y privacidad a nuestras claves.
Criptomonedas: se utiliza en todas las operaciones derivadas de la tecnología blockchain. Poder crear seguridad, privacidad y transacciones fiables gracias a los hash es una clara ventaja.
Tipos de hash más usados
La actualización constante en el mundo tecnológico es algo prácticamente obligatorio. Es por ello por lo que la creación de código hash ha ido desarrollando diferentes sistemas para mejorar, sobre todo, en seguridad.
A continuación, vamos a ver los tipos de hash más utilizados en nuestros tiempos:
MD5 (Message-Digest Algorithm 5) → su función principal es detectar que ningún archivo haya sido modificado
MySQL → es un software creado por Oracle con el que se pueden gestionar bases de datos
SHA → permite dificultar la obtención de una cadena de origen con el mismo contenido que la cadena de salida, evitando así el duplicado de datos y la inseguridad de los archivos.
¿Hashing?
¿Qué podemos hacer con el hashing?
Hashing se utiliza para 2 propósitos principales en ciberseguridad. Para verificar la integridad de los datos, o para verificar contraseñas.
Hashing para verificación de contraseña
La mayoría de las aplicaciones web necesitan verificar la contraseña de un usuario en algún momento. Almacenar estas contraseñas en texto sin formato sería malo. Probablemente hayas visto noticias sobre empresas a las que se les filtró su base de datos. Esto como imaginarás puede ser un problema para aquellas personas que les gusta usar la misma contraseña para todo, incluso para sus operaciones bancarias, por lo que una filtración de este tipo para ellos, puede ser muy malo, porque pueden perder acceso a todas sus cuentas de redes sociales, y más en cuestión de horas. Si quieres saber si tu contraseña también está comprometida, puedes ir a este sitio: https://haveibeenpwned.com/, seguro que si tienes una cuenta en twitter te sorprenderás.
Esta es la tendencia de estos últimos años, hay bastantes violaciones de seguridad y filtrado de contraseñas de texto sin formato.
Si te gusta el mundo del pentesting, es posible que conozcas el diccionario más famoso llamado “rockyou.txt” que viene en cualquier distribución de Kali Linux. Es un diccionario que está compuesto por una lista de palabras con contraseñas. El origen de este archivo viene de una empresa que hizo widgets para MySpace. Almacenaron sus contraseñas en texto sin formato y la empresa tuvo una violación de seguridad, un ataque. Por lo que el archivo txt contiene más de 14 millones de contraseñas (aunque es poco probable que algunas hayan sido contraseñas de usuario. Si las pones por orden de longitud verás a los que me refiero).
Otro caso en el que Adobe tuvo una violación de datos notable, pero fue ligeramente diferente. Las contraseñas estaban cifradas, en lugar de texto claro y el cifrado que se utilizó no era seguro. Esto significaba que las contraseñas se podían recuperarse con relativa rapidez. Si desea leer más sobre esta filtración, mira la siguiente publicación de Sophos es este enlace:
Otro caso que de alguna forma, nos afectó a todos, es la de Linkedin, también tuvo una violación de datos. Linkedin usó SHA1 como verificación de contraseñas, que es bastante rápido de calcular usando GPU.
Aquí es donde entra en juego el hashing. ¿Qué sucede si, en lugar de almacenar la contraseña, solo almacena el hash de la contraseña? Esto significa que nunca tendrá que almacenar la contraseña del usuario, y si su base de datos se filtró, un atacante tendría que descifrar cada contraseña para averiguar cuál era. Eso suena bastante útil.
Solo hay un problema con esto. ¿Qué pasa si dos usuarios tienen la misma contraseña? Como una función hash siempre convertirá la misma entrada en la misma salida, almacenará el mismo hash de contraseña para cada usuario. Eso significa que, si alguien descifra ese hash, ingresa en más de una cuenta. También significa que alguien puede crear una “rainbow” para romper los hashes.
Una tabla arcoíris o “rainbow” en inglés, es una tabla de búsqueda de hashes a textos, por lo que puede averiguar rápidamente qué contraseña tenía un usuario a partir del hash. Una tabla de arcoíris intercambia el tiempo necesario para descifrar un hash por espacio en el disco duro, pero se necesita tiempo para crearla. Aquí hay un ejemplo rápido para que pueda tratar de entender cómo son.
Hash
Clave
02c75fb22c75b23dc963c7eb91a062cc
zxcvbnm
b0baee9d279d34fa1dfd71aadb908c3f
11111
c44a471bd78cc6c2fea32b9fe028d30a
asdfghjkl
d0199f51d2728db6011945145a1b607a
basketball
dcddb75469b4b4875094e14561e573d8
000000
e10adc3949ba59abbe56e057f20f883e
123456
e19d5cd5af0378da05f63f891c7467af
abcd1234
e99a18c428cb38d5f260853678922e03
abc123
fcea920f7412b5da7be0cf42b8c93759
1234567
Los sitios web como Crackstation utilizan internamente enromes tablas de arco iris para proporcionar un descifrado rápido de contraseñas para hashes sin “salt”. Hacer una búsqueda en una lista ordenada de hash es bastante rápido, mucho más rápido que intentar descifrar el hash.
Protección contra las tablas del arco iris
Para protegernos contra las tablas de arcoíris, agregamos lo que se le llama comúnmente, “granitos de sal”, salt en inglés, a las contraseñas. La salt se genera aleatoriamente y se almacena en la base de datos, única para cada usuario. En teoría, podría usar la misma salt para todos los usuarios, pero eso significa que las contraseñas duplicadas aún tendrían el mismo hash, y aún se podría crear una tabla de arco iris con contraseñas específicas con esa salt.
La salt se agrega al inicio o al final de la contraseña antes de que se convierta en hash, y esto significa que cada usuario tendrá un hash de contraseña diferente incluso si tienen la misma contraseña. Las funciones hash como bcrypt y sha512crypt manejan esto automáticamente. Ya que las salt no necesitan mantenerse en privado.
Los hashes en los sistemas operativos
Los hashes de contraseña de estilo Unix son muy fáciles de reconocer, ya que tienen un prefijo. El prefijo le indica el algoritmo hash utilizado para generar el hash. El formato estándar es $format$rounds$salt$hash.
Las contraseñas de Windows se codifican mediante NTLM, que es una variante de md4. Son visualmente idénticos a los hashes md4 y md5, por lo que es muy importante usar el contexto para calcular el tipo de hash.
En Linux, los hash de contraseña se almacenan en /etc/shadow. Este archivo normalmente solo es legible por root. Solían almacenarse en /etc/passwd y todos podían leerlos. Por tal motivo se separaron estos archivos en dos partes el /etc/shadow y el /etc/passwd.
md5crypt, utilizado en cosas de Cisco y sistemas Linux/Unix más antiguos
$2$, $2a$, $2b$, $2x$, $2y$
Bcrypt (Popular para aplicaciones web)
$6$
sha512crypt (predeterminado para la mayoría de los sistemas Linux/Unix)
En Windows, los hashes de contraseña se almacenan en la SAM. Windows intenta evitar que los usuarios normales los descarguen, pero existen herramientas como mimikatz para poder hacerlo, o pwdump. Es importante destacar que los hashes que se encuentran allí se dividen en hashes NT y hashes LM.
Un gran lugar para encontrar más formatos de hash y prefijos de contraseña es la página de ejemplo de Hashcat, disponible aquí.
Para otros tipos de hash, normalmente tendrá que ir por longitud, codificación o alguna investigación sobre la aplicación que los generó. Nunca subestimes el poder de la investigación.
Comprobando la integridad
El hash se puede utilizar para comprobar que los archivos no se han modificado. Si ingresas los mismos datos, siempre obtendrás los mismos datos. Si cambia incluso un solo bit, el hash cambiará mucho. Esto significa que puede usarlo para verificar que los archivos no hayan sido modificados o para asegurarse de que se hayan descargado correctamente. También puede usar hash para encontrar archivos duplicados, si dos imágenes tienen el mismo hash, entonces son la misma imagen.
HMAC
HMAC es un método de uso de una función hash criptográfica para verificar la autenticidad e integridad de los datos. Por ejemplo hay VPN que usan HMAC-SHA512 para la autenticación de mensajes, que puede ver en la salida del terminal. Se puede usar un HMAC para garantizar que la persona que creó el HMAC sea quien dice ser (autenticidad) y que el mensaje no se haya modificado ni dañado (integridad). Utilizan una clave secreta y un algoritmo hash para producir un hash.
Conclusión
Como hemos visto, la criptografía juega un papel fundamental en muchos órdenes de nuestra vida, sobre todo en la protección de contraseñas y la privacidad de la información.
Actualmente es muy importante, quizás hace 20 años el resguardo de datos no era tan fundamental, pero actualmente, sí lo es. Prácticamente, proveedores de servicios como Google Drive, Mega, y en general, cualquier proveedor de almacenamiento en la nube, utiliza la criptografía para resguardar la información de sus clientes.
Es por ello que, la mayoría de estos proveedores utilizan el SSL para resguardar el envío que ocurre entre servidor y usuario; una vez que la información se encuentra en sus bases de datos, estos utilizan diferentes tipos de criptografía, para evitar que terceros puedan acceder a ella. Asimismo, estas plataformas en cuestión poseen cifrado en su codificación, para evitar que agentes externos puedan tener acceso a enlaces o líneas de código delicadas.
Incluso, los discos duros y memorias externas poseen tecnología de cifrado, pero esta sólo ocurre cuando se resguarda una carpeta con contraseña en la base de datos del disco o en la memoria; de esta forma, en lugar de guardarse la contraseña como fue escrita, esta se cifra mediante hash, para evitar que algún programa externo la pueda obtener.
No hay actividad que se realice el día de hoy que no use la criptografía. Por lo que convierte esta ciencia en algo fundamental para proteger la seguridad de la información.
Ahora que tienes los conceptos de criptografía es hora de que conozcas algunas palabras que encontrarás seguido dentro de la ciberseguridad, relacionado con la criptografía. Muchas veces te podrás encontrar con palabras como:
Plaintext: Son los datos antes de ser cifrado, texto sin formato, a menudo texto, pero no siempre, ya que podría ser una fotografía u otro archivo en su lugar.
Encoding: Esta NO es una forma de encriptación, solo una forma de representación de datos como base64 o hexadecimal. Inmediatamente reversible.
Hash: El hash es el resultado de una función hash. Hashing también se puede usar como un verbo, “to hash”, que significa producir el valor hash de algunos datos.
Brute Force: Atacar la criptografía probando cada contraseña diferente o cada clave diferente en español, “fuerza bruta”.Cryptanalysis: atacar la criptografía al encontrar una debilidad en las matemáticas subyacentes.
Hablando de Hash
¿Qué es una función hash?
Un hash es el resultado de una función hash, la cual es una operación criptográfica que genera identificadores únicos e irrepetibles a partir de una información dada. Los hashes son una pieza clave en la tecnología blockchain y tiene una amplia utilidad.
El nombre de hash se usa para identificar una función criptográfica muy importante en el mundo informático. Estas funciones tienen como objetivo primordial codificar datos para formar una cadena de caracteres única. Todo ello sin importar la cantidad de datos introducidos inicialmente en la función. Estas funciones sirven para asegurar la autenticidad de datos, almacenar de forma segura contraseñas, y la firma de documento electrónicos.
Las funciones hash son ampliamente utilizadas en la tecnología blockchain con el fin de agregar seguridad a las mismas. El Bitcoin, es un claro ejemplo de cómo los hashes pueden usarse para hacer posible la tecnología de las criptomonedas.
Una función hash toma algunos datos de entrada de cualquier tamaño y crea un resumen o “resumen” de esos datos. La salida tiene un tamaño fijo. Es difícil predecir cuál será la salida para cualquier entrada y viceversa. Los buenos algoritmos hash serán (relativamente) rápidos de calcular y lentos de revertir (pasar de la salida y determinar la entrada). Cualquier pequeño cambio en los datos de entrada (incluso un solo bit) debería causar un gran cambio en la salida.
La salida de una función hash normalmente son bytes sin formato, que luego se codifican. Las codificaciones comunes para esto son base 64 o hexadecimal. Descifrarlos no te dará nada útil.
¿Por qué debería importarme?
El Hashing se usa muy a menudo en ciberseguridad. Cuando iniciaste sesión en este portal, se usó una función hash para verificar tu contraseña. Cuando iniciaste sesión en tu ordenador, también se usó una función hash para verificar tu contraseña. Interactúas indirectamente con hashes más de lo que crees, principalmente en el contexto de las contraseñas.
Historia de las funciones Hash
La aparición de la primera función hash data del año 1961. En ese entonces, Wesley Peterson creó la función Cyclic Redundancy Check (Comprobación de Redundancia Cíclica). Fue creada para comprobar cómo de correctos eran los datos transmitidos en redes (como Internet) y en sistema de almacenamiento digital. Fácil de implementar y muy rápida, ganó aceptación y es hoy un estándar industrial. Con la evolución de la informática y los computadores, estos sistemas se fueron especializando cada vez más.
Esto permitió crear nuevas y mejores funciones hash entre las que se pueden destacar:
MD2: es una de las primeras funciones hash criptográficas. Creada por Ronald Rivest, en el año de 1989. Con un alto nivel de eficiencia y seguridad para el momento, era fundamental en la seguridad de Internet. Su consecuente evolución llevó a la creación de la función hash MD5. La cual es aún usada en ambientes donde la seguridad no es una alta prioridad.
RIPEMD: es una función hash criptográfica creada por el proyecto europeo RIPE en el año de 1992. Su principal función era la de sustituir al estándar del momento, la función hash MD4. En la actualidad aún se considera muy seguro, especialmente en sus versiones RIPEMD-160, RIPEMD-256 y RIPEMD-320.
SHA: el estándar actual de hashes criptográficos. Creada por la NSA en 1993, como parte de su proyecto interno para autentificar documentos electrónicos. SHA y sus derivadas son consideradas las funciones hash más seguras hasta el momento. Es de especial interés, SHA-256 por ser fundamental en la tecnología que hizo posible el Bitcoin.
Funciones Hash – ¿Cómo funcionan?
Las funciones hash funcionan gracias a una serie de complejos procesos matemáticos y lógicos. Estos procesos, son trasladado a un software de ordenador con el fin de usarlos desde el propio ordenador. Desde allí, podemos tomar cualquier serie de datos, introducirlos en la función y procesarlos. Con esto se busca obtener una cadena de caracteres de longitud fija y única para los datos introducidos. A la vez que se hace prácticamente imposible realizar el proceso contrario. Es decir, es prácticamente imposible obtener los datos originales desde un hash ya formado. Esto gracias a que el proceso de creación de hashes, es un proceso de un solo sentido.
Un ejemplo sencillo y de la vida diaria de este proceso sería; la realización de un pastel. Cada uno de los ingredientes del pastel, sería el equivalente a la entrada de datos. El proceso de preparación y cocción del pastel, sería el proceso de codificación de dichos datos (ingredientes) por la función. Al finalizar, obtenemos un pastel con características únicas e irrepetibles dadas por los ingredientes del mismo. Mientras que el proceso contrario (llevar al pastel a su estado de ingredientes inicial), es prácticamente imposible de realizar.
Un ejemplo visual del proceso se puede mostrar usando las funciones MD5 y SHA-256, en dos casos de uso distintos.
YourString
En Sevilla el cielo es azul
MD5 HASH
65767deb8910279f82dc925a5c48d478
YourString
En Sevilla el cielo es azul.
MD5 HASH
c72fe934e8e43e653b15b129530ab8cd
Una explicación más cercana
Observando ambos casos de uso podemos notar lo siguiente:
La primera entrada de datos, da como resultado un hash único, para los casos de MD5 y SHA-256. Resultados que están ajustados a la realidad de cada una de esas funciones. En la segunda entrada se ha realizado una pequeña modificación en el texto. Esta, aunque es mínima, alteró completamente el resultado de los hashes para MD5 y SHA-256.
Esto prueba que los hashes serán únicos en todo caso. Lo que nos permite estar seguros, de que ningún actor malicioso podrá forzar hashes de forma sencilla. Aunque lograr esto no sea imposible, un ciberdelincuente podría pasar cientos de años procesando datos para lograr su cometido.
Son estas dos observaciones las que nos dan la seguridad de usar este método en distintas áreas sensibles. Certificados digitales, firmas únicas de documentos sensibles o secretos, identificación digital y almacenamiento de claves, son algunos casos de uso. Pero no se detiene allí, puesto que la flexibilidad y seguridad de esta tecnología la hace idónea en muchas áreas.
Características de las funciones de hash
Entre las principales características de las funciones hash, se pueden mencionar las siguientes:
Son fáciles de calcular. Los algoritmos de hash son muy eficientes y no requieren de gran potencia de cálculo para ejecutarse.
Es compresible. Esto quiere decir que, sin importar el tamaño de la entrada de datos, el resultado siempre será una cadena de longitud fija. En el caso de SHA-256, la cadena tendrá una longitud de 64 caracteres.
Funcionamiento tipo avalancha. Cualquier mínimo cambio en la entrada de datos, origina un hash distinto a la entrada de datos original.
Resistencia débil y fuerte a colisiones. Hace referencia a que es imposible calcular un hash, que permita encontrar otro hash igual. Mejores conocidos como pre-imagen y segunda preimagen, es el concepto base de la seguridad de los hashes.
Son irreversibles. Tomar un hash y obtener los datos que dieron origen al mismo, en la práctica no puede ser posible. Esto es uno de los principios que hacen a los hashes seguros.
Nivel de seguridad de las funciones hash
Las actuales funciones hash tienen un alto nivel de seguridad, aunque esto no significa que sean infalibles. Un buen ejemplo de esto es; la función hash MD5. En principio, las especificaciones de la misma prometían una seguridad muy alta. Su uso se extendió en Internet por la necesidad de un sistema de hash para mantener su seguridad. Pero en el año 1996, se pudo romper la seguridad de la función. Con ello quedó obsoleta y se recomendó abandonar su uso.
Por otro lado, funciones como RIPEMD-160 ySHA-256, son tan complejas que su seguridad aún está garantizada. Por ejemplo, para SHA-256 se calcula que para romper su seguridad harían falta miles de años usando supercomputadores actuales. Lo mismo aplica en el caso de RIPEMD-160 y sus consecuentes evoluciones. Esto significa que ambas funciones aún brindan un alto nivel de seguridad y pueden utilizarse sin problemas.
Pero pese a que estas funciones son muy seguras, no significa que no se investiguen y desarrollen otras más opciones. Esta constante evolución nos dice que siempre tendremos a disposición herramientas seguras para usar, en cualquier caso.
¿Qué es una colisión de hash?
Una colisión hash es cuando 2 entradas diferentes dan la misma salida. Las funciones hash están diseñadas para evitar esto lo mejor que pueden, especialmente para poder diseñar (crear intencionalmente) una colisión. Debido al efecto casillero, las colisiones no son evitables. El efecto de casillero es básicamente, hay un número determinado de valores de salida diferentes para la función hash, pero puede darle cualquier tamaño de entrada. Como hay más entradas que salidas, algunas de las entradas deben dar la misma salida. Si tiene 128 palomas y 96 casilleros, algunas de las palomas tendrán que compartir casilla.
MD5 y SHA1 han sido atacados y se han vuelto técnicamente inseguros debido a colisiones de hash. Sin embargo, ningún ataque ha provocado una colisión en ambos algoritmos al mismo tiempo, por lo que, si usa el hash MD5 Y el hash SHA1 para comparar, verá que son diferentes. El ejemplo de colisión MD5 está disponible en https://www.mscs.dal.ca/~selinger/md5collision/ y los detalles de la colisión SHA1 están disponibles en https://shattered.io/. Debido a esto, no debe confiar en ninguno de los algoritmos para cifrar contraseñas o datos.
Las funciones hash en el mundo Blockchain
Difícil no hablar del blockchain en los tiempos que corres, gracias a que son rápidos, eficientes, económicos computacionalmente y únicos, las funciones de hash son muy usadas en la tecnología blockchain. Cuando Satoshi Nakamoto publicó su whitepaper de Bitcoin, explicó el porque y como uso de SHA-256 y RIPEMD-160 en Bitcoin. Desde entonces, la tecnología blockchain ha evolucionado mucho, pero las bases siguen siendo las mismas. Hacer uso de criptografía fuerte y hashes para que la tecnología sea muy segura, privada e incluso anónima.
De todos los usos de las funciones de hash en blockchain se pueden destacar los siguientes casos:
Creación de la dirección (Address Wallet): Las direcciones de los monederos de criptomonedas, son una representación segura de las claves públicas de la cartera. Las claves públicas, por lo general son muy largas y complejas. Es por esta razón; que las blockchains utilizan funciones de hash para derivar una dirección más corta. Este proceso se usa en varias ocasiones para acortar la dirección y agregar una capa extra de seguridad. En Bitcoin, el proceso de crear una dirección de monedero, usa las funciones hash RIPEMD-160 y SHA-256. Ambas son usadas para mejorar la seguridad del proceso y hacer que las mismas sean únicas e irrepetibles.
Proceso de Minería: El proceso de minería, es otra etapa importante de la tecnología blockchain donde se usan las funciones hash. En Bitcoin, la minería hace un uso intensivo de cálculo de hashes SHA-256 de forma distribuida en cada uno de sus nodos. Los mineros, son los responsables de calcular millones de hashes para crear nuevos bloques Bitcoin. El proceso también se usa para verificar las transacciones que se hacen en la red.
Si bien el proceso de calcular hashes es muy rápido, su uso intensivo dificulta el proceso drásticamente. Esto lleva a los mineros a usar un alto poder de cómputo para resolver los acertijos Bitcoin. Al resolverlos, los mineros son recompensados con 6,25 BTC por bloque.
Siguiendo con la trayectoria bélica, la II Guerra Mundial fue otro de los escenarios donde la criptografía fue protagonista. Se construyeron varias máquinas de cifrado, como las máquinas Enigma y Lorentz en Alemania. Hubo otras, como Púrpura y Jade en Japón.
Por su popularidad e importancia en la historia se va a ahondar más en el cifrado de la máquina Enigma. Esta máquina se utilizó durante la Segunda Guerra Mundial para cifrar y descifrar los mensajes que se intercambiaban durante la guerra.
En la foto se muestra un ejemplar de máquina Enigma. Como puede verse, es parecida a una máquina de escribir. Está compuesta por un tablero de clavijas, el teclado, un panel luminoso en el que aparece iluminada la letra a la que se corresponde cifrada la tecla pulsada, además de los modificadores y rotores.
Es una máquina que realiza varias operaciones para el cifrado de cada carácter, lo que hace que el número de combinaciones posibles sea ciertamente elevado. Además, se utilizaba una clave de cifrado que cambiaba cada 8 horas, lo que complicaba aún más su criptoanálisis.
Alan Turing, considerado uno de los padres de la computación, junto a otros expertos, fueron protagonistas en el proceso de criptoanálisis de la máquina Enigma para descifrar los códigos nazis. Fue en Bletchley Park donde construyeron la llamada “bomba de Turing” y junto a su potencia y algunos fallos en el uso de Enigma fue posible descifrar los mensajes de los alemanes en la Segunda Guerra Mundial. Se estima que este hecho fue capaz de acortar en 2 o 3 años la duración de la guerra.
Otra de las técnicas usadas durante la Segunda Guerra Mundial fue la utilización de lenguas poco extendidas para ocultar de esta forma los mensajes secretos. En particular se usó el idioma de los indios navajos. Se estima que lo hablaban únicamente unos 4000 indios, por lo que era una lengua bastante desconocida y difícil de entender por el resto del mundo. El código estaba hecho a de palabras o frases en idioma navajo, que luego era traducido al inglés.
Éstos son algunos de los aspectos más destacables de la historia de la criptografía, aunque obviamente hay muchos más que no se han reflejado aquí en pro de no extenderse demasiado. El alumno interesado puede investigar más por su cuenta.
Todos estos hechos forman parte de lo que se llama la criptografía precientífica, la cual tenía en cierta medida una componente artística. Es a partir de que Shannon en 1949 propusiera sus postulados cuando se empieza a hablar de la criptografía científica. Estos aspectos se estudiarán con más detalle en el resto de esta asignatura.
SEGURIDAD CRIPTOGRÁFICA
En relación a la seguridad criptográfica se puede distinguir entre los siguientes conceptos:
Incondicional (teórica). El sistema es seguro frente a atacantes con tiempo y recursos computacionales ilimitados. Actualmente el único sistema conocido que cumple estas características es el cifrado de Vernam.
Computacional (práctica). Es seguro frente a atacantes con tiempo y recursos computacionales limitados. Un ejemplo de este tipo de sistemas es RSA.
Seguridad probable. No se puede demostrar su seguridad pero el sistema no ha sido violado. Un ejemplo es el algoritmo DES.
Seguridad condicional. Los demás sistemas. Por ejemplo, los algoritmos clásicos, que eran seguros mientras que un atacante no tenía medios para romperlos. Una de las diferencias entre la criptografía clásica y la moderna es que la primera ofrecía sistemas con seguridad probable mientras que, a día de hoy, con los avances en el criptoanálisis y la capacidad cada vez mayor de los sistemas computacionales es necesario que la seguridad sea matemáticamente demostrable.
CRIPTOANÁLISIS
Como se comentó el criptoanálisis persigue romper el cifrado y obtener ilegítimamente el mensaje original a partir del criptograma.
Antiguamente, para preservar la seguridad de los mensajes intercambiados, el funcionamiento del procedimiento criptográfico se escondía para evitar que los atacantes conocieran el método y pudieran emplearlo para leer los mensajes. La desventaja que tiene este método es que, si el algoritmo de cifrado fuese revelado, filtrado o se utilizase ingeniería inversa, un atacante podría tomar ventaja de esto y comprometer el mensaje original.
Para evitar esto en el S XIX se enunció el principio de Kerckhoffs, que dice lo siguiente:
“El atacante tiene pleno conocimiento del método de cifrado con excepción de la clave”.
Esto da un vuelvo al concepto anterior. De hecho, a día de hoy se garantiza la seguridad de los algoritmos de cifrado al hacerlos públicos y retar a que se rompan. De este modo la seguridad reside únicamente en la clave de cifrado y no en el ocultismo del modo de funcionamiento del algoritmo.
Los ataques pueden clasificarse en función a varios criterios. La primera clasificación diferencia entre los ataques pasivos y los activos.
Los ataques pasivos son aquellos en los que el atacante monitoriza el canal de comunicación (ataque a la confidencialidad) pero no interviene sobre la información.
Ataques activos. A diferencia de los anteriores, en este caso el atacante intenta modificar la información intercambiada, añadiendo, borano o alterando los mensajes enviados (esto supone un ataque a la confidencialidad, integridad y autenticidad).
Otra clasificación es la siguiente:
Ataque sobre texto cifrado únicamente. En este ataque pasivo el atacante solo tiene acceso al criptograma. Tiene un conocimiento mínimo del mensaje original (como el idioma). Un buen método de cifrado no debería ser vulnerable a este ataque.
Ataque sobre texto claro conocido. En este caso el atacante conoce una porción del texto claro, así como su correspondiente texto cifrado. Partiendo de esta información el atacante tiene como objetivo el deducir la clave o descifrar una nueva fracción del texto claro.
Ataque adaptativo. Este ataque es una variante del anterior. En este caso el atacante puede obtener nuevo texto cifrado en función de otros criptogramas obtenidos anteriormente. Todos los textos cifrados corresponden a textos claros de su propia elección. Aunque este escenario no es muy realista tiene interés teórico.
La eficacia de un ataque criptoanalítico se mide por varios factores:
Cantidad de pares texto claro y texto cifrado necesarios.
Tiempo para criptoanálisis.
Probabilidad de éxito del ataque.
EJEMPLO DE CRIPTOANÁLISIS
Un ejemplo de criptoanálisis se encuentra en el libro “El escarabajo de oro”, escrito por Edgar Alan Poe en 1843. Este libro explica detalladamente cómo se puede romper un procedimiento de cifrado mediante técnicas estadísticas. La obra relata una historia en la que se debe descifrar un mensaje secreto para encontrar la localización de un tesoro escondido.
El criptograma que aparece en el libro es el siguiente:
53‡‡†305))6;4826)4‡.)4‡);806;48†8¶
60))85;1‡(;:‡8†83(88)5†;46(;8896?;
8)‡(;485);5†2:‡(;49562(5-4)8¶8
;4069285);)6†8)4‡‡;1(‡9;48081;8:8‡1;48
†85;4)485†528806*81(‡9;48;(88;4(‡?34
;48)4‡;161;:188;‡?;
Vamos a ver de qué manera es posible criptoanalizar este criptograma.
Realizando un análisis de frecuencias se sabe que la letra más usada en la lengua inglesa es la letra “e”.
Analizando el criptograma se puede ver que el carácter más repetido es el “8”, por tanto se hace la asociación e → 8. De esta forma se sustituyen todas las apariciones de 8 en el criptograma por la letra “e”. El texto quedaría como sigue:
Para continuar se tiene en cuenta que la palabra “the” es la más habitual en el idioma inglés. Por tanto, se debe buscar en el criptograma el patrón 8, siendo * cualquier carácter. Se ve que en el criptograma aparece 7 veces repetido el patrón “;48”, de lo cual se deduce la siguiente asociación
t → ; h → 4 e → 8
En el criptograma se puede ver “;(88;4”. Tenemos todos los caracteres correspondientes excepto “(“. Como la “h” la asociamos a “4”, se deduce que el “(” no es “h”. Entonces se reduce a “;(88”. Esto encaja con la palabra “tree”, lo cual relaciona
r->(
Sustituyendo se obtiene: “the tree thrh the”. De donde se deduce la palabra “trough” que da lugar a las
asociaciones o → ‡ u → ? g
->3
Buscando en el texto se encuentra 83(88) egree. Asociando la palabra degree se obtiene una nueva letra d → +
Luego se ve la combinación 46 (; 88. Sustituyendo se obtiene th rtee*, lo cual sugiere la palabra “thirteen” y que permite obtener más asociaciones i → 6 n → *
De “5good” se deduce a → 5 Sustituyendo los símbolos en el criptograma se obtiene el texto original:
“A good glass in the bishop’s hostel in the devil’s seat forty-one degrees and thirteen minutes northeast and by north main branch seventh limb east side shoot from the left eye of the death’s-head a bee line from the tree through the shot fifty feet out.”
Lo cual nos lleva a la localización del tesoro ☺
CONDICIONES DE SECRETO PERFECTO
En 1949 Shannon enunció las condiciones de secreto perfecto, las cuales reflejan en forma matemática la seguridad de un sistema criptográfico. Estas condiciones se basan en dos hipótesis fundamentales
La clave se utilizará solamente una vez.
El atacante sólo tiene acceso al criptograma.
Tomando esto como base, se dice que un sistema criptográfico cumple las condiciones de secreto perfecto si el texto claro X es estadísticamente independiente del criptograma Y, para todos los posibles textos claros y todos los posibles criptogramas.
Matemáticamente se expresa como P(X = x | Y = y) = P(X = x)
Esto refleja que el valor tomado por la variable X es el mismo con o sin el conocimiento de la variable Y. Dicho de otra manera, el criptograma no aporta información sobre el texto claro a un criptoanalista, independientemente de los recursos y tiempo de los que disponga.
Shannon, conocido como padre de la teoría de la información, introdujo el concepto de entropía. Ésta mide la incertidumbre de una fuente de información y es un concepto bastante usado en criptografía. Basándose en la entropía, Shannon determinó cuál era la longitud mínima de la clave para que se pudieran dar las condiciones de secreto perfecto. El resultado es que la longitud de la clave tiene que ser al menos tan larga como la longitud del texto claro. Esto es, K >= M, siendo K la longitud de la clave y M la del mensaje original.
CIFRADORES ADITIVOS
Los cifradores aditivos módulo L verifican las condiciones de cifrado perfecto.
Dado un alfabeto {0, 1, …, L-1} para el texto claro y criptograma, sea X el texto claro, Y el texto cifrado, Z la clave, M la longitud del texto claro, N la longitud del criptograma y K la longitud de la clave.
Debe darse que M=K=N.
La clave Z debe elegirse de forma aleatoria.
La transformación de cifrado se realiza aplicando una operación XOR entre cada elemento del texto claro y la clave.
A cada texto claro X le puede corresponder, con igual probabilidad, cualquiera de los LM posibles criptogramas. Por tanto, la información aportada por el criptograma sobre el texto claro es nula, esto es, X e Y son estadísticamente independientes.
CONCLUSIONES
La criptografía está relacionada códigos secretos, con cómo cifrar y descifrar mensajes de modo que sólo el destinatario pueda acceder al mensaje, de modo que se proteja la información.
La criptografía tiene origen alrededor del S. V a. C. y ha ido evolucionando a lo largo del tiempo, dando lugar a sistemas cada vez más sofisticados. Ha habido muchos sistemas criprotográficos a lo largo de la historia y en este capítulo se han repasado algunos de los más importantes, analizando su funcionamiento y características, así como los puntos débiles que los pueden hacer sucumbir ante un ataque criptoanalítico.
Se han repasado también conceptos relativos al criptoanálisis y las condiciones de secreto perfecto así como el funcionamiento de los cifradores aditivos un repaso de cuáles son las aplicaciones más importantes de la criptografía.
Bienvenido a este curso de criptografía. La criptografía es un método de protección de la información y las comunicaciones mediante el uso de códigos, de modo que solo aquellos a quienes está destinada la información puedan leerla y procesarla. El prefijo «cripta-» significa «oculto» o «bóveda» – y el sufijo «-grafía» significa «escritura».
En informática, la criptografía se refiere a técnicas de comunicación e información seguras derivadas de conceptos matemáticos y cálculos basados en reglas llamados algoritmos, para transformar los mensajes en formas difíciles de descifrar.
Estos algoritmos deterministas se utilizan para la generación de claves criptográficas, firma digital, verificación para proteger la privacidad de los datos, navegación web en Internet y comunicaciones confidenciales como transacciones con tarjetas de crédito y correo electrónico.
Haciendo un poco de historia
El término criptología proviene del griego krypto: ‘oculto’ y logos: ‘palabra’. Es la ciencia de la escritura secreta (criptografía), de la escritura oculta (esteganografía) y de su revelación no autorizada (criptoanálisis). Por lo que podemos representar estos tres términos como en la siguiente imagen.
Como ves, la criptología engloba a la criptografía y al criptoanálisis:
La criptografía diseña algoritmos de cifrado para proteger la información.
El criptoanálisis intenta romper dichos métodos de cifrado para recuperar la información original.
Existe otro término no menos importante que también debes manejar y son los criptogramas:
Los elementos que forman parte de un criptosistema son:
M: que representa el mensaje o texto en claro, que por sí solo es legible o interpretable por cualquier que tenga acceso a él.
C: que representa al criptograma, esto es el texto cifrado que se trasmitirá por el canal de comunicación, el cual por definición es inseguro y por ello es necesario cifrar la información.
E: que representa la función de cifrado que se aplica al texto en claro. La letra E proviene del inglés Encrypt.
D: que representa la función de descifrado que se aplica al texto cifrado para recuperar el texto en claro. La letra D proviene del inglés Decrypt.
K: que representa la clave empleada para cifrar el texto en claro M, o bien para descifrar el criptograma C. En los sistemas modernos de cifra asimétrica o de clave pública, estas claves K serán diferentes en ambos extremos.
Hay que destacar que, a pesar de los siglos, los sistemas de cifra clásicos y los modernos o actuales se diferencian muy poco entre sí. En el fondo, hacen las mismas operaciones, si bien los primeros estaban orientados a letras o caracteres, y los segundos lógicamente a bits y bytes. Pero los principios en los que se basan para conseguir su objetivo de enmascarar la información siguen siendo los mismos, la difusión y la confusión.
La difusión pretende difundir las características del texto en claro en todo el criptograma, ocultando así la relación entre el texto en claro y el texto cifrado, y se logra mediante técnicas de cifra por permutación o transposición.
Por su parte, la confusión pretende confundir al atacante, de manera que no le sea sencillo establecer una relación entre el criptograma y la clave de cifrado, y se logra mediante técnicas de cifra por sustitución.
Los cuatro servicios de seguridad que te proporciona la criptografía
La criptografía puede utilizarse para ayudar a proporcionar los siguientes servicios de seguridad:
Confidencialidad: se ocupa de detectar y disuadir la divulgación no autorizada de información, vamos, de mantener los secretos en secreto: tengo información y no quiero que nadie más la descubra a menos que yo se la revele. Los algoritmos de cifrado abordan directamente el problema de la confidencialidad. Estos algoritmos aceptan una clave secreta y luego proceden a cifrar el mensaje original, conocido como texto claro, y lo convierten en una información ininteligible conocida como texto cifrado, de tal manera que sólo el destinatario previsto, y nadie más, puede leerlo.
Integridad: se ocupa de detectar e impedir la modificación no autorizada de la información. Con criptografía se realiza una firma digital de la información y basta que un solo bit de los datos cambie para que la firma sea diferente. Esto permite a las partes que se comunican realizar comprobaciones de integridad con respecto a su información y asegurarse de que nada ha cambiado durante el trayecto o una vez almacenada. Las funciones de hash suelen constituir una pieza clave de las firmas digitales.
Autenticación: es la propiedad de atribuir una identidad al remitente de un mensaje o al autor de una acción. Uno de los métodos criptográficos preferidos para autenticar a las partes es mediante certificados digitales. Se basan en dos bloques de construcción básicos: las funciones de hash y el cifrado de clave pública, que se verán más adelante.
El no repudio asegura que el remitente no puede negar haber enviado el mensaje.
Una de las finalidades de la criptografía es mantener la confidencialidad del mensaje, esto es, garantizar que la información es accesible únicamente para aquellos autorizados a tener acceso. Otra es garantizar la integridad del criptograma, es decir, que éste no sufra ningún tipo de alteración o modificación. Así como garantizar la autenticidad del emisor y receptor, que se refiere a verificar que efectivamente se trata de las personas o entes que envían el mensaje o lo reciben.
FUNDAMENTOS DEL CIFRADO
Históricamente, el primer método utilizado para proteger la información consistía en esconder el texto secreto. Estaba oculto a plena vista. Este método se llama esteganografía.
La esteganografía (del griego στεγανος steganos, “cubierto” u “oculto”, y γραφος graphos, “escritura”) trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, de modo que no se perciba su existencia. Es decir, procura ocultar mensajes dentro de otros objetos y de esta forma establecer un canal encubierto de comunicación, de modo que el propio acto de la comunicación pase inadvertido para observadores que tienen acceso a ese canal.
Una forma de diferenciar la esteganografía con la criptografía común es que la criptografía solo cifra los archivos manteniendo el archivo original visible, pero al abrirlo mostrará una secuencia de caracteres que no permitirá su lectura y para ver su contenido original es necesario conocer la clave. En la esteganografía, puede verse un archivo con un formato diferente, y para conocer su contenido original será necesario conocer la clave y el software con el que se ocultó.
Esta ciencia ha suscitado mucho interés en los últimos años, especialmente en el área de seguridad informática, debido a que ha sido utilizada por organizaciones criminales y terroristas. No obstante, no se trata de nada nuevo, pues se lleva empleando desde la antigüedad, y tradicionalmente la han utilizado las instituciones policíacas, militares y de inteligencia, y también criminales o civiles que desean evadir el control gubernamental, especialmente en regímenes tiránicos.
La esteganografía clásica se basaba únicamente en el desconocimiento del canal encubierto utilizado, mientras que en la era moderna también se emplean canales digitales (imagen, video, audio y protocolos de comunicaciones, entre otros) para alcanzar el objetivo. En muchos casos, el objeto contenedor es conocido, y lo que se ignora es el algoritmo de inserción de la información en dicho objeto.
ESTEGANOGRAFÍA CLÁSICA Y MODERNA
Esteganografía “clásica”:Protección basada en desconocer el canal encubierto específico que se está usando. Esteganografía moderna: uso de canales digitales:
Archivo de texto (páginas web, código fuente, etc.)
La esteganografía pura no requiere el intercambio de un cifrado como un stego-key. Se asume que ninguna otra parte tiene conocimiento de la comunicación.
De clave secreta
Aquí la clave secreta (stego) se intercambia antes de la comunicación. Esto es más susceptible a la interceptación. La esteganografía de clave secreta toma un mensaje de cobertura e incrusta el mensaje secreto dentro de él mediante el uso de una clave secreta (stego-key). Solo las partes que conocen la clave secreta pueden revertir el proceso y leer el mensaje secreto.
De clave pública
En este caso se utiliza una clave pública y una clave privada para una comunicación segura. El remitente utilizará la clave pública durante el proceso de codificación y solo la clave privada, que tiene una relación matemática directa con la clave pública, puede descifrar el mensaje secreto.
TÉCNICAS ESTEGANOGRÁFICAS
Existen muchas técnicas para ocultar información. A continuación explicamos las más habituales.
Enmascaramiento
En este caso la información se oculta dentro de una imagen digital usando marcas de agua donde se introduce información, como el derecho de autor, la propiedad o licencias. El objetivo es diferente de la esteganografía tradicional, lo que se pretende 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 de la compresión de datos
Esta técnica oculta datos basados en 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.
Métodos de sustitución
Una de las formas más comunes de hacer esto es alterando el bit menos significativo (LSB). En archivos de imagen, audio y otros, los últimos bits de información en un byte no son necesariamente tan importantes como los iniciales. Por ejemplo, 10010010 podría ser un tono de azul. Si solo cambiamos los dos últimos bits a 10010001, podría ser un tono de azul que es casi exactamente igual.
Esto significa que podemos ocultar nuestros datos secretos en los dos últimos bits de cada píxel de una imagen, sin cambiar la imagen de forma notable. Si cambiamos los primeros bits, lo alteraría significativamente. El método del LSB funciona mejor en los archivos de imágenes que tienen una alta resolución y usan gran cantidad de colores. En caso de archivos de audio, favorecen aquellos que tienen muchos y diferentes sonidos que poseen una alta tasa de bits.
Además, este método no altera en absoluto el tamaño del archivo portador o cubierta (por eso es «una técnica de sustitución»). Posee la desventaja de que el tamaño del archivo portador debe ser mayor al mensaje a embeber; se necesitan 8 bytes de imagen por cada byte de mensaje a ocultar; es decir, la capacidad máxima de una imagen para almacenar un mensaje oculto es de su 12,5%. Si se pretende emplear una mayor porción de bits de la imagen (por ejemplo, no solo el último, sino los dos últimos), puede comenzar a ser percibible al ojo humano la alteración general provocada.
ESTEGANOGRAFÍA SEGÚN EL MEDIO
Dependiendo de la naturaleza del objeto de cobertura (objeto real en el que se incrustan datos secretos), la esteganografía se puede dividir en varios tipos. Exploremos cada uno de ellos.
DOCUMENTOS
La esteganografía de texto oculta información dentro de los archivos de texto. Implica cosas como cambiar el formato de texto existente, cambiar palabras dentro de un texto, generar secuencias de caracteres aleatorias o usar gramáticas libres de contexto para generar textos legibles. Varias técnicas utilizadas para ocultar los datos en el texto son:
Método basado en formato
Generación estadística y aleatoria
Método lingüístico
IMÁGENES
Ocultar los datos tomando el objeto de portada como imagen se conoce como esteganografía de imagen. En la esteganografía digital, las imágenes son una fuente de cobertura ampliamente utilizada porque hay una gran cantidad de bits presentes en la representación digital de una imagen. Hay muchas formas de ocultar información dentro de una imagen. Los enfoques comunes incluyen:
Inserción de bits menos significativa
Enmascaramiento y filtrado
Codificación de patrón redundante
Cifrar y dispersar
Codificación y transformación del coseno
VÍDEO
En la esteganografía de video puede ocultar tipos de datos en formato de video digital. La ventaja de este tipo es que se puede ocultar una gran cantidad de datos en su interior y el hecho de que es un flujo de imágenes y sonidos en movimiento. Puedes pensar en esto como la combinación de esteganografía de imagen y esteganografía de audio. Dos clases principales de video esteganografía incluyen:
Incrustar datos en video sin comprimir y comprimirlos más tarde
Incrustar datos directamente en el flujo de datos comprimidos
AUDIO
En la esteganografía de audio, el mensaje secreto está incrustado en una señal de audio que altera la secuencia binaria del archivo de audio correspondiente. Ocultar mensaje secretos en digital es un proceso mucho más dificil en comparación con otros, como la esteganografía de imágenes. Los diferentes métodos de esteganografía de audio incluyen:
Codificación de bits menos significativos
Codificación de paridad
Codificación de fase
Espectro ensanchado
Este método oculta los datos en archivos de sonido WAV, AU e incluso MP3.
OTROS ARCHIVOS
Uno de los métodos más fáciles de implementar es el de inyección o agregado de bytes al final del archivo. Esta técnica consiste, esencialmente, en agregar o adosar al final de un archivo, de cualquier tipo, otro archivo que será el contenedor del «mensaje a ocultar», también de cualquier tipo. Esta metodología es la más versátil, pues permite usar cualquier tipo de archivo como portador (documentos, imágenes, audio, vídeos, ejecutables, etc) y añadir al final del archivo contenedor el «paquete enviado», que es otro archivo, también de cualquier tipo.
ESTEGANOGRAFÍA EN INTERNET Y REDES SOCIALES
Hoy en día todos (o casi) utilizamos al menos, una red social, como Twitter, Facebook o Instagram, entre otras muchas. Esto convierte a estos canales de comunicación en los transportes ideales de todo tipo de información, un medio de interconexión fácil de usar y con capacidad de llegada a múltiples destinatarios, a cualquier parte del mundo. A través de las redes sociales también es posible enviar información de forma completamente inadvertida. Esto es: utilizando esteganografía informática. No es fácil hacerlo, pues tienen sus propios algoritmos de detección de código oculto, amén de otras técnicas de inserción, como el cambio de resoluciones de imágenes, una vez subidas a la plataforma, etc. Pero esto no quiere decir que sea imposible conseguirlo
ALGUNAS HERRAMIENTAS PARA DESCIFRAR ESTEGANOGRAFÍA
STEGDETECT
Es una herramienta de esteganálisis común. Stegdetect puede encontrar información oculta en imágenes JPEG utilizando esquemas de esteganografía como F5, Invisible Secrets, JPHide y JSteg. También tiene una interfaz gráfica llamada Xsteg. STEGO SUITE
Se compone de tres productos. Stego Watch es una herramienta de esteganografía que busca contenido oculto en archivos de imagen o audio digitales. Stego Analyst es un analizador de archivos de imagen y audio que se integra con Stego Watch para proporcionar un análisis más detallado de los archivos sospechosos y Stego Break es un descifrador de contraseñas diseñado para obtener la contraseña de un archivo que contiene esteganografía.
ILOOK INVESTIGATOR
Es una herramienta de análisis forense utilizada por miles de laboratorios de aplicación e investigadores de todo el mundo para la investigación de imágenes forenses creadas por diferentes utilidades de imágenes.
ENCASE
EnCase cuenta con una herramienta de análisis forense que permite a los investigadores gestionar fácilmente grandes volúmenes de pruebas informáticas y ver todos los archivos relevantes, incluidos los archivos «eliminados», la holgura del archivo y el espacio no asignado.
La solución automatiza eficazmente los procedimientos de investigación básicos, reemplazando procesos y herramientas arcaicos, que requieren mucho tiempo y costes.
En EnCase, los investigadores deben identificar y hacer coincidir el valor hash MD5 de cada archivo sospechoso. Deben importar o construir una biblioteca de conjuntos hash (en este caso, un software de esteganografía) con la función de biblioteca en EnCase. El hash identificará coincidencias de archivos stego. Además, los investigadores deben tener cuidado al crear conjuntos de hash para descubrir esteganografía, para prevenir falsos positivos. Por ejemplo, los investigadores deben utilizar conjuntos de hash seguros para filtrar archivos inofensivos de su investigación
CLASIFICACIÓN DE LOS SISTEMAS CRIPTOGRÁFICOS
La criptografía se divide en dos ramas principales:
Criptografía simétrica o de clave secreta. Lo que la gente asume que es la criptografía: cifrar y descifrar información usando la misma clave secreta. Por esta razón también se conocen como sistemas simétricos. La clave debe ser secreta y conocida tanto por el emisor como por el receptor, y únicamente por ellos. Este es un problema que no resulta tan sencillo de resolver. Para que estos sistemas funcionen correctamente se asume que previamente ambos interlocutores se han puesto de acuerdo en la clave a utilizar o que han hecho uso de alguna metodología de distribución de claves que ha hecho llegar la clave de forma segura a ambos interlocutores. Toda la criptografía desde la antigüedad hasta 1976 se basó exclusivamente en algoritmos simétricos. El cifrado simétrico todavía se utiliza ampliamente, especialmente para el cifrado de datos y la comprobación de la integridad de los mensajes.
Criptografía asimétrica o de clave pública. En 1976, Whitfield Diffie, Martin Hellman y Ralph Merkle introdujeron un tipo de cifrado totalmente diferente y revolucionario. En la criptografía de clave pública, cada usuario posee una pareja de claves: una privada y otra pública, por ello también se denominan sistemas asimétricos. En estos sistemas no es necesario un procedimiento de compartición de clave.
Los algoritmos asimétricos se utilizan para aplicaciones como el cifrado de datos, la firma digital y el acuerdo de claves.
A su vez, los algoritmos de cifrado simétrico se subdividen en dos grupos, cifrado en flujo y cifrado en bloque:
Los algoritmos de cifrado en flujo cifran de uno en uno los caracteres individuales. En los sistemas clásicos generalmente esta transformación se aplicaba sobre los caracteres del alfabeto en el que estaba escrito el mensaje, sin embargo hoy en día normalmente se aplica sobre dígitos binarios (bits), de un mensaje de texto claro, utilizando una transformación de cifrado que varía con el tiempo.EJEMPLOS DE CIFRADORES EN FLUJOLos cifradores en flujo se utilizan a menudo por su velocidad y simplicidad de implementación en hardware y en aplicaciones en las que el texto claro llega en cantidades de longitud desconocida, como una conexión inalámbrica segura o una llamada de teléfono. Se utilizan ampliamente en los protocolos y productos de seguridad actuales. Algunos ejemplos ampliamente usados son:
A5/1 es una familia de cifradores en flujo utilizados para cifrar comunicaciones GSM. Es el estándar europeo para los teléfonos móviles digitales. Se utiliza para cifrar el enlace del teléfono a la estacién base. El estándar A5/1 fue creado en 1987, pero sólo se publicó a finales de los años 90 después de que cayera ante el reversing. Los ataques aparecieron a principios de la década de 2000 y A5/1 fue roto finalmente de una manera que permite el descifrado real (no solo teórico) de las comunicaciones cifradas.
PKZIP es el algoritmo de cifrado incorporado en el programa de compresión de datos PKZIP.
RC4 es un cifrado en flujo de tamaño variable desarrollado en 1987 por Ron Rivest para RSA Data Security, Inc. RC4 fue usado en docenas de productos comerciales de criptografía, en el protocolo de cifrado WEP en redes WiFi, en el protocolo de cifrado de tráfico web SSL/TLS, etc. Hoy en día ya no se utiliza debido a muchos problemas de seguridad descubiertos a lo largo de los años. Ha sido reemplazado por RC6.
Content Scramble System (CSS) es un sistema utilizado para proteger las películas en discos DVD. Utiliza un cifrado en flujo, llamado CSS, para cifrar el contenido de las películas. El CSS fue diseñado en los años 80 cuando el cifrado exportable se restringía a claves de 40 bits. Como resultado, CSS cifra las películas usando una clave secreta de 40 bits. Además, el cifrado en flujo CSS es particularmente débil y puede ser roto en mucho menos tiempo que una búsqueda exhaustiva en las 240 claves.
Salsa20 y ChaCha son dos cifrados en flujo diseñados por Daniel J. Bernstein para su implementación eficiente en software. ChaCha20 fue seleccionado por Google para reemplazar a RC4 en TLS. También se utiliza en protocolos de comunicación como OpenSSH, IKE, IPsec y algunas VPNs.
Trivium fue desarrollado para ser rápido en hardware y razonablemente eficiente en software.
Es un cifrado en flujo que cifra los datos byte a byte. Se han publicado varios trabajos con ataques parciales o totales al algoritmo.
Por el contrario, los algoritmos de cifrado en bloque tienden a cifrar simultáneamente grupos de caracteres (bloques) de un mensaje de texto claro. En este tipo de cifrado, el texto claro se divide en bloques de igual longitud para ser cifrados bloque a bloque. Típicamente, se utiliza un tamaño de bloque de 64 o 128 bits. Normalmente, la longitud del texto claro original no será un múltiplo exacto del tamaño del bloque, lo que exige recurrir a esquemas de relleno: los bits restantes hasta completar el tamaño de bloque se rellenan (padding) con bits extra siguiendo algún tipo de convención
¿Y si la longitud del texto es múltiplo del tamaño de bloque? Entonces, no se rellena, ¿verdad? Pues no. En ese caso, se añade un bloque de relleno completo, con sus 16 bytes establecidos al valor 0×10. Para evitar incertidumbre, siempre hay relleno.
EJEMPLOS DE CIFRADORES EN BLOQUE
Data Encryption Standard (DES) fue desarrollado en la década de 1970. Aunque su corta longitud de clave, de 56 bits, lo hace demasiado inseguro para las aplicaciones actuales, ha sido muy influyente en el desarrollo de la criptografía moderna. El DES no es débil por sí mismo, sino por su clave corta, de tan solo 56 bits. Esta limitación condujo a utilizar variantes del algoritmo con claves más largas, como por ejemplo Triple DES (o 3DES), con una clave de 168 bits.
En 2001, DES fue sustituido por el algoritmo seleccionado como Advanced Encryption Standard (AES), también conocido por su nombre original Rijndael, con tres longitudes de clave diferentes: 128, 192 y 256 bits. Además de estos dos algoritmos, existen cientos de ellos. Entre los que se consideran seguros hoy y en el futuro previsible destacan: Camellia, Serpent, etc.
Por si no había quedado claro, estos algoritmos se caracterizan por:
Ser muy rápidos, pudiendo alcanzar velocidades de hasta 1 GB/s, dependiendo de la implementación en software y del
procesador del dispositivo.
Requerir claves cortas, por ejemplo, de 128 o 256 bits. Así que puedes encontrar el cifrado simétrico en aplicaciones que requieran alta velocidad de cifrado y claves cortas como, por ejemplo:
Herramientas de comunicación, como Whatsapp, Apple Messages o Zoom.
Herramientas de archivo y compresión.
Herramientas de cifrado de archivos.
Encryption File System (EFS) en Microsoft Windows proporciona cifrado a nivel de Sistema de archivos.
Cifrado de discos y particiones, como BitLocker en Windows o FileVault en Mac OS X.
Seguridad para las comunicaciones en redes de área local, como en el estándar IEEE 802.11i.
El nuevo estándar de seguridad WiFi, WPA3, utiliza AES con 256 bits de clave.
Protocolos de comunicaciones seguras, como el TLS utilizado por ejemplo en páginas web seguras con HTTPS.
Ransomware: obviamente, para cifrar lo archivos de un disco duro para exigir su rescate, nada como la criptografía simétrica.
PRINCIPIOS BÁSICOS
En la criptografía se han empleado habitualmente una serie de operaciones para realizar transformaciones en el texto y de esta forma cifrarlo para que fuera ininteligible para cualquier persona a la que no fuera dirigido el mensaje secreto. Dos de estos principios básicos son la sustitución y la transposición.
SUSTITUCIÓN
La sustitución consiste en establecer una correspondencia entre el alfabeto en el que está escrito el mensaje y otro alfabeto, que no tiene necesariamente que ser el mismo que el alfabeto original. De esta manera, se van sustituyendo los caracteres del mensaje original por el correspondiente asignado en el alfabeto de salida. Para descifrar el mensaje el receptor debe conocer cuál es la correspondencia y hacer la sustitución inversa para recuperar el texto original.
Un ejemplo de este tipo de cifrado es el famoso cifrado César.
Una de las debilidades de la sustitución es que la frecuencia de aparición de cada letra en el mensaje original se refleja en el criptograma. Esto lo hace débil ante un ataque de Análisis de frecuencias . Este tipo de ataque se basa en la frecuencia con la que aparecen los caracteres en los diferentes idiomas. De esta manera, conociendo las letras de mayor frecuencia del alfabeto utilizado se puede deducir la clave.
TRANSPOSICIÓN
La transposición consiste en barajar los símbolos del mensaje original y colocarlos en distinto orden con el objeto de hacer el mensaje ininteligible. En este caso los símbolos del criptograma son los mismos que los del mensaje original pero descolocados. Es necesario que el receptor conozca la transposición para recolocar los símbolos en el orden original y reconstruir el mensaje
La clave secreta es el número de letras en cada grupo y el orden en el que se colocan.
La escítala lacedemonia, que veremos en el siguiente apartado, es un sistema de cifrado por transposición.