帰ってきた「しっぽのさきっちょ」

しっぽのさきっちょ: 2016-03-09 付 (2016-03-12 更新)

GnuPG Modern Version for Windows ― インストール編

no extension

この記事は以下の記事を最新版 GnuPG 用に再構成したものです。

今回は GnuPG modern version について2回に分けて解説する。

  1. インストール編 (← イマココ)
  2. gpg-agent について

なお modern version の特徴である ECC への対応については以下の Gist ページを参照のこと。 (これもそのうち再構成してここで公開する予定)

OpenPGP 実装としての GnuPG

OpenPGP の起源は Phil Zimmermann さんによる PGP (Pretty Good Privacy) と呼ばれる暗号ツールである。 PGP の最初のバージョンは1991年に公開された1。 当時の Phil Zimmermann さんは反核運動家で,政府等の組織からデータやメッセージ(特に電子メール)を保護するための手段として PGP を開発し,最終的にそれをフリーで公開した2

その後 PGP はいくつか改良を重ね,1998年に RFC 2440 つまり OpenPGP として標準化された3。 また特許上の制限や国際政治上の問題も2000年を機に大幅に緩和され PGP を含む多くの暗号製品が本格的に使われるようになった。

GnuPGOpenPGP をベースにドイツで生まれた製品である。 特定の個人・組織が独占することのないよう GNU プロジェクトの一環として現在も開発が行われている4GnuPG には現在,以下の3つのバージョンがある。

  • Classic Version (1.4.x)
  • Stable Version (2.0.x)
  • Modern Version (2.1.x)

このうち Windows プラットフォームに対応しているのは classic version と modern version である5。 今回は modern version のインストールについて紹介する。

Modern Version インストーラのダウンロード

ダウンロードページ の “GnuPG binary releases” にある Windows 用のバイナリへのリンクからダウンロードを行う(執筆時点でヴァージョン 2.1.11, 20160209 版が最新)。 必ずインストーラ本体と署名ファイルをセットでダウンロードすること。

前バージョンの GnuPG を持っている場合はインストーラの署名検証を行い,正しいファイルであることを確認すること。

C:>gpg --verify gnupg-w32-2.1.11_20160209.exe.sig
gpg: assuming signed data in 'gnupg-w32-2.1.11_20160209.exe'
gpg: Signature made 02/09/16 20:05:47 東京 (標準時) using RSA key ID 4F25E3B6
gpg: using PGP trust model
gpg: Good signature from "Werner Koch (dist sig)" [full]
gpg: binary signature, digest algorithm SHA256, key algorithm rsa2048

署名検証用の公開鍵は以下にある。

Classic Version の削除

Modern version のファイル構成は classic version と互換性がない。 Modern version を利用するのなら classic version は削除するのがお勧めである。

  • Classic version の鍵束(keyring; pubring.gpg, secring.gpg, trustdb.gpg)は別の場所に退避させておき Modern version インストール後にインポートする6。インポートの方法は後述する
  • Classic version アンインストール後に環境変数 PATHgpg.exe へのパスが残っている場合は念のためこれも削除しておく。環境変数の変更方法がわからない方は無理に削除しなくてもいい
  • Classic version アンインストール後にレジストリ HKEY_CURRENT_USER\Software\GNU\GnuPG が残っている場合は,これも削除してしまうのがよいだろう。ただしレジストリ操作に自信のない人はこれも無理に触らなくてよい

なお trustdb.gpg は以下の手順でテキストファイルにエクスポートしておくとよい7

C:>gpg --export-ownertrust > trust.txt

Modern Version のインストール

準備ができたところでインストールを始めよう。 ダウンロードしたインストーラを起動する。

Installing GnuPG for Windows (1)
Installing GnuPG for Windows (1)

英語だけど無問題。 ほとんど選択肢はないので [Next] ボタンで先に進めていけばいい。

Installing GnuPG for Windows (2)
Installing GnuPG for Windows (2)
Installing GnuPG for Windows (3)
Installing GnuPG for Windows (3)
Installing GnuPG for Windows (4)
Installing GnuPG for Windows (4)

インストール先のフォルダを変えたい場合はここで変更する。

Installing GnuPG for Windows (5)
Installing GnuPG for Windows (5)
Installing GnuPG for Windows (6)
Installing GnuPG for Windows (6)
Installing GnuPG for Windows (7)
Installing GnuPG for Windows (7)

[Finish] ボタンを押してインストール完了。

この時点で PATH も通っているため,コマンドプロンプトから

C:>gpg --version
gpg (GnuPG) 2.1.11
libgcrypt 1.6.5
Copyright (C) 2016 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

と入力すればバージョン情報が表示される。

ホームディレクトリの変更

インストール直後は %APPDATA%\gnupgGnuPG のホームディレクトリになっている8。 通常はこれで問題ないが,他のフォルダに変更したい場合は環境変数 GNUPGHOME でフォルダを指定する。 また gpg.exe 起動時に --homedir オプションでホームディレクトリを直接指定することもできる(--homedir オプションが優先)。

C:>gpg --version --homedir C:\usr\home
gpg (GnuPG) 2.1.11
libgcrypt 1.6.5
Copyright (C) 2016 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:/usr/home
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

インストール直後のホームディレクトリはまだ空である。

Classic Version の鍵束のインポート

Classic version からアップグレードした人は旧鍵束(pubring.gpg, secring.gpg, trustdb.gpgtrust.txt)をあらかじめ退避していると思うが,これを新しくインストールした modern version へインポートする。 手順は以下のとおり。

