Esto es el protocolo TLS
Una conexión HTTPS / TLS no quiere decir "confía en mí". Quiere decir "nadie más puede acceder". Podrías estar recibiendo la llamada de un atacante, y que fuese privada.
Hemos cambiado el problema de
cómo compartir claves simétricas
por el de
cómo compartir claves públicas (asimétricas)
Certificados electrónicos
¿Cómo conseguimos la clave pública de los demás?
servidor$ /etc/ssh/ssh_host_rsa_key (...)
servidor$ ~/.ssh/authorized_keys (...)
Este esquema es muy utilizado por los administradores de sistemas
juanvi@debian:~/.ssh$ ls
juanvi@debian:~/.ssh$ ssh-keygen -f clave1 -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in clave1
Your public key has been saved in clave1.pub
The key fingerprint is:
SHA256:0tj5sJj1Iv6hqbgESj3DcoxONkWVxIg+3Wnyb5ucoRg juanvi@debian
The key's randomart image is:
+---[RSA 3072]----+
| ..=o. |
| ... o |
|. ... . |
| o*o + + . |
|.B.B+ o S |
|*.+ o. = = |
|...E =.+ o |
| . .o.o*+o |
| oo.o=*o |
+----[SHA256]-----+
juanvi@debian:~/.ssh$ ls -l
total 8
-rw------- 1 juanvi juanvi 2602 Apr 18 17:00 clave1
-rw-r--r-- 1 juanvi juanvi 567 Apr 18 17:00 clave1.pub
juanvi@debian:~/.ssh$ ssh-copy-id -i clave1 user@server.com
juanvi@debian:~/.ssh$ ssh -i clave1 user@server.com
Alice crea un archivo con su identidad y su clave pública
Identidad de Alice: nombre, dirección de correo, URL del servidor HTTP...
Una tercera parte de confianza (TTP) firma esta tupla:
Alice puede ahora distribuir su certificado, que incluye su identidad y clave pública
Ya no tenemos que conseguir la clave pública de cualquier persona, solo la de la TTP (Trusted Third Party) y verificar que las claves públicas de los certificados que nos presenten estén firmadas por la TTP
La TTP puede ser:
En PGP podemos firmar las claves de conocidos nosotros mismos si nos las han pasado de forma segura
...y ellos también pueden hacer lo mismo, permitiendo alzcanzar un paso más
Nota: PGP tiene una versión de libre distribución llamada GPG derivada de la rfc4880 (OpenPGP)
Esto es un ejemplo de la interfaz de Mailvelope (GMail, comercial)
Esto es un ejemplo de la interfaz de KGPG (Linux)
Los amigos puedes avalar otros certificados
"Confío totalmente en mis amigos, pero solo un poco en los amigos de mis amigos y aún menos en los amigos de los amigos de mis amigos"
Cada eslabón (certificado) tiene una garantía de autenticidad <1
A partir de unos cuantos certificados el nivel de seguridad deja de ser aceptable
Idea: confiar en unas pocas TTPs que gestionen todos los certificados de Internet
En PKI, las TTPs se llaman Autoridades de Certificación / Certification Authorities (CAs)
Las claves pública de estas CAs vienen integradas (compruébalo):
Instalar una nueva CA en un PC es un proceso excepcional
Normalmente hay una "cadena de confianza" con varios eslabones
Instaladas con el sistema operativo o el navegador
En la imagen, Root CAs instaladas en mi Firefox
Los certificados tienen una validez limitada en el tiempo, pero es posible que su contenido deje de ser válido antes:
Si esto pasa, hace falta comunicarlo a la CA siguiendo sus procedimientos específicos
La CA se encarga de:
Es tu responsabilidad comprobar si los certificados son válidos
Ocasionalmente, incluso las autoridades de certificación tienen que recovarse
Upcoming change in Chrome 127 and higher: TLS server authentication
certificates validating to the following Entrust roots whose earliest Signed
Certificate Timestamp (SCT) is dated after October 31, 2024, will no longer be
trusted by default.
https://security.googleblog.com/2024/06/sustaining-digital-certificate-security.html
Anexo recomendado: Protocolo TLS
Continúa en: Autenticación
Recordatorio de cómo funciona el cifrado asimétrico: - Todo el mundo tiene dos claves: - una privada, que solo conoce la persona - una pública, que se asume que cualquier persona puede conocer - A partir de la pública no se puede sacar la privada. Cuidado: quizá necesites un algoritmo ligeramente diferente. - Lo que cifras con una lo puedes descifrar con la otra - Envío con confidencialidad: cifra la información con la clave pública de la otra persona - Solo la otra persona puede descifrarla, porque solo ella tiene la clave privada - Pero también funciona al revés: una persona puede cifrar un mensaje con su clave privada y lanzarlo al mundo - Cualquier persona pueda descifrar el mensaje, ya que solo se necesita la clave pública de quien cifró. Es decir, este esquema NO OFRECE CONFIDENCIALIDAD - PERO: dado que el mensaje podemos descifrarlo con una clave pública específica, sabemos que solo la persona que tenga la clave privada podría haber enviado ese mensaje: estamos acercándonos a la **autenticidad**: probar quién ha enviado un mensaje
En el paso 2, recuerda que, en la realidad, Alice y Bob no usarán g y p cualquiera sino números conocidos que están en los estándares actuales y que sabemos que funcionan correctamente Es decir: Alice y Bob firma los parámtros A y B y, si la firma verifica, Bob sabe que está hablando con Alice y al revés. Por supuesto, esto mismo se puede hacer con Diffie-Hellman sobre curvas elípticas
Durante un ataque man in the middle, un atacante se pone en medio de las comunicaciones. Cada una de las partes establece una conexión segura con el atacante: nadie de fuera sabe qué es está diciendo, pero no estamos hablando con quien queremos hablar. El atacante dejará pasar la mayoría de las comunicaciones, solo está interesado en participar una vez, cambiando la cuenta bancaria en la que se realiza un pago. Fíjate: no hemos decrito ningún protocolo que nos proteja ante este tipo de ataque! - No hemos dado autenticación: no sabemos con quién estamos hablando - No hemos dado integridad: un atacante podría cambiar el mensaje sin que nos enteremos (aún así, en los protocolos descritos, es muy poco probable que el atacante pueda cambiar el contenido de un mensaje por otro CON SENTIDO. Pero algunos protocolos son muy sensibles al cambio: hashes, repeticiones...)
El penúltimo paso pedirá la contraseña del usuario en server.com También se podría añadir manualmente la clave1.pub al final del archivo ~/.ssh/authorized_keys en server.com Se puede configurar ssh (archivo: ~/.ssh/config) para que siempre que se acceda a server.com, se utilice un usuario y una clave determinada
La identidad de Alice pueden ser muchas cosas: - Su nombre, DNI, dirección de correo electrónico... - La URL de una página web, en el caso de servidores
- PGP: Pretty Good Privacy - PKI: Public Key Infrastructure
Las empresas sí que instalan CAs personalizadas en los PCs de los usuarios Por ejemplo, la CA del proxy/firewall de la empresa, para poder descifrar las comunicaciones de los empleados
La clave privada de una TTP es muy delicada: se protege en grandes edificios con una enorme seguridad física, en PCs desconectados de Internet y dentro de cajas fuertes. Por eso los certificados de usuarios no suelen estar firmados por una TTP final (llamada "Root CA") sino por otras terceras partes intermedias con capacidad para firmas certificados de usuarios. El certificados de estos intermediarios sí que está firmado por la Autoridad raíz
Esto es el ejemplo de una cadena de certificados de campus.viu.es, que aparece al pinchar "en el candado" de la barra de direcciones. La transparencia está solo para ocupar el espacio, veremos los detalles durante la clase Fíjate: - Identidades del certificado de la web - Certificados intermedios - Certificado raíz - Lista de revocación Prueba también con otras páginas web
En ocasiones es necesario dejar de confiar en las terceras parte de confianza. Por ejemplo, Julio de 2024: Google anuncia que dejará de considerar a Entrust como tercera parte de confianza, y no aceptará certificados firmados por Entrust Los motivos: Over the past several years, publicly disclosed incident reports highlighted a pattern of concerning behaviors by Entrust that fall short of the above expectations, and has eroded confidence in their competence, reliability, and integrity as a publicly-trusted CA Owner. > incidentes relacionados con entrust: https://bugzilla.mozilla.org/buglist.cgi?o2=greaterthaneq&short_desc_type=casesubstring&o1=notequals&v1=Graveyard&classification=Client%20Software&classification=Developer%20Infrastructure&classification=Components&classification=Server%20Software&classification=Other&classification=Graveyard&v2=2015-11-01&f1=classification&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&short_desc=Entrust&f2=creation_ts&component=CA%20Certificate%20Compliance&query_format=advanced&list_id=17064895