github.com/go-webauthn/webauthn (el fork mantenido de duo-labs/webauthn) ejecuta las dos ceremonias —BeginRegistration/FinishRegistration y BeginLogin/FinishLogin, o sus variantes Validate* para frameworks distintos de net/http— y verifica todos los formatos de atestación. La comprobación validó las mismas respuestas de un autenticador por software que se usaron con SimpleWebAuthn, py_webauthn y WebAuthn4J.
La política sale de la configuración y viaja en SessionData. Con un AuthenticatorSelection vacío, BeginRegistration envió un objeto vacío, así que los navegadores aplican los valores predeterminados —verificación del usuario preferred, clave residente discouraged— y la validación aceptó respuestas con el indicador UV desactivado porque la sesión solo pedía preferred. Con UserVerification: required en la sesión, la misma aserción falló con User verification required but flag not set by authenticator. Establece la política en Config.AuthenticatorSelection, como hace el ejemplo, y guarda el SessionData completo entre las dos llamadas.
El tratamiento del contador es la diferencia más importante respecto de las demás bibliotecas. Con una aserción cuyo contador (3) era menor que el almacenado (5), el inicio de sesión se completó correctamente: la credencial devuelta tenía Authenticator.CloneWarning activado y su SignCount seguía en 5. La biblioteca solo informa de un posible clon; rechazar o no el inicio de sesión le corresponde a tu código, que debe comprobar CloneWarning después de cada inicio de sesión.
Las firmas de aserción deben ser DER ASN.1 —una firma r‖s en bruto de 64 bytes falló con Error validating the assertion signature: Signature invalid or not provided— y una firma DER high-S se verificó. La lista predeterminada de pubKeyCredParams es larga: ES256, ES384 y ES512 (-7, -35, -36), de RS256 a RS512 (de -257 a -259), de PS256 a PS512 (de -37 a -39) y Ed25519 (-8); la credencial Ed25519 se verificó de principio a fin. La 0.18.2 no tiene ninguna entrada ML-DSA.
Decodifica lo que envía un navegador con el inspector de WebAuthn, busca modelos de autenticador con la búsqueda de AAGUID y prueba ceremonias en el entorno de pruebas de llaves de acceso.