========================================================================== PASSKEY FAILURE MATRIX ========================================================================== CASE NAME | RESULT | ENGINEERING REASON -------------------------------------------------------------------------------------------------------------- valid_login | ACCEPT | Challenge is fresh, origin and RP ID match, signature is ... replay_old_assertion | REJECT | Assertion rejected: Challenge mismatch: received 'GxRal5X... wrong_origin | REJECT | Assertion rejected: Origin mismatch: received 'https://ev... wrong_rp_id | REJECT | Assertion rejected: RP ID hash in authenticatorData does ... tampered_challenge | REJECT | Assertion rejected: Challenge mismatch: received 'tampere... wrong_credential_id | REJECT | Assertion rejected: Credential ID does not exist in Relyi... wrong_public_key | REJECT | Assertion rejected: ECDSA P-256 signature verification fa... public_key_database_leak | NO DIRECT LOGIN | Since the server only stores the public key, database the... private_key_compromise | CRITICAL | Stolen private keys allow direct account takeover. The se... ============================================================================================================== Scenario: valid_login Action: Normal authentication flow Checks: Credential ID exists, Challenge, Origin, RP ID, Signature, Increasing counter Result: ACCEPT Description: Challenge is fresh, origin and RP ID match, signature is correct, counter increased. -------------------------------------------------------------------------------- Scenario: replay_old_assertion Action: Attacker replays previous AssertionResponse containing challenge c1 Checks: Challenge match in clientDataJSON Result: REJECT Description: Assertion rejected: Challenge mismatch: received 'GxRal5XM2-HASjHIQSKPygZD-7aBFXo7iDZgWI1qVqo', expected 'ThdGx3GiHREogC77siKFpWhpwQgWWQ-yycHf6jFV1mA'. -------------------------------------------------------------------------------- Scenario: wrong_origin Action: Browser reports phished origin in clientDataJSON Checks: clientDataJSON origin == server expected origin Result: REJECT Description: Assertion rejected: Origin mismatch: received 'https://evil-phish.com', expected 'https://rp.example.com'. -------------------------------------------------------------------------------- Scenario: wrong_rp_id Action: Authenticator includes different RP ID hash in authenticatorData Checks: SHA256(server RP ID) == RP ID hash in authenticatorData Result: REJECT Description: Assertion rejected: RP ID hash in authenticatorData does not match expected relying party. -------------------------------------------------------------------------------- Scenario: tampered_challenge Action: Client submits altered challenge in clientDataJSON Checks: clientDataJSON challenge == server outstanding challenge Result: REJECT Description: Assertion rejected: Challenge mismatch: received 'tampered_challenge_value', expected 'XnrczG-oodtdEAuOIKcWJkVZWGOhrZw-FaUMrOAAp8Y'. -------------------------------------------------------------------------------- Scenario: wrong_credential_id Action: Client uses credential ID not registered with the server Checks: Credential ID exists in server database Result: REJECT Description: Assertion rejected: Credential ID does not exist in Relying Party database. -------------------------------------------------------------------------------- Scenario: wrong_public_key Action: Server database contains wrong public key for validation Checks: Signature verification checks out Result: REJECT Description: Assertion rejected: ECDSA P-256 signature verification failed. -------------------------------------------------------------------------------- Scenario: public_key_database_leak Action: Attacker steals public key DB; tries to log in by creating a forged signature Checks: Signature verification against stored public key Result: NO DIRECT LOGIN Description: Since the server only stores the public key, database theft does not allow account takeover. The attacker must possess the private key to sign the challenge. -------------------------------------------------------------------------------- Scenario: private_key_compromise Action: Attacker steals device private key; signs a fresh challenge successfully Checks: Signature verification, challenge validity, origin, RP ID Result: CRITICAL Description: Stolen private keys allow direct account takeover. The server verifies the signature and accepts the login, rendering all security checks ineffective. --------------------------------------------------------------------------------