Có thể thêm người nhận vào một tệp đã được mã hóa trong GPG không?


12

Giả sử tôi đã mã hóa một tệp (có thể lớn) bằng GPG; ví dụ

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

Có thể thêm một người nhận khác mà không giải mã tập tin trước, sau đó là mã hóa khác?

gnupg 

Bạn đã mã hóa tệp bằng khóa chung của "Một số tên". Và nó sẽ sử dụng cho người nhận khác?
ott--

6
@ott: Đó không phải là cách nó hoạt động (AFAIK). PGP mã hóa tệp bằng khóa đối xứng không phải với khóa chung của người nhận. Sau đó, mã hóa riêng một số bản sao của khóa đối xứng đó bằng khóa chung của mỗi người nhận.
RedGrittyBrick

@RedGrittyBrick Tôi không biết về pgp, nhưng gpg sử dụng --symmetriccho điều đó. Với --recipientnó sử dụng khóa chung của người nhận. Có thể có nhiều hơn 1 người nhận, nhưng nó phải được thực hiện trong một lệnh chứ không phải trong 2 lệnh riêng biệt.
ott--

3
@ott: Tôi đọc rằng " Cũng có thể mã hóa một tệp đồng thời cho bất kỳ số lượng người nhận nào bằng một lệnh có dạnggpg -e -r <name1> -r <name2> ... <file> " Mặc dù vậy tôi vẫn chưa thử điều này. Nó phù hợp với những gì tôi đã học về tiền điện tử từ nhiều năm trước, đó là hầu như luôn hiệu quả hơn khi sử dụng các thuật toán đối xứng nhanh để mã hóa văn bản tin nhắn. Chỉ có khóa thông báo được mã hóa bằng mã hóa bất đối xứng chậm.
RedGrittyBrick

Câu trả lời:


8

Câu trả lời ngắn: không

Trước hết, lưu ý rằng nếu bạn không phải là một trong những người nhận, điều đó là hoàn toàn không thể. Bạn thậm chí không có khả năng giải mã tập tin, ít hơn nhiều người nhận. Ngay cả khi bạn đã mã hóa nó hai giây trước.

Giả sử bạn là một người nhận, về mặt kỹ thuật là có thể. Tệp thực sự được mã hóa bằng khóa phiên và khóa phiên được mã hóa bằng khóa chung của bạn, vì vậy về mặt lý thuyết bạn có thể giải mã khóa phiên và mã hóa lại thành khóa của người khác, sau đó đóng gói mọi thứ trong một tệp giống như bạn ban đầu đã mã hóa tài liệu cho cả hai người.

Tuy nhiên, gpg không có khả năng này . Gần nhất bạn có thể nhận được với gpg là

  1. Sử dụng --show-session-keytùy chọn để lấy khóa phiên (dường như cũng giải mã tệp, thiếu điểm trong trường hợp này)
  2. Mã hóa khóa phiên đó thành khóa chung của người khác (thực ra, điều này tạo ra khóa phiên mới và sử dụng khóa phiên đó để mã hóa khóa phiên gốc)
  3. Gửi cả hai tập tin.
  4. Người nhận có thể giải mã khóa phiên và sử dụng --override-session-keyđể giải mã tin nhắn gốc.

3

1) Tình huống này là lý do tại sao mã hóa một tệp cho chính bạn (cũng như người nhận dự định) luôn là một ý tưởng tốt. RedGrittyBrick là chính xác ở trên trong việc mô tả cách GPG và PGP hoạt động, chảy vào câu trả lời của nathang ở trên.

2) Tuy nhiên, nếu bạn có tệp gốc, tốt nhất bạn chỉ nên tạo một tệp được mã hóa mới cho người nhận mới.

Giả sử bạn không muốn đi theo lộ trình khóa phiên từ đề xuất của nathang, nếu bạn đã mã hóa tệp cho chính mình (như ở trên # 1) ở vị trí đầu tiên, sau đó giải mã nó và sau đó làm theo bước # 2 ở trên.

Nếu bạn không có bản gốc hoặc mã hóa nó cho chính mình, bạn không thể lấy lại dữ liệu và không thể mã hóa nó cho bất kỳ ai khác mà không có người nhận đầu tiên gửi lại cho bạn một bản sao.


1
Trên thực tế, nó không phải luôn luôn là một ý tưởng tốt. Xem PGP: Bao gồm khóa công khai của bạn với tư cách là người nhận? Bất kỳ ít an toàn? trên Sàn giao dịch bảo mật thông tin cho một số đối số cho và chống lại.
một CVn

0

Có thể thêm một người nhận khác mà không giải mã tập tin trước, sau đó là mã hóa khác?

Không thể giải mã được tất cả nhưng có vẻ như không thể giải mã được tệp :

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

Ngoại trừ điều này dường như dẫn đến một tệp bị hỏng (ít nhất là đôi khi) bởi vì gpgcả việc đọc và ghi vào cùng một tệp:

Thay vào đó, bạn có thể thực hiện các thao tác sau (trong tập lệnh) để tránh phải quản lý tệp được giải mã:

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, với -utùy chọn, ghi đè an toàn dữ liệu và sau đó xóa tệp bạn chỉ định. Các chương trình tương tự tồn tại cho các nền tảng khác, như srmtrên Mac OS X.

Hoặc bạn có thể viết tập lệnh của mình như thế này (lịch sự của dave_thedom_085 ) để tránh thậm chí không cần lưu trữ dữ liệu được giải mã trong một tệp:

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

2
Bạn không cần phải viết ra một tệp tạm thời rõ ràng nếu bạn tạm thời để mã hóa tại chỗ: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpghoặc gương của nó mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Hoặc (có lẽ cũng vậy) một cách khéo léo chỉ giữ nút inode cũ :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thndry_085

@ dave_thndry_085 Thú vị - cảm ơn!
Kenny Evitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.