Herramientas de desarrollo · Calculadora de hash SHA
Certificado y huellas digitales SSH: cómo SHA-256 identifica una clave pública
· Antecedentes
sha-256 criptografía seguridad
Una huella digital es un hash de un certificado o clave, lo suficientemente corto como para leerlo en voz alta. Esta publicación explica cómo se calculan las huellas digitales TLS y SSH, por qué se reemplazan SHA-1 huellas digitales y qué demuestra una coincidencia.
La clave de host que siempre acepta: lo que la línea SHA256: le pide que compare
Cuando se conecta a un servidor a través de SSH por primera vez, ve un mensaje que le pregunta si desea aceptar la clave de host. El mensaje muestra una huella digital: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` o similar. Esta huella digital es un hash de la clave pública del servidor. Se le solicita que verifique fuera de banda (fuera del protocolo SSH) que reconoce esta clave. El mensaje también suele mostrar el tipo de clave (RSA, ED25519, ECDSA) y el formato de la huella digital. Si ha visto la huella digital de esta clave antes a través de un canal confiable, puede escribir "sí" con confianza. De lo contrario, aceptar significa confiar en que la red entregará la clave correcta.
Una huella digital es simplemente el resultado de una función hash criptográfica aplicada a la clave codificada. Para SSH, la clave se codifica como un blob binario (el formato de conexión OpenSSH) y el hash se calcula sobre ese blob. La huella digital es más corta que la clave completa, lo que la hace legible y tecleable. La misma huella siempre resultará de la misma clave, por lo que podrás comparar una huella publicada en múltiples lugares o canales.
La huella digital equivale al hash de la codificación: el certificado DER o el blob de clave pública como entrada
Las claves de host SSH y los certificados TLS están codificados de manera diferente, pero el principio de toma de huellas digitales es idéntico. Para SSH, la huella digital se calcula a partir del material de clave pública. Para los certificados TLS, la huella digital se calcula a partir de todo el certificado (incluido el emisor, las fechas de validez y otros campos). Cuando se conecta a un servidor web, el navegador no le muestra la huella digital del certificado, porque TLS utiliza un modelo de confianza diferente: el navegador confía en un conjunto de autoridades certificadoras (CA) que están preinstaladas, y esas CA responden por el certificado. SSH no utiliza CA preinstaladas; en su lugar, confía en claves específicas y las almacena localmente en `~/.ssh/known_hosts`.
Debido a que la huella digital incluye todos los bytes del certificado para TLS, cambiar las fechas de validez sin volver a firmar da como resultado una huella digital diferente. Para SSH, la huella digital es solo de la clave pública, por lo que la huella digital es estable siempre que no se cambie la clave.
Esta calculadora demuestra las longitudes SHA-1 y SHA-256; Las recomendaciones sobre políticas de huellas dactilares requieren fuentes de protocolo.
Históricamente, las huellas digitales SSH se mostraban en hexadecimal MD5. MD5 está criptográficamente roto y las colisiones son prácticas. La comunidad de seguridad pasó a SHA-256 huellas digitales como opción predeterminada. Es posible que aún veas ambos formatos mostrados por tu cliente SSH: `SHA256: base64` y `MD5: hex`. La huella digital SHA-256 es en la que se puede confiar para la verificación de identidad. Si ve ambos, compare la versión SHA-256 con una huella digital de una fuente confiable (el sitio web del servidor, un correo electrónico firmado por un administrador, una wiki interna). La huella digital MD5 es menos confiable porque existen colisiones MD5.
El cambio en el formato de la huella digital es un signo visible de la transición criptográfica. Las versiones anteriores de OpenSSH solo mostraban MD5. Las versiones modernas muestran SHA-256 de forma predeterminada. El comando `ssh-keygen -l -f /path/to/key` muestra la huella digital de la clave en el formato predeterminado para su versión de ssh-keygen; puede forzar un formato específico con el indicador `-E` (por ejemplo, `-E sha256` o `-E md5`).
Base64 de SSH SHA256: formato: el cambio de codificación que hizo que las huellas dactilares fueran más cortas que hexadecimal
Las huellas digitales SSH base64 usan un formato variante: tienen el prefijo del nombre del algoritmo y dos puntos, por ejemplo, `SHA256:base64string`. Esto es diferente del formato de integridad de subrecursos (SRI), que utiliza un guión e incluye solo base64 estándar. El formato SSH incluye una etiqueta que deja claro qué algoritmo produjo el resumen. Cuando ve una huella digital en la salida SSH, el algoritmo siempre se muestra. Cuando ve un atributo de integridad SRI, el algoritmo se codifica como un prefijo con un guión.
La salida base64 de la calculadora hash SHA de ToolAcre es la forma estándar; para que coincida con las huellas digitales SSH, anteponga `SHA256: ` (nombre del algoritmo, dos puntos y espacio). La forma hexadecimal de la calculadora no es la forma que muestra SSH, aunque representa el mismo resumen y es igualmente válida para fines de verificación.
Lo que demuestra una coincidencia: que usted tiene los mismos bytes de clave que publicó la otra parte y nada sobre el propietario de la clave sin una verificación fuera de banda.
Una coincidencia de huellas dactilares demuestra dos cosas: primero, que tiene los mismos bytes de clave que publicó el otro lado y, segundo, que ni la clave ni la huella digital han sido alteradas desde que se calculó el resumen. No prueba la identidad del propietario de la clave ni autoriza ninguna acción específica. Verificar una huella digital fuera de banda es una condición necesaria pero no suficiente para confiar en una clave. También debes verificar que la persona que publicó la huella digital es quien dice ser.
En la práctica, si un administrador publica la huella digital SSH de un servidor en la intranet de la empresa o en un correo electrónico firmado, puede verificar que coincida con el mensaje que recibe al conectarse. Si la huella digital no coincide, puede rechazar la conexión con confianza porque alguien está interceptando su tráfico o la clave del servidor ha cambiado. Si la huella digital coincide, sabrá que tiene la clave correcta. Si esa clave pertenece al servidor correcto es una pregunta aparte, una que puede responder verificando el canal de publicación (¿la página de intranet parece legítima? ¿El correo electrónico en realidad proviene de la cuenta de ese administrador?).
Ejemplo resuelto: verificar una huella digital con una publicada a través de un canal confiable, paso a paso
Una huella digital de certificado tiene el mismo propósito: identifica un certificado específico de forma única. Si un servidor TLS cambia su certificado (por ejemplo, durante la renovación), el nuevo certificado tiene una huella digital diferente. La fijación de certificados (codificar una huella digital o un pequeño conjunto de huellas digitales aceptables en una aplicación) es una técnica de seguridad para detectar cambios en los certificados. Si el servidor presenta un certificado con una huella digital diferente, la aplicación lo rechaza. Esto protege contra una CA comprometida que emite un certificado fraudulento en el que, de otro modo, el navegador confiaría.
La fijación de certificados requiere una gestión cuidadosa: si el servidor actualiza su certificado y usted no lo anticipó, su aplicación rechazará el nuevo certificado válido. En su lugar, muchas aplicaciones utilizan la fijación de clave pública, que fija la clave pública en lugar de todo el certificado. Esto permite la renovación del certificado sin rechazo siempre que se utilice la misma clave.
Ejemplo resuelto: verificar con herramientas compatibles con el protocolo porque los hashes de ToolAcre pegaron texto UTF-8, no bytes de cable DER o SSH
Calcular una huella digital manualmente para su verificación es sencillo. Guarde el certificado o la clave en un archivo, use `openssl dgst -sha256 filename` o `ssh-keygen -l -f filename -E sha256` para mostrar la huella digital y compárela con la que le mostró el servidor. La calculadora de hash ToolAcre SHA también puede calcular el resumen si pega los bytes clave, pero recuerde que la calculadora procesa UTF-8 el texto que pega, no los archivos binarios. Si la clave está en formato PEM (texto con encabezado `-----BEGIN CERTIFICATE-----` y bytes codificados en base64), puede pegarla en la calculadora. Si está en formato DER (binario), primero debe usar herramientas de línea de comandos o convertirlo a PEM.
El límite es importante: ToolAcre codifica el texto UTF-8 que pega en la interfaz de la calculadora. No lee archivos de su dispositivo (todo el cálculo se realiza en el navegador, en su pestaña, sin red). Si tiene un archivo de clave en el disco, puede abrirlo en un editor de texto, copiar el texto y pegarlo en la calculadora si está en formato PEM. O puede utilizar herramientas de línea de comandos como `openssl`, `ssh-keygen` o `sha256sum` para calcular el hash localmente.
Conclusión: compare huellas dactilares fuera de banda: la calculadora de hash SHA de ToolAcre muestra cómo se ven los resúmenes SHA-1 y SHA-256 según las longitudes que usan las huellas dactilares
La calculadora de hash SHA de ToolAcre muestra resúmenes SHA-1 y SHA-256 para cualquier entrada de texto. Si pega un certificado en formato PEM o una clave pública SSH, la calculadora calcula ambos resúmenes. Para las claves SSH, la calculadora codificará el texto que pegue; Si pega el formato de clave pública SSH codificado en base64 estándar, el resumen no coincidirá con la huella digital SSH porque SSH aplica su propio formato (el formato de conexión) antes del hash. Para una coincidencia directa, necesita la clave en el formato exacto que SSH usa internamente, que no es el formato de visualización pública.
Para las huellas digitales de certificados, el comportamiento es similar: si pega el texto del certificado codificado en PEM, la calculadora aplica un hash a ese texto. La huella digital de un certificado se calcula a partir de los bytes codificados del certificado (formato DER), no del contenedor de texto PEM. Los bytes son los mismos, pero la codificación del texto es diferente. Para hacer coincidir una huella digital de certificado de OpenSSL o el visor de certificados del navegador, deberá proporcionar los bytes DER, que no son legibles por humanos. El propósito de la calculadora es codificar UTF-8 texto que puede pegar y leer, dejando el límite claro: codifica la entrada de texto, no archivos de clave criptográfica en sus formas binarias estándar o de protocolo de cable.