Apa perbedaan antara mengenkripsi beberapa data vs menandatangani beberapa data (menggunakan RSA)?
Enkripsi menjaga kerahasiaan pesan ("beberapa data"), sementara menandatangani memberikan non-repudiation: yaitu hanya entitas yang menandatanganinya yang bisa menandatanganinya. Ada perbedaan fungsional juga; baca terus.
Apakah itu hanya membalikkan peran kunci publik-swasta?
Benar-benar tidak. Penggunaan kunci pribadi yang sama untuk menandatangani dan mendekripsi (atau, juga, kunci publik yang sama untuk verifikasi dan enkripsi ) disukai, karena Anda tidak boleh mencampuradukkan tujuan. Ini bukan masalah matematika (RSA masih harus aman), tetapi masalah dengan manajemen kunci , di mana misalnya kunci penandatanganan harus memiliki live yang lebih pendek dan mengandung lebih banyak perlindungan sebelum digunakan.
Untuk pesan yang sama, Anda harus menggunakan kunci pribadi pengirim untuk menandatangani dan penerima kunci publik tepercaya untuk enkripsi. Secara umum tanda-kemudian-enkripsi digunakan jika musuh dapat mengganti tanda tangan dengan miliknya. Anda juga harus menggunakan kunci pribadi penerima untuk dekripsi dan kunci publik tepercaya dari pengirim untuk verifikasi.
Selain itu, Anda harus memahami bahwa pembuatan tanda tangan tidak menggunakan "enkripsi dengan kunci pribadi". Meskipun semua operasi RSA didasarkan pada eksponensial modular, skema padding sepenuhnya berbeda untuk pembuatan tanda tangan. Selain itu, kunci publik memiliki sifat yang sepenuhnya berbeda dari kunci pribadi RSA dalam semua penggunaan praktis RSA.
Misalnya, saya ingin menggunakan kunci pribadi saya untuk menghasilkan pesan sehingga hanya saya yang bisa menjadi pengirimnya.
Itu properti non-penolakan, yang dapat dicapai dengan menandatangani.
Saya ingin kunci publik saya digunakan untuk membaca pesan dan saya tidak peduli siapa yang membacanya.
Kunci publik harus dianggap diketahui oleh semua orang. Jika Anda ingin semua orang membaca pesan, maka Anda tidak mengenkripsi pesan itu.
Penandatanganan umumnya tidak akan memengaruhi konten pesan. Pesan dianggap terpisah dari tanda tangan. Secara resmi tanda tangan semacam itu dikenal sebagai "tanda tangan dengan lampiran" di mana lampiran adalah pesannya. Itu nama yang agak aneh karena pesannya dianggap lebih penting daripada tanda tangan di atasnya, tapi ya. Hanya beberapa tanda tangan yang menawarkan pemulihan pesan (sebagian); mereka tidak banyak digunakan lagi dan umumnya dianggap usang.
Perhatikan bahwa protokol tanda tangan seperti CMS dapat menggunakan format wadah yang mencakup pesan dan tanda tangan. Dalam hal ini, pertama-tama Anda perlu mengeluarkan - masih tidak terenkripsi - dari wadah, seperti membuka ritsleting file dari arsip .zip biasa. Jadi pesan tersebut dapat disembunyikan dari pandangan dan tidak dapat langsung digunakan dalam kasus itu.
Saya ingin dapat mengenkripsi informasi tertentu dan menggunakannya sebagai kunci produk untuk perangkat lunak saya. Saya hanya peduli bahwa saya adalah satu-satunya yang dapat menghasilkan ini.
Enkripsi digunakan untuk mencapai kerahasiaan. Di masa lalu, RSA menghasilkan tanda tangan yang sering dianggap sebagai "enkripsi dengan kunci pribadi". Namun, operasinya sangat berbeda seperti yang dijelaskan di atas, dan standar kemudian berusaha mati-matian dan memisahkan enkripsi dan pembuatan tanda tangan.
Saya ingin memasukkan kunci publik saya di perangkat lunak saya untuk mendekripsi / membaca tanda tangan kunci. Saya tidak peduli siapa yang bisa membaca data dalam kunci, saya hanya peduli bahwa saya adalah satu-satunya yang dapat diverifikasi yang dapat menghasilkan mereka.
Ya, ini disebut membangun kepercayaan pada kunci publik. Namun, melindungi kode program Anda sangat berbeda dari melindungi pesan. Anda dapat melakukan penandatanganan kode tetapi Anda perlu sesuatu untuk memeriksa tanda tangan di luar kode Anda . Ada sistem operasi yang menawarkan ini.
Ada Microsoft Authenticode misalnya. Toko aplikasi seperti toko aplikasi iStore dan Android mungkin atau mungkin tidak menggunakan penandatanganan kode, tetapi mereka menawarkan jaminan bahwa aplikasi Anda tidak dikloning atau setidaknya tidak dikloning di dalam toko. Bagaimanapun, kriptografi tidak selalu merupakan solusi.
Menjaga kode Anda tidak dikloning / diubah sama sekali jauh lebih sulit, dan Anda akan solid di wilayah DRM jika Anda pergi ke arah itu.
Apakah penandatanganan berguna dalam skenario ini?
Ya, tentu saja. Tentu dapat membantu memastikan bahwa pesan-pesan itu hanya ditandatangani oleh Anda, jika ada kepercayaan pada kunci publik. Jika dapat membantu untuk mengotentikasi kode aplikasi Anda / kunci publik terintegrasi sepenuhnya tergantung pada lingkungan yang Anda inginkan untuk menjalankan kode.