CrYptografia en Whatsapp
No solo depende de los algoritmos, la llave sino en la confianza al cartero!!
eL PROBLEMA NO ES EL ALGORITMO Y SOLO LA LLAVE, SINO LA CONFIANZA EN EL CARTERO QUE PUEDE VER Y ACCEDER A LAS LLAVES
GRU
Cuando instalas WhatsApp en tu dispositivo, se genera una pareja de claves pública y privada, llamada Identity Key Pair, para usar con un algoritmo de Criptografía de Curvas Elípticas. A continuación, se genera una segunda pareja de claves, Signed Pre Key, firmada con la clave privada de la pareja anterior. Por último, se genera un lote de parejas de claves, One-Time Pre Keys, para su uso posterior, y se irán renovando a medida que se agoten.
Cuando te registras con el servidor de WhatsApp, además de tu información de contacto, le envías la parte pública de tu Identity Key, la parte pública de tu Signed Pre Key y las partes públicas de tu lote inicial de One-Time Pre Keys.
Importante: la parte privada de tus claves nunca abandona tu dispositivo y ni WhatsApp ni nadie tiene acceso a ellas (en principio).
Cuando le envías un mensaje a otro usuario de WhatsApp, se produce el siguiente proceso:
- Tu terminal solicita y el servidor de WhatsApp te envía la parte pública de Identity Key, Signed Pre Key y de la primera One-Time Pre Keys del otro usuario.
- Tu terminal acuerda con el del otro usuario un secreto maestro derivado a partir de todas estas claves públicas intercambiadas entre ambos. Para ello se utiliza el protocolo de acuerdo de claves ECDH. Esta clave maestra se utiliza para crear mediante un algoritmo de HKDF una Root Key y las Chain Keys para cifrar posteriormente los mensajes intercambiados con un algoritmo de clave secreta.
- Cuando al otro usuario le llegue tu primer mensaje, se repetirá el proceso: recibirá la información pública de tus claves, con esa información y la de sus propias claves regenerará el secreto maestro y, a partir del mismo, la Root Key y las Chain Keys. Finalmente, borrará la One-Time Pre Key utilizada en el proceso, ya que, como su nombre indica, estas One-Time Pre Keys se usan una sola vez. A partir de este momento, ya está todo listo para empezar a cifrar la información intercambiada.
Los mensajes y sus adjuntos se cifran mediante el algoritmo AES en modo CBC, con claves de 256 bits de longitud y HMAC-SHA256 para autenticación. Vamos, criptografía robusta donde la haya.
Estas claves son efímeras: se derivan de las Chain Keys, las cuales se actualizan tras cada nuevo mensaje a partir de su valor previo y de la Root Key. Para cifrar cada mensaje intercambiado se crea su correspondiente clave efímera y, una vez usada, ni se reutiliza ni puede reconstruirse. Proporcionan así lo que se conoce como secreto hacia adelante: el compromiso de una clave no compromete la seguridad de las claves usadas con anterioridad y no permite por tanto descifrar los mensajes anteriores.
Cómo protegerse de ataques de hombre en el medio
Aún puede quedar una duda en el aire: ¿y si el servidor de WhatsApp intenta engañarte haciéndote creer que sus propias claves públicas son las de tu interlocutor?
Imagina el siguiente escenario: tu terminal solicita la clave pública de otro usuario para iniciar todo el proceso anterior, pero el servidor de WhatsApp no te envía la clave de tu amigo, sino otra distinta, haciéndose pasar por tu amigo. Con tu amigo hace lo mismo: en lugar de enviarle tu clave pública, el servidor de WhatsApp le envía otra falsa, haciéndose pasar por ti. A partir de este momento, os hace creer a cada uno que él es el otro. Por consiguiente, podrá descifrar todas vuestras comunicaciones y volverlas a cifrar para que no sospechéis nada. Es lo que se conoce como un ataque de hombre en el medio. ¿Cómo protegerse ante este ataque?
WhatsApp te ofrece la opción de verificar las claves de los demás usuarios con los que te comunicas. Si tienes junto a ti a la otra persona, puedes escanear un código QR. Si no está físicamente a tu lado, podéis comparar un número de 60 dígitos.
Para verificar si vuestro chat está cifrado de extremo a extremo, abre el chat y toca el nombre del contacto para ir a la pantalla de información. Tocando “Cifrado” verás el código QR o los 60 dígitos.
El código QR contiene:
- Una versión.
- El identificador de usuario para ambas partes.
- La parte pública de Identity Key de ambas partes.
Cuando os escaneáis mutuamente el código QR, las claves se comparan para asegurar que lo que está en el código QR coincide con la clave de identidad tal y como se ha recuperado del servidor. Si escaneas el código QR y coincide, aparecerá un tic de color verde.
En cuanto al número de 60 dígitos, se calcula concatenando los dos hashes SHA512 de 30 dígitos para la Identity Key de cada usuario. Otra vez, criptografía de la buena.