DAT
التوثيق

DAT (Distributed Access Token)


خلفية ظهور DAT

تعتمد أنظمة كثيرة اليوم JWT، غير أن بيئات التشغيل الفعلية تكشف عن القيود الهيكلية التالية.
ولحل هذه المشكلات صُمِّمت مواصفة الرمز الجديدة DAT.

🧩 تجزؤ مواصفات الأمان وغياب الإلزام

يوفر JWT معايير تشفير مثل JWE، لكن استخدامها ليس إلزامياً.
ونتيجةً لذلك تتجاهل بيئات تطوير كثيرة التشفير أو تنقل البيانات بطرق غير قياسية، مما يؤدي إلى ثغرات أمنية.

🔑 مخاطر أمنية ناجمة عن استخدام مفتاح ثابت (Static Key)

لأن تدوير مفاتيح التوقيع (Key Rolling) غير إلزامي، يكثر استخدام مفتاح واحد لفترات طويلة. وقد يؤدي ذلك إلى انهيار أمني كامل للنظام عند سرقة المفتاح، وقد وقعت بالفعل حوادث اختراق بهذا السبب في مواقع تجارة إلكترونية كبرى.

📉 تدهور الأداء بسبب العبء الزائد

يمر JWT بعملية تحليل JSON مع كل طلب، مستهلكاً قدراً كبيراً من موارد المعالج. وفي البيئات التي تتطلب أداءً عالياً قد تصبح تكلفة التحليل هذه عنق الزجاجة في النظام بأكمله.


الفلسفة الأساسية لـ DAT

صُمِّم DAT وفق مبدأين: الأمان يجب أن يكون مفروضاً لا اختيارياً، والأداء لا يقبل المساومة.

⚡ خفيف وسريع

expire
uint64 (عشري)
.
cid
uint64 (ست عشري)
.
plain
Base64Url
.
secure
Base64Url
.
signature
Base64Url
مرّر المؤشر فوق كل حقل لعرض شرحه.

يتألف DAT كما هو موضح أعلاه من خمسة حقول ثابتة فقط مفصولة بنقاط (.). وبما أن مواضع الحقول محددة في المواصفة، يمكن اقتطاع كل قيمة بمجرد البحث عن الفواصل دون أي تحليل JSON.

🔐 أمان مفروض

يفصل DAT فيزيائياً بين منطقة النص العادي (Plain) والمنطقة المشفّرة (Secure) أثناء نقل البيانات.
ويفرض تشفير المعلومات الحساسة إلزامياً، وتُحمى العملية بأكملها بالخوارزميات القياسية المعلنة في الشهادة (ECDSA وAES-GCM وغيرها).

الشهادة هي التي تحدد خوارزمية التشفير، لا الرمز. وبما أن الرمز لا يحمل أي معلومات عن الخوارزمية، فلا وجود لسطح هجوم خلط الخوارزميات الناشئ عن ترويسة alg في JWT.

🔄 تدوير مفاتيح مفروض

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

⏱️ الفصل بين نافذة الإصدار ومدة الصلاحية

"المدة التي يمكن للشهادة أن تصدر فيها رموزاً" و"المدة التي يبقى فيها الرمز الصادر حياً" قيمتان مختلفتان.
وبفضل ذلك تستطيع الرموز التي خرجت بالفعل استكمال عمرها كاملاً حتى بعد توقف الشهادة عن الإصدار، وتنتقل المجموعة خلال تلك الفترة إلى الشهادة التالية بسلاسة.


مقارنة آليات المصادقة

التصنيفDATJWTالجلسة
طريقة المصادقةتحقق موزّعتحقق موزّعمركزي
بنية البياناتRaw Bytes
(قائمة على إزاحة ثابتة)
JSON
(قائمة على نص Key-Value)
Serialized Object
(تسلسل الكائنات)
آلية التحليلتعيين فوري لبيانات Byteيتطلب تحليل JSON وتحويل الأنواعيتطلب إلغاء تسلسل الكائنات وعمليات I/O
أداء المعالجةالأعلى (أدنى عبء تحليل)متوسط (يعتمد على أداء معالجة JSON)منخفض (I/O شبكة/قرص)
التشفيرمدمج افتراضياًيتطلب تطبيق JWE منفصلاً (معقد)غير قابل للتطبيق
إدارة المفاتيحتدوير مفروض من النظام (أمان مفروض)تطبيق يدوي (خطر إهمال الإدارة)غير قابل للتطبيق
مدة صلاحية المفتاحمفروضة وصريحة في مواصفة المفتاحاختيارية (دائمة عند غياب الإدارة)يديرها الخادم المركزي
اختيار الخوارزميةالشهادة تحددها (غير موجودة في الرمز)قيمة alg في ترويسة الرمزغير قابل للتطبيق
وقت الانتهاءحقل إلزامي في المواصفةمطالبة اختيارية (exp)يديره الخادم

