Conceptos de criptografía
Definiciones
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.
