Herpiko Dwi Aguno - “PKIWebSDK : Pustaka JavaScript untuk aplikasi PKI berbasis HTML5”
1. PKIWebSDK : Pustaka JavaScript untuk
aplikasi PKI berbasis HTML5
Herpiko Dwi Aguno
Email : herpiko@gmail.com
Kriptografi merupakan hal yang tidak dapat dipisahkan pada dunia digital modern. Implementasi-
implementasi Public Key Infrastructur (PKI) menjadi tumpuan penting dalam berbagai infrasturktur digital,
seperti Sertifikat SSL. PKI dapat diterapkan pada berbagai sistem dan lingkungan, bahkan sebagai sistem
untuk identitas warga negara. Akan tetapi, pemahaman dan penerapan PKI tidak terbilang mudah. Sudah ada
beberapa aplikasi dan framework yang membantu implementasi PKI, namun belum ada SDK (System
Development Kit) yang siap pakai dan tersedia untuk platform web. Antar muka pemrograman WebCrypto di
peramban juga belum dapat digunakan secara maksimal untuk PKI. PKIWebSDK menyediakan antar muka
pemrograman yang siap pakai dan mudah untuk lingkungan pengembangan web dan aplikasi hybrid.
Kata kunci : PKI, kriptografi, JavaScript, SDK, kunci publik, enkripsi
Pendahuluan
Hingga akhir 1990-an, analis teknologi
memprediksi teknologi Public Key Infrastructure
(PKI) akan menjadi elemen penting dalam keamanan
sistem daring. PKI memperluas penggunaan
kriptografi kunci publik ke berbagai macam aplikasi-
aplikasi seperti email, pemroses dokumen,
identifikasi dan autentifkasi peladen dan sistem
pembayaran. Sebuah sistem PKI dengan kunci
publik dan identitas pengguna yang saling terhubung
dapat menyediakan fungsi-fungsi keamanan yang
sangat penting seperti autentikasi, kerahasiaan,
otorisasi, pemeriksaan integritas dan anti
penyangkalan.
Namun adopsi sistem PKI terbukti tidak
mudah, baik dari sisi teknologi maupun kerumitan
operasional serta biaya. Beberapa negara sudah
menginisiasi adopsi PKI secara nasional, termasuk
Amerisa Serikat, Inggris, Pemerintah Federal
Australia dan Korea Selatan.
Contoh implementasi PKI secara meluas
yang berhasil adalah Korea Selatan, dimana
sebagian besar warga negaranya telah memiliki
identitas utama dengan kunci publik untuk
mengakses layanan-layanan pemerintah maupun
untuk sekedar bertransaksi di toko daring. Di
Indonesia, pemerintah (Kominfo) masih berusaha
keras mengimplementasikan PKI secara nasional
dengan menjajaki kerjasama dengan Korea Selatan,
antara lain dengan mengadakan transisi
pengetahuan, pelatihan, menyiapkan infrastruktur
dan menyediakan perangkat lunak untuk mendukung
percepatan PKI aware. Salah satunya adalah
PKIWebSDK.
PKIWebSDK dibangun untuk mempermudah
pemerhati teknologi keamanan informasi dalam
membangun aplikasi yang memerlukan implementasi
PKI dengan platform web dan bahasa yang paling
populer saat ini, yaitu JavaScript.
Dasar Teori
PKI adalah implementasi dari berbagai
teknik kriptografi yang bertujuan mengamankan data,
memastikan keaslian, mempercayai sebuah entitas
dan mencegah penyangkalan. Teknik-teknik tersebut
antara lain :
● Hash
● Enkripsi simetrik
● Enkripsi asimetrik
Fungsi hash secara bersama-sama dengan
enkripsi asimetrik untuk menghasilkan sebuah nilai
sebagai bukti keaslian entitas (misal pengirim data)
dan hanya dapat diverifikasi secara searah.
Sementara enkripsi asimetrik digunakan untuk
mencegah data dapat dibaca secara langsung tanpa
melalui suatu proses (dekripsi).
Fungsi-fungsi kriptografi tersebut terkait erat dengan
kunci publik, yang akan digunakan oleh setiap
entitas yang terkait dengan lingkungan PKI. Minimal
entitas yang terlibat dalam PKI antara lain :
1. Certificate Authority (CA) adalah lembaga
terpercaya yang berhak menerbitkan
pasangan kunci privat dan publik untuk
pengguna. Kunci publik yang diterbitkan
2. tersebut terikat dan terpercaya (trusted)
karena telah ditandatangani oleh kunci privat
milik CA. Secara tidak langsung, CA
2. Pengguna (baik organisasi maupun
perorangan) adalah pihak yang mengajukan
permintaan sertifikat ke CA. Sebelumnya,
pengguna diminta memenuhi berbagai
syarat yang ditentukan CA atau RA
(Registration Authority, wewenang di bawah
CA, bertugas memvalidasi dan menyetujui).
Jika disetujui, CA akan menerbitkan
pasangan kunci, menandatanganinya dan
menyerahkan ke pengguna. Kemudian
pengguna dapat menggunakan kunci
tersebut untuk keperluannya, misal sebagai
SSL untuk aplikasi web.
Secara garis besar, PKI menyediakan dua fungsi
utama :
● Kriptografi kunci publik, dimana pengirim
dapat mengenkripsi data dengan kunci
publik penerima dan hanya penerima yang
dapat mendekripsi data tersebut dengan
kunci privatnya.
● Sertifikat digital, mengizinkan pengguna
menandatangani sebuah data sebelum
mengirimnya ke penerima. Penerima dapat
menverifikasi, apakah pengirimnya adalah
pihak yang benar dan terpercaya serta
apakah identitas pengirim tersebut juga
dipercaya oleh sertifikat utama (root
certificate).
PKIWebSDK
PKIWebSDK adalah pustaka JavaScript
yang mempermudah pembangunan aplikasi web /
hybrid berbasis PKI. Pustaka ini dirancang untuk
dapat digunakan secara penuh dan siap pakai di sisi
klien / peramban.
Pustaka PKIWebSDK hanya didukung oleh
peramban-peramban terbaru yang sudah memiliki
fitur WebCrypto, lihat [2]. PKIWebSDK dirilis oleh
Kominfo sebagai perangkat lunak terbuka namun
lisensi spesifik belum ditetapkan.
WebCrypto dan Pustaka Hulu
WebCrypto adalah antar muka
pemrograman pada peramban untuk mendukung
kriptografi. WebCrypto masih dijajaki secara aktif
pada konsorsium W3C namun belumz selengkap
yang diharapkan untuk dapat membangun aplikasi
kriptografi yang kompleks.
Beberapa pustaka kriptografi di JavaScript
yang paling giat dikembangkan akhir-akhir ini antara
lain :
● Forge (https://github.com/digitalbazaar/forge)
● PKI JS (http://pkijs.org)
PKIWebSDK menggunakan Forge
dikarenakan antar muka pemrogramannya yang
lebih sederhana dan mudah diimplementasikan.
Meskipun demikian, PKIWebSDK tetap
menggunakan API WebCrypto dari peramban jika
ada implementasi kriptografi yang dapat ditangani
secara langsung oleh API WebCrypto, seperti fungsi
pembuatan pasangan kunci RSA.
Callback vs Promise
Callback merupakan potongan kode yang
mengirim argumen ke potongan kode lain pada
waktu tertentu (misal saat sebuah fungsi tertentu
telah diselesaikan). Callback umum digunakan pada
pustaka-pustaka Javascript sebagai bentuk fungsi
asinkron.
Contoh callback :
doSomething(function(err, result) {
If (err) {
// handle error
return;
}
// handle result
})
Promise mirip dengan callback namun
menyediakan percabangan terpisah untuk galat dan
hasil dan ditangani di blok kode terpisah.
Contoh promise :
doSomething()
.then(function(result) {
// handle result
})
.catch(function(error) {
// handle error
})
Promise mengizinkan penggunaan API
secara berantai namun tetap mudah dibaca (human
readable)
3. Contoh promise berantai :
doSomething()
.then(function(result) {
// handle result
return doSomethingThatMatters()
.then(function(result) {
// handle result
})
.catch(function(error) {
// handle error
})
Demi menyederhanakan penggunaan antar
muka pemrograman, PKIWebSDK menggunakan
promise pada hampir semua antar muka
pemrogramannya. Berikut adalah salah satu fungsi
dari pustaka PKIWebSDK yaitu fungsi parseP12
untuk mendapatkan kunci privat dari kontainer P12
yang terkunci.
var privateKey;
newCert.parseP12(buffer, password)
.then(function(result) {
privateKey = result.privateKey;
})
.catch(function(err) {
alert(err);
})
Kelas dan Fitur
Pada PKIWebSDK, fungsi-fungsi kriptografi
dan beberapa fungsi pembantu dikelompokkan ke
kelas-kelas utama, antara lain :
● Key, memuat fungsi untuk membuat
pasangan kunci, enkripsi dan dekripsi berkas
(ukuran terbatas)
● Certificate, memuat fungsi untuk membuat
CSR, ekspor dan impor sertifikat digital
daam berbagai format
● SignedData, memuat fungsi untuk
penandatanganan dan verifikasi berkas
dengan protokol PKCS#7.
● EncryptedData, memuat fungsi untuk
enkripsi data yang berukuran lebih besar.
● PDF, memuat fungsi untuk
penandatanganan dan verifikasi berkas PDF.
● UI, memuat helper untuk membangun antar
muka siap pakai untuk fungsi-fungsi tertentu.
Dari kelas-kelas tersebut, PKIWebSDK
memenuhi fitur-fitur berikut :
- Mendukung sertifikat X509 : CSR, ekspor
dan impor sertifikat dalam format PEM, P12
dan DER, verifikasi path, CRL parsing.
- Kriptografi RSA : membuat pasangan kunci,
penandatanganan, verifikasi tanda tangan,
enkripsi dan dekripsi.
- Signed Data (PKCS#7) : Tanda tangan dan
verifikasi.
- PDF Signature : Tanda tangan dan verifikasi
pada berkas PDF
- SIM (RFC 4683) yang memungkinkan
penggunaan nomor induk Kartu Tanda
Penduduk sebagai subyek sertifikat
Kesimpulan
Pustaka PKIWebSDK dapat memudahkan
implementasi PKI pada aplikasi web maupun aplikasi
desktop hybrid berbasis HTML5 (menggunakan
Electron, IGN-SDK atau Maleo). Contoh-contoh
aplikasi yang mungkin menerapkan pustaka ini
antara lain ; aplikasi penerbit CSR, aplikasi
penandatangan digital dan pengecek tanda tangan di
berkas PDF, aplikasi enkripsi dan dekripsi berkas.
Referensi
[0] http://tools.ietf.org/html/rfc5280
[1] https://gitlab.com/rootcaid/kominfo-pki-websdk
[2] http://caniuse.com/#search=cryptography
[3]
https://www.academia.edu/25840731/Social_Life_of_
PKI_Sociotechnical_Development_of_Korean_Public
-Key_Infrastructure