الأداء

إصدار DAT ‏10,000 مرة (متعدد الخيوط)
Rust HMAC-512
6 ms
Go HMAC-512
9 ms
C / C++ HMAC-512
9 ms
Java / Kotlin HMAC-512
13 ms
C# HMAC-512
19 ms
Rust P256
24 ms
C / C++ P256
32 ms
Go P256
58 ms
Python HMAC-512
93 ms
Ruby HMAC-512
130 ms
JavaScript HMAC-512
134 ms
Ruby P256
155 ms
Java / Kotlin P256
158 ms
JavaScript P256
179 ms
Python P256
192 ms
C# P256
235 ms
تحليل DAT ‏10,000 مرة (متعدد الخيوط)
Rust HMAC-512
4 ms
Go HMAC-512
5 ms
Java / Kotlin HMAC-512
7 ms
C / C++ HMAC-512
8 ms
C# HMAC-512
11 ms
Rust P256
52 ms
C / C++ P256
69 ms
Go P256
72 ms
Python HMAC-512
89 ms
Java / Kotlin P256
118 ms
JavaScript HMAC-512
143 ms
Ruby HMAC-512
150 ms
JavaScript P256
167 ms
Python P256
182 ms
C# P256
185 ms
Ruby P256
194 ms
قياس على mac mini m4 2024 basic (10 core) · تعرض الرسوم البيانية IV-AES256-GCM فقط
البيانات الأصلية (ميلي ثانية لكل 10,000 عملية)
Multi-Thread
Signature · CryptoRustGoJava / KotlinJavaScriptC#PythonRubyC / C++
IssueParseIssueParseIssueParseIssueParseIssueParseIssueParseIssueParseIssueParse
HMAC-SHA256-MFS · IV-AES128-GCM65115121301741822215888315015299
HMAC-SHA256-MFS · IV-AES256-GCM7595221315214819151068213816288
HMAC-SHA384-MFS · IV-AES128-GCM6495503115214218151008013014588
HMAC-SHA384-MFS · IV-AES256-GCM641052271411411911928013216588
HMAC-SHA512-MFS · IV-AES128-GCM641053571391481611947913014998
HMAC-SHA512-MFS · IV-AES256-GCM64951371341431911938913015098
ECDSA-P256 · IV-AES128-GCM265753712532401841702082031911811701893275
ECDSA-P256 · IV-AES256-GCM245258721581181791672351851921821551943269
ECDSA-P384 · IV-AES128-GCM954532145935075139968585605478672,036339441196424
ECDSA-P384 · IV-AES256-GCM1452572205662482771,0418775365048691,972320490186379
ECDSA-P521 · IV-AES128-GCM2324704681,4665926812,5412,1041,5231,4627281,446352554250449
ECDSA-P521 · IV-AES256-GCM1523064671,5074735802,6811,9991,4501,4657041,395374529260454
Single-Thread
Signature · CryptoRustGoJava / KotlinJavaScriptC#PythonRubyC / C++
IssueParseIssueParseIssueParseIssueParseIssueParseIssueParseIssueParseIssueParse
HMAC-SHA256-MFS · IV-AES128-GCM1258430302702623534353764601615
HMAC-SHA256-MFS · IV-AES256-GCM1257432302782613535343658661514
HMAC-SHA384-MFS · IV-AES128-GCM1379628272662645544353762611718
HMAC-SHA384-MFS · IV-AES256-GCM1369630292692714034363866731717
HMAC-SHA512-MFS · IV-AES128-GCM1369628272622373836363858631717
HMAC-SHA512-MFS · IV-AES256-GCM1369630292642473735353760671716
ECDSA-P256 · IV-AES128-GCM128287165358521492447681870785210431177392156373
ECDSA-P256 · IV-AES256-GCM123274156345473503446700845782202434172394147361
ECDSA-P384 · IV-AES128-GCM4721,0901,0953,1291,2841,4234,0113,5582,1762,1134,76011,2791,0552,1551,0392,147
ECDSA-P384 · IV-AES256-GCM4741,0741,0733,1511,2841,6764,0643,4562,1552,1264,74511,2781,0392,1601,0412,151
ECDSA-P521 · IV-AES128-GCM8331,6572,6538,6652,6973,2789,8697,6036,0395,9583,4997,1151,3582,3901,3592,394
ECDSA-P521 · IV-AES256-GCM8441,6772,6528,6832,6393,2839,7997,4095,9445,8563,4887,1161,3812,3981,3602,402

المستندات التالية

  • DAT — تنسيق سلك الرمز وقواعده المعيارية
  • الشهادة — بنية الشهادة والخوارزميات ودورة الحياة
  • مزامنة CMS — نشر الشهادات والسلوكيات التي يجب معرفتها أثناء التشغيل