概要
GPG (GNU Privacy Guard) は暗号化のソフトウェアです
データを渡す際にセキュリティを高めるためにあらかじめ GPG で暗号化してから渡したりします
今回は使い方を紹介します
環境
- Ubuntu 16.04 (A, B)
- gpg 1.4.20
キーの作成 (A)
gpg --gen-key
いろいろ聞かれます
ユーザ名やメールアドレスを入力する必要もあります
以下のような感じで作成しました
gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 2048R/0CEAD198 2018-08-21
uid hawksnowlog (admin) <hawksnowlog@gmail.com>
sub 2048R/B62F9EC7 2018-08-21
gpg --list-secret-keys
/root/.gnupg/secring.gpg
------------------------
sec 2048R/0CEAD198 2018-08-21
uid hawksnowlog (admin) <hawksnowlog@gmail.com>
ssb 2048R/B62F9EC7 2018-08-21
鍵を公開する (A)
gpg --send-keys 0CEAD198
gpg: sending key 0CEAD198 to hkp server keys.gnupg.net
公開された鍵を取得する (B)
別のサーバで行います
gpg --search-keys "hawksnowlog"
gpg: searching for "hawksnowlog" from hkp server keys.gnupg.net
(1) hawksnowlog (admin) <hawksnowlog@gmail.com>
2048 bit RSA key 0CEAD198, created: 2018-08-21
Keys 1-1 of 1 for "hawksnowlog". Enter number(s), N)ext, or Q)uit > 1
gpg: requesting key 0CEAD198 from hkp server keys.gnupg.net
gpg: key 0CEAD198: public key "hawksnowlog (admin) <hawksnowlog@gmail.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
検索できると思うので「1」を入力して取得します
(なぜかよくわからないのですがたまに検索できないときがあります、もしかするとサーバ間で鍵データを同期しているため同期が完了してないサーバに問い合わせているからかもしれません)
gpg --list-keys
で鍵が登録されているのが確認できると思います
暗号化する (B)
--search-keys
で鍵を登録したマシンで行います
暗号化は公開鍵で行い復号化は秘密鍵で行うためです
date > hoge.txt
gpg -e -r hawksnowlog hoge.txt
gpg: B62F9EC7: There is no assurance this key belongs to the named user
pub 2048R/B62F9EC7 2018-08-21 hawksnowlog (admin) <hawksnowlog@gmail.com>
Primary key fingerprint: D45E E561 7186 0F93 2D25 0830 76F0 0D80 0CEA D198
Subkey fingerprint: E67C 4DEA 45E3 19CB 8CC3 DE37 990C 2242 B62F 9EC7
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
hoge.txt.gpg が完成しています
- file hoge.txt.gpg
hoge.txt.gpg: PGP RSA encrypted session key - keyid: 42220C99 C79E2FB6 RSA (Encrypt or Sign) 2048b .
復号化してみる (A)
秘密鍵があるマシンで行います
先程の hoge.txt.gpg を scp なりメールなりクラウドストレージなりで秘密鍵のあるマシンに移動します
復号化します
- gpg hoge.txt.gpg
You need a passphrase to unlock the secret key for
user: "hawksnowlog (admin) <hawksnowlog@gmail.com>"
2048-bit RSA key, ID B62F9EC7, created 2018-08-21 (main key ID 0CEAD198)
gpg: gpg-agent is not available in this session
gpg: encrypted with 2048-bit RSA key, ID B62F9EC7, created 2018-08-21
"hawksnowlog (admin) <hawksnowlog@gmail.com>"
gpg --gen-keys
した際にパスレーズを設定している場合は複合する場合に必要になります
これで hoge.txt が復元できました
- cat hoge.txt
Tue Aug 21 16:30:50 JST 2018
最後に
GPG Key を使ってデータの暗号化と復号化を試してみました
用途としてはデータをリモートの誰かに渡す場合に通信経路が暗号化などされていない場合にファイル自体を暗号化してセキュリティを強化する感じかなと思います
IT リテラルを試すのに「GPG を xxx という名前で公開しているので暗号化してメールで送ってください」ってのも良いかもしれません
一番身近なところだと apt や yum のパッケージを暗号化して配布する場合でしょうか
データの受け渡しなどは最近はクラウドストレージがあるのでわざわざ GPG する必要もないかなと思っています
Tips
keys.gnupg.net に公開した鍵を削除する方法
厳密には失効 (revoke) させるだけ
gpg --output revoke.asc --gen-revoke 0CEAD198
gpg --import revoke.asc
gpg --keyserver keys.gnupg.net --send-keys 0CEAD198
で確認すると revoke 状態になっているはずです
gpg --search-keys hawksnowlog
gpg: searching for "hawksnowlog" from hkp server keys.gnupg.net
(1) hawksnowlog (admin) <hawksnowlog@gmail.com>
2048 bit RSA key 0CEAD198, created: 2018-08-21 (revoked)
トラブルシューティング
Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 294 more bytes)
が出る場合は以下を実行してください
apt -y install rng-tools
rngd -r /dev/urandom
0 件のコメント:
コメントを投稿