Uma chave SSH ed25519-sk é uma chave Ed25519 cuja operação de assinatura acontece dentro de uma chave de segurança FIDO2. Cria-se com ssh-keygen -t ed25519-sk, exige um toque na chave em cada início de sessão e só funciona quando o cliente e o servidor correm o OpenSSH 8.2 ou posterior, lançado em fevereiro de 2020.
Em que difere uma chave OpenSSH ed25519-sk de uma chave Ed25519 normal
O OpenSSH suporta Ed25519 desde a versão 6.5 (janeiro de 2014) e a variante FIDO2 ed25519-sk desde a 8.2 (fevereiro de 2020). A diferença está no sítio onde vive o segredo. Com uma chave Ed25519 clássica, ~/.ssh/id_ed25519 é a chave privada: quem a copiar e souber a frase-passe consegue entrar nos seus servidores.
Com ed25519-sk, a assinatura é calculada dentro da chave física. O ficheiro que o ssh-keygen grava no disco, id_ed25519_sk, é um identificador de chave (key handle) inútil sem o dispositivo físico. Cada autenticação exige ainda presença do utilizador: um toque na chave. Roubar o portátil ou o ficheiro deixa de ser suficiente.
O que se mantém: a chave pública vai para o authorized_keys como habitualmente, agora com o tipo [email protected], e as permissões esperadas não mudam: ~/.ssh a 700, authorized_keys e os ficheiros de chave a 600.
Como gerar uma chave ed25519-sk com o ssh-keygen, passo a passo
O comando base é ssh-keygen -t ed25519-sk com a chave FIDO2 ligada; o ssh-keygen pede-lhe que lhe toque durante a geração. Todas as opções -O estão descritas na página oficial do manual do ssh-keygen.
# Non-resident key: the handle stays in ~/.ssh/id_ed25519_sk
ssh-keygen -t ed25519-sk -C "work-key"
# Resident key, PIN required, with its own label
ssh-keygen -t ed25519-sk -O resident -O verify-required -O application=ssh:production
# Install the public key on the server
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub user@server
# On another machine: pull the resident keys off the token
ssh-keygen -K
# Or load them straight into ssh-agent
ssh-add -KAs opções que vai realmente usar:
- -O resident: guarda a credencial no token para a poder recuperar noutra máquina.
- -O verify-required: além do toque, exige o PIN do token em cada assinatura.
- -O application=ssh:nome: distingue várias chaves residentes no mesmo token; o valor tem de começar por
ssh:. - -O no-touch-required: dispensa o toque, mas o servidor só o aceita se a linha do
authorized_keystiver a opçãono-touch-required.
-O resident em ed25519-sk: a chave viaja dentro do token FIDO2
Com -O resident, a credencial fica guardada no próprio token FIDO2 e não apenas no ficheiro local. Numa máquina nova, ligue o token e execute ssh-keygen -K, que escreve os ficheiros no diretório atual, ou ssh-add -K para a carregar no agente sem tocar no disco.
A vantagem é deixar de depender do ficheiro de cada máquina. O risco é o reverso: quem tiver o token pode extrair o identificador, por isso proteja-o com um PIN e combine -O resident com -O verify-required. Sem -O resident, perder o id_ed25519_sk significa perder o acesso a partir dessa máquina, mesmo que ainda tenha o token. Os tokens que só implementam U2F não conseguem guardar credenciais residentes.
Que servidores aceitam chaves ed25519-sk: OpenSSH 8.2 ou posterior
Um servidor aceita chaves ed25519-sk se o seu sshd for OpenSSH 8.2 ou posterior. O servidor não precisa de nenhum token ligado; só tem de reconhecer o tipo de chave [email protected]. Verifique antes de retirar a sua chave atual:
# OpenSSH version installed on the server
ssh -V
# Public key algorithms sshd actually accepts
sudo sshd -T | grep -i pubkeyaccepted
# ~/.ssh/authorized_keys line that also requires a PIN
verify-required [email protected] AAAA... work-keySe [email protected] aparecer na saída de sshd -T, a chave vai funcionar. Para exigir PIN a todos os utilizadores, acrescente PubkeyAuthOptions verify-required ao sshd_config. Um servidor anterior à 8.2 é também anterior à 8.8, a versão que desativou por omissão as assinaturas SHA-1 ssh-rsa, pelo que de qualquer forma já devia ter sido atualizado. A página de notas de versão do OpenSSH indica o que foi incluído em cada versão.
Chaves ed25519-sk versus chaves Ed25519 no telemóvel: tabela comparativa
No computador, ed25519-sk funciona com qualquer OpenSSH 8.2 ou posterior e um token ligado; em iOS e Android depende de o cliente implementar FIDO2 e da forma como o token se liga ao telemóvel. A alternativa habitual no telemóvel é uma chave Ed25519 gerada no próprio dispositivo.
| O que se compara | ed25519-sk no computador | Ed25519 no armazenamento seguro do telemóvel |
|---|---|---|
| Onde vive o segredo | Dentro do token FIDO2 | No armazenamento seguro do iOS ou do Android |
| O que precisa para iniciar sessão | Token ligado e um toque | O telemóvel que guarda a chave |
| OpenSSH mínimo no servidor | 8.2 (fevereiro de 2020) | 6.5 (janeiro de 2014) |
| Se alguém copiar o ficheiro | Inútil sem o token físico | No termi1 a chave privada nunca sai do dispositivo |
| Usar a chave noutra máquina | Com -O resident e ssh-keygen -K | Gerar uma chave separada por dispositivo |
O termi1, o terminal SSH para iOS e Android, segue o segundo modelo: gera a chave no telemóvel, guarda-a no armazenamento seguro do sistema e nunca envia a chave privada para os servidores do termi1; a IA também não abre a sessão nem recebe chaves. Uma configuração sensata é uma chave ed25519-sk para o portátil mais uma chave por telemóvel no authorized_keys, para revogar apenas a que perder. Com o Mosh, a autenticação só acontece na ligação SSH inicial que arranca o mosh-server; mudar de Wi-Fi para dados móveis não a volta a desencadear, e o tmux mantém o que deixou a correr.
4 erros ao configurar chaves ed25519-sk com o OpenSSH
- Servidor anterior ao OpenSSH 8.2. O sshd não reconhece o tipo de chave e rejeita-a; mantenha a chave antiga até ter verificado a versão.
- Apenas um token FIDO2 registado. Se o perder ou avariar, perde também o acesso. Registe dois tokens, ou um token e uma chave de reserva.
- Apagar o id_ed25519_sk de uma chave não residente. Sem
-O residentnão é possível recuperá-lo do token; faça uma cópia de segurança ou crie a chave como residente. - Fechar a sessão antiga antes de testar. Abra uma segunda ligação com
ssh -i ~/.ssh/id_ed25519_sk user@serverantes de editar osshd_config.
Perguntas frequentes
De que versão do OpenSSH preciso para chaves ed25519-sk?
As chaves ed25519-sk exigem o OpenSSH 8.2 ou posterior, lançado em fevereiro de 2020, tanto no cliente que cria e usa a chave como no servidor que a verifica. Confirme a versão instalada com ssh -V e os algoritmos que o servidor aceita com sshd -T.
O que faz -O resident no ssh-keygen?
A opção -O resident do ssh-keygen guarda a credencial FIDO2 na própria chave de segurança, para que possa ser recuperada noutra máquina com ssh-keygen -K ou carregada no agente com ssh-add -K. O ideal é combiná-la com um PIN no token e com -O verify-required.
Alguém pode roubar uma chave ed25519-sk copiando o ficheiro?
Uma chave ed25519-sk não pode ser usada apenas copiando o ficheiro id_ed25519_sk, porque esse ficheiro é só um identificador de chave e a assinatura é calculada dentro do token FIDO2. Iniciar sessão exige o dispositivo físico e, por omissão, um toque em cada autenticação.
Posso usar chaves SSH FIDO2 a partir do telemóvel?
Usar chaves SSH FIDO2 em iOS ou Android depende de o cliente móvel implementar ed25519-sk e da forma como o token se liga ao telemóvel. A alternativa habitual é uma chave Ed25519 gerada no dispositivo e guardada no seu armazenamento seguro, que é como o termi1 funciona.