Portada » Informática » Protocolos de Internet: HTTP, SMTP, IMAP y Criptografía Asimétrica
HTTP define la sintaxis y la semántica que utilizan los elementos de software de la arquitectura web (clientes, servidores, proxies) para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la petición (un navegador web o un spider) se lo conoce como «user agent» (agente del usuario). A la información transmitida se la llama recurso y se la identifica mediante un localizador uniforme de recursos (URL). El resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un documento, etc.
HTTP se basa en sencillas operaciones de solicitud/respuesta. Un cliente establece una conexión con un servidor y envía un mensaje con los datos de la solicitud. El servidor responde con un mensaje similar, que contiene el estado de la operación y su posible resultado. Todas las operaciones pueden adjuntar un objeto o recurso sobre el que actúan; cada objeto Web (documento HTML, fichero multimedia o aplicación CGI) es conocido por su URL.
HTTP es un protocolo sin estado, es decir, que no guarda ninguna información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para esto se usan las cookies, que es información que un servidor puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de «sesión», y también permite rastrear usuarios ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.
Para profundizar más en el funcionamiento de HTTP, veremos primero un caso particular de una transacción HTTP; en los siguientes apartados se analizarán las diferentes partes de este proceso.
Cada vez que un cliente realiza una petición a un servidor, se ejecutan los siguientes pasos:
Una persona puede no usar un cliente de correo electrónico, sino un cliente de correo con interfaz web. El proceso es casi el mismo, pero se usan conexiones HTTP para acceder al correo de cada usuario en vez de usar SMTP o IMAP/POP3
El Simple Mail Transfer Protocol (SMTP) o “protocolo para transferencia simple de correo”, es un protocolo de red utilizado para el intercambio de mensajes de correo electrónico entre computadoras u otros dispositivos (PDA, teléfonos móviles, etcétera). Fue definido en el RFC 2821 y es un estándar oficial de Internet.1
El funcionamiento de este protocolo se da en línea, de manera que opera en los servicios de correo electrónico. Sin embargo, este protocolo posee algunas limitaciones en cuanto a la recepción de mensajes en el servidor de destino (cola de mensajes recibidos). Como alternativa a esta limitación se asocia normalmente a este protocolo con otros, como el POP o IMAP, otorgando a SMTP la tarea específica de enviar correo, y recibirlos empleando los otros protocolos antes mencionados (POP O IMAP).
Internet Message Access Protocol (IMAP, Protocolo de acceso a mensajes de internet), es un protocolo de aplicación que permite el acceso a mensajes almacenados en un servidor de Internet. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. IMAP tiene varias ventajas sobre POP (otro protocolo empleado para obtener correos desde un servidor). Por ejemplo, es posible especificar en IMAP carpetas del lado del servidor. Por otro lado, es más complejo que POP ya que permite visualizar los mensajes de manera remota y no descargando los mensajes como lo hace POP.
En el ejemplo ficticio descrito por la figura, Ana (ana@a.org) envía un correo a Bea (bea@b.com). Cada una de ellas tiene su cuenta de correo electrónico en un servidor distinto (una en a.org, otra en b.com), pero éstos se pondrán en contacto para transferir el mensaje.
Secuencialmente, son ejecutados los siguientes pasos:
La criptografía asimétrica (en inglés asymmetric key cryptography), también llamada criptografía de clave pública (en inglés public key cryptography) o criptografía de dos claves1 (en inglés two-key cryptography), es el método criptográfico que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona que ha enviado el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella. Además, los métodos criptográficos garantizan que esa pareja de claves sólo se puede generar una vez, de modo que se puede asumir que no es posible que dos personas hayan obtenido casualmente la misma pareja de claves.
Si el remitente usa la clave pública del destinatario para cifrar el mensaje, una vez cifrado, sólo la clave privada del destinatario podrá descifrar este mensaje, ya que es el único que la conoce. Por tanto se logra la confidencialidad del envío del mensaje, nadie salvo el destinatario puede descifrarlo.
Si el propietario del par de claves usa su clave privada para cifrar el mensaje, cualquiera puede descifrarlo utilizando su clave pública. En este caso se consigue por tanto la identificación y autentificación del remitente, ya que se sabe que sólo pudo haber sido él quien empleó su clave privada (salvo que alguien se la hubiese podido robar). Esta idea es el fundamento de la firma electrónica.
Un certificado digital (digital certificate) es una estructura de datos que autentica una clave pública y contiene por lo menos los siguientes datos:
Creando un certificado digital, una agencia garantiza que la clave pública pertenece a la entidad que solicitó el certificado. La entidad solicitante es el sujeto (subject) y la entidad que certifica el emisor (issuer). El formato del certificado X.509 codifica aquellos nombres de acuerdo a una sintaxis especial, denominándolos nombres distinguidos (DNs). Para la creación del certificado, el emisor reúne información acerca de la entidad solicitante hasta que verifica fehacientemente su identidad. Entonces combina el nombre de la entidad, la clave pública de la entidad y su propio nombre en una estructura de datos y calcula el checksum digital de la misma. Luego la agencia certificadora encripta el resultado de ese checksum usando su propia llave privada y agrega ese checksum encriptado a la estructura de datos del certificado.
Supongamos que Frank tiene un renombrado servicio de certificación digital y que ambos, Alice y Bob, confían en él. Bob puede contactar a Frank y solicitarle que emita un certificado digital. Frank solicitará que le entregue algún tipo de identificación que demuestre que realmente es Bob. Una vez que Frank esté convencido que Bob es realmente Bob, construirá un certificado digital utilizando un programa de computadora. Las entradas de ese programa son el nombre de Bob como sujeto, su llave pública y el nombre de Frank como emisor. El programa calculará el checksum digital de la combinación de estos ítems y encriptará el valor resultante usando la llave privada de Frank. Cuando Alice quiera la clave pública de Bob, encontrará su certificado digital y lo validará usando la llave pública de Frank. Para validar, Alice separa el checksum encriptado del certificado digital y calcula el checksum del resto de la estructura. Entonces usa la clave pública de Frank para desencriptar el checksum original y lo compara con el resultado que obtuvo antes. Si hay coincidencia, Alice sabe que fue Frank y no otro el que colocó información dentro de ese certificado. ¿Cómo sabe Alice que tiene realmente la clave pública de Frank?
Puede validarla utilizando el certificado digital emitido hacia Frank por alguna otra empresa confiable. Normalmente, esta cadena de confianza terminará en una agencia públicamente reconocida que haya saturado internet con su llave pública. Algunas de esas entidades son VeriSign, Entrust, y GlobalSign, que tienen sus llaves públicas incorporadas en varios software incluyendo Internet Explorer. Incidentalmente, el certificado en la cima de la jerarquía es un certificado autofirmado (self-signed).