GnuPG コマンドライン版の使い方メモ

インストール後の利用方法(コマンド引数など)は、LinuxとWindowsでほとんど違いは無い。このページではWindowsのコマンドラインでの利用方法を示す。

インストール

環境変数の設定

PATH変数に、GnuPGの実行ファイルをインストールしたフォルダを追加する

PATH=.......;C:\GnuPG

設定用バッチファイル.bat
SET PATH=%PATH%;C:\Program Files\GnuPG

レジストリの設定

ユーザ権限で「インストールされていない」エラーが出る場合は、手動でプログラム本体のパスと、ユーザのデータパスをレジストリに設定してやる必要があります。

GnuPG 1.4.9でのレジストリ設定例
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\GNU\GnuPG]
"HomeDir"="D:\\Documents and Settings\\ユーザ名\\Application Data\\GnuPG"
"gpgProgram"="C:\\Program Files\\GnuPG\\gpg.exe"
"Lang"="ja"
"Installer Language"="1033"
GnuPG 1.2.3でのレジストリ設定例
Windows Registry Editor Version 5.00
 
[HKEY_CURRENT_USER\Software\GNU\GNUPG]
"gpgProgram" = "C:\\Program Files\\GnuPG\\GnuPG"
"OptFile" = "C:\\Documents and Settings\\ユーザ名\\Application Data\\GnuPG\\gpg.conf"
"HomeDir" = "C:\\Documents and Settings\\ユーザ名\\Application Data\\GnuPG"
 
[HKEY_CURRENT_USER\Control Panel\Mingw32\NLS]
"MODir" = "C:\\Program Files\\GnuPG\\Locale"

警告表示が出る場合

次のような警告表示が出る場合は

gpg: 注意: 昔、既定だったオプション・ファイル「D:/Documents and Settings/ユーザ名/Application Data/GnuPG\options」は、無視されます

options というファイルを削除することで問題を回避できる場合がある。(gpgコマンドのオプションは実行時にプログラム引数として毎回設定すればよい)

鍵の作成と管理

鍵のペア(秘密鍵と公開鍵)の作成

D:\Work> gpg --gen-key
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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) DSAとElgamal (既定)
   (2) DSA (署名のみ)
   (5) RSA (署名のみ)
選択は? 1
DSA keypair will have 1024 bits.
ELG-E keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)     ← 通常は2048ビットでよいので改行を入力
要求された鍵長は2048ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で満了
      <n>w = 鍵は n 週間で満了
      <n>m = 鍵は n か月間で満了
      <n>y = 鍵は n 年間で満了
鍵の有効期間は? (0)2y
Key expires at 02/01/12 00:00:00
これで正しいですか? (y/N) y
 
あなたの鍵を同定するためにユーザーIDが必要です。
このソフトは本名、コメント、電子メール・アドレスから
次の書式でユーザーIDを構成します:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"
 
本名: test user
電子メール・アドレス: test@example.com
コメント:     ← コメントがないので、改行のみ入力 
次のユーザーIDを選択しました:
    "test user <test@example.com>"
 
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
秘密鍵を保護するためにパスフレーズがいります。
 
パスフレーズを入力:      ← パスワードを入力
パスフレーズを再入力:      ← パスワードを入力
 
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++.++++++++++++++++++++++++++++++...+++++..++++++++++++++++++++++++++++++++++
+..+++++....+++++.++++++++++..+++++.++++++++++++++++++++++++++++++>+++++.+++++..
.+++++
今から長い乱数を生成します。キーボードを打つとか、マウスを動かす
とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で
乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。
+++++.+++++..+++++.+++++.++++++++++.++++++++++.+++++.+++++++++++++++++++++++++..
.+++++++++++++++.++++++++++..++++++++++++++++++++++++++++++++++++++++.++++++++++ 
>++++++++++>+++++....+++++^^^
gpg: 鍵D4514E96を絶対的に信用するよう記録しました
公開鍵と秘密鍵を作成し、署名しました。
 
gpg: 信用データベースの検査
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、classic信用モデル
gpg: 深さ: 0  有効性:   4  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 4u
gpg: 次回の信用データベース検査は、2012-02-01です
pub   1024D/D4514E96 2010-02-01 [満了: 2012-02-01]
                 指紋 = FD16 6AF5 5E46 46FA AF84  AB82 BF84 899B D451 4E96
