Apakah mungkin menambahkan penerima ke file yang sudah dienkripsi di GPG?

12

Dengan asumsi saya telah mengenkripsi file (mungkin besar) menggunakan GPG; misalnya

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

Apakah mungkin untuk menambahkan penerima lain tanpa terlebih dahulu mendekripsi file, diikuti oleh enkripsi lain?


sumber
Anda mengenkripsi file dengan kunci publik "Some Name". Dan apa yang akan digunakan untuk penerima lain?
ott--
6
@ott: Itu bukan cara kerjanya (AFAIK). PGP mengenkripsi file dengan kunci simetris bukan dengan kunci publik penerima. Kemudian secara terenkripsi mengenkripsi beberapa salinan kunci simetris menggunakan kunci publik masing-masing penerima.
RedGrittyBrick
@RedGrittyBrick Saya tidak tahu tentang pgp, tetapi penggunaan gpg --symmetricuntuk itu. Dengan --recipientitu menggunakan kunci publik penerima. Mungkin ada lebih dari 1 penerima, tetapi harus dilakukan dalam satu perintah, bukan dalam 2 perintah terpisah.
ott--
3
@ott: Saya membaca bahwa " Juga dimungkinkan untuk mengenkripsi file secara bersamaan untuk sejumlah penerima ganda dengan perintah dari formgpg -e -r <name1> -r <name2> ... <file> " Saya belum pernah mencoba ini. Ini sesuai dengan apa yang saya pelajari dari crypto bertahun-tahun yang lalu yaitu hampir selalu lebih efisien untuk menggunakan algoritma simetris cepat untuk mengenkripsi teks pesan. Hanya kunci pesan yang dienkripsi menggunakan enkripsi asimetris lambat.
RedGrittyBrick

Jawaban:

8

Jawaban singkat: tidak

Pertama-tama, perhatikan bahwa jika Anda bukan salah satu dari penerima, itu sama sekali tidak mungkin. Anda bahkan tidak memiliki kemampuan untuk mendekripsi file, apalagi menambahkan penerima. Bahkan jika Anda mengenkripsi dua detik yang lalu.

Dengan asumsi Anda adalah seorang penerima, secara teknis itu mungkin. File sebenarnya dienkripsi dengan kunci sesi dan kunci sesi dienkripsi dengan kunci publik Anda, sehingga secara teori Anda bisa mendekripsi kunci sesi dan memasukkannya kembali ke kunci orang lain, lalu kemas semuanya bersama-sama dalam sebuah file seperti jika Anda awalnya mengenkripsi dokumen untuk kedua orang.

Namun, gpg tidak memiliki kemampuan ini . Yang paling dekat dengan gpg adalah

  1. Gunakan --show-session-keyopsi untuk mendapatkan kunci sesi (yang tampaknya juga mendekripsi file, kehilangan titik dalam kasus ini)
  2. Enkripsi kunci sesi itu ke kunci publik orang lain (sebenarnya, ini membuat kunci sesi baru dan menggunakan kunci sesi itu untuk mengenkripsi kunci sesi asli)
  3. Kirim kedua file.
  4. Penerima dapat mendekripsi kunci sesi dan digunakan --override-session-keyuntuk mendekripsi pesan asli.
Nathan Grigg
sumber
3

1) Situasi ini adalah alasan mengenkripsi file ke diri Anda (dan juga penerima yang dituju) selalu merupakan ide yang baik. RedGrittyBrick benar di atas dalam menggambarkan cara kerja GPG dan PGP, yang mengalir ke jawaban nathang di atas.

2) Namun, jika Anda memiliki file asli, lebih baik Anda membuat file terenkripsi baru untuk penerima baru.

Dengan asumsi Anda tidak ingin pergi rute kunci sesi dari saran nathang, jika Anda mengenkripsi file untuk diri Anda sendiri (seperti di atas dalam # 1) di tempat pertama, kemudian mendekripsi dan kemudian ikuti langkah # 2 di atas.

Jika Anda tidak memiliki yang asli atau yang dienkripsi untuk Anda sendiri, Anda tidak bisa mendapatkan kembali data dan tidak bisa mengenkripsi ke orang lain tanpa penerima pertama yang mengirim Anda kembali salinan.

mikebabcock
sumber
1
Sebenarnya, itu tidak selalu merupakan ide yang baik. Lihat PGP: Termasuk kunci publik Anda sebagai penerima? Adakah yang kurang aman? di Informasi Keamanan Stack Exchange untuk beberapa argumen yang mendukung dan menentang.
CVn
0

Apakah mungkin untuk menambahkan penerima lain tanpa terlebih dahulu mendekripsi file, diikuti oleh enkripsi lain?

Tidak mungkin tanpa mendekripsi sama sekali, tetapi sepertinya harus dimungkinkan tanpa mendekripsi file :

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

Kecuali ini tampaknya menghasilkan file yang rusak (setidaknya kadang-kadang) karena gpgkeduanya membaca dan menulis ke file yang sama secara bersamaan:

Sebagai gantinya, Anda dapat melakukan hal berikut (dalam skrip) untuk menghindari keharusan mengelola file yang didekripsi:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shred, dengan -uopsi, secara aman menimpa data dan kemudian menghapus file yang Anda tentukan. Program serupa ada untuk platform lain, seperti srmpada Mac OS X.

Atau Anda dapat menulis skrip Anda seperti ini (milik dave_thompson_085 ) untuk menghindari bahkan perlu menyimpan data yang didekripsi dalam file sama sekali:

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg
Kenny Evitt
sumber
2
Anda tidak perlu menulis file temp yang jelas jika Anda meninggalkan tempat yang dienkripsi sementara: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgatau mirrornya mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Atau (mungkin juga) secara cerdik hanya menyimpan inode lama :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085
@ dave_thompson_085 Menarik - terima kasih!
Kenny Evitt