C:>gpg --import-options import-local-sigs --import pubring.gpg
C:>gpg --import secring.gpg
C:>gpg --import-ownertrust trust.txt

秘密鍵(secring.gpg)のインポートでは鍵の数だけパスフレーズの入力をを要求される。

GnuPG pinentry
GnuPG pinentry

このプロンプト画面(Pinentry)については次回gpg-agent の話と絡めて説明する。

上手くインポートできていれば以下のように鍵を表示することができる9

C:>gpg --list-keys 0xCE59D5FA
pub   dsa3072/CE59D5FA 2014-10-15 [SC] [revoked: 2014-10-15]
uid         [ revoked] John Doe (Demonstration) <john@examle.com>

インポートにより GnuPG のホームディレクトリには以下のフォルダ・ファイルができているはずである。

  • pubring.kbx ファイル10
  • trustdb.gpg ファイル
  • gpg-v21-migrated ファイル
  • private-keys-v1.d フォルダ

private-keys-v1.d フォルダにはインポートした秘密鍵の数だけファイルが作成されている。 gpg-v21-migrated ファイルは鍵束が modern version へ移行したことを示すフラグである。

【付録】 GnuPG 以外の OpenPGP 実装

GnuPG 以外の OpenPGP 実装としては以下のものがある。

参考になる(かもしれない) Web ページ

参考図書

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

ハッカーズ 暗号解読―ロゼッタストーンから量子暗号まで グーグル ネット覇者の真実 追われる立場から追う立場へ 暗号解読〈上〉 (新潮文庫) 暗号解読 下巻 (新潮文庫 シ 37-3)

20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!

reviewed by Spiegel on 2015/03/09 (powered by G-Tools)

photo
PGP―暗号メールと電子署名
シムソン ガーフィンケル Simson Garfinkel
オライリー・ジャパン 1996-04
評価

プログラミング作法 プログラミング言語C 第2版 ANSI規格準拠 新版暗号技術入門 秘密の国のアリス 情報処理教科書 高度試験午後II論述 春期・秋期 (EXAMPRESS) エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented Selection)

良書なのだが,残念ながら内容が古すぎた。 PGP の歴史資料として読むならいいかもしれない。

reviewed by Spiegel on 2014/10/16 (powered by G-Tools)

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩
SBクリエイティブ 2015-08-25
評価

自作エミュレータで学ぶx86アーキテクチャ コンピュータが動く仕組みを徹底理解! 数学ガールの秘密ノート/丸い三角関数 数学ガールの秘密ノート/微分を追いかけて 情報セキュリティ白書2015: サイバーセキュリティ新時代:あらゆる変化へ柔軟な対応を 数学ガールの秘密ノート/数列の広場

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by G-Tools)


  1. 当時の PGP の仕様は(公開年にちなんでか) RFC 1991 として公開されている。 [return]
  2. もともと Phil Zimmermann さんは PGP をシェアウェアとして売り出すつもりだったらしい。しかし米国内で事実上暗号を禁止する法案が提出され,法案の可決を阻止する目的もあり PGP をフリーで公開した。ところが Phil Zimmermann さんが暗号に関する特許について迂闊だったことや PGP が ftp サーバを通じて海外に漏洩してしまった(当時は暗号製品には輸出規制があり強い暗号製品は米国外に持ち出せなかった)ことなどもあって,しばらくの間 Phil Zimmermann さんと PGP は不遇の身の上となる。当時の輸入規制に「書籍」は含まれていなかったため,最新版の PGP コードを書籍として出版し海外でコンパイルする国際化プロジェクトがあった。何もかも懐かしい(笑) ちなみに現在の PGP は無料ではない。 [return]
  3. 現在は RFC 4880 にアップデートされ,更に改良が進められている。 [return]
  4. GnuPG の著作権は FSF に帰属し GNU GPL でライセンスされている。 [return]
  5. Stable version については Gpg4win で Windows 用バイナリを配布している。 Gpg4winGnuPG を含む GUI ツールをパッケージ化したものだが,セキュリティ・アップデートを含む本家の更新に追従できていないのが玉に瑕である。 GnuPG 本体のみでいいのなら modern version の Windows 用バイナリで充分間に合う。 [return]
  6. 実は classic version の鍵束をそのまま使っても自動的にファイルが移行されるため大抵は問題ないのだが,旧鍵束にはバグが混入しているそうで,安全のため明示的にインポート作業を行うほうがいいらしい。なお modern version の GnuPG は,移行時以外は classic version の secring.gpg を参照しないため modern version と classic version を混在させる場合は注意が必要である。(gpg-v21-migrated ファイルを削除すると再度移行処理が走るらしい) [return]
  7. trustdb.gpg ファイルはそのまま使うのではなく, --export-ownertrust オプションでテキストファイルにエクスポートしたものを使うのが安全なようだ。 [return]
  8. 環境変数 APPDATA には通常 C:\Users\username\AppData\Roamingusername はログインユーザの名前)がセットされている。ちなみに UNIX 系のプラットフォームでは ~/.gnupgGnuPG 既定のホームディレクトリだが Windows は構成が異なるためこのようになっている。 [return]
  9. 例で挙げた鍵は「わかる! OpenPGP 暗号」で説明用に作成した鍵で既に破棄済みになっているが,ご容赦を。 [return]
  10. kbx は keybox の略らしい。 Stable version 以降では OpenPGP の鍵束だけでなく S/MIME (X.509)や OpenSSH の鍵も格納できる。 [return]