Criptografía para la comunicación y autenticación con el implante
Introducción
Es deseable que la comunicación con el implante esté cifrada para evitar que pueda detectarse y/o analizarse, así como autenticada para identificar unívocamente a los agentes, de modo que unos no puedan hacerse pasar por otros. Esto último es importante para el caso en que alguien llegara a tomar control de alguno de nuestros implantes y su clave privada.
Criptografía simétrica
El cifrado simétrico es un método que nos permite encriptar y desencriptar un mensaje utilizando una sola clave secreta, que debe ser conocida tanto por (y solo por) el emisor y el receptor del mismo. En nuestro caso utilizaremos AES en modo Output Feedback (OFB) sin padding.
Implementación
Ejemplo de uso
Criptografía asimétrica
Este tipo de cifrado utiliza pares de claves, una clave pública (la cual puede ser conocida por terceros) y una clave privada (que debe ser mantenida en reserva por el propietario de las claves). En nuestro caso utilizaremos un criptosistema de curvas elípticas (ECC). Las propiedades del mismo nos permitirán, a partir del conocimiento de la propia clave privada y la clave pública de nuestro par, deducir una clave compartida que luego utilizaremos como clave simétrica en la comunicación. El protocolo que nos permitirá hacerlo está descripto en la siguiente sección.
Arquitectura
El cifrado entre agente y listener cuenta con dos capas:
La capa 1 es un cifrado simétrico con autenticación por listener, es decir, todos los agentes que se comuniquen con un listener determinado utilizaran la misma clave. Esto aún tiene la desventaja de que al tomar control de un agente, uno se haría de la clave y podría si quisiera impersonar a otros agentes. Su utilidad es mayormente ocultar todo tipo de formato propio de los protocolos que utilizaremos en capas superiores.
La capa 2 es un poco más compleja, también consiste de un cifrado simétrico con autenticación donde la clave no es global, sino que se negocia por cada agente de forma segura utilizando el protocolo Diffie-Hellman, esto como ya se mencionó, impide que el comprometimiento de un agente afecte al sistema entero. Para más detalles de la implementación ver la sección "Diffie-Hellman"
Intercambio de claves
Para realizar el intercambio de claves entre agente y listener utilizaremos un protocolo llamado "Diffie-Hellman". Este permite, a partir del intercambio de claves públicas de un criptosistema del tipo de "Curvas elípticas" (ECC), ponerse de acuerdo sobre una clave de criptografía simétrica.
El protocolo se describe a continuación:
Pros:
No es necesario compartir claves entre listeners (ni por supuesto, agentes).
Provee un canal cifrado y autenticado por agente.
La clave, además de cifrar, permite identificar unívocamente a cada agente
Cons:
No nos protege contra MITM. Para solucionarlo se puede hacer pinning de las claves públicas.
Implementación
Ejemplo de uso
Nota sobre curvas elípticas
Dado que el criptosistema utilizado para realizar el intercambio de claves es ECC, podemos aprovechar otras propiedades del mismo para más adelante implementar funciones que pueden resultar interesantes. Una de ellas es la derivación jerárquica (en árbol) de claves (del estilo que se utiliza en criptomonedas como Bitcoin). Esta nos permitiría, por ejemplo, que un agente pueda propagarse por una red produciendo otros agentes con claves hijas, de modo que, sin necesidad de hacer pinning de las mismas podamos en el listener determinar que están relacionadas con este agente "padre" y autenticarlos automáticamente. Incluso el comprometimiento de una de estas claves no implica el de su padre ni sus hermanas, lo cual también incrementa la dificultad de hacer análisis sobre nuestras actividades.
Última actualización