DAT
التوثيق

شهادة DAT

1. نظرة عامة

شهادة DAT هي المواصفة التي تتحكم في صلاحية إصدار DAT، وتدير خوارزميات التوقيع والتشفير الخاصة بالرمز ومعلومات المفاتيح (Key).

تمتلك كل شهادة معرّفاً فريداً (CID)، وتدير دورة حياة الرمز بأمان عبر فرض نافذة إصدار DAT ومدة صلاحية الرموز الصادرة عنها (TTL).

تدوير المفاتيح في DAT ليس اختيارياً. فنافذة الإصدار مثبَّتة في الشهادة على مستوى المواصفة، وبعد انقضائها لا يمكن إنشاء رموز جديدة بتلك الشهادة.


2. بنية الشهادة

تنسيق سلك الشهادة
cid
uint64 (ست عشري)
.
start
uint64 (عشري)
.
duration
uint64 (عشري)
.
ttl
uint64 (عشري)
.
sig-alg
String
.
crypto-alg
String
.
sig-key
Base64Url
.
crypto-key
Base64Url
مرّر المؤشر فوق كل حقل لعرض شرحه.
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key
البنية
مثالrefresh

2.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. دورة حياة الشهادة

مراحل الشهادة الأربع
الإنشاء
بدء الإصدار
نهاية الإصدار
الانتهاء النهائي
تأخير الإصدار (delay)
قابلة للإصدار (duration)
DAT TTL
وقت يكفي لتستلم جميع العقد الشهادة
إصدار DAT والتحقق منه كلاهما ممكن
الإصدار غير ممكن، التحقق فقط
لا تنتهي الشهادة نهائياً إلا بعد اجتياز مراحل تأخير الإصدار ← إمكانية الإصدار ← ما تبقى من DAT TTL كاملةً.
المرحلةالإصدارالتحققالحكم
تأخير الإصدار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-GCM128-bitIV(96bit) + ناتج التشفير
IV-AES256-GCM256-bitIV(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.

مسار نشر الشهادة الكاملة وشهادة verify-only
DAT CMS
خادم الإصدار
خادم التحقق فقط
GET /v1/certs
الشهادة الكاملة (تتضمن مفتاح التوقيع الخاص)
GET /v1/certs/verify-only
شهادة verify-only
طلبنشر الشهادة
خوارزمية التوقيعsupport_verify_only()نتيجة تصدير verify-only
عائلة ECDSAtrueيخرج من مفتاح التوقيع المفتاح العام فقط (من 130 حرف Base64 إلى 87 حرفاً)
عائلة HMACfalseيقع خطأ صريح

HMAC مفتاح متماثل، ولذلك لا وجود لما يُسمى "مفتاح للتحقق فقط". وعليه فإن محاولة تصدير verify-only لا تُتجاوز بصمت بل يُبلَّغ عنها فوراً بوصفها خطأً. وبما أن استدعاء تصدير verify-only مع وجود شهادات HMAC مختلطة سيفشل، فإن تشغيل عقد مخصصة للتحقق يستلزم استخدام عائلة ECDSA.

مفتاح التشفير يخرج كاملاً حتى في verify-only

مفتاح AES الخاص بحقل secure مفتاح متماثل، ولذلك يخرج كاملاً دائماً بغض النظر عن verify-only، لأن فك التشفير يتطلب المفتاح نفسه المستخدم في التشفير.

أي أن الخادم الذي يستلم شهادة verify-only:

  • لا يستطيع تزوير التوقيع — إذ لا يملك المفتاح الخاص فلا يمكنه إنشاء DAT جديد.
  • يستطيع فك تشفير حمولة secure — فالسرية تجاهه غير مضمونة.

إن verify-only أداة لتقسيم صلاحية الإصدار لا لتقسيم السرية. فإذا كانت هناك قيمة يجب إخفاؤها عن عقد التحقق، فلا ينبغي وضعها في secure.