Generalmente, las personas recomiendan usar un solo par de claves público-privadas en todas partes (si no estamos hablando de una posibilidad de comprometer la clave privada):
- Práctica recomendada:" Una clave ssh por usuario "o" varias claves ssh por host "
- Reutilización de claves públicas / privadas
-
Parece que esto resultaría en una vulnerabilidad al usar la autenticación de certificado de cliente a través de SSH. Ya que es muy popular sugerirlo, sospecho que el "algoritmo" a continuación no funcionará. Pero simplemente no entiendo qué es exactamente lo que está mal.
He intentado hacer mi descripción lo más detallada posible, para minimizar posibles discrepancias, así que, discúlpeme por la extensión ...
Condiciones previas
- PC1 tiene ambas huellas digitales ( S1_id_rsa.pub y S2_id_rsa.pub ) en sus hosts conocidos.
- Server1 de alguna manera sabe acerca de la existencia de la cuenta de PC1 en Server2 .
- teclas:
- PC1 : tiene P1_id_rsa , S1_id_rsa.pub , S2_id_rsa.pub .
- Servidor1 , el atacante: tiene S1_id_rsa , P1_id_rsa.pub , S2_id_rsa.pub .
- Servidor2 : tiene S2_id_rsa , P1_id_rsa.pub
Algoritmo
Esto es algo así como un conocido ataque Man-in-the-middle , pero un poco diferente.
- PC1 envía "Hola" a Servidor1
- Servidor1 envía "Hola" a Servidor2
-
El servidor comparte su clave pública
- Servidor2 envía Servidor1 S2_id_rsa.pub
- Server1 envía PC1 S1_id_rsa.pub (en lugar de S2_id_rsa.pub )
- PC1 acepta la huella digital de S1_id_rsa.pub (como se la conoce)
-
Se generan dos túneles separados de secreto compartido usando Diffie-Hellman :
-
"Servidor1 - Servidor2"
- Server2 genera DH1.a, y envía DH1.A, firmado con S2_id_rsa , a Server1
- Server1 genera DH1.b y envía DH1.B a Server2
- Túnel establecido
- "PC1 - Servidor1"
- Server1 genera DH2.a y envía DH1.A, firmado con S1_id_rsa , a PC1
- PC1 genera DH2.b y envía DH2.B a Servidor1
- El túnel está establecido.
-
-
Autenticación del cliente ( Servidor2 ahora quiere estar seguro de que está hablando con PC1 )
- PC1 envía P1_id_rsa.pub a Servidor1
- Servidor1 envía P1_id_rsa.pub a Servidor2
- Server2 genera un desafío, que solo se puede resolver con P1_id_rsa y lo envía a Server1
- Servidor1 solo desafía los túneles a PC1
- PC1 resuelve el desafío y envía la respuesta a Servidor1
- Los túneles Servidor1 responden a Servidor2
- Hecho.
- Hecho
P.S. He consultado criptografía de clave pública y man-in-the-middle attack en Wikipedia, y esta respuesta bastante detallada (mi punto de vista de todo el proceso se basa en gran parte en ello), pero no he encontrado la respuesta ...
No pude encontrar un "proceso completo de autenticación y cifrado ssh para dummies" ...
Ya hice la misma pregunta en Server Fault, pero se sugirió para volver a publicarlo aquí.