uid                  test user <test@example.com>
sub   2048g/BB7ED830 2010-02-01 [満了: 2012-02-01]
 
D:\Work>

鍵の一覧表示

D:\Work> gpg --list-keys
D:/Documents and Settings/ユーザ名/Application Data/GnuPG\pubring.gpg
----------------------------------------------------------------------
pub   1024D/D4514E96 2010-02-01 [満了: 2012-02-01]
uid                  test user <test@example.com>
sub   2048g/BB7ED830 2010-02-01 [満了: 2012-02-01]
 
D:\Work> gpg --list-secret-keys
D:/Documents and Settings/ユーザ名/Application Data/GnuPG\secring.gpg
----------------------------------------------------------------------
sec   1024D/D4514E96 2010-02-01 [満了: 2012-02-01]
uid                  test user <test@example.com>
ssb   2048g/BB7ED830 2010-02-01
 
D:\Work>

先頭に pub は公開鍵、 sec は秘密鍵を意味する

鍵の削除

D:\Work> gpg --delete-secret-key "test user"
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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.
 
sec  1024D/D4514E96 2010-02-01 test user <test@example.com>
 
この鍵を鍵輪から削除しますか? (y/N) y
これは秘密鍵です! 本当に削除しますか? (y/N) y
 
D:\Work> gpg --delete-key "test user"
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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  1024D/D4514E96 2010-02-01 test user <test@example.com>
 
この鍵を鍵輪から削除しますか? (y/N) y
 
D:\Work>

秘密鍵と公開鍵のペアの場合は、まず秘密鍵から削除する必要がある。

※ ユーザ名(User ID)が一意に認識できるのなら、ユーザ名は先頭の数文字を指定するだけでよい。複数のユーザ名に一致する文字列が指定された場合は、最初に見つかったユーザ名が使用されるようである

公開鍵(パブリック キー)のエクスポート

D:\Work> gpg --armor --output sample_pub.asc --export "test user"
 
D:\Work>

※ 「--armor」スイッチを指定しない場合は、出力はバイナリとなる

エクスポートしたファイルの例 (sample_pub.asc)
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (MingW32)
 
mQGiBEtpDiQRBACzAZZgWoEXEH7+8ev1Pzy0NVfKNISgrjRB4WkEr0K1wQNuXGJX
imt9hpgkoBVfvvS1/AY42YtsRwT8AYY2RG5xS5dLB95ykXok2juekg+a4XX3ynZO
FVDoJ1WP2Onv3ytwJ0rnkfcXdrnl8GWov7rSQXMvDSVj/8Z2n2LkgQcXswCgwTVI
M/5a117Z/X4OMSDgL3bPqg0EAIk+NWAHPkcvJOSmlhXrboFNzqvythnF4oEx5TS2
 
~ 中略 ~
 
TF7ThhYx4zY/kGIJWrK19LHDk3aISQQYEQIACQUCP5dxJgIbDAAKCRB0UO6vYFrV
HRQFAKCGOsaC3afv1Rh1MyARBFJ/QmEEZwCeKgVWSiGRui2pyFdXKiwlIi8M++E=
=Eyqk
-----END PGP PUBLIC KEY BLOCK-----

秘密鍵(プライベート キー)のエクスポート

D:\Work> gpg --armor --output sample_sec.asc --export-secret-key "test user"
 
D:\Work>

※ 「--armor」スイッチを指定しない場合は、出力はバイナリとなる

エクスポートしたファイルの例 (sample_sec.asc)
-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1.4.9 (MingW32)
 
lQHhBEtpDiQRBACzAZZgWoEXEH7+8ev1Pzy0NVfKNISgrjRB4WkEr0K1wQNuXGJX
imt9hpgkoBVfvvS1/AY42YtsRwT8AYY2RG5xS5dLB95ykXok2juekg+a4XX3ynZO
FVDoJ1WP2Onv3ytwJ0rnkfcXdrnl8GWov7rSQXMvDSVj/8Z2n2LkgQcXswCgwTVI
M/5a117Z/X4OMSDgL3bPqg0EAIk+NWAHPkcvJOSmlhXrboFNzqvythnF4oEx5TS2
 
~ 中略 ~
 
