211service.com
Tomando huellas digitales de sus archivos
A tres criptógrafos de la Universidad de Stanford se les ocurrió recientemente una solución inteligente al persistente problema del robo de identidad en Internet. Los hackers astutos en Rusia, China y otros países envían montones de mensajes de correo electrónico que parecen provenir de alguna institución financiera como Citibank o Paypal. Millones de consumidores reciben estos mensajes, que tienen enlaces HTML incrustados en ellos que llevan al receptor desprevenido a sitios web similares que se encuentran en lugares lejanos. Se le pedirá que ingrese un nombre de usuario y contraseña y luego el pirata informático tiene las claves de su cuenta bancaria.
Pero los buenos nombres de usuario y las contraseñas que se escriben en sitios web malos no son la única amenaza de este tipo a la que se enfrentan los consumidores. Un problema potencialmente mayor es que muchas personas usan la misma combinación de nombre de usuario y contraseña en varios sitios. Esto facilita la memorización, pero significa que un operador de sitio web sin escrúpulos puede tomar una lista de nombres de usuario y contraseñas de, digamos, un sitio de sorteos de Internet y usarla para intentar ingresar a cuentas bancarias en línea.
De modo que los criptógrafos de Stanford Blake Ross, Dan Boneh y John Mitchell han diseñado un complemento inteligente para Internet Explorer que resuelve este problema al codificar lo que escribe en el campo de contraseña para que cada sitio web vea una contraseña diferente que se basa tanto en lo que escribe. y en el dominio del propio sitio web.
Ahora, mucha gente usa alguna variante de esta estrategia. Su contraseña de Hotmail podría ser nosmis-hotmail mientras que Yahoo! ¡La contraseña personal es nosmis-Yahoo! Pero cualquier estrategia como esta es bastante simple de descifrar. El método de codificación de contraseñas que ha ideado el trío de Stanford se basa en una función matemática llamada hasha criptográfica, una especie de función unidireccional que transforma lo que escribe el usuario en un revoltijo de números y letras de una manera que no se puede revertir. Debido a que el sistema de Stanford calcula el hash criptográfico tanto del dominio de los sitios web como de la contraseña de los usuarios, el hacker obtiene contraseñas diferentes a las legítimas. (Hacer clic aquí para encontrar detalles sobre esta inteligente solución).
Una empresa que utiliza hashes criptográficos de forma muy pública es Yahoo! El año pasado, Yahoo! rediseñó el proceso de inicio de sesión en su sitio web para que sea a prueba de olfateo. La forma estándar de hacer esto es usar cifrado. Pero el cifrado puede ser lento, especialmente cuando se ejecuta uno de los sitios más populares de Internet.
Entonces, ¿qué Yahoo! En cambio, lo que hizo fue modificar su página de inicio de sesión para usar un sistema llamado desafío-respuesta basado en un hash criptográfico. Cuando intenta iniciar sesión, el servidor de Yahoo descarga en su navegador una función hash criptográfica escrita en JavaScript. Junto con esta función hay un desafío: una secuencia corta de letras y números. Cuando escribe su contraseña en la pantalla de inicio de sesión, su navegador toma su contraseña, agrega estos caracteres proporcionados por Yahoo !, y calcula el hash criptográfico de la cadena resultante. Luego, el navegador envía el valor resultante a Yahoo !, sin necesidad de cifrado. Incluso si se encuentra en un cibercafé y los piratas informáticos belgas detectan su tráfico web, no hay forma de que los malos tomen el valor hash resultante y obtengan su contraseña original.
Este inteligente sistema de desafío-respuesta también se encuentra en la base del sistema Mobil Speedpass: es lo que hace que la etiqueta de identificación por radiofrecuencia (RFID) Speedpass sea tan difícil de clonar. Otros sistemas RFID no utilizan desafío-respuesta, lo que hace que atacarlos sea relativamente fácil.
Pero, ¿qué es esta función hash criptográfica, de todos modos?
El hachís increíblemente útil
Las funciones de hash criptográficas son uno de los pilares fundamentales de la economía digital actual. Sin embargo, siguen siendo en muchos sentidos un misterio tanto para los criptógrafos que los crean como para el público en general que los usa todos los días.
Las funciones hash a veces se denominan funciones de huellas dactilares porque se pueden usar para crear una huella dactilar única de un archivo digital. Las huellas digitales suelen ser números de 128 o 160 bits que se muestran como una secuencia de dígitos hexadecimales. La huella digital de mi nombre usando el sistema MD5, por ejemplo, es c55bbe0f3ba258f5b1cb6d5b62b0b360. Las funciones hash están diseñadas para que, al menos en teoría, no haya dos archivos que tengan el mismo valor hash.
Para que pueda hacerse una idea de cómo funcionan estas funciones de huellas digitales, hemos incorporado una calculadora MD5 basada en JavaScript a continuación. Simplemente escriba algo de texto y podrá ver el hash MD5. Observe cómo cambia por completo cada vez que agrega, elimina o cambia una letra. La forma en que cambia la huella dactilar es impredecible; de hecho, si pudiéramos predecir cómo cambia, las huellas dactilares de archivo no serían muy útiles.
Ingrese su texto a continuación:El MD5 es:
La mayoría de las funciones hash que se utilizan hoy en día se basan en una técnica desarrollada por el profesor del MIT Ron Rivest en la década de 1980. (Rivest es probablemente más conocido por ser la R en el algoritmo de cifrado RSA, el algoritmo de cifrado de clave pública que está integrado en prácticamente todos los navegadores web). En ese momento, Rivest y otros matemáticos estaban trabajando en los detalles de las operaciones criptográficas básicas que ahora démoslo por sentado. Las funciones hash se concibieron como una especie de sistema de compresión criptográfica, una forma de tomar un archivo grande y convertirlo en una cadena corta de letras y números.
La idea era utilizar estas huellas digitales como una especie de sustituto de los propios archivos. En lugar de firmar digitalmente todo el archivo, razonaron Rivest y otros, podría firmar digitalmente el hash. Debido a que la criptografía de clave pública implica una gran cantidad de matemáticas de trabajo pesado, las funciones hash hacen que firmar un archivo extremadamente largo sea casi tan rápido como firmar un archivo corto.
Una de las cosas más básicas que puede hacer con una función hash es averiguar si un archivo ha cambiado: simplemente calcule el hash de un archivo y anótelo. Más tarde, vuelve a calcular el hash. Si el hash no ha cambiado, entonces las probabilidades de que el archivo tampoco haya cambiado son abrumadoras.
Por ejemplo, digamos que mantiene las finanzas de su pequeña empresa usando QuickBooks y quiere irse de vacaciones por unos días: las personas necesitan usar su computadora pero usted quiere asegurarse de que nadie modifique los datos de QuickBooks. Una cosa simple que puede hacer es calcular el hash criptográfico del archivo antes de salir y escribir el número en una tarjeta de índice. Cuando regrese de las vacaciones, vuelva a calcular el hash. Si los dos valores no coinciden, sabrá que el archivo ha sido manipulado.
Por supuesto, no es necesario que se detenga con un solo archivo. Puede calcular el hash criptográfico de cada archivo en su computadora y ponerlos todos en un nuevo archivo llamado hashes.txt. Luego, podría calcular el hash de hashes.txt y escribir esta huella digital en su tarjeta de notas. Repita el proceso cuando regrese de las vacaciones y tendrá una forma rápida de saber si algún archivo en su computadora ha cambiado. (No tendrá forma de saber qué archivo ha cambiado, pero ese es un problema diferente).
Esta idea de calcular el hash de un hash es la base de un sistema de detección de intrusiones llamado Tripwire que el profesor de informática de la Universidad de Purdue, Gene Spafford, y su estudiante graduado Gene Kim, inventaron a principios de la década de 1990. (Spafford y yo somos coautores de cinco libros sobre informática.) Hoy en día, muchos programas diferentes utilizan este enfoque Tripwire para asegurar la integridad de los archivos y bases de datos informáticos.
El cálculo de hashes de hashes también es la base de un servicio de marca de tiempo seguro inventado por Stuart Haber y Scott Stornetta mientras ambos estaban en Bellcore en 1990. El servicio, llamado Surety, permite generar una prueba criptográficamente segura e infalsificable de que un documento determinado , fotografía u otro archivo existía en un momento en particular en una fecha en particular y que no se ha cambiado desde entonces.
La técnica Surety funciona calculando un árbol hash basado en los códigos hash de cada documento que se marca con la hora. A continuación, la raíz del árbol se publica en una ubicación conocida; podría, por ejemplo, imprimirse en un anuncio clasificado en el New York Times . Puede probar que su documento existía el día en cuestión mostrando que la huella digital de su documento era necesaria para generar la huella digital de las huellas digitales que aparecieron en el periódico.
Desde entonces, otras empresas e incluso el Servicio Postal de EE. UU. Han creado su propio servicio de sello de tiempo electrónico. Pero todos estos sistemas dependen de una organización que actúa como un tercero de confianza que, de hecho, firma su documento con su clave privada. El problema con este enfoque es que el tercero debe ser completamente confiable: si ese tercero decide crear una firma con la fecha incorrecta, o si algún pirata informático logra robar la clave privada del tercero, no hay forma de hacerlo. distinguir una firma fraudulenta de una válida. También es posible crear firmas de fianza fraudulentas, por supuesto, pero tendría que retroceder en el tiempo y cambiar lo que se imprimió en The New York Times , o viajar por todo el mundo, encontrar todas las copias que se imprimieron y cambiar las huellas dactilares antiguas por la nueva.
Cómo funcionan las funciones hash
Por eso las funciones hash son útiles. Ahora, veamos cómo se ven realmente.
Entre las funciones hash más utilizadas en la actualidad se encuentran las llamadas MD5 (para Message Digest # 5). MD5 produce un hash que tiene una longitud de 128 bits y que normalmente se escribe como una secuencia de 32 dígitos hexadecimales (base 16). Si tomara mi nombre y lo procesara con MD5, obtendría esta cadena aparentemente aleatoria:
c55bbe0f3ba258f5b1cb6d5b62b0b360
O, para decirlo con más formalidad matemática:
MD5 (Simson Garfinkel) = c55bbe0f3ba258f5b1cb6d5b62b0b360
Cada uno de esos caracteres hexadecimales representa 4 bits; el valor MD5 de mi nombre es en realidad:
1100010101011011101111100000111100111011101
0001001011000111101011011000111001011011011
010101101101100010101100001011001101100000
La mayoría de la gente trabaja con la representación hexadecimal porque es bastante fácil buscar dos hashes y saber si son iguales o diferentes.
MD5 funciona dividiendo el archivo en muchos trozos pequeños y luego tomando cada uno de esos trozos y realizando cientos de operaciones matemáticas que mezclan, invierten, transponen y procesan los bits en un lío irreconocible. La palabra irreconocible en esta descripción es clave. El requisito fundamental de una buena función hash es que debería ser imposible predecir la huella digital de un archivo sin hacer el esfuerzo de calcular esa huella digital; no debe haber atajos. Si lo hubiera, es posible que pueda ejecutar la función hash al revés y crear un archivo que tenga un hash específico, por ejemplo, el hash de otro archivo. De hecho, toda la seguridad de las funciones hash se desmorona por completo si es posible generar dos archivos que tengan el mismo hash.
La belleza de la función hash es que incluso una pequeña modificación en la entrada produce un cambio dramático en la salida. Matemáticamente, las funciones están diseñadas para que cada bit de la salida tenga una probabilidad del 50 por ciento de cambiar por cada bit modificado en la entrada.
Veamos otro hash MD5, este de una representación ligeramente diferente de mi nombre:
MD5 (Simson L. Garfinkel) = df876e8e6f548d5be698fab7f06dd278
La simple adición de L. produce un hachís completamente diferente. Si compara los dos hashes bit a bit, encontrará que 63 de las 128 posiciones han cambiado de 0 a 1 o 1 a 0, y las otras 65 no han cambiado.
Desafortunadamente, toda la teoría de las funciones hash criptográficas tiene un gran problema. El uso de estas funciones requiere que no se produzcan las denominadas colisiones. Ya sea de forma accidental o intencionada, no debe haber dos archivos que tengan la misma huella digital criptográfica. Y resulta que este es un requisito imposible.
La razón es bastante simple. Las huellas dactilares de los archivos tienen un tamaño fijo, lo que significa que hay un número finito de posibles huellas dactilares. Los archivos, por otro lado, pueden ser de cualquier tamaño. Por lo tanto, hay más archivos posibles que huellas digitales, por lo que debe haber al menos una huella digital que sea la huella digital de varios archivos. El término matemático para esto es el principio de casillero. De hecho, incluso si se limita a archivos de solo nueve caracteres, todavía hay 256 veces la cantidad de archivos posibles que la cantidad de huellas dactilares posibles.
La razón por la que el principio del casillero no hace que las funciones hash sean completamente inútiles es que hay una cantidad asombrosa de posibles huellas dactilares mucho más, de hecho, que la cantidad de archivos en el planeta. (Con MD5 hay 2128 posibles huellas dactilares. Ahora, el número total de discos duros de computadora que se han fabricado alguna vez es solo alrededor de 229. Si cada disco duro tuviera un millón de archivos únicos, una sobreestimación total, todavía habría solo 249 archivos individuales. Eso es mucho. , número mucho, mucho menor que 2128.)
La controversia SHA-1
Para propósitos de tutoriales, he usado la función hash MD5. Pero en estos días MD5 se considera aprobar en cambio, la mayor parte del mundo se está moviendo hacia el algoritmo de hash seguro del gobierno de EE. UU., conocido como SHA-1, un estándar adoptado por los Institutos Nacionales de Estándares y Tecnología (NIST) a principios de la década de 1990.
Hoy en día, SHA-1 es un algoritmo muy respetado, pero tiene una historia problemática. En 1993, el gobierno de los EE. UU. Estaba tratando de que la industria adoptara el llamado sistema de cifrado secreto Clipper Chipa diseñado por la Agencia de Seguridad Nacional. Durante las llamadas guerras criptográficas que asolaron a Clipper, el NIST propuso que el gobierno de los EE. UU. Adoptara su propio algoritmo de hash seguro como parte de los estándares federales de procesamiento de información. Por razones técnicas, las funciones hash deberían tener el doble de bits que los algoritmos de cifrado con los que trabajan. Clipper era un algoritmo de cifrado de 80 bits, por lo que el estándar fue diseñado para producir una huella digital de 160 bits.
Uno podría pensar que el estándar del gobierno, con su huella digital de 160 bits, sería más seguro que el MD5 de 128 bits. Pero al igual que el propio Clipper, SHA fue diseñado por la Agencia de Seguridad Nacional y tanto el NIST como la NSA se negaron a explicar los principios que se utilizaron en su diseño. Algunas personas se preguntaron si la NSA podría haber escondido algún tipo de puerta trasera dentro del algoritmo para que la agencia pudiera generar colisiones bajo demanda. Tal puerta trasera podría usarse, por ejemplo, para producir firma digital falsa, algo que la Agencia Central de Inteligencia podría encontrar útil. Una firma digital falsa podría usarse, por ejemplo, para firmar una orden electrónica que le da acceso a un espía estadounidense a una base de datos en un país extranjero.
Muchos criptógrafos y otros académicos analizaron el algoritmo SHA y no pudieron encontrar nada malo en él. El 11 de mayo de 1993, NIST proclamó a SHA como el algoritmo de hash seguro de la nación. Pero la tinta estaba apenas seca en este decreto cuando NIST anunció que había cometido un error. Por razones que no se revelarían en ese momento, NIST publicó una versión modificada del algoritmo Secure Hash, el algoritmo que ahora llamamos SHA-1.
Los teóricos de la conspiración en la comunidad de la criptografía (y hay muchos) tuvieron un día de campo. ¿Era SHA tan poderoso que la NSA había decidido que tenía que ser tonto? ¿O quizás la NSA había colocado una puerta trasera en SHA y alguien de NIST se había enterado? ¿Eran ambos algoritmos igualmente seguros y los criptógrafos de la NSA solo estaban jugando con las mentes de las personas?
En agosto de 1998, el mundo aprendió más o menos la respuesta al misterio de SHA vs. SHA-1. Florent Chabaud y Antoine Joux, dos criptógrafos franceses, idearon un ataque teórico contra la primera versión del ataque SHAan contra el cual SHA-1 resultó ser seguro. Es casi seguro que la gente de la NSA conocía este ataque y propuso SHA-1 como contramedida. Lo que es interesante aquí es que los criptógrafos de la NSA probablemente no sabían sobre el ataque cuando se propuso SHA por primera vez en 1993, lo que significa que la agencia criptográfica más importante del mundo estaba solo cinco años por delante de los criptógrafos en el mundo académico.
Hoy en día, las funciones hash también se usan comúnmente para generar números aleatorios repetibles pero impredecibles, para convertir contraseñas escritas en valores adecuados para usar como claves de cifrado. En lugar de almacenar contraseñas directamente, muchos sistemas informáticos almacenan el hash de una contraseña. Esto evita que alguien que entre en una computadora aprenda la contraseña de todos.
Las funciones hash se han propuesto como una forma de combatir el spam y como base para los sistemas de efectivo digital. El matemático Peter Wayner publicó un libro titulado Bases de datos translúcidas hace unos años, en el que mostró cómo las funciones hash podrían usarse para almacenar información en una base de datos de una manera que está protegida por la organización que ejecuta la base de datos. Un departamento de admisiones de la universidad, por ejemplo, podría almacenar los números de seguro social de los estudiantes en la base de datos para que estos números aún se puedan usar como identificadores en las solicitudes, pero para que nadie en la oficina de admisiones pueda sentarse en una terminal y obtener una lista de estudiantes. y sus números. Sin embargo, hasta ahora, ninguno de esos enfoques realmente ha despegado.
Con todo, los hashes criptográficos son una de las técnicas matemáticas más interesantes y útiles que los criptógrafos han ideado durante los últimos 20 años y todavía les están encontrando nuevos usos todo el tiempo.