Lab · 10 / 16
Una chiave che non si può rubare.
Una passkey sostituisce la password con una coppia di chiavi. La chiave privata non lascia mai il dispositivo e il browser la usa solo sul sito per cui è stata creata.
- Authenticator
- telefono, computer o chiavetta
- Browser
- controlla l’origine del sito
- Server
- il sito, detto relying party
- "Crea una passkey"
Passo 1 di 5
L’utente chiede una passkey
In parole semplici Dici all’edificio che vuoi una chiave al posto della password all’ingresso.
L’utente ha già fatto l’accesso, per esempio con password e MFA, e sceglie di aggiungere una passkey all’account.
- creation options · challenge
Passo 2 di 5
Il server invia le regole
In parole semplici L’edificio ti dà una chiave vergine con il suo nome inciso sopra.
Il server invia una challenge casuale, la propria identità (rp.id), un id per l’utente e gli algoritmi che accetta. Chiede anche la user verification: impronta, volto o PIN.
{ "challenge": "Y2hhbGxlbmdlLTEyMzQ", "rp": { "id": "example.com", "name": "Example" }, "user": { "id": "dXNlci0yNDgy", "name": "ada@example.com" }, "pubKeyCredParams": [{ "type": "public-key", "alg": -7 }, { "type": "public-key", "alg": -257 }], "authenticatorSelection": { "residentKey": "required", "userVerification": "required" } } - navigator.credentials.create()
Passo 3 di 5
Il browser chiede al dispositivo
In parole semplici Il browser controlla che tu sia davvero in quell’edificio prima di far tagliare la chiave.
Il browser verifica che rp.id corrisponda al sito nella barra degli indirizzi e aggiunge l’origine reale in clientDataJSON. Un dominio simile non può chiedere una chiave per example.com.
- impronta → nuova coppia di chiavi
Passo 4 di 5
Nasce una coppia di chiavi
In parole semplici Il telefono taglia la chiave e tiene l’originale in una cassaforte che apre solo la tua impronta.
Dopo il controllo di impronta o volto, l’autenticatore crea una nuova coppia di chiavi solo per questo sito. La chiave privata resta nell’hardware sicuro; escono solo la chiave pubblica e un credential id.
- attestationObject + clientDataJSON
Passo 5 di 5
Il server salva la chiave pubblica
In parole semplici L’edificio conserva solo lo stampo della serratura, inutile a un ladro.
Il server controlla challenge, origine e rpIdHash, poi salva il credential id e la chiave pubblica. Se il suo database viene rubato, non c’è nulla da riutilizzare: nessuna password, nessun segreto.
clientDataJSON = { "type": "webauthn.create", "challenge": "Y2hhbGxlbmdlLTEyMzQ", ✓ "origin": "https://example.com" ✓ } stored: credentialId = "AdKX…9fQ", publicKey = COSE(ES256), signCount = 0
Flusso completato.
Domini e valori d’esempio. Nulla esce dal tuo browser.