gelzxcl6Sb+v0uxKpjpqj62u2UXb7mLMNohJBBgRAgAJBQI/l3EmAhsMAAoJEHRQ
7q9gWtUdFAUAoIRZEV0mOMOequ1efLthh0GWyDMLAJ9UWhN04bpU5yyKiZvxUzUf
oEr74Q==
=v2t2
-----END PGP PRIVATE KEY BLOCK-----

鍵のインポート

D:\Work> gpg --import sample_sec.asc
 
gpg: 鍵D4514E96: 秘密鍵を読み込みました
gpg: 鍵D4514E96: 公開鍵"test user <test@example.com>"を読み込みました
gpg:     処理数の合計: 1
gpg:           読込み: 1
gpg:   秘密鍵の読出し: 1
gpg:   秘密鍵の読込み: 1
 
D:\Work>

鍵の編集

信頼化

鍵の信用性が「未知」の場合、次のような確認が行われることがあります。

D:\Work> gpg --armor -r "test user" -e test.txt
gpg: BB7ED830: この鍵が本当に本人のものである、という兆候が、ありません
 
pub  2048g/BB7ED830 2010-02-01 test user <test@example.com>
 主鍵の指紋: FD16 6AF5 5E46 46FA AF84  AB82 BF84 899B D451 4E96
 副鍵の指紋: 128C B5C6 96A6 91C6 3008  DE13 D802 1C6B BB7E D830
 
この鍵は、このユーザーIDをなのる本人のものかどうか確信でき
ません。今から行うことを*本当に*理解していない場合には、
次の質問にはnoと答えてください。
 
それでもこの鍵を使いますか? (y/N) 

これを防ぐためには、その鍵を「信用」すると設定する必要があります。

D:\Work> gpg --edit-key "test user"
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 未知の        有効性: 未知の
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ unknown] (1). test user <test@example.com>
 
コマンド> trust
pub  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 未知の        有効性: 未知の
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ unknown] (1). test user <test@example.com>
 
他のユーザーの鍵を正しく検証するために、このユーザーの信用度を決めてください
(パスポートを見せてもらったり、他から得た指紋を検査したり、などなど)
 
  1 = 知らない、または何とも言えない
  2 = 信用し ない
  3 = ある程度信用する
  4 = 完全に信用する
  5 = 絶対的に信用する
  m = メーン・メニューに戻る
 
あなたの決定は? 5
本当にこの鍵を絶対的に信用しますか? (y/N) y
 
pub  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 絶対的        有効性: 未知の
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ unknown] (1). test user <test@example.com>
プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、
ということを念頭においてください。
 
コマンド> q
 
D:\Work> gpg --update-trustdb
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、classic信用モデル
gpg: 深さ: 0  有効性:   4  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 4u
gpg: 次回の信用データベース検査は、2012-02-01です
 

ユーザ名、メールアドレスの追加・削除

IDの追加はadduid、削除はdeluidコマンドで行える。

D:\Work> gpg --edit-key "test user"
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 未知の        有効性: 未知の
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ unknown] (1). test user <test@example.com>
 
コマンド> adduid
本名: new user
電子メール・アドレス: new@example.com
コメント:
次のユーザーIDを選択しました:
    "new user <new@example.com>"
 
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? o
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:"test user <test@example.com>"
1024ビットDSA鍵, ID D4514E96作成日付は2010-02-01
 
パスフレーズの入力:      ← パスワードを入力
 
pub  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 絶対的        有効性: 絶対的
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ultimate] (1)  test user <test@example.com>
[ unknown] (2). new user <new@example.com>      ← 追加された!
 
コマンド> uid 1
 
pub  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 絶対的        有効性: 絶対的
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ultimate] (1)* test user <test@example.com>      ← (1)に「*」が付きが選択された
[ unknown] (2). new user <new@example.com>
 
コマンド> deluid
 
コマンド> save
 
コマンド> q
変更を保存しますか? (y/N) y

useridを変更しても、古いuserid時に暗号化されたメッセージの復号には影響しない。

暗号化

D:\Work> gpg --armor -r "test user" -e test.txt
 
D:\Work>
暗号化されたファイルの例 (test.asc)
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.9 (MingW32)
 
