
Libreria Python leggera per offuscare i valori del payload JWT utilizzando la crittografia XOR con chiavi basate su timestamp, impedendo la decodifica in chiaro di claim sensibili come gli ID utente.
Un JSON Web Token (JWT, pronunciato "jot") è un modo compatto e URL-safe per passare un messaggio JSON tra due parti. È uno standard, definito nell'RFC 7519. Il token è una lunga stringa, divisa in parti separate da punti. Ogni parte è codificata in base64 URL.
Le parti del token dipendono dal tipo di JWT: se è un JWS (token firmato) o un JWE (token crittografato). Se il token è firmato avrà tre sezioni: l'intestazione, il payload e la firma. Se il token è crittografato sarà composto da cinque parti: l'intestazione, la chiave crittografata, il vettore di inizializzazione, il testo cifrato (payload) e il tag di autenticazione. Probabilmente l'uso più comune dei JWT è come token di accesso e token ID nei flussi OAuth e OpenID Connect, ma possono servire anche ad altri scopi.
Questo frammento di codice offre una prospettiva di tweak mirata a migliorare la sicurezza della sezione payload durante la decodifica dei token JWT, dove le chiavi memorizzate sono visibili in chiaro. Questo frammento di codice fornisce una prospettiva di tweak per migliorare la sicurezza della sezione payload durante la decodifica dei token JWT. Tipicamente, la sezione payload appare in chiaro quando viene decodificata dal token JWT (base64). L'obiettivo principale è crittografare leggermente o offuscare i valori del payload, rendendo difficile comprenderne il significato. L'intenzione è garantire che anche se qualcuno tenta di decodificare i valori del payload, non possa farlo facilmente.
L'idea alla base del tentativo di offuscare il valore della chiave denominata "userid" è la seguente:
e..^^
nell'esempio, la chiave è mostrata come { 'userid': 'random_value' },
rendendo evidente che rappresenta un ID utente.
Tuttavia, questo è solo a scopo illustrativo.
In pratica, viene tipicamente utilizzato un nome predeterminato e non divulgato.
Ad esempio, 'a': 'changing_random_value'
Tentare di manomettere i token JWT generati con questo metodo richiede l'accesso sia alla chiave segreta JWT che alla chiave simmetrica XOR utilizzata per creare 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='}
