El formato en una frase
ISQR1 es una cadena segura para URL que contiene todos los parámetros que un decodificador necesita para descifrar: versión, sal, IV y texto cifrado incluida la etiqueta de autenticación AES-GCM.
ISQR1:<salt_b64url>:<iv_b64url>:<ciphertext_b64url>
Campos
| Campo | Longitud | Descripción |
|---|---|---|
ISQR1 |
5 caracteres | Versión y prefijo mágico. Los decodificadores deben rechazar las versiones desconocidas. |
salt_b64url |
16 bytes antes de la codificación | Sal aleatoria para PBKDF2. Debe generarse de nuevo en cada cifrado. |
iv_b64url |
12 bytes antes de la codificación | Nonce AES-GCM. Debe ser único con la misma clave. |
ciphertext_b64url |
variable | Texto cifrado AES-GCM incluida la etiqueta de autenticación de 128 bits. |
Parámetros criptográficos
Gramática similar a ABNF
payload = "ISQR1:" salt ":" iv ":" ciphertext
salt = 1*( ALPHA / DIGIT / "-" / "_" )
iv = 1*( ALPHA / DIGIT / "-" / "_" )
ciphertext = 1*( ALPHA / DIGIT / "-" / "_" )
Las implementaciones deben no solo validar la gramática, sino también verificar las longitudes en bytes decodificados para la sal y el IV.
Reglas del decodificador
- Eliminar espacios en blanco y tratar el texto UTF-8 como payload.
- Opcionalmente decodificar URL la parte después de
#de los fragmentos de URL. - Verificar el prefijo exactamente contra
ISQR1. - Decodificar la sal, el IV y el texto cifrado como Base64url sin padding.
- Derivar una clave AES-GCM de 256 bits desde la contraseña y la sal mediante PBKDF2-SHA-256.
- Descifrar el texto cifrado con AES-GCM e IV. Los errores indican contraseña incorrecta o datos manipulados.
Invariantes de seguridad
Sin reutilización
La sal y el IV se generan de nuevo para cada cifrado desde crypto.getRandomValues.
Sin secretos en el servidor
El modo estándar no requiere ni base de datos ni clave maestra. Todo lo necesario está en el código QR.
Autenticidad
AES-GCM proporciona protección de integridad. Los payloads manipulados no pueden descifrarse con éxito.
Versionado
Nuevos formatos pueden introducirse como ISQR2 sin romper silenciosamente los decodificadores existentes.