hQIOA9gCHGu7ftgwEAf/aJTjUAMcp5e2QTQxf7/At8ZHAzMH6A7zBiGMP8TvoK+W
W3vQ5rwyMuQH1XA1k7s6dBFg6WZrPUafi7VQ4sdX5PDh2fw/rrwoF5/QNQQOJ5I9
llZAQE86xll65vz0ExxDiRMUcB2ctoCr6l0j5mjkyrDrzgLhroGIGWMYC1tlXBuE
ZVi+z4xtAgDeeeqCd4pJz6YWR6wCTvguoJAgLwPwbrw/U16kpMEEaiEduHWbRQ4Y
 
~ 中略 ~
 
8wxsnNmfK6kdb6BDFUSjD+uGUCSQtLbjAVAP4h9k5URuWbMyUOly2x9Oqa4wfZnQ
1f9S6NAff+irYVjZ
=7Bnn
-----END PGP MESSAGE-----

復号化

D:\Work> gpg -o test.txt --decrypt test.asc
 
次のユーザーの秘密鍵のロックを解除するには
パスフレーズがいります:"test user <test@example.com>"
2048ビットELG-E鍵, ID BB7ED830作成日付は2010-02-01 (主鍵ID D4514E96)
 
パスフレーズを入力:      ← パスワードを入力
gpg: 2048-ビットELG-E鍵, ID BB7ED830, 日付2010-02-01に暗号化されました
      "test user <test@example.com>"
 
D:\Work>

公開鍵サーバに登録

D:\Work> gpg --send-keys D4514E96
gpg: 鍵D4514E96をhkpサーバーkeys.gnupg.netへ送信

送信後、数分経てば検索できるようになる

D:\Work> gpg --search-keys "test user"
gpg: “test user”をhkpサーバーkeys.gnupg.netから検索
(1)	test user - info <test@example.com>
	  2048 bit DSA key D4514E96, 作成: 2012-02-01
Keys 1-1 of 1 for "test user".  
番号(s)、N)次、またはQ)中止を入力してください

公開鍵サーバの鍵を失効させる

まず、失効証明を作成し、それを用いて鍵ペアを失効させます。

D:\Work> gpg -o revoke.asc --gen-revoke D4514E96
 
sec  1024D/D4514E96 2010-02-01 test user <test@example.com>
 
この鍵にたいする失効証明書を作成しますか? (y/N) y
失効の理由を選択してください:
  0 = 理由は指定されていません
  1 = 鍵がパクられました
  2 = 鍵がとりかわっています
  3 = 鍵はもう不用です
  Q = キャンセル
(ここではたぶん1を選びます)
あなたの決定は? 2
 
予備の説明を入力。空行で終了:
> 
失効理由: 鍵がとりかわっています
(説明はありません)
よろしいですか? (y/N) y
 
次のユーザーの秘密鍵のロックを解除するにはパスフレーズがいります
パスフレーズを入力:      ← パスワードを入力
ASCII包装出力を強制します。
失効証明書を作成しました。
 
D:\Work> gpg --import revoke.asc
失効証明書を読み込みました
gpg: 処理数の合計: 1
gpg:    新しい鍵の失効: 1
gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル
gpg: 深さ: 0  有効性:   2  署名:   0  信用: 0-, 0q, 0n, 0m, 0f, 2u
gpg: 次回の信用データベース検査は、2021-02-21です

その後に鍵を公開鍵サーバに送信します。

D:\Work> gpg --send-keys D4514E96
gpg: 鍵D4514E96をhkpサーバーkeys.gnupg.netへ送信

暗号化で利用されないように鍵を無効化する

鍵をキーリングに保持したまま、暗号化出来ないようにするには、鍵を無効化する。なお、無効化した鍵でも復号化は出来る。

※ 失効(revoke)させると復元は出来ないが、disableなら当該PC内のみで一時的に使わないようにすることが出来るし、復活させることも可能。

D:\Work> gpg --edit-key D4514E96
gpg (GnuPG) 1.4.9; Copyright (C) 2008 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  1024D/D4514E96  作成: 2010-02-01  満了: 2012-02-01  利用法: SC
                     信用: 未知の        有効性: 未知の
sub  2048g/BB7ED830  作成: 2010-02-01  満了: 2012-02-01  利用法: E
[ unknown] (1). test user <test@example.com>
 
コマンド> disable
 
コマンド> quit

再び鍵を暗号化に使いたい場合は”enable”設定を行う。