Es fundamental que, para ser un buen investigador OSINT de fuentes abiertas, tengamos al menos un conocimiento básico de criptografía: qué es, cómo funciona, qué tipos hay…
Durante nuestras actividades de investigación las utilizaremos a menudo, como por ejemplo, en comunicaciones por email o durante la investigación de credenciales filtradas. Prácticamente en todos los casos, cuando encontremos contraseñas dentro de esas credenciales, estarán encriptadas o hasheadas (tranquilidad, veremos qué significa eso).
Veamos cómo funciona todo esto y cómo se podrían, teóricamente, romper esas contraseñas y averiguar qué hay tras la encriptación.
Introducción a la criptografía
Aquí hablamos de un campo muy amplio, técnico y matemático, así que empecemos por lo fundamental. ¿Para qué necesitamos la criptografía?
Para hacer las comunicaciones seguras.
Sin encriptación, la comunicación por Internet sería completamente vulnerable, de modo que a cualquiera le resultaría muy fácil ver los datos que envías y recibes, los lugares que visitas, etc, cosa poco recomendable en la mayoría de casos.
Casi todos esos datos que envías y recibes están encriptados actualmente y, por eso, terceras personas no pueden verlas «en texto plano».
Eso significa que, si se interceptan mensajes, estos no se entienden y, con una encriptación fuerte, es muy difícil romper ese cifrado.
Tipos básicos de criptografía
En general, podemos decir que al nivel más básico hay dos tipos:
- Simétrica.
- Asimétrica.
Qué es la criptografía simétrica
Imaginemos que te quiero enviar un mensaje, pero no quiero hacerlo en texto plano, porque cualquiera podría leerlo.
Así que yo tengo una receta para que el contenido del mensaje no se entienda (eso se llama encriptación).
Tú tienes la misma receta, la misma manera de hacer y deshacer la encriptación, de manera que puedes usarla para aplicarla a mi mensaje que no se entiende y descifrarlo.
La «receta», en criptografía, se llama clave o llave.
En criptografía simétrica, ambos tenemos la misma clave para encriptar y desencriptar mensajes. Si la conocemos, la podemos aplicar a todo mensaje cifrado d esa forma y averiguar qué pone este.
Qué es la criptografía asimétrica
La criptografía asimétrica es distinta, de modo que las claves de encriptación y desencriptación son diferentes.
La de encriptación solo sirve para encriptar, pero no para descifrar, y viceversa. Así, cada una de las partes tendrá dos claves.
- La clave de encriptación se llama clave pública.
- La clave de desencriptación se llama clave privada. Y esa la debes proteger como sea.
¿Por qué se usa la criptografía asimétrica?
Porque es más segura. Solo el poseedor de la clave privada puede desencriptar, porque la pública solo sirve para cifrar el mensaje.
Todo esto se entiende mucho mejor con un ejemplo:
- Yo quiero hablar contigo, pero quiero hacerlo de manera segura. Por eso, no te puedo dar una clave simétrica que sirva para encriptar y desencriptar, pero puedo hacer otra cosa.
- Te doy mi clave pública.
- Usándola, tú puedes encriptar tu mensaje (que es para lo que sirve) y me lo envías.
- Una vez aquí, yo puedo desencriptar el mensaje que me has enviado encriptado con mi clave pública.
- Si te quiero contestar, uso tu clave pública para encriptar mi respuesta, y tú puedes usar tu clave privada para descifrarlo y saber qué dice.
Así, mientras que si alguien conoce nuestra clave en una encriptación simétrica puede leer nuestros mensajes (ya que sirve para descifrar lo que ponen), cuando se trata de encriptación asimétrica, esa tercera persona puede conocer nuestras claves públicas, pero eso no le sirve de nada para espiarnos, ya que esas claves solo sirven para encriptar, pero no para descifrar.
Eso sí, la clave privada de cada uno debe ser mantenida en secreto y más vale que nadie la consiga, porque entonces sí sabrá lo que dicen los mensajes que te envían.
Y así, de esa manera asimétrica e ingeniosa es como transcurre nuestra conversación de manera privada.
Ahora, veamos otro concepto de criptografía que encontrarás a menudo en tus investigaciones OSINT, el hash. Especialmente, en lo que se refiere a contraseñas hasheadas de filtraciones de datos a la web oscura, por ejemplo.
¿Qué es un hash?
Los hashes son cadenas largas de letras y números generados por algoritmos de hashing. Estos cogen texto plano que puedes leer y lo convierten en un hash indescifrable.
Lo importante a comprender sobre los hashes es que no son reversibles. No hay manera de decodificar o desencriptar un hash.

