Formato payload versionato

ISQR1 Open Format

Una specifica compatta per QR Code cifrati: struttura dei campi, codifica, parametri crittografici e regole di decodifica.

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

CipherAES-GCM 256-bit
KDFPBKDF2-SHA-256
Iterazioni250 000
CodificaBase64url senza padding

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

  1. Rimuovere gli spazi bianchi e trattare il testo UTF-8 come payload.
  2. Opzionalmente decodificare URL la parte dopo # dai frammenti URL.
  3. Verificare il prefisso esattamente contro ISQR1.
  4. Decodificare il sale, l'IV e il testo cifrato come Base64url senza padding.
  5. Derivare una chiave AES-GCM a 256 bit dalla password e dal sale tramite PBKDF2-SHA-256.
  6. 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.