GnuPGで公開鍵と秘密鍵を生成する!

GnuPG(GPG)を使用して、暗号化と電子署名を行うための公開鍵と秘密鍵を生成します。セキュリティを最大限考慮するのであれば、鍵の生成はインターネットに接続しない鍵生成専用のパソコン上にGpg4winをインストールして公開鍵と秘密鍵の生成を行います。

はじめに

GnuPG(GPG)を使用して公開鍵と秘密鍵を生成します。

公開鍵と秘密鍵の作成

"gpg --gen-key"コマンドで公開鍵と秘密鍵を作成します。
以下の項目を事前に決めておきましょう。
鍵の種類      :RSA と RSA (デフォルト) ※RSAが暗号化の強度が高いとされています。
鍵長        :4096 ※長いほうが暗号化の強度が増します。
鍵の有効期限    :なし ※自動で有効期限を切る必要が無ければ無期限でよいかと。
パスフレーズ    :任意 ※鍵にアクセスする際にも必要となるパスワードになります。
本名        :(例)ICT Lab
電子メール・アドレス:(例)ict-lab@example.com
コメント      :(例)sun
<実行例>
============================================================
D:\>gpg --gen-key
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.
ご希望の鍵の種類を選択してください:
(1) RSA と RSA (デフォルト)
(2) DSA と Elgamal
(3) DSA (署名のみ)
(4) RSA (署名のみ)
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (2048) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
= 鍵は n 日間で期限切れ
w = 鍵は n 週間で期限切れ
m = 鍵は n か月間で期限切れ
y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0
鍵の有効期間は? (0)は無期限です
これで正しいですか? (y/N) y
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
本名: ICT Lab
電子メール・アドレス: ict-lab@example.com
コメント: sun
次のユーザIDを選択しました:
"ICT Lab (sun) <ict-lab@example.com>"
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、
ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に
十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵CBCA1C1Bを絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
gpg: 信用データベースの検査
gpg: 「まぁまぁの信用」3、「全面的信用」1、PGP信用モデル
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
pub 4096R/CBCA1C1B 2015-03-29
フィンガー・プリント = 1664 73E7 8E9F AA22 9601 E5BE B136 0589 CBCA 1C1B
uid [ 究極 ] ICT Lab (sun) <ict-lab@example.com>
sub 4096R/CC14E3F8 2015-03-29
============================================================

失効証明書の作成

"gpg --gen-revoke"コマンドで、秘密鍵が盗まれて鍵を失効する必要が発生した時のために、失効証明書を作成しておきます。
<実行例>
============================================================
D:\>gpg --output revoke_ict-lab.asc --gen-revoke ict-lab@example.com
sec 4096R/CBCA1C1B 2015-03-29 ICT Lab (sun) <ict-lab@example.com>
この鍵にたいする失効証明書を作成しますか? (y/N) y
失効の理由を選択してください:
0 = 理由は指定されていません
1 = 鍵(の信頼性)が損なわれています
2 = 鍵がとりかわっています
3 = 鍵はもはや使われていません
Q = キャンセル
(ここではたぶん1を選びたいでしょう)
あなたの決定は? 1
予備の説明を入力。空行で終了:
>
失効理由: 鍵(の信頼性)が損なわれています
(説明はありません)
よろしいですか? (y/N) y
次のユーザの秘密鍵のロックを解除するには
パスフレーズがいります:"ICT Lab (sun) <ict-lab@example.com>"
4096ビットRSA鍵, ID CBCA1C1B作成日付は2015-03-29
ASCII外装出力を強制します。
失効証明書を作成しました。
みつからないように隠せるような媒体に移してください。もし_悪者_がこの証明書への
アクセスを得ると、あなたの鍵を使えなくすることができます。
媒体が読出し不能になった場合に備えて、この証明書を印刷して保管するのが賢明です。
しかし、ご注意ください。あなたのマシンの印字システムは、他の人がアクセスできる
場所にデータをおくことがあります!
============================================================

