شهادة DAT
1. نظرة عامة
شهادة DAT هي المواصفة التي تتحكم في صلاحية إصدار DAT، وتدير خوارزميات التوقيع والتشفير الخاصة بالرمز ومعلومات المفاتيح (Key).
تمتلك كل شهادة معرّفاً فريداً (CID)، وتدير دورة حياة الرمز بأمان عبر فرض نافذة إصدار DAT ومدة صلاحية الرموز الصادرة عنها (TTL).
تدوير المفاتيح في DAT ليس اختيارياً. فنافذة الإصدار مثبَّتة في الشهادة على مستوى المواصفة، وبعد انقضائها لا يمكن إنشاء رموز جديدة بتلك الشهادة.
2. بنية الشهادة
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key2.1. مواصفات الحقول التفصيلية
CID : Hex (uint64)
- معرّف الشهادة الفريد الذي يميّزها. يرتبط بحقل
CIDفي DAT لتحديد الشهادة المستخدمة عند التحقق. - CID معرّف ثابت لا يتغير. عند تبديل المفاتيح لا يُعاد استخدام نفس CID، بل تُصدر شهادة بـ CID جديد.
وقت بدء إصدار DAT : uint64 (Unix Time)
- يُحدِّد وقت البدء الذي يمكن فيه إصدار DAT باستخدام هذه الشهادة، بوحدة الثواني (Seconds).
مدة إصدار DAT : uint64 (Seconds)
- مدة صلاحية الإصدار للشهادة. بعد انقضاء هذه المدة (بالثواني) اعتباراً من
وقت بدء إصدار DATلا يمكن إصدار DAT جديد بهذه الشهادة. - هي مدة (duration) وليست وقتاً مطلقاً. يُحسب وقت الانتهاء بالمعادلة
start + duration.
DAT TTL (مدة الصلاحية) : uint64 (Seconds)
- مدة صلاحية (Time To Live) الـ DAT الصادر عن هذه الشهادة. عند إنشاء DAT تُضبط قيمة
expireبإضافة هذه القيمة إلى وقت الإصدار.
خوارزمية التوقيع : String / Enum
- خوارزمية التوقيع المستخدمة في إنشاء حقل
signatureفي DAT والتحقق منه.
خوارزمية التشفير : String / Enum
- خوارزمية التشفير المستخدمة في تشفير حقل
secureفي DAT وفك تشفيره.
مفتاح التوقيع : Base64Url (Binary)
- بيانات المفتاح المستخدمة في التوقيع والتحقق. (قد تكون المفتاح العام/الخاص لمفتاح غير متماثل، أو مفتاحاً متماثلاً، وفقاً للخوارزمية.)
مفتاح التشفير : Base64Url (Binary)
- بيانات مفتاح التشفير المستخدمة في تشفير حقل
secureوفك تشفيره.
2.2. حساب الأوقات
end = start + duration وقت نهاية الإصدار
expire = end + ttl وقت الانتهاء النهائي للشهادة- تُجرى جميع الحسابات على uint64، ولا يُرفض إلا الطفحان (overflow) بوصفه خطأً.
- القيمتان
duration = 0وttl = 0قيمتان مشروعتان. يمكن بهما التعبير عن شهادة تُغلق نافذة إصدارها فوراً، أو شهادة تُنتج رموزاً تبطل فور انتهائها. - بما أن جميع الحقول أعداد صحيحة غير موقَّعة، فإن القيم السالبة غير موجودة على مستوى النوع.
2.3. توقيع المُنشئ (Constructor)
تستخدم جميع تنفيذات اللغات ترتيب الوسائط التالي.
(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
signature_key, crypto_key)الوسيط الثالث مدة وليس وقت نهاية
إذا مرّرت وقت النهاية المطلق (end) في الوسيط الثالث، فستُنشأ شهادة بنافذة صلاحية خاطئة دون أي خطأ، لأن القيمة تدخل كما هي في start + duration.
3. دورة حياة الشهادة
| المرحلة | الإصدار | التحقق | الحكم |
|---|---|---|---|
| تأخير الإصدار | ✕ | ○ | issuable() == false |
| قابلة للإصدار | ○ | ○ | issuable() == true |
| ما تبقى من DAT TTL | ✕ | ○ | نافذة الإصدار مغلقة لكن قبل الانتهاء |
| بعد الانتهاء النهائي | ✕ | ✕ | expired() == true |
- تُحدَّد إمكانية الإصدار بالشرط
signable() && start <= now <= end، وهو شامل للطرفين. - حتى بعد إغلاق نافذة الإصدار، تبقى الشهادة حية لمدة
ttlإضافية، لأن الرمز الصادر قُبيل إغلاق النافذة يجب أن يتمكن من استكمال عمره كاملاً. - الغرض من مرحلة تأخير الإصدار (delay) هو إتاحة الوقت لجميع عقد المجموعة كي تستلم الشهادة الجديدة. للتفاصيل راجع مستند مزامنة CMS.
4. الخوارزميات
4.1. خوارزميات التوقيع
قائمة خوارزميات التوقيع المستخدمة لمنع تعديل DAT أو تزويره. تدعم أسلوبَي المفتاح المتماثل وغير المتماثل.
| الاسم | الأسلوب | ملاحظات |
|---|---|---|
ECDSA-P256 | غير متماثل | توقيع رقمي بالمنحنى الإهليجي (NIST secp256r1) |
ECDSA-P384 | غير متماثل | توقيع رقمي بالمنحنى الإهليجي (NIST secp384r1) |
ECDSA-P521 | غير متماثل | توقيع رقمي بالمنحنى الإهليجي (NIST secp521r1) |
HMAC-SHA256-MFS | متماثل | Keyed-Hashing بمفتاح سري ثابت الحجم 256-bit |
HMAC-SHA384-MFS | متماثل | Keyed-Hashing بمفتاح سري ثابت الحجم 384-bit |
HMAC-SHA512-MFS | متماثل | Keyed-Hashing بمفتاح سري ثابت الحجم 512-bit |
MFS (Maximum Fixed Secret): أسلوب يستخدم مفتاحاً سرياً ثابت الحجم بعدد بتات مساوٍ لحجم مخرجات (Output) خوارزمية التجزئة.
4.2. خوارزميات التشفير
قائمة خوارزميات التشفير المصادَق عليه (Authenticated Encryption) لحماية البيانات السرية داخل DAT (حقل secure).
| الاسم | طول المفتاح | البنية |
|---|---|---|
IV-AES128-GCM | 128-bit | IV(96bit) + ناتج التشفير |
IV-AES256-GCM | 256-bit | IV(96bit) + ناتج التشفير |
دمج IV (Initialization Vector): يُدمَج NONCE (IV) فريد بحجم 96 بت يُولَّد في كل عملية تشفير كبادئة (Prefix) أمام ناتج التشفير. وعند فك التشفير تُفصَل الـ 96 بت الأولى بوصفها IV ثم تُجرى عملية فك التشفير.
4.3. التحقق من طول المفتاح
عند استيراد الشهادة يُتحقق من تطابق عدد البتات المعلن في الخوارزمية مع الطول الفعلي للمفتاح.
فمثلاً إذا احتوت شهادة معلنة بـ IV-AES256-GCM على مفتاح بطول 16 بايت، فسيُرفض الاستيراد نفسه. وبدون هذا الفحص، ستظن أنك تستخدم AES-256 بينما يعمل النظام فعلياً بـ AES-128.
5. تصدير verify-only
الخوادم التي تنفّذ التحقق فقط لا تحتاج إلى المفتاح الخاص للتوقيع. ولذلك توفّر شهادة DAT تصدير verify-only.
| خوارزمية التوقيع | support_verify_only() | نتيجة تصدير verify-only |
|---|---|---|
| عائلة ECDSA | true | يخرج من مفتاح التوقيع المفتاح العام فقط (من 130 حرف Base64 إلى 87 حرفاً) |
| عائلة HMAC | false | يقع خطأ صريح |
HMAC مفتاح متماثل، ولذلك لا وجود لما يُسمى "مفتاح للتحقق فقط". وعليه فإن محاولة تصدير verify-only لا تُتجاوز بصمت بل يُبلَّغ عنها فوراً بوصفها خطأً. وبما أن استدعاء تصدير verify-only مع وجود شهادات HMAC مختلطة سيفشل، فإن تشغيل عقد مخصصة للتحقق يستلزم استخدام عائلة ECDSA.
مفتاح التشفير يخرج كاملاً حتى في verify-only
مفتاح AES الخاص بحقل secure مفتاح متماثل، ولذلك يخرج كاملاً دائماً بغض النظر عن verify-only، لأن فك التشفير يتطلب المفتاح نفسه المستخدم في التشفير.
أي أن الخادم الذي يستلم شهادة verify-only:
- لا يستطيع تزوير التوقيع — إذ لا يملك المفتاح الخاص فلا يمكنه إنشاء DAT جديد.
- يستطيع فك تشفير حمولة
secure— فالسرية تجاهه غير مضمونة.
إن verify-only أداة لتقسيم صلاحية الإصدار لا لتقسيم السرية. فإذا كانت هناك قيمة يجب إخفاؤها عن عقد التحقق، فلا ينبغي وضعها في secure.