enkripsi / dekripsi dengan banyak kunci

110

Apakah mungkin untuk mengenkripsi data, sehingga dapat didekripsi dengan beberapa kunci berbeda?

Contoh:

Saya telah mengenkripsi data dengan kunci1, tetapi saya ingin dapat mendekripsi dengan kunci 2, 3, dan 4.

Apakah ini mungkin?

Glen Solsberry
sumber

Jawaban:

170

GnuPG melakukan enkripsi multi-kunci dalam standar.

Perintah berikut akan mengenkripsi doc.txtmenggunakan kunci publik untuk Alice dan kunci publik untuk Bob. Alice dapat mendekripsi menggunakan kunci pribadinya. Bob juga dapat mendekripsi menggunakan kunci pribadinya.

gpg --encrypt --recipient [email protected] \
    --recipient [email protected] doc.txt

Fitur ini dirinci di bagian panduan pengguna yang berjudul " Mengenkripsi dan mendekripsi dokumen "

David Segonds
sumber
Dito. Sangat keren untuk mengetahui bagaimana melakukan itu, tapi saya tidak dapat menemukan tidak menyembunyikan halaman manual di atasnya.
MarkusQ
@ Mitch, saya memposting jawaban yang mungkin memiliki jawaban kami! (Silakan uji dan puji jika demikian / tidak - JAUH dihargai!)
pythonlarry
@ MarkusQ, lihat tautan saya ke Mitch, di atas. Uji / terima kasih jika Anda bisa! :-)
pythonlarry
Jadi ini menghasilkan 1 file terenkripsi yang dapat dibaca menggunakan kunci privat, bukan 1 file per kunci?
pengguna8675309
7
@ user8675309, Ya. Data dienkripsi dengan kunci simetris umum. Hanya kunci simetris yang dienkripsi oleh kunci publik setiap penerima. Itu tidak mengenkripsi ulang seluruh data untuk setiap penerima.
wisbucky
55

iya itu mungkin

Ya, enkripsi untuk beberapa penerima dimungkinkan. Juga tampaknya logis ketika Anda berpikir bahwa Anda mungkin ingin dapat membaca apa yang telah Anda kirimkan kepada seseorang dan untuk melakukannya Anda harus berada dalam daftar penerima.

Garis komando

Berikut adalah cara melakukannya melalui gpgbaris perintah (seperti yang dijelaskan dalam jawaban David Segonds ):

gpg --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
clear-message.txt

Klien GUI

GUI Anda harus menyediakan cara untuk mengenkripsi untuk beberapa orang

Mekanisme

Ada pertanyaan tentang Keamanan Informasi , ukuran File GPG dengan banyak penerima? , yang menjelaskan mekanisme enkripsi :

GPG mengenkripsi file satu kali dengan kunci simetris, kemudian menempatkan tajuk yang mengidentifikasi pasangan kunci target dan versi terenkripsi dari kunci simetris.

[...] Ketika dienkripsi ke beberapa penerima, header ini ditempatkan beberapa kali menyediakan versi terenkripsi unik dari kunci simetris yang sama untuk setiap penerima .

Édouard Lopez
sumber
4
terima kasih khusus untuk dua kalimat terakhir: mereka membuat semuanya menjadi jelas sekarang!
radistao
31

Klien GnuPG dan PGP secara umum biasanya mengenkripsi data aktual dengan kunci simetris yang disebut "kunci sesi". Kunci sesi kemudian dienkripsi dengan setiap "kunci penerima" (yaitu kunci yang Anda tentukan dengan -r / - penerima). Ini kadang-kadang disebut sebagai cipher hybrid . Saat ini, saya yakin GnuPG secara default menggunakan kunci sesi 256 bit dan AES untuk mengenkripsi data teks biasa ke kunci sesi AES-256 tersebut, dan kunci penerima Anda adalah RSA / DSA / ECDSA / dll. kunci asimetris dalam kasus ini.

Salah satu alasan untuk melakukannya dengan cara ini adalah karena algoritme kriptografi simetris seperti AES umumnya jauh lebih cepat daripada algoritme asimetris seperti RSA. GnuPG dengan demikian hanya perlu mengenkripsi ~ 256 bit (kunci sesi) dengan RSA, dan dapat menggunakan AES untuk mengenkripsi data (sebesar yang Anda inginkan!) Dengan kunci sesi tersebut. Mesin Intel bahkan memiliki instruksi bawaan , AES-NI , untuk melakukan beberapa langkah algoritme dalam perangkat keras, yang membuat GnuPG lebih cepat dalam mengenkripsi / mendekripsi data.

