勉強日記

チラ裏

LPIC あずき本v5.0 ch12 セキュリティ 12.4


GnuPGによる暗号化

  • GnuPG: GNU Privacy Guard
    • 公開鍵暗号を使って...
    • PGP: Pretty Good Privacy互換
      • 米国の暗号化ソフトウェア
      • IETF: Interfet Engineering Task ForceによりRFCとしてまとめられた
      • GnuPGRFCの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