公開鍵を使ってみる

Linuxで公開鍵暗号を使う(残念ながらpgp.nic.ad.jpは2022/9/30でクローズしました)

GnuPGの 確認

Ubuntu環境では gnupgを以下のように確認してください

$ dpkg -l gnupg
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                     Version           Architecture      Description
+++-========================-=================-=================-=====================================================
ii  gnupg                    2.2.4-1ubuntu1.2  amd64             GNU privacy guard - a free PGP replacement

入っていなければインストールしてください

$ sudo apt-get install gnupg
鍵の生成

鍵を生成します

GnuPGは gpgで呼び出します。そして鍵の生成は generic-keyですから --gen-keyです

$ gpg --gen-key

このあと、質問に答えていくと鍵が生成されます。

鍵の種類:RSA and RSA
鍵長:4096
有効期限:2y
これでよろしいですか?:y

本名:hogesima hogeo
メールアドレス:hoge@hoge.co.jp
コメント:
終了:o

パスフレーズ:Hoge is hogeist. I can eat hoge.

プロンプトに戻り廃棄証明書ができれば終了です

gpg: key 102604C514411231 marked as ultimately trusted
gpg: directory '/home/hoge/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/home/hoge/.gnupg/openpgp-revocs.d/A0E5D4D13B32C15DA8729A49102703C524413238.rev'
gpg: 🍺 Successfully done
キーサーバーに公開鍵を登録します

ローカルに鍵を作っただけでは、だれも使ってくれませんので、公開鍵サーバーに登録します

日本の公開鍵サーバーは、 pgp.nic.ad.jp ですが、このコマンドでやっても遅くてうまくいきません。何回もやればいけると思いますが、このサーバーにアクセスして、公開鍵の登録でPGP公開鍵(ASCII-armor)を直接貼り付けるほうが速いです。

IDは作成したときに表示された keyです

gpg --keyserver pgp.nic.ad.jp --sendkeys 102604C514411231

あるいは以下のコマンドでascii armorを作成して貼り付けます

gpg --output 出力ファイル名 --export -a メールアドレス

私の登録してあるkeyを見てみましょう

http://pgp.nic.ad.jp/pgp/pks-commands-j.html

ここで hisanaga katsuo を do the search!で検索すると

Public Key Server -- Index ``hisanaga katsuo ''
Type bits /keyID    Date       User ID
pub  4096R/2F8CE0DE 2019/06/12 Hisanaga Katsuo <eternal@forever.co.jp>
pub  4096R/14413238 2019/06/12 Hisanaga Katsuo <eternalkagosima@gmail.com>
pub  2048R/EF08E932 2017/03/15 *** KEY REVOKED ***
                              katsuo hisanaga (it trainer) <eternalkagosima@gmail.com>
pub  1024D/EABB1372 2009/07/27 *** KEY REVOKED ***
                              katsuo hisanaga <eternal@msa.biglobe.ne.jp>
pub  1024D/29A44B0A 2000/06/20 *** KEY REVOKED ***
                              katsuo hisanaga <eternal@forever.co.jp>
                               katsuo hisanaga <eternal@forever.co.jp>
pub  1024D/C2D7BD6A 1998/08/25 *** KEY REVOKED ***
                              katsuo hisanaga <eternal@msa.biglobe.ne.jp>

REVOKEDは廃止したkeyです。古くなったものは廃止しましょう。

暗号を使ってみる

まず、送る相手の公開鍵を取得します。たとえば私の公開鍵を取得するには,公開鍵サーバーで私を検索して pub 4096R/14413238 のリンクをクリックすると表示される文字をコピーしてファイルに保存します。それをetfopub.ascとすると

gpg --import etfopub.asc

あるいは、直接サーバから検索を行います

gpg --keyserver pgp.nic.ad.jp --search-keys hisanaga
gpg: data source: http://pgp.nic.ad.jp:11371
(1)     Hisanaga Katsuo <eternal@forever.co.jp>
          4096 bit RSA key 2F8CE0DE, created: 2019-06-12
