mac の環境構築のついでに、gpg について改めて機能を触ってみた。
git commit の署名や、 ssh 公開鍵認証の鍵作成などを行うための構築備忘録的な面もあります。
最終的にこんな感じの gpg 鍵構成を作る流れ。Certify 機能を持つ primary key は無期限、Encryption, Sign 機能を持つ sub key は 2y, Authenticate 機能を持つ sub key は 7m の有効期限で設定を行っていく。
$ gpg --list-keys shizurin23@example.com pub ed25519 2020-01-28 [C] BCE777404F713FA952E815E480DADDFCEB0686F9 uid [ultimate] Rin Shizuka <shizurin23@example.com> sub nistp521 2020-01-28 [A] [expires: 2022-01-27] sub ed25519 2020-01-28 [S] [expires: 2022-01-27] sub cv25519 2020-01-28 [E] [expires: 2022-01-27]
install
brew cask install gpg-suite brew install gnupg pinentry-mac brew link --overwrite gnupg
初期設定を行う。
# gpg鍵でsshするためのagentを有効にする echo "use-agent" >> ~/.gnupg/gpg.conf echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
bashrc や zshrc に、以下を追加
gpgconf --launch gpg-agent export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpg-agent の再起動を行う
gpgconf --kill gpg-agent gpgconf --launch gpg-agent
すべての親となる primary key を作成する
primary key を作成する。 --expert
をいれることで ECC が選択可能になる。
primary key の passphrase はよしなに設定しておく。
$ gpg --expert --full-gen-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. gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (9) ECC and ECC (10) ECC (sign only) (11) ECC (set your own capabilities) (13) Existing key Your selection? 11 Possible actions for a ECDSA/EdDSA key: Sign Certify Authenticate Current allowed actions: Sign Certify (S) Toggle the sign capability (A) Toggle the authenticate capability (Q) Finished Your selection? s Possible actions for a ECDSA/EdDSA key: Sign Certify Authenticate Current allowed actions: Certify (S) Toggle the sign capability (A) Toggle the authenticate capability (Q) Finished Your selection? q Please select which elliptic curve you want: (1) Curve 25519 (3) NIST P-256 (4) NIST P-384 (5) NIST P-521 (6) Brainpool P-256 (7) Brainpool P-384 (8) Brainpool P-512 (9) secp256k1 Your selection? 1 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) o invalid value Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Rin Shizuka Email address: shizurin23@example.com Comment: You selected this USER-ID: "Rin Shizuka <shizurin23@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key BBCD12A8D98F6026 marked as ultimately trusted gpg: directory '/root/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/BCE777404F713FA952E815E480DADDFCEB0686F9.rev' public and secret key created and signed. pub ed25519 2020-01-28 [C] BCE777404F713FA952E815E480DADDFCEB0686F9 uid Rin Shizuka <shizurin23@example.com>
鍵が生成されていることを確認する
$ gpg --list-keys shizurin23@example.com gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub ed25519 2020-01-28 [C] BCE777404F713FA952E815E480DADDFCEB0686F9 uid [ultimate] Rin Shizuka <shizurin23@example.com>
これで primary key の作成が完了。
Ahthenticate 機能を持った sub key を作成し、 sshで公開鍵認証を行う
ssh に使う鍵ペアは、 Authenticate 機能をもたせた sub key を作成することで可能。
「ecdsa-nistp-521 Authenticate の役割をもたせた鍵」を作成する。
- key edit モードにはいる
$ gpg --expert --edit-key BCE777404F713FA952E815E480DADDFCEB0686F9 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. Secret key is available. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate [ultimate] (1). Rin Shizuka <shizurin23@example.com>
- 作成する鍵の選択
gpg> addkey Please select what kind of key you want: (3) DSA (sign only) (4) RSA (sign only) (5) Elgamal (encrypt only) (6) RSA (encrypt only) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key Your selection? 11
- ECDSA/EdDSA は
Sign
,Authenticate
機能が利用できる。 今回は ssh 認証に使いたいので、 Authenticate のみにする。
Possible actions for a ECDSA/EdDSA key: Sign Authenticate Current allowed actions: Sign (S) Toggle the sign capability (A) Toggle the authenticate capability (Q) Finished Your selection? a Possible actions for a ECDSA/EdDSA key: Sign Authenticate Current allowed actions: Sign Authenticate (S) Toggle the sign capability (A) Toggle the authenticate capability (Q) Finished Your selection? s Possible actions for a ECDSA/EdDSA key: Sign Authenticate Current allowed actions: Authenticate (S) Toggle the sign capability (A) Toggle the authenticate capability (Q) Finished Your selection? q
- 鍵の形式を指定する
Please select which elliptic curve you want: (1) Curve 25519 (3) NIST P-256 (4) NIST P-384 (5) NIST P-521 (6) Brainpool P-256 (7) Brainpool P-384 (8) Brainpool P-512 (9) secp256k1 Your selection? 5
- sub key の有効期限を設定する
Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 2y Key expires at Thu Jan 27 18:33:38 2022 UTC Is this correct? (y/N) y
- これまでの設定が問題なければ作成を実行する
Really create? (y/N) y We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate ssb nistp521/4BC1F64437BE6BD5 created: 2020-01-28 expires: 2022-01-27 usage: A [ultimate] (1). Rin Shizuka <shizurin23@example.com>
- gpg モードを quit し、変更を保存する。
gpg> q Save changes? (y/N) y
次に、 gpg の ssh-agent に、作成した Authenticate sub key を登録する。
登録には、Authenticate 鍵の keygrip が必要になるので確認する。
$ gpg --list-keys --with-keygrip shizurin23@example.com pub ed25519 2020-01-28 [C] BCE777404F713FA952E815E480DADDFCEB0686F9 Keygrip = 276B3448CCAE96B33922DB5B75A7C2B92FFF2C83 uid [ultimate] Rin Shizuka <shizurin23@example.com> sub nistp521 2020-01-28 [A] [expires: 2022-01-27] Keygrip = 947448229941BD2B46B5005DCA053516DE29A9C5
上記例だと、 [A] となっている鍵の keygrip AE16965BACE315E2C6676DDAEB77C2010688317C
が対象。
これを、 ~/.gnupg/sshcontrol に追加する。複数鍵を登録する場合は改行で1行づつ。
echo 947448229941BD2B46B5005DCA053516DE29A9C5 >> ~/.gnupg/sshcontrol
SSH_AUTH_SOCK 先を gpg の sock に向ける
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
ssh-add -L
にて公開鍵が表示されれば OK となる。 github などにはここで表示される鍵を登録する。
$ ssh-add -L ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYT<snip> (none)
これで作業は完了。
Sign 機能を持った sub key を作成し、署名、検証を行う
gpg はファイルに対して署名を行うことができる。そのためには、 Sign 機能を持った key を作成する必要がある。
edit モードにはいる
$ gpg --expert --edit-key BCE777404F713FA952E815E480DADDFCEB0686F9 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. Secret key is available. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate ssb nistp521/4BC1F64437BE6BD5 created: 2020-01-28 expires: 2022-01-27 usage: A [ultimate] (1). Rin Shizuka <shizurin23@example.com>
今回は、 ed25519 で Sign 機能を持った sub key を作成する。
gpg> addkey Please select what kind of key you want: (3) DSA (sign only) (4) RSA (sign only) (5) Elgamal (encrypt only) (6) RSA (encrypt only) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key Your selection? 10 Please select which elliptic curve you want: (1) Curve 25519 (3) NIST P-256 (4) NIST P-384 (5) NIST P-521 (6) Brainpool P-256 (7) Brainpool P-384 (8) Brainpool P-512 (9) secp256k1 Your selection? 1 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 2y Key expires at Thu Jan 27 18:45:54 2022 UTC Is this correct? (y/N) y Really create? (y/N) y We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate ssb nistp521/4BC1F64437BE6BD5 created: 2020-01-28 expires: 2022-01-27 usage: A ssb ed25519/D7798612E7AD96C2 created: 2020-01-28 expires: 2022-01-27 usage: S [ultimate] (1). Rin Shizuka <shizurin23@example.com> gpg> q Save changes? (y/N) y
署名を行ってみる
署名するには、 --sign
, —clearsign
, --detach-sign
の 3 種類のコマンドを用いる事ができる。
--sign
は、file.gpg
というバイナリ形式のファイルを出力する。—armor(-a)
を付加すると、file.asc
として ASCII 形式で出力される。後述する—clearsign
で出力される内容とは違い、ファイル内容は圧縮されているため閲覧できない。
--clearsign
は、file.asc
という ASCII 形式のファイルを出力する。ファイルの中身は圧縮されないのでそのまま閲覧が可能。--detach-sign(-b)
は、 元ファイルとは別に、file.sig
という署名情報のみが格納されたファイルを出力する。ファイルの中身を維持したまま署名したい場合はこちら。
—sign
で署名する
$ date |tee sign-test.txt Tue Jan 28 18:46:50 UTC 2020 $ gpg --sign sign-test.txt $ ls sign-test* sign-test.txt sign-test.txt.gpg $ file sign-test.txt.gpg sign-test.txt.gpg: data
ASCII 形式で --sign
で署名する
$ gpg -a --sign sign-test.txt $ cat sign-test.txt.asc -----BEGIN PGP MESSAGE----- owGbwMvMwCF2vbJN6PnaaYcY1xgk8RZnpufplqQWl+iVVJTEGTRuCylNVfBKzFMw slAwtLAyMbMyNVAIDXFWMDIwMuDqKGVhEONgkBVTZNE/HdTDtoHRZYKMjgnMRFYm kAkMXJwCMJHWZYwM/wK2JTbt4+decmDtce6dGzpZXt96OKFVLOdz/4eEbtnb6xkZ FnqcWJs8+b7V+XncfqVC/tyPriXFXKmdt0ijzWvj95+RbAA= =V3mK -----END PGP MESSAGE-----
--clearsign
で署名する
$ gpg --clearsign sign-test.txt File 'sign-test.txt.asc' exists. Overwrite? (y/N) y $ cat sign-test.txt.asc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Tue Jan 28 18:46:50 UTC 2020 -----BEGIN PGP SIGNATURE----- iHUEARYIAB0WIQQvy1KMBrABRJAcLDTXeYYS562WwgUCXjCBxwAKCRDXeYYS562W wl9yAQDTgsNAJeYwcz+ic/q27nV10cy/Fc60Tkj6lSt9Q/7YWgD/cHfrb/sxHtks wusK0q34tRdSP6opeELce392h6Dytw8= =EMcs -----END PGP SIGNATURE-----
--detach-sign
で署名する
$ gpg --detach-sign sign-test.txt $ ls sign-test* sign-test.txt sign-test.txt.asc sign-test.txt.gpg sign-test.txt.sig $ file sign-test.txt.sig sign-test.txt.sig: data
署名されたファイルを検証する
検証をするには、 --verify
コマンドを用いる。
署名では様々な形式でファイル出力が行えたが、 検証はどの形式のファイルでも上記コマンドで行える。
$ gpg --verify sign-test.txt.gpg gpg: Signature made Tue Jan 28 18:46:57 2020 UTC gpg: using EDDSA key 2FCB528C06B00144901C2C34D7798612E7AD96C2 gpg: Good signature from "Rin Shizuka <shizurin23@example.com>" [ultimate]
$ gpg --verify sign-test.txt.asc gpg: Signature made Tue Jan 28 18:47:35 2020 UTC gpg: using EDDSA key 2FCB528C06B00144901C2C34D7798612E7AD96C2 gpg: Good signature from "Rin Shizuka <shizurin23@example.com>" [ultimate] gpg: WARNING: not a detached signature; file 'sign-test.txt' was NOT verified!
$ gpg --verify sign-test.txt.sig gpg: assuming signed data in 'sign-test.txt' gpg: Signature made Tue Jan 28 18:47:50 2020 UTC gpg: using EDDSA key 2FCB528C06B00144901C2C34D7798612E7AD96C2 gpg: Good signature from "Rin Shizuka <shizurin23@example.com>" [ultimate]
git commit に 署名する
上記セクションで行った署名は、git 側で sign の設定を行えば、 git commit
でも行える。
署名に使う subkey の primary key の id を取得する。
$ gpg --list-keys shizurin23@example.com pub ed25519 2020-01-28 [C] BCE777404F713FA952E815E480DADDFCEB0686F9 uid [ultimate] Rin Shizuka <shizurin23@example.com> sub nistp521 2020-01-28 [A] [expires: 2022-01-27] sub ed25519 2020-01-28 [S] [expires: 2022-01-27]
上記例では BCE777404F713FA952E815E480DADDFCEB0686F9
を設定する。
テスト用に、以下のように、git config の設定をしておく。
git init git config --local --add user.name "Rin Shizuka" git config --local --add user.email "shizurin23@example.com" git config --local --add gpg.program gpg git config --local --add commit.gpgsign true git config --local --add user.signingkey BCE777404F713FA952E815E480DADDFCEB0686F9 echo "hello GPG" > README.md git add README.md git commit -S -m "Add README.md"
git commit 時に、passphrase が求められるので入力して、問題なければコミットが完了する。
$ git log --show-signature commit d717c5508c21213bed10a89d0775e35f3e5a71b4 (HEAD -> master) gpg: Signature made Tue Jan 28 18:51:33 2020 UTC gpg: using EDDSA key 2FCB528C06B00144901C2C34D7798612E7AD96C2 gpg: Good signature from "Rin Shizuka <shizurin23@example.com>" [ultimate] Author: Rin Shizuka <shizurin23@example.com> Date: Tue Jan 28 18:51:33 2020 +0000 Add README.md
GitHub 上に、 作成した GPG Public key を登録する
gpg の Public key は primary key, sub key まとめて一つの Public key となる。
鍵構成を保持するため、鍵が更新されたら Public key の更新が必要になる。
$ gpg --export --armor shizurin23@example.com -----BEGIN PGP PUBLIC KEY BLOCK----- mDMEXjCA1BYJKwYBBAHaRw8BAQdAhthaF6aNT+C4lFx7cyTwL7Qh8JQpE0m8TLie Eq6ocTm0JFJpbiBTaGl6dWthIDxzaGl6dXJpbjIzQGV4YW1wbGUuY29tPoiQBBMW CAA4FiEEvOd3QE9xP6lS6BXkgNrd/OsGhvkFAl4wgNQCGwEFCwkIBwIGFQoJCAsC BBYCAwECHgECF4AACgkQgNrd/OsGhvnp3AD8CKvlA4RbIHrGnwsgn5h0kZO6Ph9C f/bq/D2EdX42gJkBAI+1Cv9LYZC5sYaB16ttWr7a6ovlIMw1s8s/SXXbgD8PuJME XjCBEhMFK4EEACMEIwQAlE7aRKgHzVcLM4sNgAeOBHd4tCGfguQspXVzWz21K0W6 FLdEuA4oXo2VoQ8j1d447uIJi6UhDH9UJt5m3/eDfbsAfP0NxWw7V7LNpnoIqiIM KBQLMJS0iJ5EcpNLqkSLz+mDV/f0sgcY4wqulsE88+uc81bBYyfDyLdsTvgfxaU5 1A+IfgQYFggAJhYhBLznd0BPcT+pUugV5IDa3fzrBob5BQJeMIESAhsgBQkDwmcA AAoJEIDa3fzrBob5vAYA/2KvjRA3QON0KPUs/2xrAfzvlvX+QTswVUams2Mpu7L7 AQC60bUeIrQP+UoYKdJCq1iYSkaysje8K4Bt5+GY6RAiCLgzBF4wgV0WCSsGAQQB 2kcPAQEHQJe6w55CGzx+LYvt5lr5QQsEdXj3xyM1jETws5RbYi0aiPUEGBYIACYW IQS853dAT3E/qVLoFeSA2t386waG+QUCXjCBXQIbAgUJA8JnAACBCRCA2t386waG +XYgBBkWCAAdFiEEL8tSjAawAUSQHCw013mGEuetlsIFAl4wgV0ACgkQ13mGEuet lsJFPQEAvUlI73UqCkd2Kp0a8gh72P8cbVHRBZh7XZpAoaYbu44A/1ZW8gI6iVPo VT961dr1Vx2FFdG3V24wh4msvBdORoAP9KABAME9MkmcNe8D4C+dhu9a9UGcb/oc ivqmB8UfY//j8Kk8AQDWDpFA3K/ngA01cgHsdTeL+/WPCjk9fw/XWN8/RRmVAg== =8AGY -----END PGP PUBLIC KEY BLOCK-----
上記 Public key を GitHub 上に登録する。
https://github.endpoint/settings/keys より登録する。
Encryption 機能を持った sub key を作成し、ファイルの暗号化、復号化を行う
ファイルの暗号化、復号化を行うための sub key を作成する。
(Encryption 機能を持った key が存在しない場合、以下のようなエラーになる。)
$ gpg -e -r shizurin23@example.com README.md gpg: error retrieving 'shizurin23@example.com' via Local: Unusable public key gpg: error retrieving 'shizurin23@example.com' via WKD: No data gpg: shizurin23@example.com: skipped: No data gpg: README.md: encryption failed: No data
まず edit mode
$ gpg --expert --edit-key BCE777404F713FA952E815E480DADDFCEB0686F9 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. Secret key is available. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate ssb nistp521/4BC1F64437BE6BD5 created: 2020-01-28 expires: 2022-01-27 usage: A ssb ed25519/D7798612E7AD96C2 created: 2020-01-28 expires: 2022-01-27 usage: S [ultimate] (1). Rin Shizuka <shizurin23@example.com> gpg>
今回は、 cv25519、 expire 2y で sub key を作成する。
gpg> addkey Please select what kind of key you want: (3) DSA (sign only) (4) RSA (sign only) (5) Elgamal (encrypt only) (6) RSA (encrypt only) (7) DSA (set your own capabilities) (8) RSA (set your own capabilities) (10) ECC (sign only) (11) ECC (set your own capabilities) (12) ECC (encrypt only) (13) Existing key Your selection? 12 Please select which elliptic curve you want: (1) Curve 25519 (3) NIST P-256 (4) NIST P-384 (5) NIST P-521 (6) Brainpool P-256 (7) Brainpool P-384 (8) Brainpool P-512 (9) secp256k1 Your selection? 1 Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 2y Key expires at Thu Jan 27 18:53:34 2022 UTC Is this correct? (y/N) y Really create? (y/N) y We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. sec ed25519/80DADDFCEB0686F9 created: 2020-01-28 expires: never usage: C trust: ultimate validity: ultimate ssb nistp521/4BC1F64437BE6BD5 created: 2020-01-28 expires: 2022-01-27 usage: A ssb ed25519/D7798612E7AD96C2 created: 2020-01-28 expires: 2022-01-27 usage: S ssb cv25519/2764E6162F7EE1C0 created: 2020-01-28 expires: 2022-01-27 usage: E [ultimate] (1). Rin Shizuka <shizurin23@example.com> gpg> q Save changes? (y/N) y
作成自体は終了。
暗号化と復号化を試してみる
ここでは、暗号化したファイルのやり取りについては触れず、単純に暗号化、復号化のみに着目する。
暗号化する場合、 gpg —encrypt(-e)
で暗号化を行う。 復号化できる相手を指定するのは —recipient(-r)
オプションが必要。自分自身を指定すると自分だけが復号化できる。
出力される .gpg ファイルはバイナリとなっている。ASCII 形式で暗号化されたファイルを出力したい場合は、 --armor(-a)
を指定する。
以下例は、 自分のみ復号化できる暗号化されたファイルの作成。
ダミーデータを作成し、暗号化を行う。 -a
を設定していないので、 バイナリで出力される。
$ date | tee test.txt Tue Jan 28 18:54:39 UTC 2020 $ gpg -e -r shizurin23@example.com test.txt $ rm -f test.txt $ ls test* test.txt.gpg $ file test.txt.gpg test.txt.gpg: data
暗号化されたファイルを復号化する。 復号化は、 gpg コマンドの第一引数に暗号化されたファイルを指定する。問題なく復号化が完了した場合、 .gpg
や .asc
拡張子が除かれたファイル名で出力される。
$ gpg test.txt.gpg gpg: WARNING: no command supplied. Trying to guess what you mean ... gpg: encrypted with 256-bit ECDH key, ID 2764E6162F7EE1C0, created 2020-01-28 "Rin Shizuka <shizurin23@example.com>" $ ls test* test.txt test.txt.gpg $ cat test.txt Tue Jan 28 18:54:39 UTC 2020
さいごに
git commit の Sign や ssh の Authenticate などで軽く gpg は使っていましたが、「そもそも Sign はどういうことができるのか」「パッケージマネージャー等でどのように署名が使われているのか」など深く知ることができたと思います。 また、Encryption は初めて触りましたが、比較的容易に暗号化・復号化が行えて、よいなーとなりました。