🔐
GPG鍵の作成,保存,失効
語句定義
- Web of Trust :: 信頼の輪 ぶっちゃけただの運用方法や管理方法の類.
- 公開鍵,秘密鍵 :: 1つの鍵ペアのうち, 公に出回るのが公開鍵, 自分で隠し持つのが秘密鍵.
- PGP,GPG :: PGP = Pretty Good Privacy, でその実装の一つが GPG = Gnu PG.
- 主鍵,副鍵 :: GPGでは1つの主鍵に複数の副鍵をつけることができる. それぞれに公開鍵と秘密鍵を持つ. また,暗号化/復号(encrypt),署名(sign),検証(auth),認証(cert)をそれぞれの鍵に別々に設定できる.
- PM-key :: 特にこの記事では主鍵を指す. 認証(C)機能のみを有するものとする.
- E-key :: 特にこの記事では副鍵を指す. 暗号化/復号(E)機能のみを有する.
- SA-key :: 特にこの記事では副鍵を指す. 署名(S)機能,検証(A)機能のみを有する.
- マシン :: 利用しているLinux環境のPCのこと. ただ,この記事ではGPGの保存状態と考えても良い.
価値および成果物
この記事の内容を実施することによる価値と成果物は次の通り.
- 価値
- ファイルやコンテンツ(メールやバイナリ)の暗号化.
- 上記の一般利用における検証,署名.
- 上記2つを別の鍵で行える.
- 上記2つを行う鍵については,紛失してもPM-keyの信用を壊さない.
- PM-keyの秘密鍵を通常利用時には利用しない.
- 成果物
- GPG鍵3種(PM-key, E-key, SA-key)
- PM-keyの失効証明書(PM-key-revoke)
- 公開鍵のエクスポートファイル(pub-keys)
- 全秘密鍵のエクスポートファイル(full-secret-keys)
- E-key,SA-keyの秘密鍵のエクスポートファイル(sub-secret-keys)
前提環境と準備
- OS :: Ubuntu 16.04LTS
$ sudo apt update && sudo apt install gnupg
$ gpg --version
$ gpg2 --version
私のマシンではgpg2の方がより新しいので以後こちらを利用する.
作成
作成する鍵の暗号アルゴリズムや期限などは好みで選べば良い. ただ,互換性的にはRSAになってしまうだろう. 作れる最長のbit数を指定してやれば充分な耐久性を持つはずだ. ここではPM-keyはECC25519で作ることにした. 通常利用しない(ハズ)だから,まぁ互換性欠けてても大丈夫だろう.
$ gpg2 --expert --full-gen-key
// ECC25519(Ed25519相当),無期限,C機能のみ
// 以後この記事では,これがPM-key.
// 以後のkeyidにはuser-name,email,鍵IDが利用可能.
$ gpg2 --edit-key <keyid>
gpg> addkey
// RSA4096,5year,E機能のみとSA機能のみの2種を作成.
// 以後この記事ではE機能のみをE-key,SA機能のみをSA-keyとする.
保存と秘密鍵の削除
保存目的以外も割といろんなものを作っている. また,PM-keyの秘密鍵を削除する.
- pub-keys :: 公開鍵のエクスポートファイル. 広まって大丈夫.
- full-secret-keys :: PM-key,E-key,SA-keyの秘密鍵のエクスポートファイル. 隠し持つもの.
- sub-secret-keys :: E-key,SA-keyの秘密鍵のエクスポートファイル. 隠し持つもの.
- PM-key-revoke :: PM-keyの失効証明書. 隠し持つけど,サーバーに上げないなら無用.
- ziped-file :: 隠し持つ保管用ファイル. セキュリティ高め,長期保存性,利便性を満たしたい.
$ gpg2 -a --export <keyid> > pub-keys
$ gpg2 -a --export-secret-keys [keyid] > full-secret-keys
$ gpg2 -a --export-secret-subkeys [keyid] > sub-secret-keys
$ gpg2 -a --gen-revoke <keyid> > PM-key-revoke
$ gpg2 --delete-secret-key <keyid>
$ gpg2 --import sub-secret-keys
$ zip <ziped-file> full-secret-keys sub-secret-keys PM-key-revoke
// ziped-fileをどこか安全な形態に保管. 暗所,気温,湿度を保った光学ディスクかなぁ.
// USBメモリ,SDカードなどの磁気,電荷方式はメンテフリーを考えると選択できない.
// メンテ,耐障害環境を整えられるなら磁気系はあり.
PM-key秘密鍵削除の原理
単純に言って,一旦全部の秘密鍵の情報を消してから,E-keyとSA-keyの秘密鍵情報を戻しているだけである. PM-keyの秘密鍵情報が必要になれば,full-secret-keysをimportすればよい.
利用環境の移転
移転先のマシンで以下を実行.
$ gpg2 --import pub-keys
$ gpg2 --import sub-secret-keys
鍵の期限の更新
$ gpg2 --edit-key <keyid>
gpg> key <num> // numにはE-key, SA-keyの鍵IDを指定する.
gpg> expire
gpg> key // 続けて操作する場合,一旦,鍵選択をリセットする.
失効
PM-keyの失効は失効証明書をimportすることで行う.
$ unzip <ziped-file>
$ gpg2 --import PM-key-revoke
E-key, SA-keyの失効はPM-keyの秘密鍵を戻した状態で行う.
$ gpg2 --edit-key <keyid>
gpg> key <num> // numには失効させるE-key, SA-keyの鍵IDを指定する.
gpg> revkey
Discussion
なお,この記事は自身が所持している複数のPCやPCに近いモノたちの間のデータ暗号化のためにまとめたものである. よって,実はサーバーに自身の鍵を登録して運用することを想定していない.