القائمة الرئيسية

الصفحات

(JWE) طريقة استخدام "تشفير الويب" على JSON

طريقة استخدام تشفير الويب JSON (JWE)،(JWE) How to use،Web Encoding on JSON،(JWE) How to use Web Encoding on JSON،Using JSON Web Encryption (JWE)،JSON،Algorithm،Java (Programming Language)،JWT (JSON Web Token)،جسون،الخوارزمية،جافا (لغة برمجة)،JWT (JSON Web Token)،تشفير الويب JSON،(JWE)،طريقة استخدام،"تشفير الويب" على JSON،(JWE) طريقة استخدام "تشفير الويب" على JSON،Using JSON Web Encryption (JWE)،Using JSON،Web Encryption (JWE)،استخدام تشفير الويب JSON (JWE)،




(JWE) طريقة استخدام "تشفير الويب" على JSON



يمكن استخدام تشفير الويب JSON (JWE) عندما يحتاج المرء إلى
 إضافة معلومات حساسة إلى رمز مميز لا يرغب المرء في مشاركته مع أنظمة أخرى.
في المقالة السابقة ، نظرنا في رموز ويب JSON الموقعة وكيفية استخدامها
 للحصول على تفويض عبر الخدمات. لكن في بعض الأحيان ، هناك مواقف تحتاج
 فيها إلى إضافة معلومات حساسة إلى رمز مميز لا ترغب في مشاركته مع أنظمة أخرى. 
أو يمكن إعطاء هذا الرمز لجهاز المستخدم (المتصفح ، الهاتف). في هذه الحالة ، 
يمكن للمستخدم فك شفرة الرمز والحصول على جميع المعلومات من الحمولة.
يمكن أن يكون أحد الحلول لمثل هذه المشكلة هو استخدام JSON Web Encryption
 (JWE) ، والتي يمكن العثور على المواصفات الكاملة لها في RFC7516 .


طريقة تشفير الويب JSON (JWE)



JWE هو إصدار مشفر من JWT ويبدو كالتالي:

Encoded Token 559 bytes)
eyJhbGcioi JSUOE t TOFFUCOyNTYiLCJ0eXAi0i J KV1Qi LC
31bmMi0i3BMjU2RONNIne. mzHayN2 csEwRHOQh LvzBChYY
wU-XY7PKYQI 3BHwCxhxubx09ks t KBkhIkJu7egz51AWOA9
kxe6HpEuv6wxQBndOThR- 74uxZvo-ZRv4c2hgxmt tAl1YY
EBUQVqnBStpPh .....


يتكون من الأجزاء التالية مفصولة بنقطة:

BASE64URL(UTF8(JWE Protected Header)) || '.' ||
BASE64URL(JWE Encrypted Key) || '.' ||
BASE64URL(JWE Initialization Vector) || '.' ||
BASE64URL(JWE Ciphertext) || '.' ||
BASE64URL(JWE Authentication Tag)


هيدر JWE المحمي



علي سبيل المثال:

{
  "enc": "A256GCM",
  "alg": "RSA-OAEP-256"
}


أين تكتب JWE 


1- alg- 
يتم تشفير مفتاح تشفير المحتوى للمستلم باستخدام خوارزمية
 RSAES-OAEP لإنتاج مفتاح JWE المشفر.
2- enc- 
يتم إجراء التشفير المصدق على النص العادي باستخدام خوارزمية AES GCM مع 
مفتاح 256 بت لإنتاج النص المشفر وعلامة الاستيقان.

- مفتاح JWE المشفر
قيمة مفتاح تشفير المحتوى المشفر.

- ناقل تهيئة JWE
القيمة التي يتم إنشاؤها عشوائيًا اللازمة لعملية التشفير.

- JWE Ciphertext
حمولة مشفرة.

- علامة مصادقة JWE
تُحسب أثناء عملية التشفير وتُستخدم للتحقق من النزاهة.

جيل رمزي "Token Generation"

هناك العديد من المكتبات للعديد من لغات البرمجة للعمل مع رموز JWE. لنفكر كمثال في مكتبة Nimbus.
build.gradle:

implementation 'com.nimbusds:nimbus-jose-jwt:9.25.6'


يمكن تمثيل الحمولة كمجموعة من المطالبات:

{
    "sub": "alice",
    "iss": "https://idp.example.org",
    "exp": 1669541629,
    "iat": 1669541029
}


لنقم بإنشاء رأس:
جافا


JWEHeader header = new JWEHeader(
    JWEAlgorithm.RSA_OAEP_256,
    EncryptionMethod.A256GCM
);


والذي يتوافق مع JSON التالي :


{
    "enc": "A256GCM",
    "alg": "RSA-OAEP-256"
}


لنقم بإنشاء مفتاح RSA:
جافا


RSAKey rsaJwk = new RSAKeyGenerator(2048)
    .generate();


باستخدام الجزء العام من المفتاح ، يمكننا إنشاء كائن Encrypter ، حيث نقوم بتشفير JWT:
جافا


RSAEncrypter encrypter = new RSAEncrypter(rsaJwk.toRSAPublicKey());
EncryptedJWT jwt = new EncryptedJWT(header, jwtClaims);
String jweString = jwt.encrypt(encrypter);


نتيجة التنفيذ:

eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.O01BFr_XxGzKEUb_Z9vQOW3DX2cQFxojrRy2JyM5_nqKnrpAa0rvcPI_ViT2PdPRogBwjHGRDM2uNLd1BberKQlaZYuqPGXnpzDQjosF0tQlgdtY3uEZUMT-9WPP8jCxxQg0AGIm4abkp1cgzAWBQzm1QYL8fwaz16MS48ExRz41dLhA0aEWE4e7TYzjrfaK8M4wIUlQCFIl-wS1N3U8W2XeUc9MLYGmHft_Rd9KJs1c-9KKdUQf6tEzJ92TGEC7TRZX4hGdtszIq3GGGBQaW8P9jPozqaDdrikF18D0btRHNf3_57sR_CPEGYX0O4mY775CLWqB4Y1adNn-fZ0xoA.ln7IYZDF9TdBIK6i.ZhQ3Q5TY827KFQw8DdRRzQVJVFdIE03B6AxMNZ1sQIjlUB4QUxg-UYqjPJESPUmFsODeshGWLa5t4tUri5j6uC4mFDbkbemPmNKIQiY5m8yc.5KKhrggMRm7ydVRQKJaT0g








لفك تشفير رمز JWE ، تحتاج إلى إنشاء كائن Decryptor وتمرير الجزء الخاص من المفتاح إليه:
جافا

EncryptedJWT jwt = EncryptedJWT.parse(jweString);
RSADecrypter decrypter = new RSADecrypter(rsaJwk.toPrivateKey());

jwt.decrypt(decrypter);
Payload payload = jwt.getPayload();


هنا ، استخدمنا خوارزمية تشفير غير متماثل - يتم استخدام الجزء العام 
من المفتاح للتشفير ، والجزء الخاص لفك التشفير. يسمح هذا الأسلوب بإصدار رموز
 JWE لخدمات الجهات الخارجية والتأكد من حماية البيانات (عندما يكون
 هناك وسطاء في مسار إرسال الرمز المميز). في هذه الحالة ، تحتاج الخدمة 
النهائية إلى نشر المفاتيح العامة ، والتي سنستخدمها لتشفير محتوى الرمز المميز.
 لفك تشفير الرمز المميز ، ستستخدم الخدمة الجزء الخاص من المفتاح ، والذي سيبقى سراً.
ولكن ماذا لو كان لدينا نفس المصدر وخدمة رمز المستهلك؟ يمكن أن تكون 
خلفية تقوم بتعيين ملف تعريف ارتباط في متصفح المستخدم بمعلومات حساسة. 
في هذه الحالة ، لن تحتاج إلى استخدام خوارزمية غير متماثلة - يمكنك استخدام خوارزمية متماثلة.
 في مصطلحات JWE ، هذا هو تشفير مباشر:
جافا

JWEHeader header = new JWEHeader(JWEAlgorithm.DIR, EncryptionMethod.A128CBC_HS256);


والذي يتوافق مع JSON التالي:

{
  "enc": "A128CBC-HS256",
  "alg": "dir"
}


لنقم بإنشاء مفتاح 256 بت:
جافا


KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);
SecretKey key = keyGen.generateKey();


وتشفير JWT:
جافا


JWEObject jweObject = new JWEObject(header, jwtClaims.toPayload());
jweObject.encrypt(new DirectEncrypter(key));
String jweString = jweObject.serialize()



نتيجة التنفيذ:

eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..lyJ_pcHfp8cz13TVav8MZQ.LmeN4jHxYg-dEFZ98PlVfNXFI29L5NGanA6ncALWcI9uDqpoXaaBcKeOKuzRayfQ3X7yPTuiMRHAUHMR5K3Rucmb8fQw2dkP3EONUg0lbdbmfbNwDbjQcWCGUWXfBWFg.v63pTlB7B15ZLEwSBwBUAg


لاحظ أن التشفير المباشر لا يشمل جزء JWE المشفر من الرمز المميز.
لفك تشفير الرمز المميز ، تحتاج إلى إنشاء Decryptor من نفس المفتاح:
جافا


EncryptedJWT jwt = EncryptedJWT.parse(jweString);
jwt.decrypt(new DirectDecrypter(key));

Payload payload = jwt.getPayload();



أداء التشفير JSON 


لتقييم أداء خوارزميات التشفير المتماثل وغير المتماثل ، تم إجراء معيار باستخدام مكتبة JHM.
 تم اختيار RSA_OAEP_256 / A256GCM كخوارزمية غير متماثلة ، 
A128CBC_HS256 كخوارزمية متماثلة. تم إجراء الاختبارات على جهاز Macbook Air M1.

الحمولة:

{
  "iss": "https://idp.example.org",
  "sub": "alice",
  "exp": 1669546229,
  "iat": 1669545629
}


نتائج المعيار:

Benchmark                Mode  Cnt       Score      Error  Units
Asymmetric Decrypt      thrpt    4    1062,387 ±    4,990  ops/s
Asymmetric Encrypt      thrpt    4   17551,393 ±  388,733  ops/s
Symmetric Decrypt       thrpt    4  152900,578 ± 1251,034  ops/s
Symmetric Encrypt       thrpt    4  122104,824 ± 5102,629  ops/s

Asymmetric Decrypt       avgt    4       0,001 ±    0,001   s/op
Asymmetric Encrypt       avgt    4      ≈ 10⁻⁴              s/op
Symmetric Decrypt        avgt    4      ≈ 10⁻⁵              s/op
Symmetric Encrypt        avgt    4      ≈ 10⁻⁵              s/op


كما هو متوقع ، تكون الخوارزميات غير المتماثلة أبطأ. وفقا لنتائج الاختبار ، 
أبطأ أكثر من عشر مرات. وبالتالي ، إذا أمكن ، يجب تفضيل الخوارزميات المتماثلة لزيادة الأداء.


الخلاصة:

تعد الرموز المميزة لـ JWE أداة قوية جدًا وتسمح لك بحل المشكلات 
المتعلقة بنقل البيانات الآمن مع الاستفادة من جميع مزايا الرموز المميزة المستقلة. 
في الوقت نفسه ، من الضروري الانتباه إلى مشكلات الأداء واختيار الخوارزمية الأنسب وطول المفتاح.



جدول المحتويات