GNU Privacy Guard
GNU Privacy Guard (GPG, GnuPG))とは、Pretty Good Privacy(PGP)の別の実装です。
読み方
- GNU Privacy Guard
- ぐにゅー ぷらいばしー がーど
- GPG
- じーぴーじー
- GnuPG
- ぐにゅーぴーじー
目次
概要
GNU Privacy Guard (GPG, GnuPG))とは、Pretty Good Privacy(PGP)の別の実装です。
gpgは、以下のアルゴリズムをサポートしています。
- 公開鍵
- RSA, ELG, DSA
- 暗号方式
- IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
- ハッシュ
- MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
- 圧縮
- 無圧縮, ZIP, ZLIB, BZIP2
インストール
Linuxにデフォルトでインストールされています。
FreeBSDにインストールする場合
pkgコマンドでインストールする場合
sudo pkg install gnupg pinentry-curses
使い方
gpg コマンド
$ gpg --help gpg (GnuPG) 2.0.14 libgcrypt 1.4.5 Copyright (C) 2009 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: ~/.gnupg Supported algorithms: Pubkey: RSA, ELG, DSA Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression: Uncompressed, ZIP, ZLIB, BZIP2 Syntax: gpg [options] [files] sign, check, encrypt or decrypt default operation depends on the input data Commands: -s, --sign make a signature --clearsign make a clear text signature -b, --detach-sign make a detached signature -e, --encrypt encrypt data -c, --symmetric encryption only with symmetric cipher -d, --decrypt decrypt data (default) --verify verify a signature -k, --list-keys list keys --list-sigs list keys and signatures --check-sigs list and check key signatures --fingerprint list keys and fingerprints -K, --list-secret-keys list secret keys --gen-key generate a new key pair --delete-keys remove keys from the public keyring --delete-secret-keys remove keys from the secret keyring --sign-key sign a key --lsign-key sign a key locally --edit-key sign or edit a key --gen-revoke generate a revocation certificate --export export keys --send-keys export keys to a key server --recv-keys import keys from a key server --search-keys search for keys on a key server --refresh-keys update all keys from a keyserver --import import/merge keys --card-status print the card status --card-edit change data on a card --change-pin change a card's PIN --update-trustdb update the trust database --print-md print message digests --server run in server mode Options: -a, --armor create ascii armored output -r, --recipient USER-ID encrypt for USER-ID -u, --local-user USER-ID use USER-ID to sign or decrypt -z N set compress level to N (0 disables) --textmode use canonical text mode -o, --output FILE write output to FILE -v, --verbose verbose -n, --dry-run do not make any changes -i, --interactive prompt before overwriting --openpgp use strict OpenPGP behavior (See the man page for a complete listing of all commands and options) Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints Please report bugs to <http://bugs.gnupg.org>.
gpg (GnuPG) 2.0.22 libgcrypt 1.5.3 Copyright (C) 2013 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: ~/.gnupg サポートしているアルゴリズム: 公開鍵: RSA, ELG, DSA, ?, ? 暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 ハッシュ: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 圧縮: 無圧縮, ZIP, ZLIB, BZIP2 形式: gpg [オプション] [ファイル] 署名、検査、暗号化や復号 デフォルトの操作は、入力データに依存 コマンド: -s, --sign 署名を作成 --clearsign クリア・テクスト署名を作成 -b, --detach-sign 分離署名を作成 -e, --encrypt データを暗号化 -c, --symmetric 暗号化には共通鍵暗号方式のみを使用 -d, --decrypt データを復号 (デフォルト) --verify 署名を検証 -k, --list-keys 鍵の一覧 --list-sigs 鍵と署名の一覧 --check-sigs 鍵署名の検査と一覧 --fingerprint 鍵とフィンガー・プリントの一覧 -K, --list-secret-keys 秘密鍵の一覧 --gen-key 新しい鍵対を生成 --gen-revoke 失効証明書を生成 --delete-keys 公開鍵リングから鍵を削除 --delete-secret-keys 秘密鍵リングから鍵を削除 --sign-key 鍵に署名 --lsign-key 鍵へ内部的に署名 --edit-key 鍵への署名や編集 --passwd パスフレーズの変更 --export 鍵をエクスポートする --send-keys 鍵サーバに鍵をエクスポートする --recv-keys 鍵サーバから鍵をインポートする --search-keys 鍵サーバの鍵を検索する --refresh-keys 鍵サーバから鍵を全部更新する --import 鍵のインポート/マージ --card-status カード・ステイタスを表示 --card-edit カードのデータを変更 --change-pin カードのPINを変更 --update-trustdb 信用データベースを更新 --print-md メッセージ・ダイジェストを表示 --server サーバ・モードで実行 オプション: -a, --armor ASCII形式の外装を作成 -r, --recipient USER-ID USER-ID用に暗号化 -u, --local-user USER-ID 署名や復号にこのUSER-IDを使用 -z N 圧縮レベルをNに設定 (0は非圧縮) --textmode 正準テキスト・モードを使用 -o, --output FILE 出力をFILEに書き出す -v, --verbose 冗長 -n, --dry-run 無変更 -i, --interactive 上書き前に確認 --openpgp 厳密なOpenPGPの振舞を採用 (コマンドとオプション全部の一覧は、マニュアル・ページをご覧ください) 例: -se -r Bob [ファイル] ユーザBobへ署名と暗号化 --clearsign [ファイル] クリア・テクスト署名を作成 --detach-sign [ファイル] 分離署名を作成 --list-keys [名前] 鍵を表示 --fingerprint [名前] フィンガー・プリントを表示 バグは <http://bugs.gnupg.org> までご報告ください。
鍵の作成
% gpg --gen-key gpg (GnuPG) 2.0.22; Copyright (C) 2013 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) RSA と RSA (デフォルト) (2) DSA と Elgamal (3) DSA (署名のみ) (4) RSA (署名のみ) あなたの選択は? RSA 鍵は 1024 から 4096 ビットの長さで可能です。 鍵長は? (2048) 要求された鍵長は2048ビット 鍵の有効期限を指定してください。 0 = 鍵は無期限 <n> = 鍵は n 日間で期限切れ <n>w = 鍵は n 週間で期限切れ <n>m = 鍵は n か月間で期限切れ <n>y = 鍵は n 年間で期限切れ 鍵の有効期間は? (0) は無期限です これで正しいですか? (y/N) y GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。 本名: kaoru 電子メール・アドレス: foo@bar.com コメント: test 次のユーザIDを選択しました: "kaoru (test) <foo@bar.com>" 名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? o 秘密鍵を保護するためにパスフレーズがいります。 ┌─────────────────────────────────────────────────┐ │ このパスフレーズをもう一度入力してください │ │ │ │ パスフレーズ ___________________________________│ │ │ │ <OK> <Cancel> │ └─────────────────────────────────────────────────┘ たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、 ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、 乱数生成器に十分なエントロピーを供給する機会を与えることができます。 たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、 ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に 十分なエントロピーを供給する機会を与えることができます。 gpg: /home/kaoru/.gnupg/trustdb.gpg: 信用データベースができました gpg: 鍵EB939698を絶対的に信用するよう記録しました 公開鍵と秘密鍵を作成し、署名しました。 gpg: 信用データベースの検査 gpg: 「ギリギリの信用」3、「全面的信用」1、PGP信用モデル gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u pub 2048R/EB939698 2014-03-22 フィンガー・プリント = 2B77 8105 570A 1A16 3B6A 2969 1AFC 0BE7 EB93 9698 uid kaoru (test) <foo@bar.com> sub 2048R/436B4C25 2014-03-22
鍵の確認
秘密鍵
gpg --list-secret-keys
$ gpg --list-secret-keys /home/kaoru/.gnupg/secring.gpg ------------------------------- sec 2048R/EB939698 2014-03-22 uid kaoru (test) <foo@bar.com> ssb 2048R/436B4C25 2014-03-22
公開鍵
$ gpg --list-keys /home/kaoru/.gnupg/pubring.gpg ------------------------------- pub 2048R/EB939698 2014-03-22 uid kaoru (test) <foo@bar.com> sub 2048R/436B4C25 2014-03-22
公開鍵のエクスポート
公開鍵をエクスポートします。
$ gpg -o ./kaoru.pub --export kaoru $ ls kaoru.pub kaoru.pub $ file kaoru.pub kaoru.pub: GPG key public ring
秘密鍵のエクスポート
秘密鍵(プライベート鍵)をエクスポートするときは、以下のコマンドで行います。
$ gpg -o file.secret --export-secret-key kaoru
秘密鍵のインポート
$ gpg --import file.secret
公開鍵のインポート
user で kaoru の公開鍵 kaoru.pub をインポートします。
% gpg --import kaoru.pub gpg: directory `/home/user/.gnupg' created gpg: new configuration file `/home/user/.gnupg/gpg.conf' created gpg: WARNING: options in `/home/user/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/home/user/.gnupg/secring.gpg' created gpg: keyring `/home/user/.gnupg/pubring.gpg' created gpg: /home/user/.gnupg/trustdb.gpg: trustdb created gpg: key EB939698: public key "kaoru (test) <foo@bar.com>" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
データの暗号化
テスト用のファイルを用意します。
% echo 'clear text' > test.txt
使用する鍵を指定して実行します。 ユーザー userが kaoru の鍵を用いて、test.txtを暗号化します。test.txt.gpgというファイルが作成されます。
user@a1:~/tmp % gpg -e -r kaoru test.txt gpg: 436B4C25: There is no assurance this key belongs to the named user pub 2048R/436B4C25 2014-03-22 kaoru (test) <foo@bar.com> Primary key fingerprint: 2B77 8105 570A 1A16 3B6A 2969 1AFC 0BE7 EB93 9698 Subkey fingerprint: 7C0E 6415 97E8 747F D5B8 F394 F2C3 6406 436B 4C25 It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Use this key anyway? (y/N) y user@a1:~/tmp % ls -l total 12 -rw-r--r-- 1 user user 1178 Mar 22 19:18 kaoru.pub -rw-r--r-- 1 user user 11 Mar 22 19:21 test.txt -rw-r--r-- 1 user user 351 Mar 22 19:22 test.txt.gpg user@a1:~/tmp % file test.txt.gpg test.txt.gpg: data
データの復号化
復号化するときに、パスフレーズの入力画面が表示されます。 復号したデータの出力ファイルを -o オプションで指定します。出力ファイルを指定しない場合は、標準出力に表示されます。
$ gpg -r kaoru -d -o test.txt test.txt.gpg ここで、パスフレーズの入力のダイアログが表示されます。 gpg: 2048-ビットRSA鍵, ID 436B4C25, 日付2014-03-22に暗号化されました "kaoru (test) <foo@bar.com>" $ ls -l total 12 -rw-r--r-- 1 kaoru user 1178 3月 22 19:14 kaoru.pub -rw-r--r-- 1 kaoru user 11 3月 22 19:25 test.txt -rw-r--r-- 1 kaoru user 351 3月 22 19:24 test.txt.gpg $ cat test.txt clear text
鍵の削除
$ gpg --delete-keys keyname $ gpg --delete-secret-keys keyname
GnuPGを使ったデジタル署名ファイルの作り方
ファイルのデジタル署名の作成
ドキュメントのデジタル署名を作成するには、--signオプションを使用します。
% echo foobar > foo.txt % gpg --sign foo.txt
実行例は以下の通りです。
$ gpg --sign foo.txt 次のユーザの秘密鍵のロックを解除するには パスフレーズがいります:"kaoru (test) <foo@bar.com>" 2048ビットRSA鍵, ID 87ACBAF5作成日付は2014-04-28 $ file foo.txt.gpg foo.txt.gpg: data $ ls -l foo.txt.gpg foo.txt -rw-r--r-- 1 kaoru user 7 4月 28 19:24 foo.txt -rw-r--r-- 1 kaoru user 331 4月 28 23:28 foo.txt.gpg $ strings *.gpg foo.txtS^e foobar e>S] n#bb f@?/ c>-\/9^ 3G m
デジタル署名の検証
署名されたドキュメントの署名を検証するには、--verifyオプションを使用します。
% gpg --verify foo.txt.gpg
実行例は以下の通りです。
$ gpg --verify foo.txt.gpg gpg: 月 4/28 23:28:15 2014 JSTにRSA鍵ID 87ACBAF5で施された署名 gpg: "kaoru (test) <foo@bar.com>"からの正しい署名
署名されたファイルからのドキュメントの取り出し方法
署名されたファイルからオリジナルドキュメントを取り出すには、--decryptオプションを使用します。--outputオプションで、実際のファイルの内容を出力するファイルを指定できます。
$ gpg --output foo.txt --decrypt foo.txt.gpg
実行例は以下の通りです。
$ gpg --output foo.txt --decrypt foo.txt.gpg gpg: 月 4/28 23:19:45 2014 JSTにRSA鍵ID 87ACBAF5で施された署名 gpg: "kaoru (test) <foo@bar.com>"からの正しい署名 $ ls -l foo.txt -rw-r--r-- 1 kaworu user 7 4月 28 23:34 foo.txt $ cat foo.txt foobar
クリアテキストの署名の作成
--signオプションで作成したファイルは、バイナリ形式でした。 E-mail などで送るようなときに、ASCII形式の署名を作成する場合には、--clearsignなオプションを使用します。
$ gpg --output foo.sig --clearsign foo.txt
実行例は以下の通りです。
$ gpg --output foo.sig --clearsign foo.txt 次のユーザの秘密鍵のロックを解除するには パスフレーズがいります:"kaoru (test) <foo@bar.com>" 2048ビットRSA鍵, ID 87ACBAF5作成日付は2014-04-28 $ ls -l foo.sig -rw-r--r-- 1 kaworu user 542 4月 28 23:42 foo.sig $ file foo.sig foo.sig: ASCII text $ cat foo.sig -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 foobar -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQEcBAEBAgAGBQJTXmjHAAoJEADlMoqHrLr1E0wH/2nFPppjvIOMs4R63xzaP/El P6LOnvLzuartV/KU1Zdn5Ul+DW5sE4966CXBi6CZHLMSb5hF9Vx7hXDy6W5rQlp4 goP3YJ5b32ANGi2bVpFonN3N54z5GklXn7hqMxulM7hDWlvLu663Z/LhbVY+OFTS YXUHDay+ihscxmuqK1QyBpFVxUf2Jb64gV+4OE0OdTUB6tCn03280ZSVoylqCzJR YWxBfYDJZVxwjHllf12nbBlOhHTFNcZfhdTD9RD7W4k+sajoKiTIPkm0ULrqKd6E okZ0Z++h6O3vS4ROiyw1V79chRDsGxj9/IIkZ7WGpCdzSdA3nX2/nKKLrgcWN9o= =jiDy -----END PGP SIGNATURE-----
分離署名を作成する方法
デジタル署名をオリジナルファイルとは、分離された署名ファイルとして作成する場合には、 --detach-sign オプションを使用し、新しいファイルを作成できます。
foo.txt.asc というファイルが作成されます。
$ gpg --armor --detach-sig foo.txt 次のユーザの秘密鍵のロックを解除するには パスフレーズがいります:"kaoru (test) <foo@bar.com>" 2048ビットRSA鍵, ID 87ACBAF5作成日付は2014-04-28 $ ls -ls foo.txt.asc 4 -rw-r--r-- 1 kaworu user 488 4月 28 23:46 foo.txt.asc $ file foo.txt.asc foo.txt.asc: PGP signature $ cat foo.txt.asc -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) iQEcBAABAgAGBQJTXmnNAAoJEADlMoqHrLr1JQ0H/0Txxqb6+lBbyAk5qozFymud dJNF5k7ZZVzW7tM53VkNMK3kbV2KSUAbvoPpkaeg0aqO7qeUE4VPDC1j2qQmjBhH Z8cukXAmRyn2XEeHC07rQaQmosT7ChNQ9A2J7zsWtfbGtuKJpUFWEazkBLOsN7ul f453dHRLhLQ/TBg6MnVjHVa7nfA7wJVer/dv8SE5mwlia+nH0VwocKYGct/yKzM0 aaAxoRPYTIkQrJ1ZLh81JfNtck1iYce06aeSIRAdID4BMWZCeadp4bkcZo6LhAqf GlvCBpMLEeI+m2y4CEDoK6ixIRCq7fAjtDk+gA1caoItD+HS4499UmWH145Xv9o= =zDvO -----END PGP SIGNATURE-----
分離署名を検証する方法
$ gpg --verify foo.txt.asc foo.txt
実行例は以下の通りです。
$ gpg --verify foo.txt.asc foo.txt gpg: 月 4/28 23:46:37 2014 JSTにRSA鍵ID 87ACBAF5で施された署名 gpg: "kaoru (test) <foo@bar.com>"からの正しい署名
ドキュメントの暗号化と署名
暗号化と復号は、以下の通りです。
% gpg --sign --encrypt -r kaoru foo.txt % gpg --sign --decrypt -r kaoru foo.txt.gpg
FAQ
can't connect to the PIN entry module
pinentry-curses を入れてない場合、以下のエラーで gpg --gen-key が終了します。
gpg-agent[40930]: can't connect to the PIN entry module: IPCの接続コールに失敗しました gpg-agent[40930]: command get_passphrase failed: PIN 入力がありません gpg: エージェントに問題: PIN 入力がありません gpg: 鍵の生成が取り消されました。 [1] 40913 exit 2 gpg --gen-key
英語で表示される場合は、以下のエラーメッセージになります。
You need a Passphrase to protect your secret key. can't connect to `/home/user/.gnupg/S.gpg-agent': No such file or directory gpg-agent[3363]: directory `/home/user/.gnupg/private-keys-v1.d' created gpg-agent[3363]: command get_passphrase failed: Operation cancelled gpg: cancelled by user gpg: Key generation canceled.
can't connect to .gnupg/S.gpg-agent: No such file or directory
can't connect to `/home/user/.gnupg/S.gpg-agent': No such file or directory
手動で、gpg-agentを起動します。
gpg-agent --daemon --enable-ssh-support --write-env-file "${HOME}/.gnupg/agent.info"
.bashrc で設定する場合は、以下の通りです。
if [ -f "${HOME}/.gnupg/agent.info" ]; then . "${HOME}/.gnupg/agent.info" export GPG_AGENT_INFO export SSH_AUTH_SOCK export SSH_AGENT_PID fi GPG_TTY=$(tty) export GPG_TTY
gpg problem with the agent No pinentry
関連項目
- gpg-agent
- Gpg4win
- Pretty Good Privacy
- GNU Privacy Guard
- 公開鍵暗号
- デジタル署名
- 暗号
- gnupg
- gpg
- gpgsm
- gpgconf
- gpg-connect-agent
- pinentry-curses
ツイート