FIDO2
O padrão por trás das passkeys. Quais são suas duas peças, por que substitui o segredo compartilhado por criptografia de chave pública e qual ataque deixa de funcionar quando ele é implementado.
Em resumo
O FIDO2 é o conjunto de especificações que permite autenticar uma pessoa com criptografia de chave pública em vez de um segredo compartilhado. É publicado pela FIDO Alliance e pelo W3C, e é a base técnica sobre a qual funcionam as passkeys.
A ideia é curta: o autenticador guarda uma chave privada que nunca é enviada ao site, e o servidor guarda apenas a chave pública correspondente. Autenticar-se é assinar um desafio com a chave privada.
FIDO2 são duas peças, e vale a pena diferenciá-las
Sob o mesmo nome convivem duas especificações que resolvem problemas diferentes.
- WebAuthn — a API que o navegador expõe para a aplicação registrar e usar credenciais. É um padrão do W3C e é a peça implementada do lado do site.
- CTAP — o protocolo que o navegador e o autenticador falam entre si. É a peça que permite que uma chave de segurança externa, conectada por USB, NFC ou Bluetooth, funcione com o navegador.
Quando o autenticador está dentro do mesmo dispositivo, a conversa do CTAP é interna e não se vê. Quando o autenticador é uma chave física à parte, o CTAP é o que faz o conjunto funcionar.
Não há segredo compartilhado, e isso muda duas coisas
Em um esquema de senha ou de OTP existe um dado que o servidor e o usuário conhecem. Esse dado pode vazar da base, ser interceptado em trânsito ou ser pedido por engano.
No FIDO2 ele não existe. O cadastro gera um par de chaves: a privada fica no autenticador e a pública é enviada ao servidor. Cada acesso posterior é uma assinatura sobre um desafio aleatório, que o servidor valida com a chave pública que já tinha.
Duas consequências operacionais decorrem disso.
- Um vazamento do servidor não entrega credenciais utilizáveis. O que é roubado são chaves públicas, que por definição não servem para autenticar.
- A credencial fica vinculada ao domínio que a registrou. O navegador só a oferece à origem correta, então um site falso não consegue pedi-la nem recebê-la. É a razão pela qual o phishing, mesmo com retransmissão em tempo real, deixa de funcionar contra esse fator. A resistência não depende de a pessoa notar o domínio falso: depende do navegador, que sim o percebe.
O autenticador pode estar no dispositivo ou ser uma chave à parte
A distinção define a experiência e o modelo de recuperação.
- Autenticador de plataforma — vive dentro do celular ou do computador e se desbloqueia com o traço biométrico ou o PIN do dispositivo. É o que faz uma passkey parecer o desbloqueio do celular.
- Autenticador externo — uma chave de segurança física que se conecta por USB, NFC ou Bluetooth e pode ser usada em vários equipamentos. É o formato habitual em populações de alto risco.
Nos dois casos, o traço biométrico ou o PIN desbloqueiam a chave localmente. Não viajam até o servidor e não fazem parte do protocolo de autenticação.
Que relação o FIDO2 tem com as passkeys
Uma passkey é uma credencial FIDO. O que a indústria acrescentou ao padrão foi a sincronização: a credencial pode ser copiada e replicada entre os dispositivos da mesma pessoa através da plataforma, em vez de ficar presa ao equipamento onde foi criada.
Essa sincronização resolveu o problema que travava a adoção, que era a perda do dispositivo, e em troca transferiu parte da confiança para a conta de plataforma que sincroniza. Também existem passkeys vinculadas a um único dispositivo, sem sincronização, para cenários em que essa cessão de confiança não é aceitável.
Perguntas frequentes
É o conjunto de especificações que permite autenticar com criptografia de chave pública em vez de segredos compartilhados. É formado por duas peças: WebAuthn, a API que o navegador expõe às aplicações, publicada pelo W3C, e CTAP, o protocolo entre o navegador e o autenticador, publicado pela FIDO Alliance. É a base técnica das passkeys.
FIDO2 é o nome do conjunto. WebAuthn é a parte que o site implementa: a interface que o navegador oferece para registrar e usar uma credencial. CTAP é a parte que permite que um autenticador externo, como uma chave de segurança USB ou NFC, converse com o navegador. Se o autenticador está dentro do próprio dispositivo, essa conversa acontece internamente e o usuário nunca a percebe.
Porque a credencial fica associada ao domínio onde foi registrada e o navegador só a oferece a esse domínio. Um site falso não consegue solicitá-la, então não há nada que a pessoa possa entregar por engano, nem mesmo para um atacante que retransmita a sessão em tempo real. Diferente de um código, que é um dado transcritível, aqui o que se usa é uma assinatura criptográfica vinculada à origem.