Passkeys.Tools is a comprehensive security testing and development toolkit for WebAuthn (passkey) implementations. It provides full emulation of both the client (browser) and authenticator layers, allowing security researchers, penetration testers, and developers to analyze relying party implementations for vulnerabilities and compliance issues.
Key Capabilities: Decode and inspect WebAuthn attestations and assertions • Craft credentials with any algorithm • Intercept and modify WebAuthn API calls • Test challenge binding, signature verification, and origin validation • Simulate cross-session attacks between multiple browser profiles • Verify compliance with the WebAuthn specification.
Offline analysis and manual crafting of WebAuthn data
A passive toolkit for decoding, modifying, and encoding WebAuthn attestations and assertions—think jwt.io but for passkeys. All data (keys, users, history) is stored locally in your browser's localStorage.
Use when: You have captured WebAuthn data (e.g., from network logs) and need to analyze or modify it offline.
Example: Decode an attestation object to inspect the credential public key, modify the signature counter, then re-encode it for replay testing.
Live interception and modification of WebAuthn API calls
Builds on Standalone Mode by adding real-time interception via the browser extension. The extension hooks into the WebAuthn API to capture and modify all navigator.credentials.create() and get() calls before they reach the relying party—similar to Burp Suite but specialized for WebAuthn. Data remains in localStorage.
Use when: You need to test a relying party's server-side validation by modifying live WebAuthn responses.
Example: Intercept a registration, replace the challenge with random bytes, and verify if the server properly validates challenge binding. Or flip a bit in the signature to test signature verification.
Multi-browser testing with shared remote storage
Extends Interceptor Mode with a remote storage backend, enabling two browser profiles (e.g., victim and attacker) to share keys, users, and history in real-time. This is essential for testing cross-session attacks where data must flow between separate browser instances. Optional end-to-end encryption protects your data on the server.
Use when: You need to simulate attacks involving multiple parties, such as session binding or credential reuse across different sessions.
Example: In browser A (victim), start a passkey registration and dismiss it. In browser B (attacker), intercept a registration and swap in the victim's challenge. If the server accepts this, it indicates a session binding vulnerability.
Trigger navigator.credentials.create() API calls with custom PublicKeyCredentialCreationOptions. Test how the browser and authenticator handle different registration parameters, algorithms, and attestation preferences.
Trigger navigator.credentials.get() API calls with custom PublicKeyCredentialRequestOptions. Test authentication flows with specific credential IDs, user verification requirements, and mediation settings.
Decode, inspect, modify, and re-encode attestation objects and clientDataJSON. Supports none and packed attestation formats. Manipulate flags, AAGUID, credential IDs, public keys, and extensions.
Decode, modify, and encode assertion authenticatorData, clientDataJSON, and signatures. Sign assertions using stored private keys or verify existing signatures against stored public keys.
Manage cryptographic keys with full import/export support. Generate key pairs for all WebAuthn algorithms (ES256, ES384, ES512, RS256, PS256, EdDSA, etc.). Associate credential IDs with keys for realistic credential emulation.
Store and manage user account data including RP IDs, usernames, display names, and user handles. Users are automatically captured during registration interceptions for easy reuse in authentication tests.
Complete audit log of all intercepted operations. Search, filter, and export entries. Copy values between sessions to perform cross-operation attacks like challenge swapping or credential reuse.
Encoding utilities for Base64, Base64URL, and Hex conversions. Convert keys between JWK, COSE, PEM, and DER formats for compatibility with different tools and libraries.
Central hub for live WebAuthn interception (requires browser extension). View request details, select credentials and keys, apply one-click security tests (challenge manipulation, signature tampering, flag modifications), and craft custom responses.
Follow these step-by-step instructions to set up your preferred usage mode:
No setup required! Simply open Passkeys.Tools in your browser and start using the Attestation, Assertion, Keys, and Converters tabs. All data is automatically stored in your browser's localStorage and persists across sessions.
To intercept live WebAuthn operations, you need to install and configure the browser extension:
chrome://extensions, enable "Developer mode" (top right), click "Load unpacked", and select the extracted extension folder.
https://passkeys.tools). Change this if you're self-hosting.To share data between multiple browser profiles or browsers, you need to configure the extension for profile mode and enable remote storage:
https://db.passkeys.tools (no setup required).| Shortcut | Action |
|---|
TBD
navigator.credentials.create({publicKey: {
navigator.credentials.get({publicKey: {
| Name | Credential ID | Public Key | Private Key |
|---|
| RP ID | Name | Display Name | User ID | Mode |
|---|
| Mode | - |
|---|---|
| Type | - |
| Origin | - |
| Cross Origin | - |
| Top Origin | - |
| Mediation | - |
Choose your preferred color theme.
Choose how to store your keys, users, and history.
| Timestamp | Info | Origin | Credential / Key / User | Actions |
|---|