公開鍵と秘密鍵の確認(コマンドライン)

作成した公開鍵と秘密鍵をコマンドラインで確認します。
公開鍵確認用コマンド:gpg --list-keys
秘密鍵確認用コマンド:gpg --list-secret-keys
<実行例>
============================================================
D:\>gpg --list-keys
C:/Users/mobadm001/AppData/Roaming/gnupg/pubring.gpg
----------------------------------------------------
pub 4096R/CBCA1C1B 2015-03-29
uid [ 究極 ] ICT Lab (sun) <ict-lab@example.com>
sub 4096R/CC14E3F8 2015-03-29
D:\>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
============================================================

公開鍵と秘密鍵の確認(Windows:Kleopatra)

Windowsの場合、Kleopatraを起動すれば鍵が作成されていることが確認できます。

認証用のサブキーの生成

この後、鍵のバックアップを取得しますので、バックアップの前に必要となる鍵を作成します。ここでは、"gpg --expert --edit-key"コマンドを使用して認証用のサブキーを生成しておきます。
<実行例>
============================================================
D:\gpg>gpg --expert --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
[ 究極 ] (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 (暗号化のみ)
(7) DSA (特性をあなた自身で設定)
(8) RSA (特性をあなた自身で設定)
あなたの選択は? 8
鍵RSAに認められた操作: Sign Encrypt Authenticate
現在の認められた操作: Sign Encrypt
(S) 署名特性を反転する
(E) 暗号特性を反転する
(A) 認証特性を反転する
(Q) 完了
あなたの選択は? A
鍵RSAに認められた操作: Sign Encrypt Authenticate
現在の認められた操作: Sign Encrypt Authenticate
(S) 署名特性を反転する
(E) 暗号特性を反転する
(A) 認証特性を反転する
(Q) 完了
あなたの選択は? S
鍵RSAに認められた操作: Sign Encrypt Authenticate
現在の認められた操作: Encrypt Authenticate
(S) 署名特性を反転する
(E) 暗号特性を反転する
(A) 認証特性を反転する
(Q) 完了
あなたの選択は? E
鍵RSAに認められた操作: Sign Encrypt Authenticate
現在の認められた操作: Authenticate
(S) 署名特性を反転する
(E) 暗号特性を反転する
(A) 認証特性を反転する
(Q) 完了
あなたの選択は? Q
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/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
============================================================

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

公開鍵、秘密鍵、失効証明書をCD-RあるいはDVD-Rに取得して、安全な場所に保管します。合わせて、GnuPG(GPG)の実行環境のバックアップも取得しておくと、ただちに実行環境を元に戻すことができます。
※次回の、「GnuPGで秘密鍵の盗難/紛失対策を行う!」を続けて実施する場合は、次回でバックアップを取得しますので、まだ実行しなくても問題ありません。
<参考:GnuPG(GPG)の実行環境>
Linuxの場合 :~/.gnupg
Windowsの場合:C:\Users\<ユーザ名>\AppData\Roaming\gnupg

失効証明書の削除と書面での保管

失効証明書を削除します。Windowsであれば、"cipher /w"コマンド、Linuxであれば"shred"コマンドでファイルの内容を完全に消去します。メディアが読み出せなくなった場合の対応として、書面でも印刷して安全な場所に保管しておきます。

補足(鍵の破棄および削除方法)

鍵の破棄        :gpg --import <失効証明書ファイル名>
公開鍵サーバ上の鍵の破棄:gpg --keyserver <公開鍵サーバ名> --send-keys <破棄した鍵IDやメールアドレス等の鍵の識別情報>
公開鍵の削除      :gpg --delete-keys <鍵IDやメールアドレス等の鍵の識別情報>
秘密鍵の削除      :gpg --delete-secret-keys <鍵IDやメールアドレス等の鍵の識別情報>

おわりに

公開鍵と秘密鍵を作成する際には、事前に鍵作成のための情報を決めておく必要があります。

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

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