Sebagian orang menyangka tanda tangan digital adalah tanda tangan manusia hasil scan/foto/ditulis dengan stylus, tapi dalam kriptografi, maksudnya bukan itu. Tandatangan digital bertujuan untuk membuktikan bahwa:
- seseorang tidak bisa menyangkal bahwa pernah menandatangani sebuah dokumen/file (non repudiation)
- semua orang lain bisa memverifikasi bahwa tanda tangan tersebut valid
Ada banyak skema tanda tangan digital. Prinsipnya sama: ada key private yang dimiliki oleh penandatangan (signer) dan ada key publik yang disebarkan publik. Contoh algoritma yang bisa dipakai adalah RSA. Saya memilih satu algoritma saja untuk menjelaskan karena saya sudah membahas RSA di posting lain.
Secara praktis, untuk melakukan signing sebuah file, hal pertama yang dilakukan adalah: hash file tersebut. Pembahasan mengenai fungsi hashing sudah saya lakukan (bagian pertama di sini, dan kedua di sini). Lalu dilakukan padding terhadap hasil hashingnya (padding sudah dibahas di sini).
Setelah itu untuk menghasilkan tanda tangan digitaldilakukan operasi “dekrip” RSA terhadap hash sebelumnya. Sebenarnya ini bukan benar-benda mendekrip sesuatu. Dinamai “dekrip” karena dilakukan perpangkatan dengan “private key”. Hasilnya adalah bilangan yang bisa direpresentasikan dalam bentuk hex, base64 atau apapun (encoding sudah dibahas di tulisan ini)
Untuk melakukan verifikasi file, maka langkah yang perlu dilakukan adalah:
- Hash file tersebut
- “Enkrip” signature dengan public key orang yang menandatangani dokumen tersebut
- Cek apakah hasilnya sama dengan hash yang dilakukan terhadap file
Skema signature ini sangat bergantung pada keamanan fungsi-fungsi yang membentuknya: hash (jika fungsi hash lemah, bisa dibuat file lain yang isinya berbeda tapi hashnya sama), padding (supaya tidak bisa dilakukan manipulasi terhadap hasil signature RSA, dan fungsi RSA itu sendiri (termasuk juga pemilihan bilangan primanya).
Seperti terlihat di tulisan ini, bahwa untuk memahami signing saja diperlukan pengetahuan mengenai:
- Encoding
- Hash
- RSA (jika algoritma signingnya bukan RSA, maka perlu tahu yang lain misalnya El Gamal)
- Padding
Nantinya di bagian lain signing ini juga jadi bagian dari sesuatu yang lebih kompleks. Tapi sebelum meneruskan lagi, saya akan membahas mengenai stream dan block cipher di bagian-bagian berikutnya.