Peran dan Fungsi Tanda Tangan Digital (Digital Signatures)
Bagian selanjutnya pada kesempatan kali ini kita akan membahas tentang Tanda Tangan Digital, atau Digital Signature. Tanda tangan digital dibutuhkan dalam proses membuat blok pada mata uang digital.
Teknisnya, tanda tangan digital ini seperti halnya membubuhkan tanda tangan di atas kertas pada umumnya. Hanya saja, pembubuhan tanda tangan ini dilakukan secara digital, bisa pada dokumen, atau sebuah file.
Ada dua hal yang perlu dilakukan agar tanda tangan digital ini bisa berfungsi layaknya tanda tangan tulisan tangan diatas kertas. Pertama, pembubuhan tanda tangan digital ini hanya bisa dilakukan oleh anda sendiri. Namun, orang lain yang bisa melihatnya, akan bisa memferifikasi keabsahannya.
Kedua, pembubuhan tanda tangan ini sebagai pengikat atas sebuah dokumen tertentu. Sehingga tidak bisa digunakan untuk menunjukkan persetujuan ataupun dukungan anda pada dokumen tertentu lainnya.
Selanjutnya, bagaimana bisa membuat tanda tangan digital ini dalam kriptografi? Skema tanda tangan digital terdiri dari tiga algoritma berikut:
⦁ (sk, pk): = generateKeys (keysize)
Metode generateKeys ini berfungsi untuk memperoleh ukuran key dan juga membuat generate key pair-nya. Sementara sk adalah private key yang bersifat rahasia dan dijaga kerahasiaannya untuk menandatangani sebuah pesan. Dan, pk adalah public key yang bisa diberikan kepada orang lain. Dengan key ini, orang lain akan bisa melakukan verifikasi atas tanda tangan digital itu.
Metode generateKeys ini berfungsi untuk memperoleh ukuran key dan juga membuat generate key pair-nya. Sementara sk adalah private key yang bersifat rahasia dan dijaga kerahasiaannya untuk menandatangani sebuah pesan. Dan, pk adalah public key yang bisa diberikan kepada orang lain. Dengan key ini, orang lain akan bisa melakukan verifikasi atas tanda tangan digital itu.
Sebagai catatan dalam hal ini, bahwa generateKeys dan sign bisa berupa algoritma acak. Pada dasarnya generateKeys akan lebih baik jika diacak. Karena dengan begitu bisa membuat key yang berbeda untuk orang yang berbeda pula. Di lain hal, selalu menjadi deterministik, sesuai dengan fungsinya.
⦁ sig: = sign(sk, message)
Metode ini akan mengambil key dan juga pesan (message). Selanjutnya, sk sebagai input, untuk bisa menghasilkan output berupa tanda tangan pada pesan dibawah sk .
Metode ini akan mengambil key dan juga pesan (message). Selanjutnya, sk sebagai input, untuk bisa menghasilkan output berupa tanda tangan pada pesan dibawah sk .
⦁ isValid: = verify (pk, message, sig)
Cara ini untuk mengambil pesan, tanda tangan, dan public key sebagai inputnya. Lalu, menjadikannya bernilai boolean, yakni benar atau salah (true atau false). Sedangkan isValid akan menghasilkan pernyataan true, jika sig dalam pesan tersebut berisikan tanda tangan yang valid, dibawah public key (pk). Selanjutnya, akan bernillai false jika menunjukkan kebalikannya.
Cara ini untuk mengambil pesan, tanda tangan, dan public key sebagai inputnya. Lalu, menjadikannya bernilai boolean, yakni benar atau salah (true atau false). Sedangkan isValid akan menghasilkan pernyataan true, jika sig dalam pesan tersebut berisikan tanda tangan yang valid, dibawah public key (pk). Selanjutnya, akan bernillai false jika menunjukkan kebalikannya.
Ketiga algoritma tersebut, harus bisa memenuhi dua hal berikut:
⦁ Tanda tangan yang valid, harus terverifikasi terlebih dahulu.
verify(pk, message, sign(sk, message)) == true
⦁ Tanda tangan bersifat existentially unforgeable (tidak bisa dirubah).
⦁ Tanda tangan yang valid, harus terverifikasi terlebih dahulu.
verify(pk, message, sign(sk, message)) == true
⦁ Tanda tangan bersifat existentially unforgeable (tidak bisa dirubah).
Unforgeability Digital Signature
Dua hal yang harus terpenuhi pada tanda tangan digital. Pertama adalah harus terverifikasi. Selanjutnya adalah unforgeability digital signature. Contoh untuk yang pertama, misalnya ada seseorang yang memberikan validasi sebuah pesan dengan sk (secret key). Lantas orang tersebut mencoba memvalidasi lagi tanda tangan pada pesan yang sama menggunakan public key (pk) miliknya, maka validasi pesan tersebut harus benar. Inilah mengapa hal ini menjadi kebutuhan dasar.
Unforgeability
Kebutuhan kedua yang harus terpenuhi adalah bahwa pada saat pesan tersebut sudah terverifikasi dengan valid, tidak bisa lagi untuk dirubah maupun ditindih. Sementara jika ada orang lain yang mengetahui public key anda, lantas berusaha melihat tanda tangan digital anda pada pesan yang lain. Maka, orang tersebut tidak bisa menindih atau memalsukan tanda tangan anda pada pesan yang ia belum lihat tanda tangannya.
Sifat tidak bisa dirubah ini umumnya digunakan dalam sebuah permainan yang dimainkan dengan seorang musuh. Dalam kriptografi, hal ini cukup umum untuk dijadikan bukti atas tingkat keamanannya. Semisal A adalah seorang musuh yang mengaku bisa memalsukan tanda tangan. Sementara B bertindak sebagai seorang penantang yang bertugas untuk menguji atas pengakuan tanda tangan digital oleh musuh ini.
Pertama kali yang harus dilakukan adalah generateKey dulu untuk membuat secret key, dan public key yang sesuai. Kemudian memberikan secret key tersebut pada B. Publik key diberikan pada keduanya, baik penantang dan musuh. Jadi disini, B yang bertindak sebagai musuh, hanya mengetahui informasi yang bersifat umum saja, yakni public key. Sedangkan misi B untuk memalsukan tanda tangan A.
Sampel pada permainan ini juga sering dijumpai dalam dunia nyata. Seorang penyerang mungkin bisa untuk melihat tanda tangan seseorang pada sejumlah dokumen. Kemudian penyerang atau pemalsu itu berusaha memalsukan beberapa dokumen lainnya yang digunakan sebagai sasaran. Bisa jadi, pemalsu itu akan memanipulasi tanda tangan dari korbannya. Seakan-akan korban telah menandatangani beberapa dokumen berbahaya yang berguna untuk si penyerang sendiri.
Mari kita lanjutkan sampel permainan ini. Katakanlah A, kita perbolehkan untuk mendapat tanda tangan pada beberapa dokumen yang ia pilih. Kemudian, kita berikan juga waktu untuk bisa memberikan sejumlah tebakan angka yang cukup rasional. Rasional disini maksudnya, kita memberikan A sebesar 1 juta peluang tebakan, tapi tidak lebih dari 280tebakan.
Kemudian A akan mengambil beberapa pesan (M). Pesan itu akan coba ditimpa dan dirubah dengan membubuhkan tanda tangan lagi diatasnya. Satu-satunya rintangan yang ada pada (M) adalah bahwa A sebelumnya belum melihat tanda tangan didalamnya. Karena, A akan bisa mengirim kembali tanda tangan yang sudah diberikan kepadanya. Setelah itu B memakai algoritma verify. Dilakukan agar bisa memberikan ketetapan, bahwa tanda tangan pada pesan (M) dibawah verifikasi public key yang dihasilkannya itu valid. Jika berhasil diverifikasi, maka B keluar sebagai pemenangnya.
Bisa dikatakan, tanda tangan digital ini akan mencapai sifat unforgeable, jika dan hanya jika, peluang A untuk bisa memalsukan sebuah pesan sangat,dan sangatlah kecil. Karena peluang yang sangat kecil tersebut, sehingga bisa diasumsikan hal itu tidak akan bisa dilakukan.
Ada beberapa hal praktis yang perlu dilakukan untuk mengubah gagasan algoritma ini menjadi mekanisme tanda tangan digital, dan bisa diimplementasikan. Contohnya, banyak algoritma tanda tangan secara acak (khususnya yang digunakan dalam Bitcoin). Oleh karena itu dibutuhkan sumber yang bisa mengimplementasikan dan bisa membuat metode acak tersebut. Hal ini cukup penting dan tidak bisa dianggap sepele. Karena jika pengacakan itu buruk, maka akan menjadikan algoritma tersebut tidak aman.
Selain itu, hal lain yang perlu diperhatikan selanjutnya adalah tentang besar kecilnya ukuran sebuah pesan. Teknisnya, ada batas ukuran sebuah pesan yang bisa di tanda tangan. Karena, pada skema asli menggunakan string bit yang ukuran panjangnya terbatas. Namun ada jalan untuk bisa mengatasi batas limit ini. Yakni dengan cara menandatangani hashing pada pesan itu. Ketimbang, menandatangani pesannya saja. Jika kita menggunakan fungsi hash kriptografi dengan output 256-bit. Akan lebih efektif untuk menandatangani pesan yang beragam ukuran panjangnya. Cara ini dirasa aman menggunakan hash dari pesan yang berfungsi sebagai message digest, karena fungsi hash adalah collision resistant.
Cara lainnya yang akan digunakan selanjutnya adalah dengan menandatangani pointer hash. Jika kita menandatangani pointer hash, maka tanda tangan tersebut akan itu akan mengikat dan melindungi seluruh struktur. Jadi tidak hanya melindungi pointer hashnya saja.
Elliptic Curve Digital Signature Algorithm (ECDSA)
Bitcoin menggunakan skema tanda tangan digital tertentu, yang disebut dengan Elliptic Curve Digital Signature Algorithm (ECDSA). Skema tersebut adalah skema standar yang dipakai pemerintah Amerika. Hasil pengembangan lanjutan dari algoritma sebelumnya, yaitu algoritma DSA. Kemudian disesuaikan dengan menggunakan kurva eliptik. Algoritma ini telah banyak menerima masukan analisis kriptografi selama bertahun-tahun, dan diyakini cukup aman.
Dengan ECDSA, metode keacakan dari ini akan cukup penting karena sumber keacakan yang buruk akan melemahkan key anda. Hal itu cukup rasional bahwa jika menggunakan pengacakan yang buruk dalam pembuatan key, maka key tersebut kemungkinan terbesarnya juga tidak aman.
Metode pengacak ini hanya digunakan untuk penandatanganan saja. Dengan menggunakan key yang bagus dan cukup aman. Sebaliknya, jika private key anda bocor atau lemah karena dihasilkan dari pengacakan yang buruk saat generate key, maka akan mudah untuk memalsukan tanda tangan anda. Dalam Bitcoin, sebenarnya tidak ada algoritma enkripsi. Karena tidak ada yang perlu untuk di enkripsi. Seperti yang akan bisa kita simpulkan sendiri nantinya. Enkripsi adalah teknik kriptografi yang hanya mungkin bisa dilakukkan dengan kriptografi modern. Banyak dari mereka sepert skema komitmen, termasuk menyembunyikan informasi dengan beberapa cara, itu berbeda dari enkripsi.
sumber
sumber
Tidak ada komentar:
Posting Komentar