Alasan lain untuk melakukannya dengan cara ini adalah memungkinkan dokumen yang dienkripsi PGP dienkripsi ke banyak pihak tanpa harus menggandakan ukuran dokumen. Perhatikan bahwa ketika Anda menentukan beberapa penerima untuk dokumen terenkripsi (mis. gpg -ea -r Alice -r Bob -o ciphertext.asc), Dokumen terenkripsi yang disimpan (ciphertext.asc) tidak 2x sebesar jika Anda baru saja mengenkripsinya ke Alice.

Lihat juga --show-session-keyparameter di halaman manual gpg agar dapat mendekripsi hanya kunci sesi, misalnya untuk mengizinkan pihak ketiga mendekripsi dokumen yang dienkripsi kepada Anda tanpa harus mentransfer kepada mereka kunci pribadi atau data teks biasa Anda.

ido
sumber
1
Terima kasih atas penjelasan tentang dokumen terenkripsi yang tidak n kali lebih besar di mana n adalah jumlah penandatangan.
theartofbeing
4

Iya itu mungkin. Google "enkripsi multipartai" sebagai permulaan.

AFAIK, tidak ada drop-in dan gunakan paket-paket untuk itu.

- MarkusQ

PS Untuk sketsa bagaimana hal itu bisa dilakukan, pertimbangkan ini. Pesan terenkripsi terdiri dari:

  • muatan, dienkripsi dengan pad satu kali
  • pad satu waktu, dienkripsi dengan key1
  • pad satu waktu, dienkripsi dengan key2
  • ...
  • pad satu kali, dienkripsi dengan keyN

Penerima yang memegang kunci i baru saja mendekripsi salinan pad dengan kunci mereka, dan kemudian mendekripsi muatan.

Namun, ini hanyalah bukti bahwa itu bisa dilakukan dan akan payah sebagai implementasi yang sebenarnya. Jika memungkinkan, Anda harus menghindari pengguliran enkripsi Anda sendiri. Jika Anda tidak mengerti mengapa, Anda harus pasti menghindari bergulir enkripsi Anda sendiri.

----- Edit ------------

Jika saya salah dan alat Gnu melakukannya, gunakanlah. Tetapi saya tidak dapat menemukan informasi apa pun tentang cara melakukannya.

MarkusQ
sumber
1
Apa yang mungkin menyebalkan tentang ini adalah bahwa setelah Anda mengetahui pad satu waktu, Anda memiliki teks biasa yang diketahui, bersama dengan nilai terenkripsi untuk kunci lain. Dengan menggunakan informasi ini, Anda dapat mempermudah untuk mengetahui apa saja kunci lainnya.
Kibbee
2
Googling "enkripsi multipartai" tidak banyak menghasilkan. Anda mungkin akan lebih beruntung dengan "enkripsi siaran" yang mencakup kasus ini juga.
staktrace
1
@Kibbee: Kuncinya bukan rahasia, tapi untuk publik. Jadi membuatnya lebih mudah untuk mengetahui apa saja itu tidak masalah. (Skema ini hanya digunakan dengan kunci yang hanya dapat digunakan untuk mengenkripsi, bukan mendekripsi.)
David Schwartz
5
Saya cukup yakin bahwa implementasi sebenarnya tidak menggunakan pad satu kali bersama (yang harus sebesar teks biasa dan teks terenkripsi, sehingga menggandakan ukuran pesan), tetapi sebenarnya menggunakan kunci enkripsi simetris bersama (yang biasanya jauh lebih kecil dari pesannya).
Joachim Sauer
-16

Beberapa (lebih dari dua) kunci RSA mungkin seperti ini - saya bukan ahli matematika, jadi algoritma ini belum tentu aman, saya hanya ingin memberi gambaran.

m = p * q * r; p, q, r adalah bilangan prima besar

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei adalah bilangan sembarang, d dihitung untuk memenuhi persamaan

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Algoritma ini dapat digunakan misalnya untuk meningkatkan kecepatan The Onion Router.

IQfighter
sumber