Algoritmos de hashing populares son MD5 (Message Digest 5, creado por Ronald Rivest en los 90) y SHA (Secure Hash Algorithm).
La palabra hello se convierte en 5d41402abc4b2a76b9719d911017c592 al pasarla por el algoritmo MD5 de hashing.
¿Qué es una función hash?
Son diferentes de la encriptación. ¿En qué?
- No hay clave.
- Está diseñada para ser imposible (o muy difícil) llegar desde el output hasta el input inicial antes de aplicar la función.
El resultado de una función hash son, normalmente, bytes en crudo, que son codificados, p.ej. en base64 o hexadecimal (enseguida veremos qué es esto de codificar). Decodificar un hash no es útil en realidad, porque no llegas al input inicial de todos modos.
Para qué se usan los hashes
Los usos más populares son:
- Identificación de archivos.
- Almacenamiento de datos sensibles, como contraseñas.
Es importante comprender que no puedes encriptar las contraseñas en tu base de datos, porque la encriptación requiere una clave y, quien tenga dicha clave, puede desencriptar todo y conocer cada contraseña.
Ahí es donde entra el hashing para hacer este proceso mucho más seguro. No hay encriptación como la que hemos visto anteriormente para proteger esa información sensible. En vez de guardar la contraseña, guardas el hash de la contraseña.
Cuando creas una cuenta en una web, por ejemplo, tu contraseña es convertida en un hash y ese hash es lo que se guarda en la base de datos del servidor, no lo que hayas puesto en texto plano.
Eso se hace por seguridad, si alguien entra en la base de datos, podría leer las contraseñas de todos los usuarios con cuenta en esa web, por ejemplo. Sin embargo, el hacker o fisgón de turno solo verá hashes indescifrables que no permiten saber tu contraseña (más o menos, ahora veremos cómo se puede llegar a ella, aunque el hash no se pueda desencriptar).
Así, cuando te identificas en un sitio, la contraseña se convierte en hash, el servidor lo compara con el hash almacenado y, si coincide, te dejará pasar, porque la contraseña que has dado es correcta.
Es decir, que si tu contraseña es 1234 (una de las más populares aún porque no hemos aprendido nada), en la base de datos no está escrito 1234, sino tu hash. De ese modo, la web convierte el 1234 que pones en el navegador, lo convierte en hash y compara con el hash que ya haya en la base de datos.
Cómo se protegen archivos con hashes y por qué
Los hashes MD5 también se usan para asegurar la integridad de archivos. Como MD5 siempre produce el mismo output partiendo de un mismo input, puede usarse para comprobar el hash del archivo fuente y compararlo con el del archivo destino para ver si son el mismo y, por tanto, ese archivo está intacto y no se ha modificado.
La utilidad de esto en ciberseguridad es clara.
Imagina que yo he hecho un programa de comunicación seguro y tú te lo quieres descargar para que hablemos de manera privada. Lo que yo hago es asegurar la integridad de mi descarga con un hash. Cuando tú descargues el archivo, puedes comparar el hash del mismo con el hash que yo digo que es el correcto.
Si no coinciden, no es el programa verdadero que yo he creado.
Es posible que alguien lo haya alterado y puesto una versión modificada para descargar en otro lado que, por ejemplo, permita espiarnos mientras lo usamos, tenga alguna clase de malware o haya metido algo que aproveche para minar criptos.
No es raro en Internet ver esos sitios no oficiales de software popular que permiten descargarlo de fuentes no oficiales. Confiar en esos programas y fuentes es la receta para el desastre y una manera de verificar si lo que te bajas es correcto, es mediante esos hashes.
Hay más algoritmos de hashing, pero lo dejamos aquí porque esta es una introducción muy básica.
La diferencia entre codificar y encriptar
Como he comentado, en muchas ocasiones el hash está codificado. A veces también, te encuentras cadenas de texto que están codificadas, pero no encriptadas. Es importante conocer la diferencia.
Digamos que tienes un archivo encriptado, en ese caso, la única manera de descifrarlo es con la clave, ya sea simétrica o asimétrica, como hemos visto.
Sin embargo, los datos codificados pueden ser decodificados inmediatamente, sin claves.
Por tanto, la codificación no es una forma de encriptación, es solo una manera de representar datos. Que los hashes estén codificados y los descondifiquemos no me ayuda especialmente, porque sigo teniendo delante de mí el hash encriptado que me mira diciendo que (seguramente) no voy a conseguir saber lo que pone.
Una codificación popular es Base64. Así es la pinta que tiene la frase «hi there» codificada en Base 64: aGkgdGhlcmU=
Hay multitud de webs para decodificar en sus diversas formas, así como herramientas en la terminal para hacerlo, pero volvamos a los hashes, que es lo más interesante para nosotros.
Cómo se averiguan las contraseñas hasheadas
Ahora, estoy diciendo que algo hasheado es casi imposible de averiguar y, sin embargo, los hackers pueden averiguar contraseñas hassheadas, ¿cómo es posible?
Hora de hablar de las tablas arco iris, que emparejan texto plano con hashes, de manera que puedes buscar un hash que tengas en la tabla rápidamente para ver qué contraseña corresponde.
Es decir, que yo no puedo saber qué dice, pero sí puedo hashear millones de palabras o contraseñas comunes, guardarme esa llamada tabla arco iris que contiene tanto el hash, como la clave en texto plano legible que corresponde a cada hash, y luego comparar el hash de las contraseñas obtenidas con el de mi tabla. Cuando encuentro una coincidencia, y el hash de la contraseña obtenida está en mi tabla arco iris, puedo mirar a qué palabra descifrada corresponde dicho hash y conocer tu clave.
Así, no necesito descifrar el hash.
Webs como crackstation usan enormes tablas de este tipo para quebrar contraseñas sin necesitar sales.
¿Y qué es eso de las sales?
Protegiéndose contra las tablas arco iris
Para conseguir evitar que nos averigüen contraseñas con el método de comparar hashes, añadimos lo que se llama «sal» a las contraseñas.
La sal se genera aleatoriamente, se almacena en la base de datos y es única para cada usuario. En teoría se puede usar la misma sal para todos los usuarios, pero eso implica que dos contraseñas iguales seguirán teniendo el mismo hash.
La sal se añade al principio o al final de la contraseña antes de aplicar el hash, eso significa que habrá un hash diferente para cada contraseña, aunque sean la misma.
Funciones hash como bcrypt o sha512crypt lo hacen automáticamente y las sales no necesitan mantenerse privadas.
Descifrando contraseñas con hash y sal
Las tablas arco iris están muy bien cuando no hay sal, pero, ¿y si la hay?
En ese caso, no puedes «desencriptar» así que compruebas un enorme número de inputs, añadiendo sal si la hay y la comparas con el hash objetivo. Una vez encuentras una coincidencia, sabes la contraseña. Así actúan herramientas como Hashcat o John the Ripper.
Este es un proceso bastante intensivo y está fuera de la OSINT reventar contraseñas de esta manera, pero es importante saber qué pueden hacer los adversarios con fuentes de datos filtradas, incluyendo contraseñas hasheadas, si por ejemplo trabajamos para un cliente con credenciales que han sido robadas.
¿Qué es una colisión hash?
Como curiosidad, una colisión hash se produce cuando 2 inputs diferentes dan como resultado el mismo output.
Las funciones hash están diseñadas para evitar esto en la medida de lo posible, pero no es inevitable.
Efecto encasillado (pigeonhole): como hay más outputs que posibles inputs (los primeros tienen un número fijo), algunos inputs dan como resultado el mismo output.
MD5 y SHA1 han sido atacados y convertidos en técnicamente inseguros al manufacturar colisiones hash, aunque ningún ataque ha dado como resultado una colisión en ambos algoritmos al mismo tiempo.
Ahora, ya te dediques a la OSINT o a la ciberseguridad en general, ya tienes una idea fundamental de qué significa todo eso tan raro y matemático con lo que te vas a topar en tu día a día.