GnuPG for Windows インストール編

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

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 プロジェクトの一環として現在も開発が行われている4

GnuPG の最新バージョンは 2.2 系である。 2.0 系(旧 stable version)および 2.1 系(旧 modern version)は 2.2 系に統合された。 また 2.0 系は2017年末でサポートが終了する。

なお classic version である 1.4 系はレガシー・システムとの互換性のためにメンテナンスが継続されるが, Windows で新たに導入するのであれば 2.2 系を強くお勧めする。

【事前準備】インストーラのダウンロード

ダウンロードページ の “GnuPG binary releases” にある Windows 用のバイナリへのリンクから “current GnuPG” をダウンロードする(2017年11月20日時点で v2.2.3 が最新)。 必ずインストーラ本体と署名ファイルをセットでダウンロードすること。

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

$ gpg --verify  gnupg-w32-2.2.3_20171120.exe.sig
gpg: 署名されたデータが'gnupg-w32-2.2.3_20171120.exe'にあると想定します
gpg: 11/20/17 21:25:34 東京 (標準時)に施された署名
gpg:                RSA鍵D8692123C4065DEA5E0F3AB5249B39D24F25E3B6を使用
gpg: "Werner Koch (dist sig)"からの正しい署名 [充分]

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

公開鍵は鍵サーバから取得することもできる。

$ gpg --keyserver keys.gnupg.net --recv-keys 0x4F25E3B6

Classic Version 削除のススメ

現行バージョンのファイル構成は classic version と互換性がない。 Windows で現行バージョンを利用するのなら classic version は削除するのがお勧めである。

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

なお trustdb.gpg は以下のコマンドでテキストファイルにエクスポートしておくとよい6

$ gpg --export-ownertrust > trust.txt

インストーラの実行

準備ができたところでインストールを始めよう。 ダウンロードしたインストーラを起動する(スクリーンショットが古いがご容赦)。

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 も通っているため,コマンドプロンプトから

$ gpg --version
gpg (GnuPG) 2.2.3
libgcrypt 1.8.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://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
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
    CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

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

ホームディレクトリの変更(必要に応じて)

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

$ gpg --version --homedir C:\usr\home
gpg (GnuPG) 2.2.3
libgcrypt 1.8.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://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
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
    CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

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

Classic Version の鍵束のインポート(移行時のみ)

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

$ gpg --import-options import-local-sigs --import pubring.gpg
$ gpg --import secring.gpg
$ gpg --import-ownertrust trust.txt

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

GnuPG pinentry
GnuPG pinentry

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

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

$ gpg --list-keys 0x4F25E3B6
pub   rsa2048 2011-01-12 [SC] [有効期限: 2019-12-31]
      D8692123C4065DEA5E0F3AB5249B39D24F25E3B6
uid           [  充分  ] Werner Koch (dist sig)
sub   rsa2048 2011-01-12 [A] [有効期限: 2019-12-31]

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

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

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

参考になる(かもしれない) 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. 実は classic version の鍵束をそのまま使っても自動的にファイルが移行されるため大抵は問題ないのだが,旧鍵束にはバグが混入しているそうで,安全のため明示的にインポート作業を行うほうがいいらしい。なお現行バージョンの GnuPG は,移行時以外は classic version の secring.gpg を参照しないため,Classic version と混在させるのであれば取り扱いに注意が必要である。(gpg-v21-migrated ファイルを削除すると再度移行処理が走るらしい) [return]
  6. trustdb.gpg ファイルはそのまま使うのではなく, --export-ownertrust オプションでテキストファイルにエクスポートしたものを使うのが安全なようだ。 [return]
  7. 環境変数 APPDATA には通常 C:\Users\username\AppData\Roamingusername はログインユーザの名前)がセットされている。ちなみに UNIX 系のプラットフォームでは ~/.gnupgGnuPG 既定のホームディレクトリだが Windows は構成が異なるためこのようになっている。 [return]
  8. kbx は keybox の略らしい。 バージョン 2 以降では OpenPGP の鍵束だけでなく S/MIME (X.509)や OpenSSH の鍵も格納できる。 [return]