Sertifikat DAT

1. Ikhtisar

Sertifikat DAT adalah spesifikasi untuk mengendalikan kewenangan penerbitan DAT serta mengelola algoritma tanda tangan, algoritma enkripsi, dan informasi kunci (Key) milik token.

Setiap sertifikat memiliki ID unik (CID), dan mengelola siklus hidup token secara aman dengan mewajibkan jendela penerbitan DAT serta masa berlaku (TTL) token yang dihasilkan.

Pada DAT, rotasi kunci bukanlah pilihan. Karena jendela penerbitan tertanam di dalam sertifikat pada tingkat spesifikasi, setelah periode tersebut lewat, sertifikat itu tidak dapat lagi membuat token baru.


2. Struktur Sertifikat

Format wire sertifikat
cid
uint64 (heksadesimal)
.
start
uint64 (desimal)
.
duration
uint64 (desimal)
.
ttl
uint64 (desimal)
.
sig-alg
String
.
crypto-alg
String
.
sig-key
Base64Url
.
crypto-key
Base64Url
Arahkan kursor ke setiap bidang untuk menampilkan penjelasannya.
cid . start . duration . ttl . sig-alg . crypto-alg . sig-key . crypto-key
Struktur
Contohrefresh

2.1. Spesifikasi Detail Per Bidang

CID : Hex (uint64)

  • ID sertifikat unik yang mengidentifikasi sebuah sertifikat. Dipetakan dengan bidang CID milik DAT untuk menentukan sertifikat mana yang digunakan saat verifikasi.
  • CID adalah pengenal yang tidak berubah. Saat mengganti kunci, jangan gunakan ulang CID yang sama; terbitkan sertifikat dengan CID baru.

Waktu Mulai Penerbitan DAT : uint64 (Unix Time)

  • Menyatakan waktu mulai DAT dapat diterbitkan menggunakan sertifikat tersebut, dalam satuan detik (Seconds).

Durasi Penerbitan DAT : uint64 (Seconds)

  • Durasi berlakunya penerbitan milik sertifikat. Setelah durasi ini (dalam detik) berlalu sejak Waktu Mulai Penerbitan DAT, sertifikat ini tidak dapat lagi menerbitkan DAT baru.
  • Ini adalah durasi (duration), bukan waktu absolut. Waktu berakhirnya dihitung sebagai start + duration.

DAT TTL (Waktu Berlaku) : uint64 (Seconds)

  • Masa berlaku (Time To Live) DAT yang diterbitkan dengan sertifikat ini. Saat DAT dibuat, nilai expire ditetapkan dengan menambahkan nilai ini ke waktu penerbitan.

Algoritma Tanda Tangan : String / Enum

  • Algoritma tanda tangan yang digunakan saat membuat dan memverifikasi bidang signature milik DAT.

Algoritma Enkripsi : String / Enum

  • Algoritma enkripsi yang digunakan saat mengenkripsi dan mendekripsi bidang secure milik DAT.

Kunci Tanda Tangan : Base64Url (Binary)

  • Data kunci yang digunakan untuk penandatanganan dan verifikasi. (Bergantung pada algoritmanya, dapat berupa Public/Private Key asimetris maupun kunci simetris.)

Kunci Enkripsi : Base64Url (Binary)

  • Data kunci enkripsi yang digunakan untuk enkripsi dan dekripsi bidang secure.

2.2. Perhitungan Waktu

end    = start + duration        waktu berakhirnya penerbitan
expire = end + ttl               waktu kedaluwarsa akhir sertifikat
  • Seluruh perhitungan dilakukan dalam uint64 dan hanya overflow yang ditolak sebagai galat.
  • duration = 0 dan ttl = 0 adalah nilai yang sah. Keduanya dapat merepresentasikan sertifikat yang jendela penerbitannya langsung tertutup, atau sertifikat yang menghasilkan token yang langsung tidak berlaku begitu kedaluwarsa.
  • Karena seluruh bidangnya berupa bilangan bulat tak bertanda, nilai negatif tidak eksis secara tipe.

2.3. Tanda Tangan Konstruktor

Seluruh implementasi bahasa menggunakan urutan argumen berikut.

(cid, dat_issuance_start_seconds, dat_issuance_duration_seconds, dat_ttl_seconds,
 signature_key, crypto_key)

Argumen ketiga adalah durasi, bukan waktu berakhir

Bila Anda melewatkan waktu berakhir absolut (end) pada argumen ketiga, maka tanpa galat apa pun akan terbentuk sertifikat dengan jendela berlaku yang keliru. Sebab nilai tersebut masuk apa adanya ke start + duration.


3. Siklus Hidup Sertifikat

