recent
أخبار ساخنة

A Little Tweak To Hide JWT Payload Values A Few Modifications And Suggestions To Protect The JWT Payload

Home

A Little Tweak To Hide JWT Payload Values A Few Modifications And Suggestions To Protect The JWT Payload.
A Little Tweak To Hide JWT Payload Values A Few Modifications And Suggestions To Protect The JWT Payload
بعض التعديلات لإخفاء قيم الحمولة الصافية jwt

حفنة من التعديلات والأفكار لحماية حمولة JWT، مما يجعل من غير المجدي محاولة فك التشفير عن طريق تغيير قيمتها باستمرار،

مما يضمن أن يظل الإخراج الذي تم فك تشفيره غير مفهوم مع فرض الحد الأدنى من الحمل العام للأداء.

ما هو رمز JWT؟

يعد JSON Web Token (JWT، يُنطق "jot") طريقة مدمجة وآمنة لعنوان URL لتمرير رسالة JSON بين طرفين.

 إنه معيار تم تعريفه في RFC 7519. الرمز المميز عبارة عن سلسلة طويلة، مقسمة إلى أجزاء مفصولة بنقاط. كل جزء مشفر بـ base64 URL.

تعتمد الأجزاء التي يحتوي عليها الرمز المميز على نوع JWT: سواء كان JWS (رمز مميز موقّع) أو JWE (رمز مميز مشفر).

 إذا تم توقيع الرمز المميز، فسيكون له ثلاثة أقسام: الرأس والحمولة والتوقيع.

 إذا تم تشفير الرمز المميز، فسوف يتكون من خمسة أجزاء: الرأس، والمفتاح المشفر، ومتجه التهيئة، والنص المشفر (الحمولة)، وعلامة المصادقة.

 ربما تكون حالة الاستخدام الأكثر شيوعًا لـ JWTs هي استخدامها كرموز وصول ورموز مميزة للمعرف في تدفقات OAuth وOpenID Connect، ولكنها يمكن أن تخدم أغراضًا مختلفة أيضًا.

الهدف الأساسي لمقتطف الشفرة هذا

يوفر مقتطف الكود هذا منظورًا تعديليًا يهدف إلى تعزيز أمان قسم الحمولة عند فك تشفير رموز JWT، حيث تكون المفاتيح المخزنة مرئية في نص عادي.

 يوفر مقتطف الكود هذا منظورًا تعديليًا يهدف إلى تعزيز أمان قسم الحمولة النافعة عند فك تشفير رموز JWT.

 عادةً ما يظهر قسم الحمولة في نص عادي عند فك تشفيره من رمز JWT (base64).

 الهدف الرئيسي هو تشفير قيم الحمولة أو التعتيم عليها بشكل طفيف، مما يجعل من الصعب تمييز معناها.

 والقصد من ذلك هو التأكد من أنه حتى لو حاول شخص ما فك تشفير قيم الحمولة، فلن يتمكن من القيام بذلك بسهولة.

معرف المستخدم

يستهدف مقتطف الشفرة المفتاح المسمى "userid" المخزن في قسم الحمولة كمثال.

ينبع اختيار "userid" من استخدامه المتكرر لتحديد هوية المستخدم أو لأغراض المصادقة بعد التحقق من صحة الرمز المميز (على سبيل المثال، التأكد من عدم انتهاء صلاحيته).

الفكرة وراء محاولة إخفاء قيمة المفتاح المسمى "userid" هي كما يلي:

التشفير:

تتم تجزئة الطابع الزمني ثم تشفيره عن طريق إجراء عملية XOR بالبت باستخدام معرف المستخدم.

يتم تنفيذ عملية XOR باستخدام مفتاح متماثل.

ثم يتم ترميز القيمة الناتجة باستخدام Base64.

فك التشفير:

يتم فك تشفير البيانات المشفرة باستخدام Base64.

يتم تنفيذ فك التشفير عن طريق عملية XOR باستخدام المفتاح المتماثل.

يتم الكشف عن معرف المستخدم الأصلي والطابع الزمني المجزأ في نص عادي.

يتم استخراج جزء معرف المستخدم عن طريق التقسيم عند "|" محدد للاستخدام والأغراض ذات الصلة.

المفتاح المتماثل لتشفير XOR:

يمكن استخدام مواد مختلفة لهذا المفتاح.

يمكن أن يكون عبارة عن ملح يستخدم في تجزئة كلمة المرور التقليدية، أو سلسلة عشوائية عشوائية، أو UUID تم إنشاؤه، أو أي مادة أخرى مناسبة.

ومع ذلك، يجب تخزين هذا المفتاح بشكل آمن في نظام إدارة اقاعدة البيانت (DBMS).

و..^^

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 المستخدم لإنشاء معرف المستخدم.

و...

إذا وجدت هذا مفيدًا، يرجى وضع "تعليق" 🌟 لدعم المزيد من التحسينات.

معاينة

# 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='}

google-playkhamsatmostaqltradent