
Biblioteca Python leve para ofuscar valores de payload JWT usando criptografia XOR com chaves baseadas em timestamp, impedindo a decodificação em texto simples de claims sensíveis como IDs de usuário.
Um JSON Web Token (JWT, pronunciado "jot") é uma forma compacta e segura para URL de passar uma mensagem JSON entre duas partes. É um padrão, definido na RFC 7519. O token é uma longa string, dividida em partes separadas por pontos. Cada parte é codificada em base64 URL.
As partes que o token possui dependem do tipo de JWT: se é um JWS (um token assinado) ou um JWE (um token criptografado). Se o token for assinado, terá três seções: o cabeçalho, o payload e a assinatura. Se o token for criptografado, consistirá de cinco partes: o cabeçalho, a chave criptografada, o vetor de inicialização, o texto cifrado (payload) e a tag de autenticação. Provavelmente o caso de uso mais comum para JWTs é utilizá-los como tokens de acesso e tokens de ID em fluxos OAuth e OpenID Connect, mas eles também podem servir a diferentes propósitos.
Este snippet de código oferece uma perspectiva de ajuste que visa aumentar a segurança da seção de payload ao decodificar tokens JWT, onde as chaves armazenadas são visíveis em texto simples. Este snippet de código fornece uma perspectiva de ajuste com o objetivo de melhorar a segurança da seção de payload ao decodificar tokens JWT. Normalmente, a seção de payload aparece em texto simples quando decodificada do token JWT (base64). O objetivo principal é criptografar levemente ou ofuscar os valores do payload, dificultando a compreensão de seu significado. A intenção é garantir que mesmo que alguém tente decodificar os valores do payload, não consiga fazê-lo facilmente.
A ideia por trás de tentar obscurecer o valor da chave chamada "userid" é a seguinte:
e..^^
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'
Tentar adulterar tokens JWT gerados usando este método requer acesso tanto à chave secreta do JWT quanto à chave simétrica XOR usada para criar o 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='}
