الخلاصة
- RFC 9901 هو مواصفة IETF على مسار المعايير، ويعرّف الإفصاح الانتقائي لعناصر JSON داخل كائنات JWS، مع JWT حالة الاستخدام الأساسية.
- يستبدل المُصدِر القيمة الواضحة بملخّص في الحمولة الموقّعة، ويسلّم الحامل إفصاحاً منفصلاً؛ ثم يعرض الحامل الإفصاحات المطلوبة فقط ويعيد المتحقق حساب ملخّصاتها.
- هذا ليس تشفيراً ولا إثبات معرفة صفرية ولا اعتماداً مجهولاً، ولا يضمن عدم قابلية الارتباط تلقائياً.
ينشئ المُصدِر إفصاح خاصية الكائن من salt واسم المطالبة وقيمتها. أما عنصر المصفوفة فيستخدم salt والقيمة، وتُرمّز مصفوفة JSON بترميز UTF-8 ثم Base64url قبل التجزئة. يجب أن يكون كل salt عشوائياً تشفيرياً، مستقلاً وفريداً لكل مطالبة قابلة للإفصاح، ومخفياً عن الجميع عدا الحامل إلى حين الإفصاح؛ والتوصية حد أدنى قدره 128 بتاً عشوائياً. يحدد _sd_alg في المستوى الأعلى خوارزمية التجزئة، ويُمنع وضعه متداخلاً؛ وغيابه يعني sha-256، الذي يجب دعمه.
يوقّع المُصدِر JWT الموقّع، ولا يجوز استخدام الخوارزمية none. يتحقق المتحقق من توقيع المُصدِر ومن كل ملخّص لإفصاح مقدّم قبل إعادة بناء الحمولة المعالَجة. يدعم SD-JWT إفصاحاً متداخلاً ومتكرراً: فقد يعتمد كشف طفل مخفي على كشف الأب، ولذلك يجب الحفاظ على سلسلة التبعيات الصحيحة. ويمكن إدراج ملخّصات زائفة لإخفاء العدد أو الوجود الأصلي للمطالبات المخفية، لكنها تزيد الحجم وتخفف قناة جانبية فقط؛ ولا تمنع الارتباط.
ربط المفتاح Key Binding اختياري ما لم تتطلبه سياسة أو ملف استخدام. عند طلبه، يحمل SD-JWT المفتاح العام للحامل أو مرجعاً إليه، ويوقّع الحامل KB-JWT يتضمن typ بقيمة kb+jwt وiat وaud وnonce وsd_hash. يربط sd_hash الـKB-JWT بالـJWT الموقّع من المُصدِر وبالإفصاحات المختارة. وعلى المتحقق فحص مفتاح الحامل وتوقيعه وخوارزميته وtyp ونافذة وقت الإصدار والجمهور والـnonce وsd_hash.
يجب أن تحدد الملفات مطالبات الصلاحية المطلوبة؛ فإخفاء exp مثلاً قد يحرم المتحقق من بيانات لازمة لرفض العرض، وعليه رفض غياب المطالبة المفروضة. يعتمد RFC 9901 على بروتوكول النقل للسرية ولا يحدد آلية تشفير؛ لذلك يلزم نقل سري حين تهم مخاطر التنصت أو الربط السلبي، وقد يغلّف JWE الـSD-JWT على قناة معرضة للتسرب. ولا ينبغي تخزين الإفصاحات أو سجلاتها إلا بقدر الحاجة التشغيلية.
فحوص توافق عملية
- تحقق من توقيع JWS وفق RFC 7515، ومن JWT وفق أساس RFC 7519، وارفض none.
- تحقق من _sd_alg، واستخدم sha-256 عند غيابه، وافحص salt عشوائياً وفريداً لا يقل جزؤه الموصى به عن 128 بتاً.
- أعد حساب كل digest بعد ترميز الإفصاح كما تحدد المواصفة، وارفض الإفصاح غير المطابق أو التابع المفقود.
- افحص المطالبات الإلزامية، وسرية النقل، وعند فرض Key Binding افحص KB-JWT وكل حقوله وsd_hash.
مسار قرار المشغّل
ابدأ بتحديد الحد الأدنى من الدليل لكل غرض. إن كان الحقل لا يجوز إخفاؤه لأسباب صلاحية، اجعله مطلوباً أو ارفض العرض الناقص. صمّم الإفصاحات والأملاح، ثم قرر وفق السياسة هل يلزم Key Binding، وطبّق nonce وaud ونافذة زمنية وإدارة دورة حياة مفاتيح الحامل. بعد ذلك استخدم نقلاً سرياً وتخزيناً مقيداً، وحدد سجلات التدقيق وعمليات استدعاء الإلغاء من دون افتراض أن RFC يفرض آلية إلغاء معينة.
المصادر
إحاطة الأعضاء
سياق أعمق للملف الشخصي
سجّل الدخول بمستوى العضوية المناسب لفتح الإحاطة الكاملة وملاحظات المصادر.
للدائرة الاستراتيجية فقط
الدائرة الاستراتيجية
مفتوح لجميع القراء. افتح إحاطات الملف الشخصي بعد الانضمام وتسجيل الدخول.
انضم إلى الدائرة الاستراتيجيةلأعضاء تحالف القيادات فقط
تحالف القيادات
لأصحاب الأصول الفكرية المؤهلين وللإدارة؛ سجّل الدخول للوصول إلى إحاطات التحالف.
انضم إلى تحالف القيادات
