Linuxで公開鍵暗号を使う(残念ながらpgp.nic.ad.jpは2022/9/30でクローズしました)
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は同じになりましたか?