GnuPG 2.1.0 (modern) for Windows のインストール

no extension

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 2.1.0 Installation
GnuPG 2.1.0 Installation — Choose Components

このうち GnuPG と GPA は必須である。 GPA は GnuPG の GUI で,ツールとしてはあまり使い勝手が良くないが,バックエンドで他のツールのコントロールをしているので必ず導入する必要がある。 GpgEx はエクスプローラ用の拡張機能で,必須ではないが,かなり便利なので是非導入をお勧めする。

GpgEx
GpgEx — GnuPG Explorer Extention

インストールが終わったらコマンドプロンプトから 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の節を参照のこと)。 アルゴリズムと鍵長の表記も 3072Ddsa3072 あるいは 3072gelg3072 などと変わっている。

Windows でも gpg-agent が使えるようになったよ

いや Gpg4win にも gpg-agent は同梱されてたけど使い方がわからなかったのよ。 modern バージョンではインストール時点で gpg-agent が有効になっている。 秘密鍵にアクセスする際に以下のウィンドウがポップアップする。

gpg-agent
gpg-agent — pinentry

クリップボード経由でパスフレーズを入力できないので注意(KeePass との相性が悪い)。 パスフレーズのキャッシュ時間等の設定は GnuPG のホームディレクトリにある gpg-agent.conf ファイルで行うが,これは GPA を使ったほうが分かりやすい。 GPA でメニューの Edit から Backend Preferences を開く。

GPA Backend Preferences
GPA 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 鍵の生成に挑戦してみる。

参考図書

photo
新版暗号技術入門 秘密の国のアリス
結城 浩
SBクリエイティブ株式会社 2013-12-04
評価

プログラマの数学 数学ガールの秘密ノート/整数で遊ぼう インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 数学ガールの秘密ノート/式とグラフ 数学ガール/ガロア理論

まさに入門書。暗号がどのような要素技術で成り立っているのか体系的に理解できる良書。

reviewed by Spiegel on 2014/09/18 (powered by G-Tools)

photo
暗号化 プライバシーを救った反乱者たち
スティーブン・レビー 斉藤 隆央
紀伊國屋書店 2002-02-16
評価

仮想通貨革命---ビットコインは始まりにすぎない ハッカーズ CODE コードから見たコンピュータのからくり 起業のエクイティ・ファイナンス---経済革命のための株式と契約 暗号解読〈上〉 (新潮文庫)

暗号技術について学ぶ前に,これだけは最低限読んどけ。

reviewed by Spiegel on 2014/09/05 (powered by G-Tools)