Чи можна додати одержувача до вже зашифрованого файлу в GPG?


12

Якщо припустити, що я зашифрував (можливо, великий) файл за допомогою GPG; напр

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

Чи можна додати іншого одержувача без попереднього розшифрування файлу з наступним шифруванням?

gnupg 

Ви зашифрували файл відкритим ключем "Some Name". І що він повинен використовувати для іншого одержувача?
ott--

6
@ott: Це не зовсім так працює (AFAIK). PGP шифрує файл симетричним ключем, а не відкритим відкритим ключем одержувачів. Потім вонаокремо шифрує кілька копій цього симетричного ключа, використовуючи відкритий ключ кожного одержувача.
RedGrittyBrick

@RedGrittyBrick Я не знаю про pgp, але gpg використовує --symmetricдля цього. З --recipientйого допомогою використовується відкритий ключ одержувача. Одержувача може бути більше ніж 1, але це потрібно робити в одній команді, а не в двох окремих командах.
ott--

3
@ott: Я читав, що " Також можна одночасно зашифрувати файл для будь-якої кількості декількох одержувачів за допомогою команди формиgpg -e -r <name1> -r <name2> ... <file> ", але я сам цього не пробував. Це відповідає тому, що я дізнався про криптовалюту багато років тому, - це те, що майже завжди ефективніше використовувати швидкі симетричні алгоритми для шифрування тексту повідомлення. Шифрується лише ключ повідомлення за допомогою повільного асиметричного шифрування.
RedGrittyBrick

Відповіді:


8

Коротка відповідь: ні

Перш за все, зауважте, що якщо ви не один із одержувачів, це абсолютно неможливо. Ви навіть не маєте можливості розшифровувати файл, тим більше додавати одержувача. Навіть якщо ви зашифрували це дві секунди тому.

Якщо припустити, що ви одержувач, це технічно можливо. Файл фактично зашифрований сеансовим ключем, а ключ сеансу шифрується вашим відкритим ключем, тож теоретично ви можете розшифрувати ключ сесії та повторно зашифрувати його до ключа іншої особи, а потім упакувати все разом у файл так само, як ніби спочатку зашифрував документ обом людям.

Однак gpg не має такої можливості . Найближче до gpg - це

  1. Скористайтеся --show-session-keyопцією, щоб отримати ключ сеансу (який, здається, також розшифровує файл, пропускаючи крапку в цьому випадку)
  2. Зашифруйте цей сеансний ключ до чужого відкритого ключа (насправді це створює новий ключ сеансу і використовує цей сеансний ключ для шифрування вихідного ключа сеансу)
  3. Надішліть обидва файли.
  4. Одержувач може розшифрувати сеансовий ключ і використовувати його --override-session-keyдля розшифрування вихідного повідомлення.

3

1) Ця ситуація полягає в тому, що шифрування файлу для себе (а також призначених одержувачів) завжди є хорошою ідеєю. RedGrittyBrick правильний вище, описуючи, як працюють GPG та PGP, що впадає у відповідь Натханга вище.

2) Однак якщо у вас є оригінальний файл, вам краще просто створити новий зашифрований файл для нового одержувача.

Якщо припустити, що ви не хочете пройти шлях ключового сеансу з пропозиції Nathang, якщо ви зашифрували файл для себе (як зазначено вище в №1), а потім розшифруйте його та виконайте крок №2 вище.

Якщо ви не маєте оригіналу і не зашифрували їх собі, ви не зможете отримати дані назад і не можете зашифрувати їх іншим особам без того, щоб перший отримувач повернув вам копію.


1
Насправді, це не завжди гарна ідея. Див. PGP: Включити ваш відкритий ключ як одержувача? Не менш безпечний? на обміні стека інформаційної безпеки для деяких аргументів «за» і «проти».
CVn

0

Чи можна додати іншого одержувача без попереднього розшифрування файлу з наступним шифруванням?

Це неможливо без дешифрування взагалі, але здається, що це можливо без дешифрування файлу :

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

Окрім цього, здається, це пошкоджений файл (принаймні іноді), оскільки gpgвін одночасно читає і записує в один і той же файл:

Натомість ви можете зробити наступне (у сценарії), щоб уникнути необхідності керувати розшифрованим файлом:

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, з -uможливістю надійно перезаписувати дані, а потім видаляє вказаний файл. Подібні програми існують і для інших платформ, як srmна Mac OS X.

Або ви можете написати свій сценарій так (люб’язно dave_thompson_085 ), щоб уникнути навіть необхідності зберігати розшифровані дані у файлі:

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
Вам не потрібно виписувати чіткий тимчасовий файл, якщо ви залишите зашифрований на місці тимчасово: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgабо його дзеркало mv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpg. Або (можливо, занадто) розумно просто збережіть старий inode :{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

@ dave_thompson_085 Цікаво - дякую!
Кенні Евітт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.