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 280 tebakan.
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 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.