الخلاصة

  • يسمي CMS الخوارزميات في SignedData وSignerInfo وفي صفات موقعة اختيارية. يجب أن يطابق digest الخاص بالموقّع الـprehash الذي يثبته OID المركب، وأن تكون parameters خوارزمية التوقيع غائبة.
  • نجاح المكوّنين لا يكمل التحقق. على المستلم إعادة بناء DER الدقيق وحساب digest المحتوى ومقارنة حماية الخوارزميات، ثم تطبيق سياسة الشهادة والحالة والتفويض بصورة مستقلة.

أعطت المكتبة نتيجتين ناجحتين: مرّ مكوّن ML-DSA، ومرّ المكوّن التقليدي. لكن الغلاف CMS ذكر digest لا ينتمي إلى الخوارزمية المركبة التي أعلنها OID التوقيع.

كانت الحسابات صحيحة تحت تفسير واحد، بينما حمل الكائن تفسيرين متعارضين.

تعالج المراجعة 05 من Composite Module-Lattice-Based Digital Signature Algorithm (ML-DSA) for use in Cryptographic Message Syntax (CMS) هذه الفجوة. إنها Internet-Draft نشطة لمجموعة LAMPS ضمن مسار IETF، وحالتها المقصودة Proposed Standard. تحمل تاريخ 22 مايو 2026 وتنتهي في 23 نوفمبر. سجّل Datatracker تغييراً إجرائياً في 1 أكتوبر ويعرضها الآن في قائمة RFC Editor بانتظار محرر ثانٍ. لم تصبح RFC بعد، ولا يثبت تقدمها دعماً برمجياً أو إصدار شهادة أو إعداداً أو نشراً أو نجاح انتقال.

ترافق الوثيقة مواصفة Composite ML-DSA الأساسية. تجمع المواصفة ML-DSA مع RSA أو ECDSA أو Ed25519 أو Ed448، ولا تنجح إلا إذا نجحت كل component signature. أما وثيقة CMS فتحدد البايتات والتصريحات الخارجية التي تدخل إلى تلك العملية.

OID واحد لا يلغي طبقات الغلاف

تعيد المراجعة ذكر 18 OID مركباً. يعرّف AlgorithmIdentifier نفسه المفتاح العام وخوارزمية التوقيع، ويجب أن يغيب حقل parameters. توفر هذه الواجهة مفهوماً واحداً بدلاً من أن يخترع كل تطبيق حاوية لتوقيعين.

لكن CMS يحتفظ بأسطح أخرى. يحتوي SignedData.digestAlgorithms مجموعة digests؛ ويحمل كل SignerInfo حقلي digest وsignature؛ ويمكن أن تضم الصفات CMSAlgorithmProtection؛ وتعرّف الشهادة خوارزمية المفتاح.

إذا تعارضت هذه المواضع، لا يجوز للمكتبة اختيار أول اسم تفهمه. يجب أن يسجل الإيصال OID المركب، وOID المفتاح، ومعرّفات SignerInfo، وغياب parameters، والقيم المحمية، ونتيجتي component. عبارة «توقيع PQ صالح» تمحو قرار التفسير.

الاسم المركب يثبت prehash

يعمل Composite ML-DSA في هذا الملف بوضع prehash فقط. يثبت كل اسم مركب SHA-256 أو SHA-512 أو SHAKE256 لطبقة CMS. ويجب أن يطابق SignerInfo.digestAlgorithm ذلك التعيين بالضبط.

تغيب parameters مع SHA-256 وSHA-512. وتغيب أيضاً مع SHAKE256، ويكون طول الناتج 64 بايت. قد يستخدم مكوّن ECDSA داخلياً SHA-384 داخل مركب يواجه CMS بـSHA-512؛ هذا الفرق الداخلي مشروع ولا يغير الربط الخارجي.

