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受信者の公開鍵を使用します。複数の受信者が存在する場合がありますが、2つの個別のコマンドではなく、1つのコマンドで実行する必要があります。
-ott--

3
@ott:「次の形式のコマンドを使用して、任意の数の複数の受信者に対して同時にファイルを暗号化することもできますgpg -e -r <name1> -r <name2> ... <file>読みましたが、私はこれを試していません。これは何年も前に暗号について学んだことと合致します。つまり、高速の対称アルゴリズムを使用してメッセージテキストを暗号化する方が、ほとんど常により効率的です。低速の非対称暗号化を使用してメッセージキーのみが暗号化されます。
RedGrittyBrick

回答:


8

短い答え:いいえ

まず、受信者でない場合は完全に不可能であることに注意してください。ファイルを復号化することさえできず、受信者を追加することはできません。2秒前に暗号化しても。

あなたが受信者であると仮定すると、それは技術的に可能です。ファイルは実際にセッションキーで暗号化され、セッションキーは公開キーで暗号化されるため、理論的にはセッションキーを復号化して別の人のキーに再暗号化してから、まるでファイルのようにすべてをパッケージ化できますもともと両方の人にドキュメントを暗号化していた。

ただし、gpgにはこの機能はありません。gpgで最も近いものは

  1. --show-session-keyオプションを使用してセッションキーを取得します(この場合、ファイルも復号化されるようですが、この場合はポイントがありません)
  2. そのセッションキーを他の誰かの公開キーに暗号化します(実際には、これにより新しいセッションキーが作成され、そのセッションキーを使用して元のセッションキーが暗号化されます)
  3. 両方のファイルを送信します。
  4. 受信者はセッションキー--override-session-keyを解読し、元のメッセージの解読に使用できます。

3

1)この状況は、ファイルを自分自身(および目的の受信者)に暗号化することが常に良い考えである理由です。RedGrittyBrickは、上記のnathangの答えに流れ込む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オプションを使用すると、指定したファイルのデータを安全に上書きしてから削除します。srmMac 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。または(おそらく)賢く古いiノードをそのままにしてください:{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

@ dave_thompson_085興味深い–ありがとう!
ケニーエビット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.