Versioniertes Payload-Format

ISQR1 Open Format

Eine kompakte Spezifikation für verschlüsselte QR-Codes: Feldaufbau, Encoding, kryptografische Parameter und Decoder-Regeln.

Format in einem Satz

ISQR1 ist ein URL-sicherer String, der alle Parameter enthält, die ein Decoder zum Entschlüsseln braucht: Version, Salt, IV und Ciphertext inklusive AES-GCM-Auth-Tag.

ISQR1:<salt_b64url>:<iv_b64url>:<ciphertext_b64url>

Felder

Feld Länge Beschreibung
ISQR1 5 Zeichen Version und Magic Prefix. Decoder müssen unbekannte Versionen ablehnen.
salt_b64url 16 Byte vor Encoding Zufälliger Salt für PBKDF2. Muss pro Verschlüsselung neu erzeugt werden.
iv_b64url 12 Byte vor Encoding AES-GCM Nonce. Muss mit demselben Schlüssel eindeutig sein.
ciphertext_b64url variabel AES-GCM Ciphertext inklusive 128-bit Authentifizierungs-Tag.

Kryptografische Parameter

CipherAES-GCM 256-bit
KDFPBKDF2-SHA-256
Iterationen250 000
EncodingBase64url ohne Padding

ABNF-nahe Grammatik

payload      = "ISQR1:" salt ":" iv ":" ciphertext
salt         = 1*( ALPHA / DIGIT / "-" / "_" )
iv           = 1*( ALPHA / DIGIT / "-" / "_" )
ciphertext   = 1*( ALPHA / DIGIT / "-" / "_" )

Implementierungen sollten nicht nur die Grammatik prüfen, sondern auch die dekodierten Byte-Längen für Salt und IV validieren.

Decoder-Regeln

  1. Whitespace entfernen und UTF-8 Text als Payload behandeln.
  2. Optional aus URL-Fragmenten den Teil nach # URL-dekodieren.
  3. Prefix exakt gegen ISQR1 prüfen.
  4. Salt, IV und Ciphertext als Base64url ohne Padding dekodieren.
  5. Aus Passwort und Salt via PBKDF2-SHA-256 einen 256-bit AES-GCM-Schlüssel ableiten.
  6. Ciphertext mit AES-GCM und IV entschlüsseln. Fehler bedeuten falsches Passwort oder manipulierte Daten.

Sicherheitsinvarianten

Keine Wiederverwendung

Salt und IV werden für jede Verschlüsselung neu aus crypto.getRandomValues erzeugt.

Keine Server-Geheimnisse

Der Standardmodus benötigt weder Datenbank noch Master-Key. Alles Notwendige liegt im QR-Code.

Authentizität

AES-GCM liefert Integritätsschutz. Veränderte Payloads können nicht erfolgreich entschlüsselt werden.

Versionierung

Neue Formate können als ISQR2 eingeführt werden, ohne bestehende Decoder still zu brechen.