En el post anterior vimos los conceptos necesarios que hay que tener para empezar a proteger nuestras aplicaciones web (ataque, vulnerabilidad, etc) y las características de la seguridad informática. Centrándonos en la confidencialidad e integridad de los datos, ¿Qué podemos hacer para evitar que terceros lean libremente la información que viaja a través de la red y determinar que no fue alterada? Para estas y otras cosas más, usamos la criptografía.

La comunicación 

Antes de empezar a hablar de la encriptación, tenemos que tener un par de conceptos claros para entender lo que se viene más adelante. 

Cuando hablamos de comunicación en lo que es software, nos referimos componentes de nuestras aplicaciones o servidores intercambiando mensajes.  Un ejemplo puede ser un POST por HTTP que le hacemos a un servidor para dar de alta un recurso. Cuando este termina, nos envía un response por HTTP, el cual también es un mensaje. 

Dentro de lo que es la comunicación, reconocemos diferentes actores y elementos:

  • Mensaje: El mensaje es lo que se desea transmitir en la comunicación, está escrito en un código que el emisor y receptor deberían entender (en el caso de que noestaríamos teniendo una comunicación nula o poco efectiva) 
  • Emisor: Es quien escribe y envía el mensaje. Puede ser quien inicia la comunicación o responder otro mensaje que haya recibido previamente. 
  • Receptor: El receptor es el actor a quien está destinado el mensaje. Al recibirlo, la comunicación puede terminar o este actor puede responder lo recibido (pasando a ser emisor). 
  • Canal: El canal es el medio entre el emisor y receptor por el que pasa el mensaje 

¿Qué es la criptografía? 

La criptografía es un conjunto de algoritmos y conceptos cuyo objetivo es la protección de la integridad y confidencialidad de los datos por medio de la llamada encriptación de los datos. 

Esta técnica consiste en alterar los mensajes de una manera que no puedan ser leídos por cualquiera. Para leerlos, necesitamos tener claves otorgadas al iniciar la comunicación que permitan descifrar ese mensaje y generar una respuesta que también estará cifrada. 

La encriptación tiene 3 tipos: 

  • Clave simétrica 
  • Clave asimétrica 
  • Híbrida 

Encriptación de clave simétrica 

En este tipo de encriptación ambas partes usan una única clave para cifrar y descifrar los mensajes, por lo que se necesita que sea muy compleja, dado que si alguien la obtiene puede leer y crear mensajes en ese entorno. 

Podemos usar esta encriptación en casos donde intervienen grandes volúmenes de datos en nuestra comunicación, ya que mejora la performance. Sin embargo, la clave debe viajar por el medio para ser conocida por el emisor y receptor, por lo que si es escuchada o interceptada, se pierde toda la gracia de la comunicación encriptada (además de que se pierde la confidencialidad de los datos). 

Algunos ejemplos de encriptación simétrica son: 

  • Blowfish (Drop-in replacement for DES or IDEA) 
  • RC6 (Rivest Cipher 6) 

Encriptación de clave asimétrica 

En la encriptación de clave asimétrica, en cambio, encontramos 2 claves diferentes, una pública y la otra privada, que tienen los emisores y receptores. 

La clave privada, en el lado del receptor, se usa para desencriptar los mensajes que el emisor encripto con la pública.   

Un ejemplo de comunicación es: 

  1. El emisor encripta el mensaje con la clave pública del receptor 
  1. Se envía el mensaje al receptor 
  1. El  receptor desencripta el mensaje con su clave privada 

Otro uso de la clave privada es la firma digital, que se encarga de asegurar que el mensaje fue efectivamente escrito por el emisor y no por un impostor. Estos serían los pasos que ocurren al firmar un mensaje: 

  1. El emisor firma el mensaje con su clave privada 
  1. El receptor recibe el mensaje 
  1. Con la clave pública del emisor, el receptor verifica que el mensaje no fue escrito por un impostor  

La clave pública, como se mencionó en los puntos anterioresencripta el mensaje destinado al receptor y verifica que la firma digital sea del emisor y no de cualquiera. 

Teniendo todo esto en cuenta, es necesario que ambas claves se correspondan, sino, los mensajes no podrán ser escritos y leídos correctamente entre las partes. 

Este tipo de encriptación provee una seguridad más robusta que los algoritmos de clave simétrica. Sin embargo, es más costosa debido a que se deben realizar más operaciones por la cantidad de claves.  

Algunos algoritmos de clave asimétrica son: 

  • RSA (Rivest, Shamir y Adleman) 
  • DSA (Digital Signature Algorithm) 
  • Diffie-Hellman 

Encriptación de clave híbrida 

La encriptación híbrida combina los dos tipos de encriptación anteriores, teniendo una clave simétrica y un par de claves pública y privada. 

En la encriptación híbrida se realizan los siguientes pasos: 

  1. El receptor expone su clave pública al emisor 
  1. El emisor genera un mensaje y una clave simétrica 
  1. Lo encripta con la clave generada 
  1. Encripta esa clave con la clave pública del receptor 
  1. Se envía el mensaje al receptor 
  1. El receptor desencripta la clave simétrica con su clave privada 
  1. Se desencripta el mensaje con la clave simétrica. 

Lo bueno de este tipo de encriptación es que combina las ventajas de ambos tipos, evitando perdida en la performance usando la clave simétrica y mejorando la seguridad de la comunicación con el par de claves publica/privada de las partes. 

Ejemplos de algoritmos de encriptación híbrida son: 

  • PGP 
  • GnuPG 

Conclusión 

La criptografía es una disciplina fundamental para proteger nuestras comunicaciones y mantener la confidencialidad de nuestro(s) sistema(s). Es por eso que es imprescindible conocer qué es y que algoritmos y herramientas de encriptación tenemos para implementarla, ¡pero sería un tema para otro post!  

Hasta entonces, ¡nos vemos en el siguiente post! 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!