Recentemente, houve notícias de que o OpenSSH abandonou o suporte para logins SHA-1 e estou tentando entender a qual formato eles estão se referindo. Há anos venho gerando chaves via ssh-keygen -t rsa -b 2048
. Este tipo não é mais recomendado e devo mudar, por exemplo, para ECDSA?
Nesta man page, https://www.man7.org/linux/man-pages/man1/ssh-keygen.1.html , a opção padrão rsa
para o -t
argumento explica que a opção escolhida está usando a assinatura SHA1, então um deve escolher, rsa-sha2-256
por exemplo.
Eu tentei verificar o tipo da chave ssh-keygen -l -f key
e isso me mostra que é realmente do tipo SHA256. Em caso afirmativo, isso resolve minha pergunta, mas alguma clareza seria bem-vinda. obrigada!
Fonte da notícia: https://www.zdnet.com/article/openssh-to-deprecate-sha-1-logins-due-to-security-risk/
O formato da chave não foi alterado. A única coisa que muda é o formato de assinatura que é enviado durante cada handshake de autenticação.
O que torna tudo confuso é que originalmente no SSHv2, o tipo de chave e o tipo de assinatura costumavam ser definidos em combinação. (Por exemplo, o mesmo identificador "ssh-rsa" foi definido para significar chaves RSA e assinaturas RSA/SHA-1). chave...
No entanto, extensões de protocolo foram desenvolvidas para evitar isso, e os clientes SSH modernos negociarão automaticamente os tipos de assinatura sempre que as chaves RSA estiverem envolvidas. Se você se conectar
ssh -v
, notará alguns pacotes adicionais sendo trocados:Portanto, você pode continuar usando as chaves "ssh-rsa" - você só precisa atualizar o software em ambas as extremidades para algo razoavelmente recente e ele começará a produzir automaticamente assinaturas "rsa-sha2-256" a partir dessa chave. (Por exemplo, você pode precisar instalar uma nova versão do PuTTY e do Pageant e pode ter problemas com versões mais antigas do gpg-agent.)
Assinaturas em ssh-keygen
Isso se aplica ao emitir certificados , mas é irrelevante ao gerar chaves simples.
Cada certificado é assinado pela CA pai no momento em que é emitido. Essa assinatura de longo prazo é armazenada no próprio certificado (e é muito importante perceber que isso é diferente das assinaturas de curto prazo que são feitas a cada conexão e depois jogadas fora). É por isso que muitos certificados HTTPS (X.509) tiveram que ser substituídos – a CA emissora carimbou-os com assinaturas RSA/SHA-1.
O OpenSSH também criou seu próprio formato de certificado, ao qual a página de manual se refere. Esses chamados "certificados SSH" não são apenas chaves SSH regulares – eles também são assinados por, por exemplo, a autoridade de certificação do seu local de trabalho. Portanto, se você tiver arquivos cujos nomes terminam com
*-cert.pub
, talvez seja necessário reemiti- los . (Usessh-keygen -Lf <file>
para verificar como eles foram assinados).Mas as chaves SSH simples não contêm nenhuma assinatura de longo prazo - elas são usadas apenas para fazer assinaturas temporárias durante cada conexão. Portanto, não há nada que precise ser substituído na própria chave.
a
-l
opçãoNão, não é isso que o ssh-keygen mostra. A
-l
opção mostra a "impressão digital" da chave e informa que usou SHA256 para calcular essa impressão digital - mas não tem nada a ver com o tipo da chave, nem com como a chave será realmente usada. A impressão digital é apenas um hash que foi calculado agora para ser mostrado a você .(Lembre-se de que anteriormente o software SSH costumava mostrar impressões digitais de chaves baseadas em MD5 – mesmo que não houvesse uso de MD5 no protocolo SSHv2 real.)
Outros tipos de chave
Pelo que sei (ou seja, pelo que reuni em Security.SE), o RSA como um algoritmo de assinatura ainda é forte – os problemas ocorrem principalmente ao tentar usar o RSA como um algoritmo de criptografia , e isso não é um problema com o SSHv2. (Bem, o tamanho da chave cada vez maior também não é bom.)
ECDSA tem seus próprios problemas – é difícil acertar sua implementação e certos tipos de erros do programador podem ser desastrosos. Se você tivesse que mudar, EdDSA (que é ssh-ed25519 ou ssh-ed448) seria uma opção melhor.