GnuPGで秘密鍵の盗難/紛失対策を行う!

パソコン(PC)等のシステム上の秘密鍵が盗難あるいは紛失した場合、鍵をただちに失効させて鍵を再発行することになりますが、鍵の信頼の輪も再構築する必要があり、かなり大変なことになります。鍵の盗難/紛失対策として、システム上にはマスターキーから生成したサブキーを配置して、マスターキーを安全な場所に保管しておくようにと、盗難/紛失の際に、マスターキーからサブキーを生成することで、信頼の輪を再構築することなく鍵の再配布のみで対応することができるようになります。

はじめに

GnuPG(GPG)を使用して、システム上の秘密鍵の盗難/紛失対策を施します。

公開鍵と秘密鍵の作成

"gpg --edit-key"コマンドで署名用のサブキーを作成します。
<実行例>
============================================================
D:\gpg>gpg --edit-key ict-lab@example.com
gpg (GnuPG) 2.0.27; Copyright (C) 2015 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.
秘密鍵が使用できます。
pub 4096R/CBCA1C1B 作成: 2015-03-29 有効期限: 無期限 利用法: SC
信用: 究極 有効性: 究極
sub 4096R/CC14E3F8 作成: 2015-03-29 有効期限: 無期限 利用法: E
sub 4096R/AC40F6E7 作成: 2015-03-29 有効期限: 無期限 利用法: A
[ 究極 ] (1). ICT Lab (sun) <ict-lab@example.com>
gpg> addkey
鍵は保護されています。
次のユーザの秘密鍵のロックを解除するには
パスフレーズがいります:"ICT Lab (sun) <ict-lab@example.com>"
4096ビットRSA鍵, ID CBCA1C1B作成日付は2015-03-29
ご希望の鍵の種類を選択してください:
(3) DSA (署名のみ)
(4) RSA (署名のみ)
(5) Elgamal (暗号化のみ)
(6) RSA (暗号化のみ)
あなたの選択は? 4
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
= 鍵は n 日間で期限切れ
w = 鍵は n 週間で期限切れ
m = 鍵は n か月間で期限切れ
y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0
鍵の有効期間は? (0)は無期限です
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。
pub 4096R/CBCA1C1B 作成: 2015-03-29 有効期限: 無期限 利用法: SC
信用: 究極 有効性: 究極
sub 4096R/CC14E3F8 作成: 2015-03-29 有効期限: 無期限 利用法: E
sub 4096R/7AB452DA 作成: 2015-03-29 有効期限: 無期限 利用法: S
sub 4096R/AC40F6E7 作成: 2015-03-29 有効期限: 無期限 利用法: A
[ 究極 ] (1). ICT Lab (sun) <ict-lab@example.com>
gpg> save
--------------------------------------------------------------------------------

秘密鍵と公開鍵のバックアップの取得

秘密鍵と公開鍵のバックアップを以下のコマンドで取得します。
秘密鍵のバックアップ:gpg --export-secret-keys --armor
公開鍵のバックアップ:gpg --export --armor
<実行例>
============================================================
D:\gpg>gpg --export-secret-keys --armor ict-lab@example.com > secret-keys.backup
D:\gpg>gpg --export --armor ict-lab@example.com > public-keys.backup
============================================================

秘密鍵/公開鍵/失効証明書のバックアップの取得

秘密鍵、公開鍵、失効証明書がマスターファイルになります。この3点をCD-RあるいはDVD-Rにコピーして安全な場所に保管します。

秘密鍵/公開鍵のインポート

秘密鍵、公開鍵は、可能であればセキュリティの確保されたインターネットに接続されていないパソコン等で生成しバックアップを取得したものを実際に暗号化を使用する機器上のGnuPGに"gpg -import"コマンドでインポートします。
<コマンド>
gpg -import <秘密鍵バックアップファイル名>
gpg -import <公開鍵バックアップファイル名>

署名用の秘密鍵の削除

使用するシステム上の署名用の秘密鍵(マスターキー)を削除しますが、GnuPG(GPG)に簡単なコマンドが用意されていないとのことで、以下の複雑な手順をふみます。
・秘密鍵のサブキーのバックアップ
・秘密鍵の削除
・秘密鍵のサブキーのバックアップからのサブキーの復元
<実行例>
============================================================
D:\gpg>gpg --export-secret-subkeys ict-lab@example.com > secret-subkeys
D:\gpg>gpg --delete-secret-key ict-lab@example.com
gpg (GnuPG) 2.0.27; Copyright (C) 2015 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 4096R/CBCA1C1B 2015-03-29 ICT Lab (sun) <ict-lab@example.com>
この鍵を鍵リングから削除しますか? (y/N) y
これは秘密鍵です! 本当に削除しますか? (y/N) y
D:\gpg>gpg --import secret-subkeys
gpg: 鍵CBCA1C1B: 秘密鍵をインポートしました
gpg: 鍵CBCA1C1B:"ICT Lab (sun) <ict-lab@example.com>"変更なし
gpg: 処理数の合計: 1
gpg: 変更なし: 1
gpg: 秘密鍵の読み込み: 1
gpg: 秘密鍵のインポート: 1
D:\gpg>gpg --list-secret-keys
C:/Users/mobadm001/AppData/Roaming/gnupg/secring.gpg
----------------------------------------------------
D:\gpg>gpg --list-secret-keys
C:/Users/mobadm001/AppData/Roaming/gnupg/secring.gpg
----------------------------------------------------
sec# 4096R/CBCA1C1B 2015-03-29
uid ICT Lab (sun) <ict-lab@example.com>
ssb 4096R/CC14E3F8 2015-03-29
ssb 4096R/7AB452DA 2015-03-29
ssb 4096R/AC40F6E7 2015-03-29
============================================================
※秘密鍵のマークが、"SEC"から"SEC#"に変わっています。

鍵の運用上の注意点

- 暗号化と電子署名は、今回作成したサブキーを使用します。
- 今回作成したサブキーを失効させる場合は、バックアップからマスターキーを戻してサブキーの失効証明書を作成します。
- 他の人の鍵にサインを行う場合は、マスターキーを使用します。

おわりに

システム上の鍵が盗難/紛失した場合の対応を想像するとかなり気が滅入りますが、この対応をすれば信頼の輪に関しては対応の必要が無くなるので若干気持ちが楽になるのでは思います・・・

関連記事(Windows7で暗号化と電子署名を利用!)

  1. Gpg4winをインストールする!
  2. GnuPGで公開鍵と秘密鍵を生成する!
  3. GnuPGで秘密鍵の盗難/紛失対策を行う!
  4. GnuPGでファイルの暗号化と復号化を行う!
  5. GnuPGでファイルに対する電子署名の生成と検証を行う!
  6. GnuPGで公開鍵サーバに公開鍵を登録する!
  7. GnuPGで公開鍵サーバから公開鍵を入手する!
  8. GnuPGで公開鍵に秘密鍵で署名する!
  9. ThunderbirdとEnigmailで暗号メールを使用する!
  10. GnuPGによる暗号化を使用してクラウドサービスを利用する!