
Librería Python ligera para ofuscar valores del payload JWT usando cifrado XOR con claves basadas en timestamp, evitando la decodificación en texto plano de claims sensibles como IDs de usuario.
Un JSON Web Token (JWT, pronunciado "jot") es una forma compacta y segura para URL de pasar un mensaje JSON entre dos partes. Es un estándar, definido en RFC 7519. El token es una cadena larga, dividida en partes separadas por puntos. Cada parte está codificada en base64 URL.
Las partes que tiene el token dependen del tipo de JWT: si es un JWS (token firmado) o un JWE (token cifrado). Si el token está firmado, tendrá tres secciones: el encabezado, el payload y la firma. Si el token está cifrado, constará de cinco partes: el encabezado, la clave cifrada, el vector de inicialización, el texto cifrado (payload) y la etiqueta de autenticación. Probablemente el caso de uso más común para los JWT es utilizarlos como tokens de acceso y tokens de ID en flujos OAuth y OpenID Connect, pero también pueden servir para otros propósitos.
Este fragmento de código ofrece una perspectiva de ajuste destinada a mejorar la seguridad de la sección de payload al decodificar tokens JWT, donde las claves almacenadas son visibles en texto plano. Este fragmento de código proporciona una perspectiva de ajuste destinada a mejorar la seguridad de la sección de payload al decodificar tokens JWT. Normalmente, la sección de payload aparece en texto plano cuando se decodifica del token JWT (base64). El objetivo principal es cifrar u ofuscar ligeramente los valores del payload, dificultando la comprensión de su significado. La intención es asegurar que incluso si alguien intenta decodificar los valores del payload, no pueda hacerlo fácilmente.
La idea detrás de intentar ocultar el valor de la clave llamada "userid" es la siguiente:
y..^^
in the example, the key is shown as { 'userid': 'random_value' },
making it apparent that it represents a user ID.
However, this is merely for illustrative purposes.
In practice, a predetermined and undisclosed name is typically used.
For example, 'a': 'changing_random_value'
Intentar manipular tokens JWT generados con este método requiere acceso tanto a la clave secreta del JWT como a la clave simétrica XOR utilizada para crear el UserID.
# python3 main.py
- Current Unix Timestamp: 1709160368
- Current Unix Timestamp to Human Readable: 2024-02-29 07:46:08
- userid: 23243232
- XOR Symmetric key: b'generally_user_salt_or_hash_or_random_uuid_this_value_must_be_in_dbms'
- JWT Secret key: yes_your_service_jwt_secret_key
- Encoded UserID and Timestamp: VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo=
- Decoded UserID and Hashed Timestamp: 23243232|e27436b7393eb6c2fb4d5e2a508a9c5c
- JWT Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0aW1lc3RhbXAiOiIyMDI0LTAyLTI5IDA3OjQ2OjA4IiwidXNlcmlkIjoiVlZaY1VVRlRYMTRGT2tkRVVVRnBFVlpmVFd3S0VHa0xVeFVLYXd0SE9rQUFXMVJYREdZV1FBbz0ifQ.bM_6cBZHdXhMZjyefr6YO5n5X51SzXjyBUEzFiBaZ7Q
- Decoded JWT: {'timestamp': '2024-02-29 07:46:08', 'userid': 'VVZcUUFTX14FOkdEUUFpEVZfTWwKEGkLUxUKawtHOkAAW1RXDGYWQAo='}
# run again
- Decoded JWT: {'timestamp': '2024-02-29 08:16:36', 'userid': 'VVZcUUFTX14FaRNAVBRpRQcORmtWRGleVUtRZlYXaBZZCgYOWGlDR10='}
- Decoded JWT: {'timestamp': '2024-02-29 08:16:51', 'userid': 'VVZcUUFTX14FZxMRVUdnEgJZEmxfRztRVUBabAsRZkdVVlJWWztGQVA='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:01', 'userid': 'VVZcUUFTX14FbxYQUkM8RVRZEmkLRWsNUBYNb1sQPREFDFYKDmYRQV4='}
- Decoded JWT: {'timestamp': '2024-02-29 08:17:09', 'userid': 'VVZcUUFTX14FbUNEVEVqEFlaTGoKQjxZBRULOlpGPUtSClALWD5GRAs='}
