
JWT पेलोड मानों को XOR एन्क्रिप्शन और टाइमस्टैम्प-आधारित कुंजियों का उपयोग करके अस्पष्ट करने के लिए हल्की Python लाइब्रेरी, जो उपयोगकर्ता आईडी जैसे संवेदनशील दावों को सादे पाठ में डिकोड होने से रोकती है।
एक JSON वेब टोकन (JWT, उच्चारित "जॉट") दो पक्षों के बीच JSON संदेश पास करने का एक कॉम्पैक्ट और URL-सुरक्षित तरीका है। यह RFC 7519 में परिभाषित एक मानक है। टोकन एक लंबी स्ट्रिंग है, जो डॉट्स द्वारा अलग किए गए भागों में विभाजित है। प्रत्येक भाग base64 URL-एन्कोडेड है।
टोकन के कौन से भाग हैं, यह JWT के प्रकार पर निर्भर करता है: चाहे वह JWS (एक हस्ताक्षरित टोकन) हो या JWE (एक एन्क्रिप्टेड टोकन)। यदि टोकन हस्ताक्षरित है तो इसके तीन खंड होंगे: हेडर, पेलोड और हस्ताक्षर। यदि टोकन एन्क्रिप्टेड है तो इसमें पाँच भाग होंगे: हेडर, एन्क्रिप्टेड कुंजी, आरंभिक वेक्टर, सिफरटेक्स्ट (पेलोड) और प्रमाणीकरण टैग। संभवतः JWTs का सबसे सामान्य उपयोग OAuth और OpenID Connect प्रवाहों में एक्सेस टोकन और आईडी टोकन के रूप में उनका उपयोग करना है, लेकिन वे विभिन्न उद्देश्यों की पूर्ति भी कर सकते हैं।
यह कोड स्निपेट JWT टोकन को डिकोड करते समय पेलोड अनुभाग की सुरक्षा बढ़ाने के उद्देश्य से एक ट्वीक परिप्रेक्ष्य प्रदान करता है, जहाँ संग्रहीत कुंजियाँ सादे पाठ में दिखाई देती हैं। यह कोड स्निपेट JWT टोकन को डिकोड करते समय पेलोड अनुभाग की सुरक्षा बढ़ाने के उद्देश्य से एक ट्वीक परिप्रेक्ष्य प्रदान करता है। सामान्यतः, JWT टोकन (base64) से डिकोड करने पर पेलोड अनुभाग सादे पाठ में दिखाई देता है। मुख्य उद्देश्य पेलोड मानों को हल्के से एन्क्रिप्ट या अस्पष्ट करना है, जिससे उनका अर्थ समझना कठिन हो जाए। इरादा यह सुनिश्चित करना है कि भले ही कोई पेलोड मानों को डिकोड करने का प्रयास करे, वे आसानी से ऐसा नहीं कर सकें।
"userid" नामक कुंजी के मान को अस्पष्ट करने का प्रयास करने के पीछे का विचार इस प्रकार है:
और..^^
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'
इस विधि का उपयोग करके उत्पन्न JWT टोकनों के साथ छेड़छाड़ करने का प्रयास करने के लिए JWT गुप्त कुंजी और UserID बनाने के लिए उपयोग की जाने वाली XOR सममित कुंजी दोनों तक पहुंच की आवश्यकता होती है।
# 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='}
