2.5 SSL, Transporte seguro
El SSL es un conjunto de protocolos diseñado por Netscape que proporciona sesiones de comunicación encriptadas, autentificación del servidor, de los mensajes y, opcionalmente, de los clientes. Está compuesto por dos capas: la SSL Record Protocol, encargada de encapsular protocolos de bajo nivel; y la SSL Handshake Protocol, que permite al servidor y cliente autentificarse y negociar los algoritmos de encriptación. SSL es independiente de los protocolos y capacita al programador para realizar un desarrollo transparente por encima de la capa TCP/IP.
Cuando conectamos a un servidor seguro, nuestro navegador, a través de SSL, solicita una conexión segura. Envía el mensaje CLIENT-HELLO, que incluye información sobre el sistema criptográfico que quiere utilizar. El servidor seguro responde con SERVER-HELLO junto con un Identificador de conexión, su llave pública RSA o DH certificada e información sobre los criptosistemas que soporta. Nuestro navegador verifica la llave pública certificada, comprobando que pertenece a una Autoridad de Certificación (AC) conocida y por tanto integrada en el navegador (VeriSign, RSA Secure Server AC, etc.) y elige el sistema de criptografía a utilizar.
A continuación, nuestro navegador responderá con CLIENT-MASTER-KEY, generando una llave de cifrado simétrico de forma aleatoria y encriptada con la llave pública del servidor. También manda el mensaje CLIENT-FINISHED, que incluye el Identificador de conexión encriptado con su llave. El servidor descifra el mensaje con su clave privada RSA y obtiene la clave de cifrado simétrico. Entonces envía un SERVER-VERIFY, verificando su identidad, y la llave de escritura del servidor producida a partir del mensaje CLIENT-MASTER-KEY. Si es necesaria la autentificación del cliente, el servidor envía a éste REQUEST- CERTIFICATE, a lo que el cliente responde con CLIENT- CERTIFICATE, que contiene su certificado. Por último, el servidor envía el mensaje SERVER-FINISH, con lo que da por terminada la negociación. Tras ello, los protocolos de la aplicación operan, de forma que todas las transmisiones son encriptadas con las llaves que se han intercambiado.
El SSL está implementado en Netscape Navigator en su versión internacional y ha sido aprobado por el gobierno de los Estados Unidos, que hace uso de una clave de grado medio de 40 bits para el algoritmo de encriptación de flujo RC4. Hay que señalar que el esfuerzo requerido para descodificar un mensaje con una encriptación RC4 de 40 bits es de 64 años MIPS. Una máquina con una velocidad de 1 MIPS tardaría 64 años en averiguar la clave del mensaje.
En Estados Unidos Netscape encripta usando una clave de 128 bits. Muchos usuarios consideran que una llave de 40 bits es vulnerable incluso a un ataque «frontal»; es decir, probando cada una de las 2^40 llaves. Con la clave de 128 bits es altamente improbable la detección de la llave, ya que el número de posibilidades crece exponencialmente hasta 2^128. La legislación relativa al software de encriptación existente en Estados Unidos limita el tipo de encriptación del software exportado de software de este tipo. No obstante, hay que señalar que el gobierno federal ha modificado recientemente esta política, permitiendo ya la exportación de un producto con llave de 128 bits. El SSL utiliza, por tanto, encriptación de clave pública para intercambiar la llave de sesión entre el cliente y el servidor. Es esta llave la encargada de encriptar, en ambos sentidos, la transacción http. Una de las ventajas de este protocolo, es que cada vez que se establece una transacción diferente, se genera una clave igualmente distinta, con lo que se garantiza que si alguien consigue desencriptar una sesión, no habrá encontrado la llave del servidor y será totalmente inútil para otra transacción.