DAT (Distributed Access Token)


DAT প্রবর্তনের পটভূমি

আজকাল অনেক সিস্টেম JWT গ্রহণ করেছে, কিন্তু বাস্তব পরিচালন পরিবেশে নিচের মতো কাঠামোগত সীমাবদ্ধতা বিদ্যমান।
এগুলো সমাধানের জন্যই নতুন টোকেন স্পেসিফিকেশন DAT ডিজাইন করা হয়েছে।

🧩 নিরাপত্তা স্পেসিফিকেশনের বিভক্ততা ও বাধ্যবাধকতার অভাব

JWT, JWE-এর মতো এনক্রিপশন স্ট্যান্ডার্ড দেয়, কিন্তু সেগুলোর ব্যবহার বাধ্যতামূলক নয়।
ফলে অনেক ডেভেলপমেন্ট পরিবেশে এনক্রিপশন বাদ দেওয়া হয় বা অ-মানক পদ্ধতিতে ডেটা পাঠানো হয়, যা নিরাপত্তা দুর্বলতা তৈরি করে।

🔑 স্ট্যাটিক কী (Static Key) ব্যবহারের নিরাপত্তা ঝুঁকি

স্বাক্ষর কী-এর রোটেশন (Key Rolling) বাধ্যতামূলক না হওয়ায় একটিমাত্র কী দীর্ঘকাল ধরে ব্যবহারের ঘটনা প্রায়ই ঘটে। কী চুরি হলে এটি সম্পূর্ণ সিস্টেমের নিরাপত্তা ধসের কারণ হতে পারে; বাস্তবে বড় ই-কমার্স সাইটে এর কারণে নিরাপত্তা লঙ্ঘনের ঘটনা ঘটেছে।

📉 ওভারহেডের কারণে কর্মক্ষমতা হ্রাস

JWT প্রতিটি অনুরোধে JSON পার্সিং প্রক্রিয়ার মধ্য দিয়ে যায় এবং উল্লেখযোগ্য পরিমাণ CPU রিসোর্স খরচ করে। উচ্চ কর্মক্ষমতা প্রয়োজন এমন পরিবেশে এই পার্সিং খরচ পুরো সিস্টেমের বাধা (bottleneck) হয়ে দাঁড়াতে পারে।


DAT-এর মূল দর্শন

DAT ডিজাইন করা হয়েছে এই নীতির উপর ভিত্তি করে যে নিরাপত্তা ঐচ্ছিক নয় বরং বাধ্যতামূলক হওয়া উচিত, এবং কর্মক্ষমতার সাথে আপস করা যায় না।

⚡ হালকা ও দ্রুত

expire
uint64 (দশমিক)
.
cid
uint64 (হেক্স)
.
plain
Base64Url
.
secure
Base64Url
.
signature
Base64Url
প্রতিটি ফিল্ডের উপর মাউস রাখলে বিবরণ দেখা যাবে।

উপরে দেখানো অনুযায়ী DAT-এ বিন্দু (.) দিয়ে বিভক্ত মাত্র পাঁচটি নির্দিষ্ট ফিল্ড থাকে। ফিল্ডের অবস্থান স্পেসিফিকেশনেই নির্ধারিত, তাই JSON পার্সিং ছাড়াই কেবল বিভাজক খুঁজে প্রতিটি মান কেটে নেওয়া যায়।

🔐 বাধ্যতামূলক নিরাপত্তা

DAT ডেটা পাঠানোর সময় সাধারণ (Plain) ও এনক্রিপ্টেড (Secure) অঞ্চলকে ভৌতভাবে আলাদা করে।
সংবেদনশীল তথ্য অবশ্যই এনক্রিপ্ট করতে হবে — এটি বাধ্যতামূলক, এবং পুরো প্রক্রিয়া সার্টিফিকেটে ঘোষিত মানসম্মত অ্যালগরিদম (ECDSA, AES-GCM ইত্যাদি) দিয়ে সুরক্ষিত।

এনক্রিপশন অ্যালগরিদম টোকেন নয়, সার্টিফিকেট নির্ধারণ করে। টোকেনের ভিতরে অ্যালগরিদমের কোনো তথ্য থাকে না, তাই JWT-এর alg হেডার থেকে উদ্ভূত অ্যালগরিদম কনফিউশন আক্রমণের আক্রমণ-পৃষ্ঠ এখানে নেই।

🔄 বাধ্যতামূলক কী রোলিং

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 অপারেশনে ms)
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 সিঙ্ক — সার্টিফিকেট বিতরণ ও পরিচালনার সময় যে আচরণগুলো জানা দরকার