it-swarm-id.com

Mengapa seseorang tidak harus menggunakan kunci asimetris yang sama untuk enkripsi seperti yang mereka lakukan untuk penandatanganan?

Dalam jawaban untuk pertanyaan tentang RSA dan PGP, PulpSpy mencatat ini:

Dimungkinkan untuk membuat pasangan kunci RSA menggunakan GPG (untuk enkripsi dan penandatanganan - Anda sebaiknya tidak menggunakan kunci yang sama untuk keduanya).

Apa alasan di balik ini?

Mungkin pemahaman saya tentang enkripsi kunci publik cacat, tapi saya pikir operasi berjalan seperti ini:

  • Ketika Bob ingin mengenkripsi pesan ke Alice, ia menggunakan kunci publik Alice untuk enkripsi. Alice kemudian menggunakan kunci pribadinya untuk mendekripsi pesan.
  • Ketika Alice ingin menandatangani pesan secara digital kepada Bob, dia menggunakan kunci pribadinya untuk menandatanganinya. Bob kemudian menggunakan kunci publik Alice untuk memverifikasi tanda tangan.

Mengapa penting menggunakan kunci yang berbeda untuk enkripsi dan penandatanganan? Bukankah ini juga berarti Anda perlu mendistribusikan dua kunci publik kepada semua orang yang ingin Anda komunikasikan? Saya membayangkan ini dengan mudah dapat menyebabkan sejumlah kebingungan dan penyalahgunaan kunci.

100
Iszi

Sebagian besar pendekatan manajemen dan kerangka waktu berbeda untuk penggunaan penandatanganan dan kunci enkripsi.

Untuk penolakan, Anda tidak pernah ingin orang lain mendapatkan kendali atas kunci masuk Anda karena mereka bisa meniru Anda. Tetapi tempat kerja Anda mungkin ingin menyimpan kunci enkripsi Anda sehingga orang lain yang perlu bisa mendapatkan informasi yang Anda enkripsi.

Anda juga mungkin ingin kunci penandatanganan berlaku untuk waktu yang lama sehingga orang di seluruh dunia dapat memeriksa tanda tangan dari masa lalu, tetapi dengan kunci enkripsi, Anda sering ingin menggulirnya lebih cepat, dan dapat mencabut yang lama tanpa banyak kerepotan.

69
nealmcb

Itu berpotensi tidak aman untuk menggunakan keypair yang sama untuk penandatanganan dan enkripsi. Melakukannya dapat mengaktifkan serangan, tergantung pada skema kunci publik tertentu yang Anda gunakan. Penggunaan semacam ini bukan untuk apa sistem itu dirancang, jadi menggunakan sistem dengan cara yang tidak dirancang "membatalkan garansi".

Jangan lakukan itu. Ia meminta masalah.

34
D.W.

Ada beberapa alasan mengapa kita tidak boleh menggunakan kunci yang sama untuk enkripsi dan penandatanganan.

  1. Kami perlu membuat cadangan kunci rahasia kami untuk data yang dienkripsi. Kemudian kami ingin mendekripsi beberapa pesan terenkripsi lama, tetapi kami tidak perlu membuat cadangan kunci rahasia kami untuk ditandatangani. Jika penyerang menemukan kunci, kami dapat memberitahu CA kami untuk mencabutnya dan mendapatkan kunci rahasia baru untuk masuk tanpa perlu cadangan.

  2. Lebih penting lagi: Jika kita menggunakan kunci yang sama untuk enkripsi dan penandatanganan, penyerang dapat menggunakan ini untuk mendekripsi pesan terenkripsi kami. Inilah yang akan dia lakukan:

    Penyerang harus memilih nomor acak r, di mana

    r harus memiliki GDC(N, r) = 1,
    Dan N adalah angka yang digunakan untuk membuat kunci pribadi dan publik (N = pq)

    Kemudian penyerang memilih pesan baru (m′) Dan mengirimkan ini untuk masuk ke pengirim:

    m′ = m^e.r^e ... (di sini (e,n) Adalah kunci publik)

    Ketika pengirim menandatangani m′ Kami dapatkan

    m′^d ≡ (m^e.r^e)^d ≡ m.r (mod N)

    Sekarang penyerang hanya perlu "membaginya" dengan r untuk mendapatkan m (pesan rahasia).