(2)     Hisanaga Katsuo <eternalkagosima@gmail.com>
          4096 bit RSA key 14413238, created: 2019-06-12
(3)     katsuo hisanaga (it trainer) <eternalkagosima@gmail.com>
          2048 bit RSA key EF08E932, created: 2017-03-15 (revoked)
(4)     katsuo hisanaga <eternal@msa.biglobe.ne.jp>
          1024 bit DSA key EABB1372, created: 2009-07-27 (revoked)
(5)     tomo_hisanaga <tomo0624@enterdrive.com>
          1024 bit DSA key 7BD0C22F, created: 2008-08-13
(6)     Hisanaga Tanaka <h-tanaka@core-s.co.jp>
          1024 bit DSA key ED2522FB, created: 2003-03-11
(7)     Hisanaga Tanaka <h-tanaka@core-s.co.jp>
          1024 bit DSA key 39D26524, created: 2003-03-11
(8)     Takeshi Hisanaga <pon00@k4.dion.ne.jp>
          1024 bit DSA key 8B5B8702, created: 2002-06-26
Enter number(s), N)ext, or Q)uit >2

インポートした公開鍵に信用を設定します

gpg --edit-key eternalkagosima@gmail.com
gpg> trust
Your decision? 5
Do you really ... (y/N) y
quit

では私あての暗号を作ってみましょう

echo "this is test" > hirabun.txt
gpg -o angou.txt -r eternalkagosima@gmail.com --encrypt -a hirabun.txt

こんな暗号ができあがります

-----BEGIN PGP MESSAGE-----

hQIMA/cfl63rbbccAQ//WAZy6Eca6vDcKw7roegcBHso3c+mRumZC82milXD5RSW
mCpglmrcGZSspeXcfmMNIreEWcysu0AO5L1Ymc5MMF19EnaicDBOMrQi20TahMAW
2S2hZgcajkAsPwsEIlf5YQphvU1UcnD99cGy5H5lsjOyxYTMXQMIuXfqLiJXVOz8
0ZwDA0W75sCMGubBhHvRyRnMz0MiqqQ5QyPSa5pR5+I61QSiSME+7qsuQ4OAeVsv
5DHRrSw46YdHiVlJhNoImw9tyCij0GB34Sq22oS1ejtEzC4HJ4kWGihoDGsotlw9
nHzpKr9llNQeSxYMQXIxkIgLkbViDpl9CGqxrn/XU6vDvCgR4d2MzMMQnfka0RXh
hiW3GiA4pLYNto9mKfHHx2P+71Nr1ybh5k/fiLyDG1LTudhfJs2ryXv/nYF0tFGb
muK/KuV8HZWynBHM6gW5ygLqpur4rBxW6NRFoodmO5eIxP4OBUM5Rrey3XIaIRMp
IA3u3tTEArUZti8i5//Nr04rWN2tUroT8e6GsY0N6qt326POwxqcXg/Rr1wJ5njh
rGlJ2POu7hKhQcDxFnMUF2E55FcgISrBkjY7QOh3d6S+ND4EcYs7O6hIe1fbUaY9
bD5TBUahsF2J4pxj62ajPl2MppLsRXpfvTEiA5xbpYgqd3u23t2m5WKpbx/FvKnS
UQEpBiqOYRpL5LL4rY60hU6M3pa+bU/dn7Ykv26QfKXzkkDn7A1jw6lDs+99Jgfi
nFOzI2sQMQH+5gqhKIrVMXWjoYvP8QxfoXsS581wyCiVFQ==
=qFf0
-----END PGP MESSAGE-----

では暗号を解いてみましょう

gpg angou.txt

ここでパスフレーズを聞かれるので入力してください

gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: encrypted with 4096-bit RSA key, ID F71F97ADEB6DB71C, created 2019-06-12
      "Hisanaga Katsuo "
gpg: angou.txt: unknown suffix
Enter new filename [hirabun.txt]: hirabun2.txt

hirabun.txtとhirabun2.txtは同じになりましたか?