Kevin Mitnick dijo en una conferencia sobre la ingeniería social: “el eslabón más débil en seguridad informática eres tú”. Si bien la frase se tiene su origen en el arte de engañar a las personas con el fin de conseguir información sensible, personalmente me permito aplicarla al conjunto conformado por personas responsables de la seguridad en cualquier organización y su decisión de aplicar las medidas de seguridad necesarias para proteger los sistemas de información. Tenemos los medios y solo tenemos que poner de nuestra parte para aplicarlos.
Los ataques en Internet crecen día tras día y cada vez es más necesaria la implementación de Sistemas de Gestión de la Seguridad de la Información (SGSI). Estos sistemas deberían implementarse a la vez que se abren las puertas al paso de información sensible a través de Internet. La tendencia dirige a muchas compañías a cambiar el concepto de migración a cloud por la construcción de soluciones híbridas en las que se hace preciso combinar sistemas de seguridad (cada vez más necesarios).
Una de las principales ventajas de la cloud híbrida con sistemas de red privados de la empresa, es que el ámbito de aplicación de las herramientas de seguridad que están disponibles en la cloud pública se extiende al ámbito privado, y por ende, nos ayuda a proteger el conjunto de recursos y los accesos.
Hoy en día existen diferentes soluciones de seguridad que nos permiten utilizar cada vez más recursos cloud sin peligro a que nuestros sistemas de información queden expuestos. Si bien algunas compañías toman un paradigma de seguridad militarizado por falta de confianza en exponer sus datos y servicios en la cloud pública, cierto es que existen otros modelos menos invasivos o la posibilidad de empezar a aplicar un buen SGSI mediante las herramientas proporcionadas. Esto no es sencillo y requiere de personas dedicadas y de un trabajo constante para analizar todos los riesgos potenciales de forma que se apliquen políticas de seguridad de prevención, detección y respuesta de forma continuada.
Algunos de los conceptos de seguridad más utilizados en cloud y en Internet en general son: la seguridad física, la confidencialidad, la seguridad de los datos en reposo y en tránsito, el control de accesos de usuarios o recursos, el control de los accesos a las API, el uso de redes virtuales, la alta disponibilidad, las auditorías externas, las certificaciones, los controles internos, la autenticación de doble factor, los firewalls, el uso de detectores de intrusión o los analizadores de vulnerabilidades en diferentes capas de infraestructura o de aplicación. Hoy en día podemos encontrar recursos en cloud pensados para gestionar todos estos aspectos de seguridad gracias a los sistemas criptográficos simétricos y asimétricos.
Sistemas simétricos y asimétricos
La criptografía puede parecer un concepto relativamente moderno. Todos hemos oído hablar de la máquina Enigma utilizada por los nazis en la Segunda Guerra Mundial, de las criptomonedas o de la seguridad en las transacciones bancarias. No obstante, esta ciencia tiene sus inicios hace más de 4.000 años. Por ejemplo, Julio César cifraba mensajes y los enviaba a sus ejércitos. Desde entonces ha ido evolucionando hasta el día de hoy y es utilizada para muchos más fines en comparación con lo que fue inicialmente. La vemos en la protección de canales de comunicación mediante confidencialidad, la firma digital, la autenticación, la autorización o la validación de la integridad de la información, entre otras.
Tradicionalmente se ha hecho uso de algoritmos de clave simétrica para el cifrado de las comunicaciones. Estos consisten en una única clave privada compartida por emisor y receptor generando así un canal seguro. Este sistema se sigue utilizando hoy en día por ejemplo para el cifrado de canales de comunicación seguros. Aunque resulta eficazmente rápido, presenta algunas desventajas, como que tanto el emisor como el receptor deben conocer la misma clave, y por tanto, ésta ha de ser enviada de algún modo para que el receptor pueda descifrar el mensaje.
En los años 70 del siglo XX, Whitfield Diffie y Martin Hellman propusieron un método de intercambio de claves de forma segura que no requería canal seguro (DHP), y con él nació el algoritmo Diffie-Hellman. Se trata de un sistema asimétrico que utiliza claves públicas y es utilizado para el intercambio de secretos. Gracias a Diffie-Hellman posteriormente aparecieron otros sistemas asimétricos de clave pública como son RSA, ElGamal o Rabin. Hoy en día se sigue utilizando por ejemplo en Whatsapp mediante en protocolo Off-the-Record Messaging (OTR), en los túneles IPSEC o en la red TOR.
Uno de los sistemas más estudiados es RSA, que junto a otros similares se aplica en tecnologías tan conocidas como: la autenticación con el protocolo OAuth2, la firma digital de información para garantizar la autoría e integridad de la misma, los certificados electrónicos para las conexiones seguras a las páginas web, el protocolo TLS/SSL tan utilizado por ejemplo en las conexiones https, los túneles IPSEC para unir dos redes a través de Internet mediante VPN, el intercambio de información bancaria, la comunicación con sesiones SSH, la encriptación de emails mediate el protocolo PGP, el envío de contraseñas de forma segura, etc.
En general, RSA es válido tanto para cifrar información (confidencialidad), como para garantizar la autoría de un mensaje (firma digital, no repudio), confirmar que el mensaje no ha sido modificado por el camino (integridad), así como para conocer si alguien es quien dice ser (autenticación).
Las siglas de RSA provienen de sus creadores Ron Rivest, Adi Shamir y Leonard Adleman que desarrollaron en 1977 uno de los criptosistemas de clave pública más utilizados en la actualidad. El sistema se basa en la existencia de dos claves, una privada y una pública. La clave privada la tendrá una única persona y la pública la puede tener cualquiera. Ambas pueden ser utilizadas para cifrar un mensaje, pues si se cifra con una entonces solo se podrá descifrar con la otra. La gracia está en que es excesivamente costoso computacionalmente obtener una clave partiendo de la otra, y que la clave pública puede viajar pudiendo ser vista por todos.
Es aquí donde se marca la diferencia con los algoritmos simétricos en los que es necesario compartir la misma clave entre emisor y receptor. No obstante también tienen su desventaja frente a algoritmos simétricos, como por ejemplo, que son más lentos entre cifrado-descifrado, así como que el tiempo invertido en calcular un par de claves nuevas es mayor.
Imaginemos que existe un emisor y un receptor y se ha de enviar un mensaje cifrado del emisor al receptor. En un sistema asimétrico lo que se hace es que el emisor cifra el mensaje con la clave pública y lo envía. El receptor puede descifrar el mensaje con la clave privada que sólo él conoce. De esta forma cualquier emisor puede enviar un mensaje cifrado al receptor sin que nadie por el camino pueda descifrarlo, excepto el receptor que tiene su clave privada para ello.
También hay sistemas que combinan el cifrado simétrico y asimétrico. Por ejemplo, SSL hace uso de este método de par de claves entre el navegador y el servidor web para establecer una comunicación segura y poder compartir una clave simétrica para cifrar y descifrar todos los datos transmitidos en la sesión. Otro ejemplo es el protocolo IKE (Internet Key Exchange) utilizado en los túneles IPSEC para la implementación de una VPN, ya que hacen uso del algoritmo asimétrico de clave pública Diffie-Hellman con el mismo propósito de compartir las claves.
Curiosidad por los métodos matemáticos
Para crear criptografía tradicionalmente existen varios métodos, los más conocidos son los logaritmos discretos, la factorización de un entero en números primos o las propiedades de las curvas elípticas. El método matemático general será aquel que se pueda calcular de forma sencilla en un sentido (cifrado y descifrado), pero que en sentido inverso sea computacionalmente intratable (romper o averiguar una clave a partir de la otra).
Una propiedad interesante es que, si bien es fácil calcular ‘n’ multiplicando dos números primos ‘e’ y ‘d’, es costoso factorizar el producto, es decir, encontrar los dos números primos muy grandes ‘e’ y ‘d’ que multiplicados den ‘n’. Por tanto, ‘n’ será uno de los componentes de la clave pública, puede ser conocido por todos y se hace imposible computacionalmente encontrar sus factores primos para averiguar la componente de la clave privada. Los tamaños de ‘n’ actualmente utilizados son 1024, 2048 y 4096 bits, y estamos acostumbrados a verlos como parámetro de configuración y fortaleza del problema.
Respecto de los logaritmos discretos serían la operación inversa a la exponenciación en un grupo. La exponenciación modular es una operación sencilla y es la utilizada para cifrar y descifrar. En cambio, la operación que habría que hacer para averiguar la clave privada sería la inversa: el cálculo de un logaritmo discreto modulo un entero que no puede realizarse de forma eficiente en todos los casos.
Aquí podéis encontrar una página interesante que hace cálculos de algoritmos discretos, poned números enormes y veréis qué ocurre.
RSA para firma digital, integridad y autenticación
A diferencia del método usado para la confidencialidad en el que se usa la clave pública para cifrar, para firmar digitalmente se utiliza la clave privada. De este modo cualquiera que conozca la clave pública, es decir, todos, podrán descifrar el mensaje y por tanto comprobar su autoría e integridad, ya que el mensaje será legible. Como se puede ver, la clave pública ayuda a garantizar la autoría e integridad del mensaje y además podrá viajar junto al mensaje como si de su firma electrónica se tratase.
El caso de la autenticación es muy similar. Cuando un cliente se presenta a un servidor para autenticarse, entonces el servidor le envía un desafío. El cliente cifra el mensaje de respuesta del desafío con la clave privada y el servidor que contiene la clave pública es capaz de descifrar la respuesta al desafío de nuevo, identificando que el cliente es quien dice ser.
Criptoanálisis para romper RSA y el uso malintencionado de RSA
No quiero imaginar la de matemáticos que han querido hacerse millonarios buscando un método para romper un sistema asimétrico. Si ocurriera, el impacto que tendría sobre las comunicaciones actuales sería tan grande que habría que limitarse a los sistemas de clave simétrica.
RSA, al igual que otros sistemas simétricos y asimétricos, no es un algoritmo que no se pueda romper. Para ello es necesario hacer que el problema se pueda resolver computacionalmente en tiempo razonable.
Dicen que con los medios computacionales actuales y la longitud de clave utilizada daría tiempo a vivir la expansión de otro universo antes de dar con la clave. Eso dicen… No sé, y la computación cuántica o las redes de computación estarán ahí para ponerlo a prueba y tener que reforzar la longitud de nuestras claves en caso necesario mientras no exista otro método de resolución más directo.
Algunos métodos para romper con RSA son el cifrado cíclico, canal lateral o la factorización para casos particulares con el algoritmo de Fermat, Shanks o Pollard. Hablamos de problemas tan costosos debido a la cantidad de bits utilizados en las claves, que el problema se vuelve computacionalmente intratable.
Como curiosidad te contaré sin dar fe de ello que, una vez leí que el método del cifrado cíclico hace referencia a que, si aplicas reiteradamente la misma clave pública sobre el mensaje cifrado, tarde o tarde acabará saliendo el mensaje sin cifrar de nuevo. Está comprobado que esto ocurre tras un número tan elevado de iteraciones que también resulta imposible.
El uso malintencionado de RSA ha dado lugar a que lo podamos encontrar en el cifrado del contenido de archivos en disco que los virus Ransomware realizan con el fin de extorsionar a sus víctimas, y que tanto daño ha provocado en la última década.
Caso de uso en la cloud de Amazon AWS
En los entornos cloud, y en general en Internet todas las soluciones, servicios y recursos que encontramos tienen una protección y gozan de un grado de seguridad proporcionado por el cifrado simétrico o asimétrico. Las aplicaciones prácticas que han sido comentadas se aplican a la mayor parte de los recursos en la cloud de Amazon. AWS tiene un repositorio centralizado para las claves simétricas y asimétricas para el resto de los recursos llamado Key Managment Service (KMS), y también dispone de módulos hardware pensados para procesar las operaciones criptográficas llamados HSM:
Recurso | Descripción | |
AWS | Key managment service (KMS) | Gestión de claves asimétricas RSA o ECC de curva elíptica y también simétricas. Si no necesita su propio módulo HSM entonces puede utilizar KMS en vez de CloudHSM. |
AWS | CloudHSM (Hardware security module) | Un módulo de seguridad de hardware (HSM) es un dispositivo informático que procesa las operaciones criptográficas y proporciona almacenamiento seguro de las claves criptográficas. Funciones del recurso: Generar, almacenar, importar, exportar y administrar claves criptográficas, incluidas las claves simétricas y los pares de claves asimétricos. |
Algunos ejemplos:
- Cifrado para la confidencialidad: AWS utiliza claves simétricas para el cifrado de los datos en reposo. Un ejemplo lo podemos encontrar tanto en los volúmenes EBS utilizados en las instancias de máquinas virtuales EC2, como en las bases de datos como RDS, Redshift o DynamoDb. Ejemplos de algunos recursos que también realizan cifrado de datos: Secret Manager, Simple Email Service o EMR.
- Cifrado para comunicaciones: Podemos encontrarlo por ejemplo en DynamoDB utilizando un cliente que nos permite cifrar la información antes de ser transmitida a la base de datos. También podemos encontrarla en las redes VPN con el propósito de crear cloud híbridas o redes empresariales mixtas a través de AWS VPN CloudHub o AWS Site-to-Site VPN. En estos casos se hace uso de IPSEC y, en concreto, mediante el protocolo de intercambio de claves de Internet (IKE) el tráfico de cada túnel puede cifrarse con AES128 o AES256 y usar Diffie-Hellman para el intercambio de claves. También, el propio cliente VPN de AWS se utiliza para conectarnos desde cualquier máquina/red a la AWS y hace uso de certificados RSA de hasta 2048bits.
- Cifrado para autenticación: AWS autentica con funciones de hash SHA1 o SHA2.
- Cifrado para cualquier propósito: KMS tiene su propio API y podemos hacer uso de él a un nivel más bajo de programación, permitiendo así trabajar con alias, claves y políticas de claves, así como delegar la creación y almacenamiento de claves a KMS.
Gracias por leer el artículo. Desde el equipo de arquitectura software de decide estamos encantados de compartir esta y otra información. Podéis contactar a través de la web o redes sociales.
Referencias
- “Procesos y herramientas para la seguridad en redes” Gabriel Diaz Orueta, Ignacio Alzórriz Armendáriz, Elio Sancristobal Ruiz, Manuel Alonso Castro Gil.
- “Técnicas criptográficas de protección de datos” Amparo Fúster Sabater, Dolores de la Guía Martínez, Luis Hernández Encinas, Fausto Montoya Vitini, Jaime Muñoz Masqué
- “Criptografía y seguridad en computadores”, Manuel José Lucena López
- “Transmisión de datos y redes de comunicaciones”, Behrouz A. Forouzan
- Web de ayuda de Amazon AWS