GPG で複数の受取人で暗号化する時に --group オプションが便利


GPG でファイルを暗号化する時に, 複数の受取人を一括で指定できる --group オプションの有用性を紹介します.

架空人物, 長男の山田太郎と妹の山田花子を例に紹介させていただきたいと思います.

太郎は花子の公開鍵を使ってファイル example.txt を暗号化して, 花子にしか復号化できないように, 花子にしか内容を閲覧できないようにしようと思いました.

その際, 太郎は万が一の時のために, 自身でも復号化できるように, 自身の公開鍵も合わせて指定しようと思いました.

そのような想定でいかせてもらえればと思います.

まず, 太郎と花子の公開鍵の情報は次のようになります:

$ gpg --list-keys taroyamada@example.com hanakoyamada@example.com
pub   rsa2048/0x5DD193BE5B49D8F0 2018-07-29 [SC] [expires: 2020-07-28]
      Key fingerprint = 2977 7D28 C19F A4EB 1ECB  8530 5DD1 93BE 5B49 D8F0
uid                   [ultimate] Taro Yamada <taroyamada@example.com>
sub   rsa2048/0xD46062B9AD30BDFA 2018-07-29 [E] [expires: 2020-07-28]
      Key fingerprint = 6603 D8FC 8B6D 07B1 7EA0  48BD D460 62B9 AD30 BDFA

pub   rsa2048/0xA0B88EC0424B24D0 2018-07-29 [SC] [expires: 2020-07-28]
      Key fingerprint = 16EE E592 ADDB 2EB7 A2BE  F897 A0B8 8EC0 424B 24D0
uid                   [ultimate] Hanako Yamada <hanakoyamada@example.com>
sub   rsa2048/0x34F8DA501D4372CC 2018-07-29 [E] [expires: 2020-07-28]
      Key fingerprint = CE3B 4830 CCC3 CCF4 B2B1  FD9E 34F8 DA50 1D43 72CC

このように表示されるのは ~/.gnupg/gpg.conf に次のような設定をしているためです:

keyid-format 0xlong
with-fingerprint
with-fingerprint

GPG のバージョンは 2.2.9 になります.

通常の方法で複数の受取人を指定する

太郎が太郎自身の公開鍵と花子の公開鍵を使って example.txt を暗号化する場合, 太郎が入力するコマンドは通常次のようなものになります:

gpg -v -e -r taroyamada@example.com -r hanakoyamada@example.com example.txt

そして example.txt.gpg という暗号化されたファイルが生成され, 確かに太郎と花子の公開鍵で暗号化されたということを示す次のような情報が表示されます:

gpg: RSA/AES256 encrypted for: "0x34F8DA501D4372CC Hanako Yamada <hanakoyamada@example.com>"
gpg: RSA/AES256 encrypted for: "0xD46062B9AD30BDFA Taro Yamada <taroyamada@example.com>"

これで確かに example.txt.gpg という暗号化されたファイルは太郎と花子の秘密鍵でしか復号化できないようになりました.

このように通常, 暗号化する際に複数の受取人を指定する時は, -e (--encrypt) の後に, 受取人の人数分 -r (--recipient) オプションを指定する必要があります.

ちなみに, -v (--verbose) オプションを使っているので, このような情報が表示されます.

-v はあくまで説明目的で使っているに過ぎませんので, 実際の時は必要ありません.

--group オプションを使って複数の受取人を指定する

一回や二回でしたら, 受取人の人数分 -r を指定するのもいいかもしれません.

ただ日常的に同じ複数の受取人を指定して暗号化するとなると, 毎回そのように -r を指定するのは少々骨が折れます.

なのでそのような時に便利な --group というオプションがあります.

太郎と花子を yamadas という名前でグループを作ると, -r yamadas とするだけで, 太郎と花子を受取人として指定できます.

yamadas というグループを作るため, ~/.gnupg/gpg.conf を開いて, 次の一行を加えます:

group yamadas = taroyamada@example.com hanakoyamada@example.com

すると先ほどと同じことが, 次のコマンドでできます:

gpg -v -e -r yamadas example.txt

同じように example.txt.gpg というファイルが生成され, 同じように次のような情報が表示されます:

gpg: RSA/AES256 encrypted for: "0x34F8DA501D4372CC Hanako Yamada <hanakoyamada@example.com>"
gpg: RSA/AES256 encrypted for: "0xD46062B9AD30BDFA Taro Yamada <taroyamada@example.com>"

このことから -r yamadas でも先ほどと同じように, 太郎と花子の公開鍵で暗号化できたと確認できます.

ちなみに, グループを作る時は, 上記のようにメールアドレスを使って指定する仕方の他に, 次のような指定の仕方も可能です.

鍵 ID で指定する場合:

group yamadas = 0xD46062B9AD30BDFA 0x34F8DA501D4372CC

指紋で指定する場合:

group yamadas = 0x6603D8FC8B6D07B17EA048BDD46062B9AD30BDFA 0xCE3B4830CCC3CCF4B2B1FD9E34F8DA501D4372CC

鍵 ID, 指紋を指定する際, フラグ [E] を持つ副鍵のものを指定していますが, 主鍵の鍵 ID, 指紋でも同じように指定できます.

なので太郎の鍵 ID, 指紋は主鍵の 0x5DD193BE5B49D8F0, 0x29777D28C19FA4EB1ECB85305DD193BE5B49D8F0 と指定することもでき, 花子も 0xA0B88EC0424B24D0, 0x16EEE592ADDB2EB7A2BEF897A0B88EC0424B24D0 と指定することもできます.

まとめ

GPG で複数の受取人を指定する時は, もしその受取人が毎回同じ人物でそれなりの頻度で指定しているという場合は, --group オプションを使って yamadas のようにグループを作ってしまうと, より GPG で暗号化する際の使い勝手が向上すると思いますので, そのような場合は是非試されてみてください.

あいにく僕はまだ日常的に暗号化してファイルをやり取りする複数の受取人はおりませんので, --group オプションは, ほこりを被っている状態です.