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
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
- Whitespace entfernen und UTF-8 Text als Payload behandeln.
- Optional aus URL-Fragmenten den Teil nach
#URL-dekodieren. - Prefix exakt gegen
ISQR1prüfen. - Salt, IV und Ciphertext als Base64url ohne Padding dekodieren.
- Aus Passwort und Salt via PBKDF2-SHA-256 einen 256-bit AES-GCM-Schlüssel ableiten.
- 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.