12
Am1rr3zA

Alasan menggunakan kunci terpisah untuk penandatanganan dan enkripsi:

  1. Berguna dalam organisasi adalah kunci enkripsi perlu didukung atau disimpan dalam escrow untuk mendekripsi data begitu seorang karyawan/pengguna organisasi tidak lagi tersedia. Berbeda dengan kunci enkripsi, kunci masuk tidak boleh digunakan oleh orang lain selain karyawan/pengguna dan tidak dan tidak perlu disimpan dalam escrow.
  2. Memungkinkan memiliki waktu kedaluwarsa yang berbeda untuk menandatangani kunci enkripsi.
  3. Mengingat bahwa matematika yang mendasari adalah sama untuk enkripsi dan penandatanganan, hanya secara terbalik, jika penyerang dapat meyakinkan/menipu pemegang kunci untuk menandatangani pesan terenkripsi yang tidak diformat menggunakan kunci yang sama maka penyerang mendapatkan yang asli.

Referensi

  1. https://www.entrust.com/what-is-pki/

  2. https://www.gnupg.org/gph/en/manual/c235.html

  3. http://www.di-mgt.com.au/rsa_alg.html

7
moo

Bagi saya, alasan utama terkait dengan manajemen kunci, daripada keamanan kriptografi semata.

Untuk kripto asimetris, terutama periode di mana Anda ingin kunci publik valid mungkin sangat bergantung pada tujuan penggunaan kunci itu. Misalnya, pertimbangkan sistem di mana suatu komponen harus mengotentikasi dirinya sendiri terhadap komponen lain. Selain itu, komponen itu juga harus secara teratur membuat tanda tangan pada beberapa data. Secara teori, kunci privat tunggal dapat digunakan untuk kedua tujuan. Namun, anggap Otoritas Sertifikat PKI untuk alasan keamanan ingin membatasi periode di mana otentikasi yang berhasil dapat berlangsung berdasarkan pada satu sertifikat hingga dua tahun. Pada saat yang sama, undang-undang penyimpanan data mungkin mengharuskan data disimpan selama lima tahun, dan bahwa tanda tangan atas data tersebut harus dapat diverifikasi selama seluruh periode itu. Satu-satunya cara (suara) untuk menyelesaikan masalah ini adalah memberi komponen dua kunci privat: satu untuk otentikasi dan satu untuk ditandatangani. Sertifikat kunci pertama akan kedaluwarsa setelah dua tahun, sertifikat untuk penandatanganan akan berakhir setelah lima tahun.

Alasan serupa dapat diterapkan pada kriptografi simetris: jika Anda menggunakan kunci berbeda untuk tujuan berbeda, Anda dapat memutuskan semua pertanyaan manajemen kunci (mis. Frekuensi roll-over kunci master, periode untuk membuat cadangan kunci, dll.) pada persyaratan satu tujuan. Jika Anda menggunakan kunci tunggal (master) untuk berbagai keperluan, Anda mungkin berakhir dengan persyaratan yang bertentangan.

5
David Bakker

Enkripsi RSA didasarkan pada fungsi Trapdoor, yang artinya sepasang fungsi. Saya akan memanggil mereka D dan E. Fungsi dirancang sedemikian rupa sehingga D(E(x)) = x dan E(D(x)) = x (untuk setiap x). Dengan kata lain, D dan E adalah invers. Apa yang menjadikannya fungsi Trapdoor adalah bahwa jika Anda memiliki kunci publik, Anda hanya dapat menghitung E (secara praktis berbicara). Jika Anda memiliki kunci pribadi, Anda dapat menghitung D dan E.

Cara kerja enkripsi cukup jelas dari deskripsi itu. Jika Bob ingin mengirim pesan terenkripsi kepada Alice, ia menghitung ciphertext := E(plaintext). Kemudian Bob mengirimkan ciphertext ke Alice. Alice menghitung D(ciphertext), yaitu D(E(plaintext)), yang hanya plaintext.

Sekarang, mari kita bicara tentang cara kerja penandatanganan. Jika Alice ingin menandatangani message, maka ia menghitung signature := D(message). Dia kemudian mengirimkan message dan signature ke Bob. Bob kemudian menghitung validation := E(signature). Karena signature adalah D(message), maka validation = E(D(message)) = message.

