En este artículo vamos a realizar una comparación de métodos para la validación de certificados digitales.
Al utilizar criptografía de clave pública se resuelve el problema del intercambio de claves existente en la criptografía simétrica. Sin embargo, aparece otro problema: la confianza. ¿La clave pública que llega del otro extremo de la conexión es de quién dice ser?.
Una de las formas de favorecer esa relación de confianza es a través de certificados digitales. Estos contienen la clave pública el interlocutor y sus datos de identificación.
Actualmente las aplicaciones web utilizan el protocolo https para proteger la conexión. Ese protocolo es la combinación del protocolo de comunicación HTTP y los protocolos criptográficos SSL o TLS. Estos identifican la identidad del servidor utilizando certificados digitales.
Para validar los datos es necesario comprobar que los certificados digitales que se utilizan pertenecen a quien dicen pertenecer. De esta forma se evitan ataques como el de hombre en el medio (MIT).
Este paso es crítico para la seguridad de la conexión porque si se acepta un certificado falso, los datos que se envían pueden quedar expuestos. La seguridad del protocolo depende en gran medida de poder confiar en la clave pública que es recibida del otro extremo de la conexión.
Existen varios sistemas para validar la identidad del propietario del o los certificados digitales que se utilizan en la conexión.
La selección del método a utilizar depende del escenario donde se va a utilizar. A continuación, se realiza una breve descripción y se comparan algunas de sus características.
Métodos para la validación de certificados digitales
Infraestructura de Clave Pública
Infraestructura de Clave Pública (PKI, Public Key Infrastructure) es una combinación de hardware, software, políticas y procedimientos de seguridad que permiten la ejecución con garantías de operaciones criptográficas como el cifrado, la firma digital o el no repudio de transacciones electrónicas (1).
Las PKI entre otros usos permiten la validación de certificados digitales. Para ello se crea Autoridades de Certificación (CA) que firman los certificados y responden por la autenticidad de estos.
Cuando un certificado es firmado por una Autoridad Certificadora válida y reconocida por el cliente el certificado es asumido como de confianza para este y es aceptado automáticamente. Si no, es así y rechazado y se muestra una advertencia al usuario.
El despliegue de una PKI puede variar en complejidad y estructura. Una estructura muy utilizada es la estructura de árbol jerárquico. Se puede partir de una CA raíz y formar un árbol en el que cada uno de sus nodos puede ser CA para las ramas inferiores.
Las CA generalmente son entidades gubernamentales o grandes compañías en las que confían los usuarios como Google, Microsoft, etc.
Cuando el servidor utiliza el certificado firmado en una conexión, si la CA Raíz o alguna de las CA intermedias es una entidad avalada a nivel internacional, los clientes SSL/TLS deben tenerla en su lista de confianza. Esto sucede comúnmente en los navegadores web.
El cliente puede agregar la entidad en sus CA de confianza manualmente y establecer una conexión segura. Incluso si la misma no es reconocida internacionalmente.
Ventajas PKI
La utilización de una CA vinculada a una PKI es el sistema más utilizado. Generalmente no es necesario realizar modificaciones al software que se va a utilizar para la conexión. Usualmente ya que debe tener este sistema implementado.
Existen CA con alto prestigio internacional y están integradas a los navegadores actuales en su lista de confianza. Este sistema es escalable y permite agregar nuevas CA en caso de ser requerido por el usuario.
Como la validación del certificado la realiza una CA de confianza para el usuario, por ejemplo, entidades gubernamentales, este sistema tiene un elevado grado de veracidad para el usuario.
Desventajas de PKI
La validación de los certificados por una tercera entidad puede complejizar el sistema de seguridad existente en la red.
Si se usa un certificado digital validado por esa PKI para realizar un ataque de hombre en el medio (MITM) puede no ser detectado por el protocolo ya que el certificado que va a utilizar el atacante también es de confianza.
Si los servicios se encuentran desplegados en una red sin acceso a internet puede ser más compleja la validación de sus certificados por una CA internacional. En ese caso puede ser necesario crear una PKI privada o coordinar con una CA de confianza que responda por los certificados de la red.
Repositorio local de certificados
Los clientes de protocolos seguros como SSL/TLS también permiten adicionar a su lista de confianza local certificados sin necesidad de estar avalados por una PKI.
Cuando se va a establecer una conexión segura, comprueba si el certificado que le envía el servidor se encuentra en su lista de confianza, si es así se conecta, en caso de no ser así puede agregarlo o cancelar la conexión.
Este sistema es más complejo de mantener por el usuario porque debe tener el listado de todos los certificados que considera de confianza. Si lo realiza a través de una PKI solo se tiene que comprobar que el certificad haya sido firmado por una CA válida.
Esto reduce la cantidad de certificados que tiene que almacenar. La responsabilidad de definir cuales certificados debe aceptar es delegada a la CA.
Ventajas de Repositorio local de certificados:
El método solamente depende de la decisión del usuario para aceptar un certificado como válido.
Lo anterior hace menos complejo el sistema de validación que hay que implementar. Además, el usuario tiene pleno control de los certificados que se van a utilizar.
Desventajas de Repositorio local de certificados
El usuario no cuenta con una entidad de le afirme que un certificado es válido y dependiendo de los conocimientos con que cuente esto puede ser un problema para la seguridad del protocolo.
Ese riesgo se debe mitigar con medidas organizativas donde quede claro cuales certificados se consideran validos en la red.
Validación directa de certificados
Validación directa de certificados SSL/TLS “Direct Validation of SSL/TLS Certificates” (DVCert) es un mecanismo que permite la validación de certificados directamente entre el cliente y el servidor sin depender de terceros.
DVCert usa la existencia de secreto compartido entre el usuario y la aplicación web para validar directamente los certificados del servidor. (2)
Descripción del protocolo
Paso1:
Primero el navegador establece una conexión SSL/TLS con la aplicación web y ejecuta una transacción DVCert basada en la clave del usuario y una modificación del protocolo PAKE[1].
En esta transacción el navegador autentica la aplicación web y recibe su información de certificados más reciente. La información de certificados es compartida usando una Lista de Certificados de Dominio “Domain Certificate List”(DLC), que es una estructura de datos mantenida por la aplicación web que contiene las “fingerprints[2]” de todos los certificados que pueden ser usados durante la sección por la aplicación.
Paso 2:
El navegador almacena temporalmente los DCL y los usa para validar los certificados de cada conexión SSL/TLS incluyendo el canal SSL/TLS establecido en el paso 1.
Si los certificados no se encuentran en el DCL entonces la conexión SSL/TLS correspondiente es denominada falsa y se puede deber a un ataque MITM. (2)
Cuando el DCL expira se ejecuta una nueva transacción DCL como en el paso 1 para actualizarla.
Ventajas de DVCert
Solamente intervienen en el proceso de validación del certificado el cliente y el servidor.
El cliente no debe confiar en una tercera entidad para que le afirme que un certificado es válido ya que está definido en el propio servidor.
El listado de certificados válidos se almacena solo temporalmente en la PC del cliente mientras se realiza la conexión por lo cual es difícil que una 3ra persona con acceso a la PC puede agregar otro certificado a la lista de certificados de confianza del navegador.
Desventajas de DVCert
No está implementado en la mayoría de los navegadores, por lo cual es necesario realizar modificaciones en la mayoría de los clientes y servidores actuales para su utilización.
El cliente debe confiar en el servidor para la validación de los certificados, si no se tiene confianza en el servidor esto puede ser un problema ya que no hay una tercera entidad de confianza que lo avale.
Diferencias entre las relaciones de confianza de los diferentes métodos.
El uso de Autoridades Certificadoras (CA) es el método más utilizado en la actualidad.
Generalmente las CA son creadas y gestionadas mediante una Infraestructura de Llave Pública (PKI) que se encarga de acreditar las CA a nivel internacional y así ir desglosando las autoridades hasta llegar las CA que responden directamente a los usuarios que están conectados a una red. Este sistema se basa en la confianza que existe entre el usuario y su CA y el sistema PKI que esté implementado.
El método DVCert consiste en que la validación se realiza directamente entre los dos extremos de la conexión sin la intervención de un tercero para realizar la función de CA.
Como es un método menos usado que los antes descritos, existen actualmente menos implementaciones de ese sistema ya que para hacerlo es necesario realizar modificaciones en el proceso de intercambio de llaves del protocolo criptográfico que se esté utilizando. Este sistema se basa en la confianza que tiene el usuario y su servidor.
El método de repositorio local de certificados deja la responsabilidad de aceptar un certificado o no en manos del usuario.
El usuario debe tener un listado de certificados válidos para poder decidir y el sistema se basa en la confianza que existe entre el usuario y el certificado que se le está presentando para efectuar la conexión.
Recomendaciones
Luego de las comparaciones realizadas, se pueden hacer varias recomendaciones.
El método más fácil de implementar es el método de validación por repositorio local, pero es el más riesgoso por lo cual este solo debe utilizarse si el usuario tiene plena conciencia de los certificados que debe aceptar.
Este método es recomendable en el caso de ser una red pequeña con pocos servicios propios y usuarios. En este caso solo habría que agregar el certificado digital del servicio a los navegadores de los usuarios de la red interna.
El método de validación mediante una PKI es el más complejo de implementar y desplegar ya que requiere establecer autoridades que validen los certificados.
Comúnmente las autoridades de certificación internacionales cumplen esa función y brindan el servicio así que la complejidad del despliegue recae en manos de dicha autoridad.
Este método es recomendable en redes grandes con varios servicios sobre todo si está conectada a internet. Para la validación de los certificados se puede contratar una CA, existen gratuitas y de pago.
El método DVCert no se encuentra ampliamente distribuido por lo cual es posible que resulte complicado encontrar software compatible con el mismo. Para su uso se debe tener plena confianza en el servidor.
Como los certificados válidos se almacenan en el servidor, este método se recomienda en casos donde la PC que se utiliza para la conexión corre el riesgo de ser manipulada sin la autorización del usuario. También si la red esta desconectada de internet y no se desea dejar la validación de los certificados en manos de una 3ra entidad.
[1] PAKE: “Password Authenticated Key Agreement” Acuerdo de llave autenticada.
[2] Fingerprints: Una fingerprints de un certificado es el hash criptográfico de la representación binaria del certificado.