Primitif Tanda Tangan Digital memungkinkan Anda memverifikasi bahwa tidak ada orang yang telah memodifikasi data Anda. Hal ini memberikan keaslian dan integritas, tetapi bukan kerahasiaan, data yang ditandatangani. Enkripsi ini bersifat asimetris, yang berarti menggunakan sepasang kunci (kunci publik dan kunci pribadi).
Primitif Tanda Tangan Digital memiliki properti berikut:
- Keaslian: Anda tidak dapat membuat tanda tangan yang
divalidasi oleh
PublicKeyVerify.Verify(signature, message)
, kecuali jika Anda memiliki kunci pribadi. - Asimetris: Membuat tanda tangan menggunakan kunci yang berbeda dengan verifikasinya. Hal ini memungkinkan Anda mendistribusikan kunci publik untuk memverifikasi tanda tangan kepada pihak yang tidak dapat membuat tanda tangan sendiri.
Jika Anda tidak memerlukan asimetri, sebaiknya gunakan primitif MAC yang lebih sederhana dan lebih efisien.
Fungsi tanda tangan digital direpresentasikan di Tink sebagai sepasang primitif:
- PublicKeySign untuk menandatangani data
- PublicKeyVerify untuk memverifikasi tanda tangan
Memilih jenis kunci
Sebaiknya gunakan ECDSA_P256 untuk sebagian besar kasus penggunaan, tetapi ada berbagai opsi. Secara umum, hal berikut berlaku:
- ECDSA_P256 adalah opsi yang paling banyak digunakan dan merupakan setelan default yang wajar. Namun, perhatikan bahwa tanda tangan ECDSA dapat diubah.
- ED25519 membuat tanda tangan deterministik dan memberikan performa yang lebih baik daripada ECDSA_P256.
- RSA_SSA_PKCS1_3072_SHA256_F4 membuat tanda tangan deterministik dan memberikan performa verifikasi terbaik (tetapi penandatanganan jauh lebih lambat daripada ECDSA_P256 atau ED25519).
Jaminan keamanan minimum
- Data yang akan ditandatangani dapat memiliki panjang arbitrer
- Tingkat keamanan 128-bit terhadap serangan pesan pilihan adaptif untuk skema berbasis kurva elips
- Tingkat keamanan 112-bit terhadap serangan pesan pilihan adaptif untuk skema berbasis RSA (memungkinkan kunci 2048-bit)
Kelenturan
Skema tanda tangan dapat diubah jika penyerang dapat membuat tanda tangan valid yang berbeda untuk pesan yang sudah ditandatangani. Meskipun hal ini bukan masalah untuk sebagian besar skenario, dalam beberapa kasus, programmer secara implisit mengasumsikan bahwa tanda tangan yang valid adalah unik, dan hal ini dapat menyebabkan hasil yang tidak terduga.
Contoh kasus penggunaan
Lihat Saya ingin menandatangani data secara digital.