Dengan kata lain: untuk menandatangani pesan, Anda bertindak seolah-olah Anda mendekripsi, dan itu adalah tanda tangan Anda. Untuk memverifikasi tanda tangan Anda, orang-orang dapat mengenkripsi tanda tangan dan memastikan mereka menerima kembali pesan asli Anda.

Saya akan mengatakan itu lagi: penandatanganan adalah operasi yang sama dengan dekripsi.

Ini adalah masalah mendasar tentang memisahkan kunci dan kunci enkripsi. Jika seseorang dapat membuat Anda menandatangani sesuatu, maka mereka baru saja membuat Anda mendekripsi.

Misalkan Anda menjalankan perusahaan notaris. Jika seseorang memberi Anda $ 10 dan pesan (misalnya, lirik lagu), maka Anda akan menandatangani pesan itu dan mengirimkannya kembali kepada Anda. Jika seseorang nanti menyalin lirik lagu Anda, Anda dapat membuat tanda tangan dari perusahaan notaris tepercaya untuk menunjukkan bahwa Anda menulis lirik lagu itu.

Sekarang anggaplah bahwa Eve mencegat pesan terenkripsi ke perusahaan notaris Anda. Bagaimana dia bisa menumbangkan enkripsi? Dia mengirimkan pesan yang sama kepada Anda untuk notaris! Sekarang Anda menjalankan operasi tanda tangan (yang, ingat, sama dengan operasi dekripsi), dan mengirim hasilnya kembali kepadanya. Dia sekarang memiliki pesan yang didekripsi.

Dalam praktiknya, protokol memiliki langkah-langkah yang membuat serangan ini lebih sulit. Misalnya, PGP (maksud saya protokolnya; gpg adalah implementasi paling umum di sini) tidak menandatangani pesan asli; itu menandatangani hash pesan. Tetapi bukti keamanan terbaik dalam situasi sederhana. Anda tidak ingin bukti Anda tentang keamanan RSA bergantung pada fungsi hash. (Misalnya, banyak orang menggunakan MD5 sebagai hash yang dipilih untuk waktu yang lama, tetapi hari ini MD5 dianggap sangat rusak.) Saja, keamanan RSA tergantung pada gagasan bahwa Anda tidak akan menandatangani pesan sewenang-wenang dengan kunci yang digunakan untuk enkripsi. Menjaga persyaratan itu di tempatnya adalah cara terbaik untuk memastikan keamanan PGP. (Seingat saya, ini adalah peringatan yang paling sering diulang tentang enkripsi asimetris dalam buku Bruce Scheier Kriptografi Terapan .)

Sekarang, mari kita bicara tentang pertanyaan lain yang Anda ajukan: "Apakah ini tidak juga berarti Anda perlu membagikan dua kunci publik kepada semua orang yang ingin Anda ajak berkomunikasi?"

"Kunci" berarti satu hal bagi pengguna, dan hal yang berbeda dengan implementasi kripto. Anda hanya perlu mengomunikasikan satu "kunci" tingkat pengguna, meskipun itu mungkin mengandung banyak kunci publik RSA.

PGP memiliki konsep subkey. Kunci master saya adalah kunci penandatanganan saja. Saya memiliki subkunci enkripsi yang terpisah. Subkunci itu ditandatangani oleh kunci master saya. Jika Anda mengimpor kunci PGP saya dari server keyser, atau mengunduhnya dari situs web saya, maka Anda akan mendapatkan kunci master saya dan semua subkunci saya. Meskipun Anda mungkin telah menandatangani hanya kunci master saya, kunci master saya telah menandatangani subkunci enkripsi saya, sehingga Anda tahu bahwa itu juga milik saya. Itu berarti bahwa dengan mengunduh kunci PGP saya (yang mencakup banyak kunci publik RSA), Anda sekarang memiliki semua yang Anda perlukan untuk memverifikasi tanda tangan saya dan mengenkripsi pesan kepada saya.

Dengan subkunci, manajemen kunci lebih kompleks dari sudut pandang kriptografi (ada langkah verifikasi kunci tambahan untuk dilalui), tetapi tidak dari sudut pandang praktis (kunci PGP saya mencakup kunci master saya, serta semua subkunci saya). Kompleksitas tambahan disembunyikan dalam implementasi, dan tidak terpapar kepada pengguna.

2
Piquan