ينبغي أن تذكر القياسات الطبقة. دمج الأسماء الداخلية والخارجية قد يخلق إنذاراً كاذباً أو يخفي تعارضاً حقيقياً.

يُفترض أن تشمل مجموعة SignedData.digestAlgorithms الـdigest المقابل حتى يستطيع one-pass verifier الاستعداد. قد يمنع غيابه نجاح ذلك المسار، لكنه لا يستبدل التطابق الإلزامي في SignerInfo؛ فالأول إشارة حاوية والثاني قرار الموقّع.

signedAttrs تغيّر البايتات التي حُميت

من دون صفات موقعة يغطي التوقيع قيمة OCTET STRING في eContent ولا يشمل tag وlength. مع الصفات يغطي DER الكامل لـSignedAttrs، بما فيه tag وlength. وتستخدم مدخلات التوقيع EXPLICIT SET OF tag بدلاً من IMPLICIT [0] الظاهر في الرسالة النهائية.

تضم الصفات على الأقل content-type وmessage-digest. يجب على المستلم إعادة حساب digest المحتوى. التحقق على إعادة ترميز مختلفة، أو من دون مقارنة digest، ليس تحقق CMS مكتملًا حتى إن نجح المكوّنان.

احتفظ بـhash الكائن الخام، وhash المحتوى، وhash DER الدقيق، والـdigest المستلم والمعاد حسابه، والبايتات التي أُرسلت إلى التحقق المركب. شجرة ASN.1 مرتبة ليست الأصل.

للخوارزمية المركبة context string، لكن هذا الملف يثبتها كسلسلة فارغة. فصل الاستخدام يجب أن يأتي من content type أو صفات أو سياسة شهادة أو قاعدة تطبيق مثبتة.

توقيع رواية الخوارزمية نفسها

يعرّف RFC 6211 صفة CMSAlgorithmProtection لإدراج digest وخوارزمية signature أو MAC ضمن الصفات الموقعة. ويشدد RFC 8933 الاتساق. توصي المراجعة 05 بهذه الصفة ضد algorithm substitution.

يمكن تغيير حقل خارجي غير موقّع من دون تغيير مدخل التوقيع. أما المعرّف داخل signedAttrs فيصبح جزءاً من DER المحمي، ويمكن مقارنته بـSignerInfo وOID المركب والمفتاح.

مجرد وجود الصفة لا يكفي. يجب التحقق من بنيتها وموضعها وOID وparameters والتوافق. ولأن المسودة تستخدم SHOULD، يجب أن يكون الغياب مدخلاً صريحاً في السياسة لا نجاحاً عاماً.

السجل والنص لا يتحركان بالسرعة نفسها

تطلب المسودة معرف module لـASN.1. ما زال نص revision 05 المجمد يحتوي placeholder. أما سجل IANA العام الملتقط في 2 أكتوبر فيعرض decimal 88 لـid-mod-composite-mldsa-cms-2026 ويشير إلى Internet-Draft.

يمكن أن تصح الحالتان معاً: تخصيص علني، ومصدر فيه علامة تحرير، ووثيقة في قائمة RFC Editor، ولا رقم RFC بعد. يثبت السجل التخصيص في لحظة الالتقاط، لا النشر أو التشغيل.

نجاح المكوّنين لا يمنح سلطة القرار

تطلب المواصفة الأساسية نجاح كل component وتمنع إعادة استخدام مفاتيحها خارج المركب. هذه حدود تشفيرية مهمة.

لكنها لا تثبت certificate path أو freshness أو key usage أو سلطة الموقّع أو معنى المحتوى أو النتيجة. ملف موافقة موقّع لا يثبت أن الدفع أو التثبيت أو التغيير نُفذ.

افصل parsing وencoding، واتفاق الخوارزميات، وdigest، ونتائج المكوّنات، والشهادة، والهوية والتفويض، وقرار التطبيق، والتسليم، والديمومة، والأثر الخارجي.