GPGめも - subkey

Mon, Dec 4, 2017 in debian , gpg

GPGのsubkeyについて。

  • たとえば持ち運びを行うlaptopでGPGを使っているが、laptopを紛失盗難したとしたとする。当然、鍵のrevokeが必要になるがこの場合、
    • masterkeyのみの運用だとすると、新しいGPG鍵を作って1から知り合いなどとkeysignを交換してweb of trustを再構築する羽目になる。
    • laptopではsubkeyを運用していれば、それをrevokeしてもmasterkeyのweb of trustは失われない。
  • そしてprivate masterkeyは通常触らないところに厳重に保管しておける。通常使いはsubkeyで行い、どうしても…という時にはmasterkeyを使うということができる。

なるほどねー。

ちなみにどうしてもという時というのは以下らしい。

  • 他の人の鍵にsignする(キーサインのときですね)、あまりないけど前にしたsignをrevokeする
  • 自分の鍵をrevokeする
  • subkeyを作る・revokeする
  • 有効期限の変更
  • masterkeyのrevoke用の証明書の作成
  • UIDの設定変更

あー、今だとlaptopにはGPG鍵入れてないけど、これはありかもしれないね。ということでDebian WikiでのSubkey作成手順に従って作ってみる。

$ umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg (バックアップ)
$ gpg --list-keys henrich@debian.org (自分のKEYIDを取得)

pub   rsa4096 2009-05-23 [SC] [有効期限: 2019-05-21]    
      58E1222F9696C885A3CD104C5D328D082AAAB140          
uid           [  究極  ] Hideki Yamane (Debian-JP) <henrich@debian.or.jp>  
uid           [  究極  ] Hideki Yamane <henrich@debian.org>
uid           [  究極  ] Hideki Yamane (private) <henrich@iijmio-mail.jp>
sub   rsa4096 2009-05-23 [E] [有効期限: 2019-05-21]

$ gpg --edit-key  58E1222F9696C885A3CD104C5D328D082AAAB140
gpg (GnuPG) 2.2.3; Copyright (C) 2017 Free Software Foundation, Inc.       
This is free software: you are free to change and redistribute it.         
There is NO WARRANTY, to the extent permitted by law.                      
                                                                   
秘密鍵が利用できます。                                                     
                                                                           
sec  rsa4096/5D328D082AAAB140                                              
     作成: 2009-05-23  有効期限: 2019-05-21  利用法: SC                    
     信用: 究極        有効性: 究極                                        
ssb  rsa4096/95F59E65108820E1                                              
     作成: 2009-05-23  有効期限: 2019-05-21  利用法: E                     
[  究極  ] (1). Hideki Yamane (Debian-JP) <henrich@debian.or.jp>           
[  究極  ] (2)  Hideki Yamane <henrich@debian.org>
[  究極  ] (3)  Hideki Yamane (private) <henrich@iijmio-mail.jp>

gpg> addkey (subkeyの追加)
ご希望の鍵の種類を選択してください:
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (5) Elgamal (暗号化のみ)
   (6) RSA (暗号化のみ)
あなたの選択は? 4  (←Debianパッケージなどで署名が必要なのでこちらを今回は選択)
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (3072) 4096 (←4096にしたけど、masterkeyより大きなのは選べるのかしら?)
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)1y (masterkeyよりも短いほうが良いそうなのでとりあえず1年にしておく)
鍵は2018年12月04日 18時54分30秒 JSTで期限切れとなります
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。

sec  rsa4096/5D328D082AAAB140
     作成: 2009-05-23  有効期限: 2019-05-21  利用法: SC
     信用: 究極        有効性: 究極
ssb  rsa4096/95F59E65108820E1
     作成: 2009-05-23  有効期限: 2019-05-21  利用法: E
ssb  rsa4096/723BFA427D8774AD (←今回出来たのはこの鍵)
     作成: 2017-12-04  有効期限: 2018-12-04  利用法: S
[  究極  ] (1). Hideki Yamane (Debian-JP) <henrich@debian.or.jp>
[  究極  ] (2)  Hideki Yamane <henrich@debian.org>
[  究極  ] (3)  Hideki Yamane (private) <henrich@iijmio-mail.jp>

gpg> save

で、この後の手順は、と…

  • USBメモリに ~/.gnupg をバックアップして
  • Here comes the tricky part: you need to remove the private master key. え?「private masterkeyを削除する」???マジか。

GnuPG 2.1以降なら ~/.gnupg/private-keys-v1.d/<KEYGRIP>.key を削除せよ、と。KEYGRIPはmaster keyの"keygrip"で、gpg2 --with-keygrip --list-key <YOURMASTERKEYID> で手に入るぞ、と。ただし、旧バージョンのGnuPGから新しい形式に移行している場合は ~/.gnupg/secring.gpg の方に private master keyがあるかもしれないから、こっちも消せ、と。GnuPG 2.1以前の場合も書いてあるけど、そんな環境使ってる人のことを考えるの面倒なので、原文見てほしい。

ここまで来たら gpg --edit-key <YOURMASTERKEYID> passwd でパスフレーズを変更してしまう。これで日常のパスフレーズが漏れても、元々のパスフレーズがわからなければ、たとえprivate master keyにアクセスできても使えないよね…という、まぁ気休めにはなる?


  • encryptしたUSBメモリにprivate master key置く、って言ってるけど、何を使ってencryptするんだろね?
  • そもそもUSBメモリの耐久性とかどうなのかな、とか。何にバックアップしておくのが正しいのだろう?