Il formato in una frase
ISQR1 è una stringa sicura per URL contenente tutti i parametri che un decodificatore necessita per decifrare: versione, sale, IV e testo cifrato incluso l'auth tag AES-GCM.
ISQR1:<salt_b64url>:<iv_b64url>:<ciphertext_b64url>
Campi
| Campo | Lunghezza | Descrizione |
|---|---|---|
ISQR1 |
5 caratteri | Versione e prefisso magico. I decodificatori devono rifiutare le versioni sconosciute. |
salt_b64url |
16 byte prima della codifica | Sale casuale per PBKDF2. Deve essere rigenerato per ogni cifratura. |
iv_b64url |
12 byte prima della codifica | Nonce AES-GCM. Deve essere unico con la stessa chiave. |
ciphertext_b64url |
variabile | Testo cifrato AES-GCM incluso il tag di autenticazione a 128 bit. |
Parametri crittografici
Grammatica simile ad ABNF
payload = "ISQR1:" salt ":" iv ":" ciphertext
salt = 1*( ALPHA / DIGIT / "-" / "_" )
iv = 1*( ALPHA / DIGIT / "-" / "_" )
ciphertext = 1*( ALPHA / DIGIT / "-" / "_" )
Le implementazioni devono non solo convalidare la grammatica, ma anche verificare le lunghezze in byte decodificate per il sale e l'IV.
Regole del decodificatore
- Rimuovere gli spazi bianchi e trattare il testo UTF-8 come payload.
- Opzionalmente decodificare URL la parte dopo
#dai frammenti URL. - Verificare il prefisso esattamente contro
ISQR1. - Decodificare il sale, l'IV e il testo cifrato come Base64url senza padding.
- Derivare una chiave AES-GCM a 256 bit dalla password e dal sale tramite PBKDF2-SHA-256.
- Decifrare il testo cifrato con AES-GCM e IV. Gli errori indicano password errata o dati manomessi.
Invarianti di sicurezza
Nessun riutilizzo
Il sale e l'IV vengono generati di nuovo per ogni cifratura da crypto.getRandomValues.
Nessun segreto lato server
La modalità standard non richiede né un database né una chiave maestra. Tutto il necessario è nel QR Code.
Autenticità
AES-GCM fornisce protezione dell'integrità. I payload manomessi non possono essere decifrati con successo.
Versioning
Nuovi formati possono essere introdotti come ISQR2 senza rompere silenziosamente i decodificatori esistenti.