Bagaimana membuat tanda tangan dijital? Bagaimana

advertisement
======= Pendahuluan ---|
Digital Signature Tanda tangan dijital adalah bentuk tiruan tanda tangan
konvensional ke dalam bentuk dijital. Tetapi bukan file scan tanda tangan di
kertas. Sebutan digital signature ini sebenarnya konsep. Dalam dunia nyata,
tanda tangan dijital itu bentuknya adalah rangkaian byte-byte yang jika
diperiksa bisa digunakan untuk memeriksa apakah suatu dokumen dijital, juga
termasuk email, benar berasal dari orang tertentu atau tidak.
Misalnya, Alice mengirimkan dokumen penting kepada Bob melalui email.
Ternyata,
Trent yang tahu kabar ini kemudian mencoba memalsukan email Alice. Dokumen
attachment Alice diganti. Ketika Bob terima email Alice (yang attachmentnya
sudah diganti oleh Trent), dia merasa aneh, karena isinya tidak sesuai dengan
pembicaraan sebelumnya. Bob curiga. Bob memeriksa (mem-verifikasi) digital
signature pada email tersebut. Bob tahu, ternyata surat itu tanda tangannya
tidak cocok.
Konsep ini sekarang telah diimplementasikan dalam bentuk S/MIME dan PGP. Saya
tidak akan bahas S/MIME dan PGP, tapi saya akan bahas bagaimana membuat dan
memeriksa keaslian tanda tangan dijital.
======= Implementasi ---|
Pre-requisit sebelum konsep ini bisa diimplementasikan
1.
Alice harus punya pasangan public key dan private key. Caranya?
Di-generate (dibangkitkan) dong!
Bagaimana membuat tanda tangan dijital?
1.
Alice mengambil nilai hash dari pesan/data. Fungsi hash yang bisa pakai
misalnya MD5 atau SHA1
2.
Alice mengenkrip nilai hash tersebut dengan algoritma enkripsi public
key, contohnya RSA (dipakai di S/MIME; sedangkan PGP pakai algoritma El
Gamal).
Hasil enkripsi hash dengan private key pengirim inilah yang disebut digital
signature.
3.
Alice menempelkan (concat) digital signature ke pesan/data.
4.
Alice mengirim pesan/data yang sudah ditempeli digital signature
tersebut
kepada Bob
Bagaimana mem-verifikasi tanda tangan dijital?
1.
Bob mengambil emailnya, kemudian memisahkan bagian tanda tangan dijital
dengan bagian pesan/datanya
2.
Bob mendekrip digital signature pesan tersebut dengan public key Alice.
Public key Alice sudah pernah diberikan oleh Alice sebelumnya, atau bisa
diambil dari website Alice
3.
Hasil dekripsi digital signature kemudian dicocokkan dengan nilai hash
bagian pesan/data email tersebut
4.
Jika hasilnya sama, berarti tanda tangan dijital dinilai valid sedangkan
bila beda, berarti digital signature tidak valid (dokumen telah dipalsukan
atau
pengirimnya pasti bukan Alice)
Berikutnya, untuk memperjelas konsep ini saya berikan contoh program dalam
bahasa Java.
Spesifikasi kebutuhan
- fungsi untuk menghasilkan digital signature
- fungsi untuk mem-verifikasi apakah digital signature valid atau tidak
- algoritma yang digunakan adalah RSA dengan fungsi hash MD5
- digital signature yang dihasilkan berupa byte array
Hasil
- Sebuah class Java bernama DigitalSignatureVerifier
Kebutuhan
JCA (Java Cryptography Architecture) yang ada secara default pada JRE & JDK
sejak Java 1.5.
Menghasilkan digital signature byte[] getDigitalSignature(String message,
PrivateKey pk) Input:
- Message/data yang akan diambil digital signature nya. Data bertipe String.
- Private key pemberi tanda tangan. Private key adalah objek dari class
PrivateKey
Hasil: Array byte digital signature menggunakan algoritma RSA dan fungsi hash
MD5.
Memverifikasi validitas digital signature boolean verifySignature(String
message, PublicKey pb, byte[] signature) Input:
- Message/data yang diperiksa. Data bertipe String.
- Public key pembuat digital signature. Public key adalah objek dari class
PublicKey
- Signature adalah array byte digital signature yang diperiksa validitasnya
Hasil: Jika digital signature valid, method akan menghasilkan nilai true. Jika
tidak, maka nilai yang dikembalikan adalah false.
Petunjuk penggunaan Detil petunjuk penggunaan ada di file Main.java
1.
Sebelum menggunakan DigitalSignatureVerifier, sebuah objek
DigitalSignatureVerifier perlu dibuat terlebih dahulu. Perintahnya adalah
sebagai berikut:
DigitalSignatureVerifier dsv = new DigitalSignatureVerifier();
2.
Membangkitkan pasangan kunci private key dan public key RSA, dapat
dipermudah dengan memanggil method generateRSAKeyPair().
KeyPair kp = dsv.generateRSAKeyPair();
3.
Private key dan public key dari pasangan kunci dapat diambil dengan
method getPrivate() dan getPublic() dari class KeyPair.
PrivateKey pk = kp.getPrivate();
PublicKey pb = kp.getPublic();
4.
Contoh perintah untuk mengambil digital signature pada suatu message
(data)
String message = "A DIGITALLY SIGNED MESSAGE.";
byte[] signature = dsv.getDigitalSignature(message, pk);
5.
Contoh perintah untuk memverifikasi apakah digital signature yang
diberikan valid atau tidak
boolean verified = dsv.verifySignature(message, pb, signature);
6.
Public key dan private key dapat juga direpresentasikan dalam bentuk
array byte
byte[] priv = dsv.getPrivateKeyAsBytes(pk);
byte[] pub = dsv.getPublicKeyAsBytes(pb);
7.
Private key dan public key yang ada dalam bentuk array byte dapat diload
kembali ke dalam class PrivateKey dan class PublicKey
PrivateKey pk2 = dsv.loadPrivateKeyFromBytes(priv);
PublicKey pb2 = dsv.loadPublicKeyFromBytes(pub);
======= Catatan --- |
Algoritma-algoritma pembentuk digital signature dan algoritma enkripsi public
key yang digunakan ditulis hard-coded di dalam program karena algoritma
enkripsi yang diminta hanya satu, yaitu RSA.
Download