DAT (Distributed Access Token)


Latar Belakang Lahirnya DAT

Saat ini banyak sistem mengadopsi JWT, namun di lingkungan operasional nyata terdapat keterbatasan struktural berikut.
Untuk mengatasi hal tersebut, dirancanglah DAT, sebuah spesifikasi token baru.

🧩 Fragmentasi Spesifikasi Keamanan dan Kurangnya Pemaksaan

JWT menyediakan standar enkripsi seperti JWE, tetapi penggunaannya tidak diwajibkan.
Akibatnya, banyak lingkungan pengembangan melewatkan enkripsi atau mengirim data dengan cara non-standar sehingga menimbulkan celah keamanan.

🔑 Risiko Keamanan akibat Penggunaan Kunci Statis (Static Key)

Karena rotasi kunci tanda tangan (Key Rolling) tidak diwajibkan, satu kunci kerap dipakai dalam jangka waktu yang sangat panjang. Hal ini dapat berujung pada runtuhnya keamanan seluruh sistem ketika kunci tersebut dicuri, dan insiden pelanggaran akibat hal ini benar-benar pernah terjadi di situs komersial berskala besar.

📉 Penurunan Kinerja akibat Overhead

JWT menjalani proses parsing JSON pada setiap permintaan dan mengonsumsi sumber daya CPU yang cukup besar. Di lingkungan yang menuntut kinerja tinggi, biaya parsing ini dapat menjadi bottleneck bagi keseluruhan sistem.


Filosofi Inti DAT

DAT dirancang di atas prinsip bahwa keamanan harus diwajibkan, bukan dipilih, dan bahwa kinerja tidak dapat dikompromikan.

⚡ Ringan dan Cepat

expire
uint64 (desimal)
.
cid
uint64 (heksadesimal)
.
plain
Base64Url
.
secure
Base64Url
.
signature
Base64Url
Arahkan kursor ke setiap bidang untuk menampilkan penjelasannya.

Seperti terlihat di atas, DAT hanya memiliki lima bidang tetap yang dipisahkan oleh titik (.). Karena posisi setiap bidang telah ditetapkan oleh spesifikasi, nilai-nilainya dapat dipotong hanya dengan mencari pemisahnya, tanpa parsing JSON.

🔐 Keamanan yang Dipaksakan

Saat mengirim data, DAT memisahkan secara fisik wilayah teks biasa (Plain) dan terenkripsi (Secure).
Informasi sensitif wajib dienkripsi, dan seluruh prosesnya dilindungi oleh algoritma standar yang dideklarasikan di dalam sertifikat (ECDSA, AES-GCM, dan sebagainya).

Algoritma enkripsi ditentukan oleh sertifikat, bukan oleh token. Karena token tidak membawa informasi algoritma, tidak ada permukaan serangan algorithm confusion seperti yang bersumber dari header alg pada JWT.

🔄 Key Rolling yang Dipaksakan

Sertifikat DAT tidak hanya mengatur penerbitan dan kedaluwarsanya token, tetapi juga mengelola langsung siklus hidup kunci.
Di dalam sertifikat tertanam secara spesifikasi keterangan "sejak kapan hingga kapan penerbitan dapat dilakukan", sehingga setelah periode itu lewat, sertifikat tersebut tidak dapat lagi membuat token baru. Situasi di mana satu kunci terpakai bertahun-tahun karena kelalaian administrator secara struktural tidak mungkin terjadi.

⏱️ Pemisahan Jendela Penerbitan dan Masa Berlaku

"Periode selama sertifikat dapat menerbitkan token" dan "periode selama token yang diterbitkan tetap hidup" adalah dua nilai yang berbeda.
Berkat itu, setelah sertifikat berhenti menerbitkan pun, token yang telanjur keluar masih dapat menghabiskan masa hidupnya, dan selama rentang itu klaster beralih secara mulus ke sertifikat berikutnya.


Perbandingan Mekanisme Autentikasi

KlasifikasiDATJWTSesi
Metode autentikasiVerifikasi terdistribusiVerifikasi terdistribusiTerpusat
Struktur dataRaw Bytes
(berbasis offset tetap)
JSON
(berbasis teks Key-Value)
Serialized Object
(serialisasi objek)
Mekanisme parsingPemetaan langsung data BytePerlu parsing JSON dan type castingPerlu deserialisasi objek dan I/O
Kinerja pemrosesanTerbaik (overhead parsing minimal)Sedang (bergantung pada kinerja pemrosesan JSON)Rendah (I/O jaringan/disk)
EnkripsiDisediakan secara bawaanPerlu implementasi JWE terpisah (kompleks)Tidak berlaku
Manajemen kunciRotasi dipaksakan sistem (keamanan diwajibkan)Implementasi sendiri (berisiko akibat kelalaian pengelolaan)Tidak berlaku
Masa berlaku kunciDiwajibkan dan tercantum dalam spesifikasi kunciOpsional (permanen bila tidak dikelola)Dikelola server pusat
Pemilihan algoritmaDitentukan sertifikat (tidak ada di token)Nilai alg pada header tokenTidak berlaku
Waktu kedaluwarsaBidang wajib menurut spesifikasiKlaim opsional (exp)Dikelola server

Performa

Penerbitan DAT × 10.000 (multi-thread)
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
Parsing DAT × 10.000 (multi-thread)
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
diukur pada mac mini m4 2024 basic (10 core) · grafik hanya menampilkan IV-AES256-GCM
Data mentah (ms per 10.000 operasi)
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

Dokumen Selanjutnya

  • DAT — format wire token dan aturan kanoniknya
  • Sertifikat — struktur sertifikat, algoritma, siklus hidup
  • Sinkronisasi CMS — penyebaran sertifikat dan perilaku yang perlu diketahui saat operasional