ما هو المفتاح الشبكي الجاسوني (JWK)؟
المفتاح الشبكي الجاسوني (JWK) هو صيغة تعتمد على جيسون لتمثيل المفاتيح التشفيرية. يُستخدم بشكل واسع في سياق توقيع الويب JSON (JSON Web Signature, JWS) و تشفير الويب بصيغة JSON (JSON Web Encryption, JWE) للتحقق من سلامة وسرية رموز جيسون الشبكية . كما يُستخدم في OpenID Connect (OIDC) لإدارة الهوية والتحكم في الوصول (access control).
على سبيل المثال، مفتاح عام مُشفر بصيغة PEM:
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEF/xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4
f1Qx3y49cUm646fMBX9DYx+43HzXm6VdX77uFymz90aO4dBunpTdUzLFRAiT7+In
gzZGDrIE+FG6CcqQuRP65r65SUzDOmP5
-----END PUBLIC KEY-----
…يمكن تمثيله كمفتاح JWK:
{
"kty": "EC",
"crv": "P-384",
"x": "F_xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4f1Qx3y49cUm646fMBX9DYx-43HzXm6Vd",
"y": "X77uFymz90aO4dBunpTdUzLFRAiT7-IngzZGDrIE-FG6CcqQuRP65r65SUzDOmP5"
}
كيف يعمل المفتاح الشبكي الجاسوني (JWK)؟
بما أن JWK هو صيغة تعتمد على جيسون، فإنه يمكن أن يحمل البيانات الوصفية الغنية حول المفتاح مقارنةً بالصيغ التقليدية مثل PEM. هنا بعض الصفات الشائعة في JWK:
kty
(نوع المفتاح): عائلة الخوارزمية التشفيرية المستخدمة مع المفتاح. القيم الشائعة تتضمنRSA
,EC
, وoct
. وقد تم تحديدEC
كـ “موصى بها+” في RFC 7518 .use
(استخدام المفتاح العام): الاستخدام المقصود للمفتاح العام. القيم الشائعة تتضمنsig
(توقيع) وenc
(تشفير).key_ops
(عمليات المفتاح): العمليات التي يدعمها المفتاح. القيم الشائعة تشملsign
,verify
,encrypt
, وdecrypt
.alg
(الخوارزمية): الخوارزمية المخصصة للاستخدام مع المفتاح. بناءً على نوع المفتاح، قد تختلف الخوارزمية. على سبيل المثال، يمكن استخدامRS256
مع مفتاح RSA، بينما يمكن استخدامES256
مع مفتاح EC.kid
(معرف المفتاح): معرف فريد للمفتاح. يمكن استخدامه لمطابقة مفتاح معين في مجموعة من المفاتيح.
باستثناء kty
, جميع الصفات الأخرى اختيارية ويمكن استخدامها لتوفير سياق إضافي حول المفتاح. وفقًا لقيمة kty
، قد تكون هناك صفات أخرى مطلوبة أو اختيارية. في المثال السابق، يمثل JWK مفتاح ECDSA (kty: "EC"
) مع منحنى P-384 (crv: "P-384"
). تحتوي صفتي x
وy
على إحداثيات المفتاح العام.
إليك مثال غير معياري لمفتاح عام RSA كـ JWK:
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"n": "0vx7agoebGcQSuuPiLJXZpt...-TmV4HCA1T8jXg3fE2VbA",
"e": "AQAB",
"kid": "2011-04-29-1234"
}
لمزيد من المعلومات التفصيلية حول سمات JWK ومعانيها، يُرجى الرجوع إلى RFC 7517 .
مجموعة مفاتيح شبكية جاسونية (JWKS)
عندما تحتاج عدة مفاتيح JWK إلى تجميعها معًا، يتم تنظيمها في مجموعة مفاتيح شبكية جاسونية (JWKS). تعتبر JWKS كائن جيسون يحتوي على مجموعة من مفاتيح JWK. يُستخدم بشكل شائع في استجابة نقطة النهاية jwks_uri
في اكتشاف OpenID Connect (OIDC) لتوفير المفاتيح العامة للتحقق من المفاتيح الموقعة لرموز JWT.
إليك مثال غير معياري على JWKS تحتوي على مفتاحين JWK:
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"alg": "RS256",
"n": "0vx7agoebGcQSuuPiLJXZpt...-TmV4HCA1T8jXg3fE2VbA",
"e": "AQAB",
"kid": "2011-04-29-1234"
},
{
"kty": "EC",
"crv": "P-384",
"x": "F_xQdbOho2Jw0hgmNPD0VAEPAgkQrfD4f1Qx3y49cUm646fMBX9DYx-43HzXm6Vd",
"y": "X77uFymz90aO4dBunpTdUzLFRAiT7-IngzZGDrIE-FG6CcqQuRP65r65SUzDOmP5"
}
]
}
في هذا المثال، تحتوي JWKS على مفتاحين JWK: مفتاح RSA ومفتاح EC. صفة keys
هي مجموعة من مفاتيح JWK، كل منها يمثل مفتاحًا مختلفًا.