GnuPG 2.1.0 (modern) for Windows のインストール
GnuPG 2.1.0 の Windows 版がリリースされたので早速インストールしてみることにした。
Windows 版は GnuPG のダウンロードページから取得できる。
現時点(2014年11月9日)での最新版は gnupg-w32-2.1.0_20141105.exe である。 必ず署名ファイルと共にダウンロードし,現在インストールされている GnuPG で検証を行うこと。
インストール前に行うこと
modern バージョンのファイル構成は基本的に classic バージョンと互換性がない。 modern バージョンを(お試しでなく実運用目的で)利用するのなら旧バージョン(classic & stable)は削除するのがお勧めである。
- 旧 GnuPG 用のデータファイル(pubring.gpg, secring.gpg, trustdb.gpg)および設定ファイル(gpg.conf)は別の場所に退避させておく。最終的にはまとめて圧縮ファイルにして暗号化してしまうのがよいだろう
- 旧 GnuPG は Windows のレジストリ
HKEY_CURRENT_USER\Software\GNU\GnuPG
にアクセスする。これもバックアップを取った上で削除してしまうのがよいだろう。ただしレジストリ操作に自信のない人は無理に触らなくてよい。 - 環境変数
PATH
に gpg.exe へのパスを通している場合は,これも削除しておく。
インストール作業
gnupg-w32-2.1.0_20141105.exe を起動するとインストール用のウィザードが表示される。 基本的には既定のままインストール作業を行えばよい。
インストールでは以下の3つのコンポーネントが導入される。
このうち GnuPG と GPA は必須である。 GPA は GnuPG の GUI で,ツールとしてはあまり使い勝手が良くないが,バックエンドで他のツールのコントロールをしているので必ず導入する必要がある。 GpgEx はエクスプローラ用の拡張機能で,必須ではないが,かなり便利なので是非導入をお勧めする。
インストールが終わったらコマンドプロンプトから gpg.exe を起動して確認しておくとよい(インストール直後はパスが通ってないので注意)。
> gpg --version gpg (GnuPG) 2.1.0 libgcrypt 1.6.2 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.Home: C:/Users/username/AppData/Roaming/gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
GPGHOME の変更
インストール直後は C:/Users/username/AppData/Roaming/gnupg
が GnuPG のホームディレクトリになっている(username
はログインユーザの名前)。
> gpg --version gpg (GnuPG) 2.1.0 libgcrypt 1.6.2 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.Home: C:/Users/username/AppData/Roaming/gnupg Supported algorithms: Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2
通常はこれで問題ないが,他のフォルダに変更したい場合は環境変数 GPGHOME
でフォルダを指定する(環境変数の設定の仕方はググってちょうだい。これが分からない人は設定を弄らないほうがいいよ)。
マニュアルではレジストリに HomeDir エントリをセットすればいいみたいに書いてあるが,実際に試したら上手くいかなかった。
バグなのか仕様なのかは不明。
GnuPG のホームディレクトリにはデータファイル(pubring.kbx, trustdb.gpg, private-keys-v1.d\*)や設定ファイル(*.conf 他)が置かれる。
旧バージョンの鍵束をインポートする
stable および modern バージョンでは鍵の管理は(pubring.gpg, secring.gpg ではなく) pubring.kbx で行う。 既に pubring.gpg, secring.gpg があればそれを参照するようだが,鍵の操作はあくまで pubring.kbx (および private-keys-v1.d フォルダ以下のファイル)で行うようだ。 なので,旧鍵束はこの際破棄して新しい鍵束に全面移行することにする。
鍵束を移行するには --import オプションを使う。
> gpg --import secring.gpg > gpg --import pubring.gpg
秘密鍵の鍵束(secring.gpg)をインポートする際は鍵のひとつひとつに対してパスフレーズを訊いてくるので注意すること。
(ちなみに GPA にもインポート機能があるが,これでインポートすると鍵束がぶっ壊れる。マジ勘弁して下さい)
これでようやく準備が整った。 ちなみに旧バージョンで鍵を表示すると
> gpg --fingerprint --fingerprint 0x7E20B81C pub 3072D/7E20B81C 2013-04-28 Key fingerprint = 1B52 02DB 4A3E C776 F1E0 AD18 B4DA 3BAE 7E20 B81C uid Yasuhiro (Spiegel) ARAKAWA <> uid [jpeg image of size 4296] sub 3072g/6F760D3C 2013-04-28 Key fingerprint = 5889 0525 A38E 55BB 011A DFF0 4308 C494 6F76 0D3C
といった感じになるが, modern バージョンでは
> gpg --fingerprint --fingerprint 0x7E20B81C pub dsa3072/7E20B81C 2013-04-28 Key fingerprint = 1B52 02DB 4A3E C776 F1E0 AD18 B4DA 3BAE 7E20 B81C uid [ full ] Yasuhiro (Spiegel) ARAKAWA <> uid [ full ] [jpeg image of size 4296] sub elg3072/6F760D3C 2013-04-28 Key fingerprint = 5889 0525 A38E 55BB 011A DFF0 4308 C494 6F76 0D3C
などと表示される。
[ full ]
はその鍵の有効性(validity)を示している(鍵の有効性はユーザ ID ごとに設定されるためこうなる。「有効性」についてはわかる! OpenPGP 暗号
の公開鍵基盤(Public Key Infrastructure)としての OpenPGP
の節を参照のこと)。
アルゴリズムと鍵長の表記も 3072D
→ dsa3072
あるいは 3072g
→ elg3072
などと変わっている。
Windows でも gpg-agent が使えるようになったよ
いや Gpg4win にも gpg-agent は同梱されてたけど使い方がわからなかったのよ。 modern バージョンではインストール時点で gpg-agent が有効になっている。 秘密鍵にアクセスする際に以下のウィンドウがポップアップする。
クリップボード経由でパスフレーズを入力できないので注意(KeePass との相性が悪い)。 パスフレーズのキャッシュ時間等の設定は GnuPG のホームディレクトリにある gpg-agent.conf ファイルで行うが,これは GPA を使ったほうが分かりやすい。 GPA でメニューの Edit から Backend Preferences を開く。
Opentions controlling security
でパスフレーズのキャッシュ時間を設定できる。
もうひとつ面白いのが enable-putty-support
の項目。
これを有効にすると PuTTY の Pagent を gpg-agent に置き換えることができる。
(ちなみに11月6日に PuTTY 0.64 pre-release が出ている)
でもこれ,どうやって動かしたのか自分でもよく分からなかったんだよね。 GnuPG 関連のツール(GPA など)を動かすと勝手に gpg-agent が常駐するみたいなんだけど,それだけでは PuTTY や WinSCP と上手く連携しないみたいなんだよね。 でも GitExtentions でごそごそやってたらいつの間にか gpg-agent の pinentry ポップアップが起動したりして。 どうなってるのかな。
いったん gpg-agent で ssh の鍵を認識すると sshcontrol ファイルに鍵情報が登録されて,以降は問題なく PuTTY でも WinSCP でも GitExtentions でも gpg-agent が連携するようになる。 ちなみに GitExtentions 設定で「pagentのパス」をセットするんだけど,ここは変えちゃダメみたい。
よう分からん。 まぁ動いてるからいいか。
Enigmail の設定
Enigmail の設定は変えなくても大丈夫なようだ。 念のため「GnuPG 実行ファイル」のパスが正しいか確認しておくとよいだろう。
ただし Enigmail で鍵の生成は試してない。 この機能,使ったことがないんだよなぁ。 鍵の生成はいつもコマンドプロンプト上でやってるし。
次回予告?
というわけで,次回は(次回があれば) ECC 鍵の生成に挑戦してみる。