Para a base de código OpenSSH
Para interagir com dispositivos que confirmam a presença do usuário, um novo tipo de chaves foi adicionado ao OpenSSH”[email protegido]” (“ecdsa-sk”), que usa o algoritmo de assinatura digital ECDSA (Elliptic Curve Digital Signature Algorithm) com curva elíptica NIST P-256 e hash SHA-256. Os procedimentos para interagir com tokens são colocados em uma biblioteca intermediária, que é carregada de maneira semelhante à biblioteca para suporte PKCS#11 e é um wrapper no topo da biblioteca
Para habilitar o U2F, você pode usar uma nova fatia da base de código de
Libfido2 suporta OpenBSD, Linux, macOS e Windows.
Para autenticar e gerar uma chave, você precisa definir a variável de ambiente SSH_SK_PROVIDER, indicando nela o caminho para libsk-libfido2.so (exportar SSH_SK_PROVIDER=/path/to/libsk-libfido2.so), ou definir a biblioteca através do SecurityKeyProvider configuração e, em seguida, execute “ssh-keygen -t ecdsa-sk” ou, se as chaves já tiverem sido criadas e configuradas, conecte-se ao servidor usando “ssh”. Ao executar o ssh-keygen, o par de chaves gerado será salvo em “~/.ssh/id_ecdsa_sk” e poderá ser usado de forma semelhante a outras chaves.
A chave pública (id_ecdsa_sk.pub) deve ser copiada para o servidor no arquivoauthorized_keys. No lado do servidor, apenas a assinatura digital é verificada, e a interação com tokens é realizada no lado do cliente (não é necessário instalar libsk-libfido2 no servidor, mas o servidor deve suportar o tipo de chave “ecdsa-sk”) . A chave privada gerada (id_ecdsa_sk) é essencialmente um identificador de chave, formando uma chave real apenas em combinação com a sequência secreta armazenada no lado do token U2F.
Se a chave id_ecdsa_sk cair nas mãos de um invasor, para passar a autenticação ele também precisará obter acesso ao token de hardware, sem o qual a chave privada armazenada no arquivo id_ecdsa_sk será inútil. Além disso, por padrão, ao realizar qualquer operação com chaves (tanto durante a geração quanto durante a autenticação), é necessária a confirmação local da presença física do usuário, por exemplo, é proposto tocar no sensor do token, o que dificulta a realizar ataques remotos em sistemas com um token conectado. Como outra linha de defesa, uma senha também pode ser especificada durante a fase de inicialização do ssh-keygen para acessar o arquivo de chave.
A chave U2F pode ser adicionada ao ssh-agent via "ssh-add ~/.ssh/id_ecdsa_sk", mas o ssh-agent deve ser construído com suporte para chaves "ecdsa-sk", a camada libsk-libfido2 deve estar presente e o O agente deve estar em execução no sistema ao qual o token está conectado.
Um novo tipo de chave “ecdsa-sk” foi adicionado, uma vez que o formato das chaves OpenSSH ecdsa difere do formato U2F para assinaturas digitais ECDSA na presença de campos adicionais.
Fonte: opennet.ru