GnuPGによる暗号化
-
GnuPG: GNU Privacy Guard
-
公開鍵暗号を使って…
- ファイルを暗号化/復号
- 電子署名
-
PGP: Pretty Good Privacy互換
- 米国の暗号化ソフトウェア
- IETF: Interfet Engineering Task ForceによりRFCとしてまとめられた
- GnuPGはRFCの1実装
-
鍵ペアの作成と失効証明書の作成
gpg
コマンド
...
--full-generate-key 全機能の鍵ペアを生成
gpg --full-generate-key
gpg (GnuPG) 2.2.4; Copyright (C) 2017 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 ビットの長さで可能です。
鍵長は? (3072) 3072
要求された鍵長は3072ビット
鍵の有効期限を指定してください。
0 = 鍵は無期限
<n> = 鍵は n 日間で期限切れ
<n>w = 鍵は n 週間で期限切れ
<n>m = 鍵は n か月間で期限切れ
<n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0) 1y
鍵は2020年04月15日 21時25分15秒 JSTで期限切れとなります
これで正しいですか? (y/N) y
GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。
本名: wand
名前は5文字以上でなければなりません
本名: wand_ta
電子メール・アドレス: c19911106@gmail.com
コメント: lpic_practice
次のユーザIDを選択しました:
"wand_ta (lpic_practice) <c19911106@gmail.com>"
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? o
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵B61C8D5F06349BE2を究極的に信用するよう記録しました
gpg: ディレクトリ'/home/wand/.gnupg/openpgp-revocs.d'が作成されました
gpg: 失効証明書を '/home/wand/.gnupg/openpgp-revocs.d/B048232B6FEB84FEFBFD8BE5B61C8D5F06349BE2.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。
pub rsa3072 2019-04-16 [SC] [有効期限: 2020-04-15]
B048232B6FEB84FEFBFD8BE5B61C8D5F06349BE2
uid wand_ta (lpic_practice) <c19911106@gmail.com>
sub rsa3072 2019-04-16 [E] [有効期限: 2020-04-15]
~/.gnupg/
ディレクトリできる
ls ~/.gnupg
dirmngr.conf openpgp-revocs.d pubring.kbx trustdb.gpg
gpg.conf private-keys-v1.d pubring.kbx~
- 作成された鍵を確認
gpg --list-keys
gpg: 信用データベースの検査
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 次回の信用データベース検査は、2020-04-15です
/home/wand/.gnupg/pubring.kbx
-----------------------------
pub rsa3072 2019-04-16 [SC] [有効期限: 2020-04-15]
B048232B6FEB84FEFBFD8BE5B61C8D5F06349BE2
uid [ 究極 ] wand_ta (lpic_practice) <c19911106@gmail.com>
sub rsa3072 2019-04-16 [E] [有効期限: 2020-04-15]
-
失効証明書
-
鍵を無効化するのに使用する
- パスフレーズが漏れた
- パスフレーズを忘れた
-
gpg -o revoke.asc --gen-revoke c19911106@gmail.com
sec rsa3072/B61C8D5F06349BE2 2019-04-16 wand_ta (lpic_practice) <c19911106@gmail.com>
この鍵に対する失効証明書を作成しますか? (y/N) y
失効の理由を選択してください:
0 = 理由は指定されていません
1 = 鍵(の信頼性)が損なわれています
2 = 鍵がとりかわっています
3 = 鍵はもはや使われていません
Q = キャンセル
(ここではたぶん1を選びたいでしょう)
あなたの決定は? 3
予備の説明を入力。空行で終了:
>
失効理由: 鍵はもはや使われていません
(説明はありません)
よろしいですか? (y/N) y
ASCII外装出力を強制します。
失効証明書を作成しました。
みつからないように隠せるような媒体に移してください。もし_悪者_がこの証明書への
アクセスを得ると、あなたの鍵を使えなくすることができます。
媒体が読出し不能になった場合に備えて、この証明書を印刷して保管するのが賢明です。
しかし、ご注意ください。あなたのマシンの印字システムは、他の人がアクセスできる
場所にデータをおくことがあります!
file revoke.asc
revoke.asc: PGP public key block Signature (old)
- 作成者以外閲覧・変更不能
ls -l revoke.asc
-rw------- 1 wand wand 719 2019-04-16 21:34 revoke.asc
cat revoke.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: This is a revocation certificate
iQG2BCABCgAgFiEEsEgjK2/rhP77/YvlthyNXwY0m+IFAly1y7QCHQMACgkQthyN...
- 作成した失効証明書(revoke.asc)は安全な場所に保存する
- 鍵を盗まれたりしたら:
gpg --import revoke.asc
共通鍵を使ったファイルの暗号化
-c, --symmetric 暗号化には共通鍵暗号方式のみを使用
- 共通鍵で暗号化
gpg -c hoge.txt
<パスフレーズを2回入力>
ls hoge.txt*
hoge.txt hoge.txt.gpg
- 復号
-d, --decrypt データを復号 (デフォルト)
gpg --decrypt hoge.txt.gpg # 標準出力
# gpg hoge.txt.gpg # オプションなしだとhoge.txtに出力
gpg: AES256暗号化済みデータ
gpg: 1 個のパスフレーズで暗号化
公開鍵を使ったファイルの暗号化
公開鍵のエクスポート
- 鍵つくる
gpg --full-generate-key
- 鍵エクスポート
-o, --output FILE 出力をFILEに書き出す
-a, --armor ASCII形式の外装を作成
--export 鍵をエクスポートする
gpg -o pubkey -a --export c19911106@gmail.com
file pubkey
pubkey: PGP public key block Public-Key (old)
公開鍵のインポート
- インポート
gpg --import pubkey
- 一覧
gpg --list-keys
gpg: 信用データベースの検査
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u
gpg: 次回の信用データベース検査は、2019-04-23です
/home/wand/.gnupg/pubring.kbx
-----------------------------
pub rsa3072 2019-04-16 [SC] [失効: 2019-04-16]
B048232B6FEB84FEFBFD8BE5B61C8D5F06349BE2
uid [ 失効 ] wand_ta (lpic_practice) <c19911106@gmail.com>
pub rsa3072 2019-04-16 [SC] [有効期限: 2019-04-23]
8B70A04135500322EF461A8A6DA70A2C20DF4EC0
uid [ 究極 ] wand_ta <c19911106@gmail.com>
sub rsa3072 2019-04-16 [E] [有効期限: 2019-04-23]
-
署名する
- 受け取った鍵を信頼する
--sign-key 鍵に署名
gpg --sign-key c19911106@gmail.com
-
受取人の鍵で署名する
- 署名は誰でもできてはいけないので秘密鍵をつかう
- 秘密鍵を使うのでパスフレーズを打ち込む
ファイルの暗号化
-e, --encrypt データを暗号化
-a, --armor ASCII形式の外装を作成
-r, --recipient USER-ID USER-ID用に暗号化
gpg -e -a -r c19911106@gmail.com hoge.txt
- c19911106@gmail.comの公開鍵で暗号化
hoge.txt.asc
ができる
hoge.txt.asc: PGP message Public-Key Encrypted Session Key (old)
ファイルの復号
gpg --decrypt hoge.txt.asc # 標準出力
# gpg hoge.txt.asc # オプションなしだとhoge.txtに出力
ファイルの署名
-s, --sign 署名を作成
- 署名作成
gpg -o sample.sig --sign hoge.txt
- 署名検証
--verify 署名を検証
gpg --verify sample.sig
gpg: 2019年04月16日 22時13分15秒 JSTに施された署名
gpg: RSA鍵8B70A04135500322EF461A8A6DA70A2C20DF4EC0を使用
gpg: "wand_ta <c19911106@gmail.com>"からの正しい署名 [究極]
コラム: gpg-agent
ssh-agent
よろしく、パスフレーズをキャッシュするやつ