
مكتبة بايثون خفيفة لإخفاء قيم حمولة JWT باستخدام تشفير XOR بمفاتيح تعتمد على الطابع الزمني، مما يمنع فك الترميز بنص واضح للمطالبات الحساسة مثل معرفات المستخدمين.
رمز JSON Web Token (JWT، يُنطق "جوت") هو وسيلة مضغوطة وآمنة لعناوين URL لتمرير رسالة JSON بين طرفين. إنه معيار محدد في RFC 7519. الرمز عبارة عن سلسلة طويلة مقسمة إلى أجزاء مفصولة بنقاط. كل جزء مشفر base64 URL-encoded.
تعتمد الأجزاء التي يتكون منها الرمز على نوع JWT: سواء كان JWS (رمز موقع) أو JWE (رمز مشفر). إذا كان الرمز موقعًا، فسيكون له ثلاثة أقسام: الرأس والحمولة والتوقيع. إذا كان الرمز مشفرًا، فسيتكون من خمسة أجزاء: الرأس والمفتاح المشفر ومتجه التهيئة والنص المشفر (الحمولة) وعلامة المصادقة. ربما يكون الاستخدام الأكثر شيوعًا لرموز JWT هو استخدامها كرموز وصول ورموز هوية في تدفقات 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 والمفتاح المتماثل XOR المستخدم لإنشاء 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='}
