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?
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?
Jawaban:
GnuPG melakukan enkripsi multi-kunci dalam standar.
Perintah berikut akan mengenkripsi doc.txt
menggunakan 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 alice@example.com \
--recipient bob@example.com doc.txt
Fitur ini dirinci di bagian panduan pengguna yang berjudul " Mengenkripsi dan mendekripsi dokumen "
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.
Berikut adalah cara melakukannya melalui gpg
baris perintah (seperti yang dijelaskan dalam jawaban David Segonds ):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
GUI Anda harus menyediakan cara untuk mengenkripsi untuk beberapa orang
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 .
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-key
parameter 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.
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:
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.
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.