Empat segmen sertifikat
Pembuatan
Mulai penerbitan
Akhir penerbitan
Kedaluwarsa akhir
Penundaan penerbitan (delay)
Dapat menerbitkan (duration)
DAT TTL
Waktu bagi seluruh node untuk mengambil sertifikat
Penerbitan + verifikasi DAT sama-sama dimungkinkan
Tidak dapat menerbitkan, hanya dapat memverifikasi
Sertifikat baru benar-benar kedaluwarsa setelah melewati seluruh segmen penundaan penerbitan → dapat menerbitkan → sisa TTL DAT.
SegmenPenerbitanVerifikasiPenentuan
Penundaan penerbitanissuable() == false
Dapat menerbitkanissuable() == true
Sisa TTL DATJendela penerbitan tertutup namun belum kedaluwarsa
Setelah kedaluwarsa akhirexpired() == true
  • Kelayakan menerbitkan ditentukan oleh signable() && start <= now <= end, dan kedua ujungnya termasuk.
  • Setelah jendela penerbitan tertutup pun, sertifikat masih hidup selama ttl lagi. Sebab token yang diterbitkan tepat sebelum jendela tertutup harus dapat menghabiskan masa hidupnya.
  • Segmen penundaan penerbitan (delay) ada untuk memberi waktu bagi seluruh node di klaster mengambil sertifikat baru. Untuk detailnya, silakan lihat dokumen Sinkronisasi CMS.

4. Algoritma

4.1. Algoritma Tanda Tangan

Berikut daftar algoritma tanda tangan untuk mencegah pemalsuan dan perubahan DAT. Mendukung metode kunci simetris maupun asimetris.

NamaMetodeKeterangan
ECDSA-P256AsimetrisTanda tangan digital kurva eliptik (NIST secp256r1)
ECDSA-P384AsimetrisTanda tangan digital kurva eliptik (NIST secp384r1)
ECDSA-P521AsimetrisTanda tangan digital kurva eliptik (NIST secp521r1)
HMAC-SHA256-MFSSimetrisKeyed-Hashing berbasis kunci rahasia berukuran tetap 256-bit
HMAC-SHA384-MFSSimetrisKeyed-Hashing berbasis kunci rahasia berukuran tetap 384-bit
HMAC-SHA512-MFSSimetrisKeyed-Hashing berbasis kunci rahasia berukuran tetap 512-bit

MFS (Maximum Fixed Secret): metode yang menggunakan kunci rahasia berukuran tetap dengan jumlah bit yang sama dengan ukuran keluaran (Output) algoritma hash-nya.

4.2. Algoritma Enkripsi

Berikut daftar algoritma enkripsi terautentikasi (Authenticated Encryption) untuk melindungi data rahasia di dalam DAT (bidang secure).

NamaPanjang kunciStruktur
IV-AES128-GCM128-bitIV(96bit) + hasil enkripsi
IV-AES256-GCM256-bitIV(96bit) + hasil enkripsi

Internalisasi IV (Initialization Vector): NONCE 96-bit (IV) unik yang dibangkitkan pada setiap enkripsi digabungkan sebagai awalan (Prefix) di depan hasil enkripsi. Saat dekripsi, 96 bit terdepan dipisahkan sebagai IV lalu proses dekripsi dijalankan.

4.3. Validasi Panjang Kunci

Saat memuat sertifikat, dilakukan pemeriksaan apakah jumlah bit algoritma yang dideklarasikan cocok dengan panjang kunci sebenarnya.

Sebagai contoh, bila sertifikat yang mendeklarasikan IV-AES256-GCM ternyata berisi kunci 16 byte, maka proses impornya sendiri akan ditolak. Tanpa pemeriksaan ini, sistem akan berjalan dengan AES-128 padahal diyakini menggunakan AES-256.


5. Ekspor verify-only

Server yang hanya melakukan verifikasi tidak perlu diberi kunci privat untuk penandatanganan. Untuk itu, sertifikat DAT menyediakan ekspor verify-only.

Jalur penyebaran sertifikat penuh dan sertifikat verify-only
DAT CMS
Server penerbit
Server khusus verifikasi
GET /v1/certs
Sertifikat penuh (termasuk kunci privat tanda tangan)
GET /v1/certs/verify-only
Sertifikat verify-only
PermintaanPenyebaran sertifikat
Algoritma tanda tangansupport_verify_only()Hasil ekspor verify-only
Keluarga ECDSAtrueKunci tanda tangan keluar hanya berupa kunci publik (Base64 130 karakter → 87 karakter)
Keluarga HMACfalseTerjadi galat eksplisit

HMAC adalah kunci simetris sehingga tidak ada yang namanya "kunci yang hanya bisa memverifikasi". Karena itu, upaya melakukan ekspor verify-only tidak dilewati secara diam-diam melainkan langsung dilaporkan sebagai galat. Karena memanggil ekspor verify-only saat masih ada sertifikat HMAC yang tercampur akan gagal, maka bila Anda mengoperasikan node khusus verifikasi, gunakanlah keluarga ECDSA.

Kunci enkripsi tetap keluar utuh bahkan pada verify-only

Kunci AES untuk bidang secure adalah kunci simetris, sehingga selalu diekspor secara utuh terlepas dari verify-only atau tidak. Sebab untuk mendekripsi diperlukan kunci yang sama dengan yang dipakai mengenkripsi.

Dengan kata lain, server yang menerima sertifikat verify-only:

  • Tidak dapat memalsukan tanda tangan — karena tidak memiliki kunci privat, ia tidak dapat membuat DAT baru.
  • Dapat mendekripsi payload secure — kerahasiaan terhadap mereka tidak disediakan.

verify-only adalah mekanisme untuk membagi kewenangan penerbitan, bukan mekanisme untuk membagi kerahasiaan. Bila ada nilai yang harus disembunyikan dari node verifikasi, nilai tersebut tidak boleh dimasukkan ke secure.