Ferramentas para desenvolvedores · SHA calculadora de hash
Certificado e impressões digitais SSH: como SHA-256 identifica uma chave pública
· Fundo
sha-256 criptografia segurança
Uma impressão digital é um hash de um certificado ou chave, curto o suficiente para ser lido em voz alta. Esta postagem explica como as impressões digitais TLS e SSH são computadas, por que as impressões digitais SHA-1 estão sendo substituídas e o que uma correspondência prova.
O prompt da chave do host que você sempre aceita - o que a linha SHA256: está pedindo para você comparar
Ao se conectar a um servidor via SSH pela primeira vez, você verá um prompt perguntando se deseja aceitar a chave do host. O prompt exibe uma impressão digital: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` ou similar. Esta impressão digital é um hash da chave pública do servidor. Você está sendo solicitado a verificar fora da banda (fora do protocolo SSH) se você reconhece esta chave. O prompt normalmente também mostra o tipo de chave (RSA, ED25519, ECDSA) e o formato da impressão digital. Se você já viu a impressão digital dessa chave antes por meio de um canal confiável, pode digitar "sim" com segurança. Caso contrário, aceitar significa confiar na rede para entregar a chave correta.
Uma impressão digital é simplesmente a saída de uma função hash criptográfica aplicada à chave codificada. Para SSH, a chave é codificada como um blob binário (o formato de ligação OpenSSH) e o hash é calculado sobre esse blob. A impressão digital é mais curta que a chave completa, tornando-a legível e digitável. A mesma impressão digital sempre resultará da mesma chave, para que você possa comparar uma impressão digital publicada em vários locais ou canais.
A impressão digital é igual ao hash da codificação — o certificado DER ou o blob de chave pública como entrada
As chaves de host SSH e os certificados TLS são codificados de maneira diferente, mas o princípio da impressão digital é idêntico. Para SSH, a impressão digital é calculada a partir do material da chave pública. Para certificados TLS, a impressão digital é calculada a partir de todo o certificado (incluindo emissor, datas de validade e outros campos). Quando você se conecta a um servidor web, o navegador não exibe a impressão digital do certificado para você, porque TLS usa um modelo de confiança diferente: o navegador confia em um conjunto de autoridades de certificação (CAs) pré-instaladas e essas CAs atestam o certificado. SSH não usa CAs pré-instaladas; em vez disso, você confia em chaves específicas e as armazena localmente em `~/.ssh/known_hosts`.
Como a impressão digital inclui todos os bytes do certificado para TLS, alterar as datas de validade sem assinar novamente resulta em uma impressão digital diferente. Para SSH, a impressão digital é apenas da chave pública, portanto a impressão digital é estável desde que a chave não seja alterada.
Esta calculadora demonstra os comprimentos SHA-1 e SHA-256; recomendações de políticas de impressão digital exigem fontes de protocolo
Historicamente, as impressões digitais SSH eram exibidas em MD5 hexadecimal. MD5 é criptograficamente quebrado e as colisões são práticas. A comunidade de segurança mudou para impressões digitais SHA-256 como padrão. Você ainda poderá ver os dois formatos exibidos pelo seu cliente SSH: `SHA256: base64` e `MD5: hex`. A impressão digital SHA-256 é aquela em que se pode confiar para verificação de identidade. Se você vir ambos, compare a versão SHA-256 com uma impressão digital de uma fonte confiável (o site do servidor, um e-mail assinado por um administrador, um wiki interno). A impressão digital MD5 é menos confiável porque existem colisões MD5.
A mudança no formato da impressão digital é um sinal visível da transição criptográfica. Versões mais antigas do OpenSSH mostravam apenas MD5. As versões modernas mostram SHA-256 por padrão. O comando `ssh-keygen -l -f /path/to/key` exibe a impressão digital da chave no formato padrão para sua versão do ssh-keygen; você pode forçar um formato específico com o sinalizador `-E` (por exemplo, `-E sha256` ou `-E md5`).
Base64 SHA256: formato de SSH – a alteração de codificação que tornou as impressões digitais mais curtas que hexadecimais
As impressões digitais SSH base64 usam um formato variante: elas são prefixadas com o nome do algoritmo e dois pontos, por exemplo, `SHA256:base64string`. Isso é diferente do formato de integridade de sub-recursos (SRI), que usa um hífen e inclui apenas base64 padrão. O formato SSH inclui um rótulo que torna inequívoco qual algoritmo produziu o resumo. Quando você vê uma impressão digital na saída SSH, o algoritmo é sempre mostrado. Quando você vê um atributo de integridade SRI, o algoritmo é codificado como um prefixo com um hífen.
A saída base64 da calculadora hash ToolAcre SHA é o formato padrão; para corresponder às impressões digitais SSH, acrescente `SHA256: ` (nome do algoritmo, dois pontos e espaço). O formato hexadecimal da calculadora não é o formato SSH exibido, embora represente o mesmo resumo e seja igualmente válido para fins de verificação.
O que uma correspondência prova - que você possui os mesmos bytes de chave publicados pelo outro lado e nada sobre o proprietário da chave sem uma verificação fora da banda
Uma correspondência de impressão digital prova duas coisas: primeiro, que você possui os mesmos bytes de chave publicados pelo outro lado e, segundo, que nem a chave nem a impressão digital foram alteradas desde que o resumo foi computado. Não prova a identidade do proprietário da chave nem autoriza qualquer ação específica. A verificação de uma impressão digital fora da banda é uma condição necessária, mas não suficiente, para confiar em uma chave. Você também deve verificar se a pessoa que publicou a impressão digital é quem afirma ser.
Na prática, se um administrador publicar a impressão digital SSH de um servidor na intranet da empresa ou em um e-mail assinado, você poderá verificar se ela corresponde ao prompt recebido ao se conectar. Se a impressão digital não corresponder, você poderá rejeitar a conexão com segurança porque alguém está interceptando seu tráfego ou a chave do servidor foi alterada. Se a impressão digital corresponder, você sabe que tem a chave certa. Se essa chave pertence ao servidor correto é uma questão separada – que você pode responder verificando o canal de publicação (a página da intranet parece legítima? O e-mail é realmente da conta desse administrador?).
Exemplo resolvido – verificação de uma impressão digital em relação a outra publicada por meio de um canal confiável, passo a passo
Uma impressão digital de certificado tem a mesma finalidade: identifica um certificado específico de forma exclusiva. Se um servidor TLS alterar seu certificado (por exemplo, durante a renovação), o novo certificado terá uma impressão digital diferente. A fixação de certificado – codificar uma impressão digital ou um pequeno conjunto de impressões digitais aceitáveis em um aplicativo – é uma técnica de segurança para detectar alterações de certificado. Caso o servidor apresente um certificado com impressão digital diferente, a aplicação o rejeita. Isso protege contra uma CA comprometida que emite um certificado fraudulento no qual o navegador, de outra forma, confiaria.
A fixação de certificados requer um gerenciamento cuidadoso: se o servidor atualizar seu certificado e você não o antecipar, seu aplicativo rejeitará o novo certificado válido. Muitos aplicativos usam fixação de chave pública, que fixa a chave pública em vez do certificado inteiro. Isto permite a renovação do certificado sem rejeição, desde que a mesma chave seja usada.
Exemplo resolvido: verifique com ferramentas com reconhecimento de protocolo porque ToolAcre hashes colou texto UTF-8, não DER ou SSH bytes de ligação
Calcular manualmente uma impressão digital para verificação é simples. Salve o certificado ou chave em um arquivo, use `openssl dgst -sha256 filename` ou `ssh-keygen -l -f filename -E sha256` para exibir a impressão digital e compare com aquela que o servidor lhe mostrou. A calculadora de hash ToolAcre SHA também pode calcular o resumo se você colar os bytes-chave, mas lembre-se de que a calculadora faz o hash do texto UTF-8 que você cola, não dos arquivos binários. Se a chave estiver no formato PEM (texto com cabeçalho `-----BEGIN CERTIFICATE-----` e bytes codificados em base64), você pode colá-la na calculadora. Se estiver no formato DER (binário), você precisará usar ferramentas de linha de comando ou converter para PEM primeiro.
O limite é importante: ToolAcre faz hash do texto UTF-8 que você cola na interface da calculadora. Ele não lê arquivos do seu dispositivo (todos os cálculos estão no navegador, na sua aba, sem rede). Se você tiver um arquivo de chave em disco, poderá abri-lo em um editor de texto, copiar o texto e colá-lo na calculadora se estiver no formato PEM. Ou você pode usar ferramentas de linha de comando como `openssl`, `ssh-keygen` ou `sha256sum` para calcular o hash localmente.
Conclusão: compare as impressões digitais fora da banda - a calculadora de hash ToolAcre SHA mostra como são os resumos SHA-1 e SHA-256 nos comprimentos usados pelas impressões digitais
A calculadora de hash ToolAcre SHA exibe resumos SHA-1 e SHA-256 para qualquer entrada de texto. Se você colar um certificado no formato PEM ou uma chave pública SSH, a calculadora calculará ambos os resumos. Para teclas SSH, a calculadora fará o hash do texto que você colar; se você colar o formato de chave pública SSH padrão codificado em base64, o resumo não corresponderá à impressão digital SSH porque SSH aplica sua própria formatação (o formato wire) antes do hash. Para uma correspondência direta, você precisa da chave no formato exato que SSH usa internamente, que não é o formato de exibição pública.
Para impressões digitais de certificados, o comportamento é semelhante: se você colar o texto do certificado codificado em PEM, a calculadora faz o hash desse texto. A impressão digital de um certificado é calculada nos bytes codificados do certificado (formato DER), não no wrapper de texto PEM. Os bytes são iguais, mas a codificação do texto é diferente. Para corresponder a uma impressão digital de certificado do OpenSSL ou do visualizador de certificado do navegador, você precisaria fornecer os bytes DER, que não são legíveis por humanos. O objetivo da calculadora é fazer hash de texto UTF-8 que você pode colar e ler, deixando os limites claros: ela faz hash de entrada de texto, não de arquivos de chave criptográfica em seus formatos binários padrão ou de protocolo de conexão.