¿La huella digital visual identifica de manera única la clave de un servidor?
No; El algoritmo de "clave de host visual" no conserva suficiente información para dar a cada clave una imagen 100% garantizada. Pero tampoco una huella digital más tradicional. Las claves ECDSA como la suya tienen 256 bits. Las claves RSA tienen 2048. Pero si cuentas los dígitos hexadecimales de tu imagen, obtienes 32 de ellos: 128 bits.
Esos 128 bits son un hash MD5 de la clave pública. El algoritmo MD5 está codificado de forma rígida en gran parte del código que genera huellas dactilares para su visualización.
El algoritmo de clave de host visual (conocido como "randomart" en la fuente), toma ese hash MD5 y lo usa para trazar una ruta. En cuanto a cuán "seguro" es esto, dejaré que la fuente . por sí mismo:
Si ves que la imagen es diferente, la clave es diferente.
Si la imagen se ve igual, todavía no sabes nada.
¿No es esto inseguro? ¿No es inseguro el MD5?
Si quisiera engañarte con una huella digital tradicional, no me molestaría en intentar generar una colisión completa de MD5 de una clave SSH preexistente. Eso es difícil incluso hoy.
En su lugar, generaría claves hasta que encontré una donde coincidían los primeros dígitos y los últimos dígitos de la huella digital. A menos que sea muy disciplinado acerca de la validación, no importaría si la huella digital era MD5 o SHA256; tus ojos rozarían el número y se vería "suficientemente bueno". Eso es contra lo que trata de protegerse la huella dactilar visual.
Si estás paranoico, entonces no uses ninguna huella dactilar verificada por humanos si puedes evitarlo, visual o de otra manera. En su lugar, coloque una buena copia de la clave de servidor esperada en su archivo conocido_hosts.
Para más información, prueba:
-
enlace - que incluye un enlace a un documento sobre la razón detrás del algoritmo.
-
enlace - que incluye un enlace a un documento sobre cómo atacar el algoritmo.
¿Cómo se genera la imagen?
De nuevo, de la fuente :
El algoritmo utilizado aquí es un gusano que se arrastra sobre un plano discreto,
dejando un rastro (aumentando el campo) donde quiera que vaya.
El movimiento se toma de dgst_raw 2bit-wise. Chocando contra las paredes
hace que el respectivo vector de movimiento sea ignorado para este turno.
Los gráficos no son inequívocos, porque los círculos en los gráficos pueden ser
Caminé en cualquier dirección.
Más detalladamente, el algoritmo funciona más o menos así:
Comienza en el medio, y usa el hash como una especie de mapa del tesoro para saber dónde moverte. Para cada paso, toma los siguientes dos bits en el hash. 00 significa moverse hacia el noroeste; 01 significa noreste; 10 significa suroeste; 11 significa sureste. Abrazar la pared si te topas con ella. Cuenta la cantidad de veces que pisas en cada cuadrado.
Finalmente, para cada cuadrado que pisaste, elige un símbolo basado en el número de veces que pisaste el cuadrado, de la siguiente lista de 14 símbolos: .o+=*BOX@%&#/^
. (Eso es un total de 15 símbolos si incluye "
" para los cuadrados no visitados). Marque sus puntos de inicio y final especialmente, con un S
y un E
, respectivamente.