Primitif Tanda Tangan Digital memungkinkan Anda memverifikasi bahwa tidak ada yang merusak data Anda. Tanda tangan digital memberikan keaslian dan integritas, tetapi bukan kerahasiaan, data yang ditandatangani. Kriptografi ini bersifat asimetris, yang berarti menggunakan sepasang kunci (kunci publik dan kunci pribadi).
Primitif Tanda Tangan Digital memiliki properti berikut:
- Keaslian: Tanda tangan yang divalidasi oleh
PublicKeyVerify.Verify(signature, message)tidak mungkin dibuat, kecuali jika Anda memiliki kunci pribadi. - Asimetris: Pembuatan 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, pertimbangkan untuk menggunakan primitif MAC yang lebih sederhana dan efisien.
Fungsi tanda tangan digital direpresentasikan di Tink sebagai pasangan primitif:
- PublicKeySign untuk menandatangani data
- PublicKeyVerify untuk memverifikasi tanda tangan
Jika kunci pribadi berada di tempat yang sulit dijangkau oleh pesan, seperti HSM atau KMS, lihat Prehash dan SignPrehash, yang membagi penandatanganan menjadi langkah hashing hanya kunci publik dan langkah penandatanganan hanya kunci pribadi.
Pilih jenis kunci
Sebaiknya gunakan ML_DSA_44 atau ECDSA_P256 untuk sebagian besar kasus penggunaan, tetapi ada berbagai opsi. Secara umum, hal berikut berlaku:
- ML-DSA-44 aman dari serangan kuantum. Kami sedang menerapkannya secara aktif dan kini direkomendasikan untuk bahasa pemrograman yang mendukungnya.
Untuk algoritma non-pasca-kuantum berikut, Anda dapat memperkirakan bahwa Anda harus mengubah jenis kunci dalam waktu dekat.
- ECDSA_P256 adalah opsi yang paling banyak digunakan dan default yang wajar. Namun, perlu diperhatikan bahwa tanda tangan ECDSA dapat dimodifikasi.
- 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 minimal
- Data yang akan ditandatangani dapat memiliki panjang arbitrer
- Tingkat keamanan 128-bit terhadap serangan pesan yang dipilih adaptif untuk skema berbasis kurva elips
- Tingkat keamanan 112-bit terhadap serangan pesan yang dipilih adaptif untuk skema berbasis RSA (memungkinkan kunci 2048-bit)
Kemampuan untuk diubah
Skema tanda tangan dapat dimanipulasi jika penyerang dapat membuat tanda tangan valid yang berbeda untuk pesan yang sudah ditandatangani. Meskipun hal ini tidak menjadi masalah untuk sebagian besar skenario, dalam beberapa kasus, programmer secara implisit mengasumsikan bahwa tanda tangan yang valid bersifat unik, dan hal ini dapat menyebabkan hasil yang tidak terduga.
Contoh kasus penggunaan
Lihat Saya ingin menandatangani data secara digital.