Protocolo
O identificador do dispositivo é o thumbprint da chave pública, e mais nada. Nenhum sinal de navegador entra no cálculo. A implementação canônica mora em shared/; os vetores, em spec/vectors.json.
Três RFCs, uma implementação
- JCS (RFC 8785). O payload da intent é canonicalizado antes do hash. Duas montagens do mesmo objeto com ordem ou número diferente produzem hash diferente, e o veredito vira
payload_mismatch. - Thumbprint (RFC 7638). O
deviceIdé o hash da chave pública JWK, sem user-agent, idioma ou tela. - DPoP. Cada chamada do navegador prova posse da chave não exportável, amarrada ao método e à URL. Um hash de payload sem conferência contra a assinatura é pior do que não existir: a trilha afirmaria o que ninguém aprovou.
Os vetores em spec/vectors.json são neutros de linguagem. Qualquer implementação que os satisfaça fala o mesmo protocolo.