#author("2023-02-03T21:09:40+09:00","","") #author("2023-02-03T21:11:19+09:00","","") #topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#contents] #contents(); /////////////////////////////////////////////////////////////////////////////// * GnuPG [#gnupg] //============================================================================= ** 鍵の生成 [#create-key] $ gpg --gen-key gpg (GnuPG) 1.4.10; Copyright (C) 2008 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 and RSA (default) (2) DSA and Elgamal (3) DSA (署名のみ) (4) RSA (署名のみ) 選択は? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 要求された鍵長は2048ビット 鍵の有効期限を指定してください。 0 = 鍵は無期限 <n> = 鍵は n 日間で満了 <n>w = 鍵は n 週間で満了 <n>m = 鍵は n か月間で満了 <n>y = 鍵は n 年間で満了 鍵の有効期間は? (0)0 Key does not expire at all これで正しいですか? (y/N) y あなたの鍵を同定するためにユーザーIDが必要です。 このソフトは本名、コメント、電子メール・アドレスから 次の書式でユーザーIDを構成します: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" 本名: (名前を入力) 電子メール・アドレス: (メールアドレスを入力) コメント: 次のユーザーIDを選択しました: “名前 <メールアドレス>” 名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O 秘密鍵を保護するためにパスフレーズがいります。 パスフレーズを入力: パスフレーズを再入力: 今から長い乱数を生成します。キーボードを打つとか、マウスを動かす とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で 乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。 (他の作業をする) 十分な長さの乱数が得られません。OSがもっと乱雑さを収集 できるよう、何かしてください! (あと172バイトいります) (更に他の作業をする) dsa.....+++++ .........+++++ 今から長い乱数を生成します。キーボードを打つとか、マウスを動かす とか、ディスクにアクセスするとかの他のことをすると、乱数生成子で 乱雑さの大きないい乱数を生成しやすくなるので、お勧めいたします。 十分な長さの乱数が得られません。OSがもっと乱雑さを収集 できるよう、何かしてください! (あと71バイトいります) (更に他の作業をする) 十分な長さの乱数が得られません。OSがもっと乱雑さを収集 できるよう、何かしてください! (あと119バイトいります) (更に他の作業をする) dsa...+++++ gpg: 鍵***を絶対的に信用するよう記録しました 公開鍵と秘密鍵を作成し、署名しました。 gpg: 信用データベースの検査 gpg: 最小の「ある程度の信用」3、最小の「全面的信用」1、PGP信用モデル gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u (以下生成結果・略) $ //============================================================================= ** 秘密鍵 [#secret-key] - 秘密鍵のexport $ gpg -o sec.key -a --export-secret-key user@example.com -- "-a" オプションを付けるとASCII、なければバイナリで出力される - 秘密鍵のimport $ gpg --import --allow-secret-key-import sec.key - 秘密鍵の削除 $ gpg --delete-secret-keys user@example.com -- 秘密鍵は、公開鍵に先んじて削除しておく必要がある - 鍵束(キーのリスト)の表示 $ gpg --list-secret-key //============================================================================= ** 公開鍵 [#public-key] - 公開鍵の export $ gpg -o pub.key -a --export user@example.com -- "-a" オプションを付けるとASCII、なければバイナリで出力される - 公開鍵の import $ gpg --import pub.key - 公開鍵の削除 $ gpg --delete-key user@example.com -- 秘密鍵は、公開鍵に先んじて削除しておく必要がある - 鍵束(キーのリスト)の表示 $ gpg --list-keys //============================================================================= ** 公開鍵の失効証明書 [#revoke-key] - パスフレーズを忘れた・漏洩したという場合に備えて、失効証明書は予め作成しておいたほうが良い - 失効証明書の発行 $ gpg -o user.revoke --gen-revoke user@example.com -- -o で指定したファイル名(上記例では user.revoke)にテキストとして保存される。 -- 途中で幾つか質問に答える場面がある。 次のユーザーの秘密鍵のロックを解除するには パスフレーズがいります:“user@example.com" と訊かれたら、パスフレーズを入力する。ここでは失効証明書の発行のためにロックを解除するだけで、その場で暗号鍵や公開鍵が失効するわけではない。 -- 生成した失効証明書は、他人に見られる心配のないところに保管しておく(専用のUSBメモリに入れてしまっておくなど) - 失効証明書を使った鍵の無効化 $ gpg --import <失効証明書ファイル名> - キーサーバに UP している場合は、それも失効させる必要がある → [[キーサーバに UP した公開鍵を失効させる>#revoke-key-on-public-key-server]] //============================================================================= ** 暗号化と復号 [#crypt-decrypt] - ファイルを暗号化するには、渡す相手の公開鍵を先に入手し、importする。 - receive-user@example.com のユーザに渡す target-file を暗号化する $ gpg -a -r receive-user@example.com -e target-file - 自分(user@example.com)の公開鍵を使って暗号化されたファイル(encripted-file)を受け取り、公開鍵と対になる自分の秘密鍵で復号化する $ gpg -d encrypted-file //============================================================================= ** 署名と検証 [#vaf4bf27] - 自分(user@example.com)の秘密鍵で、clearsign-file に署名する。 $ gpg -u user@example.com --clearsign target-file -- 署名されたファイルが、元のファイル名.asc というファイル名で出力される。 - 受け取った人(receive-user@example.com)が、送り主(user@example.com)から受け取った署名入りファイル(signed-file)を、送り主の公開鍵で検証する $ gpg -d target-file.asc //============================================================================= ** ファイルの暗号化 [#ra90a887] - <file> を <user_id> の鍵で暗号化する場合は $ gpg -e -r <user_id> <file> -- <user_id> は、例えば<file>をあとで人に渡す場合は、相手の公開鍵のIDを指定する。 //============================================================================= ** 信用度の設定 [#trust] - 公開鍵を取り込んでも、そのままでは「信頼されていない」になる。明らかに信用出来る相手である場合などに、適切に信用度を設定する。 - 信用度には、1(知らない)から5(絶対的に信用する)の5段階がある。 - 設定 $ gpg --edit-key <key-ID> (指定したキーの現在の状態などが表示される) gpg> trust (キーの情報を表示) 他のユーザーの鍵を正しく検証するために、このユーザーの信用度を決めてください (パスポートを見せてもらったり、他から得た指紋を検査したり、などなど) 1 = 知らない、または何とも言えない 2 = 信用し ない 3 = ある程度信用する 4 = 完全に信用する 5 = 絶対的に信用する m = メーン・メニューに戻る あなたの決定は? 5 # <= 5を選択 本当にこの鍵を絶対的に信用しますか? (y/N) y (キーの情報を表示) プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、 ということを念頭においてください。 gpg> save //============================================================================= ** 副鍵の更新 [#a6ae3866] /////////////////////////////////////////////////////////////////////////////// * 副鍵の更新 [#a6ae3866] + gpg --edit-key を実行する $ gpg --edit-key user@example.com gpg (GnuPG) 2.2.27; Copyright (C) 2021 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. 秘密鍵が利用できます。 sec rsa2048/D1514C891F120A2C 作成: 2018-05-01 有効期限: 無期限 利用法: SC 信用: 究極 有効性: 究極 ssb rsa2048/F6F0FAD94EA4AE03 作成: 2018-05-01 有効期限: 無期限 利用法: E [ 究極 ] (1). User Name <user@example.com> + 副鍵を選択する為、 key 1 を type する(すると、下記のように ssb に ''*'' が付く) gpg> key 1 sec rsa2048/D15148891F120A2C 作成: 2018-05-01 有効期限: 無期限 利用法: SC 信用: 究極 有効性: 究極 ssb* rsa2048/F6F07AD94EA4AE03 作成: 2018-05-01 有効期限: 無期限 利用法: E [ 究極 ] (1). User Name <user@example.com> gpg> + この後は、主鍵と同様の操作で副鍵の更新を行うことが出来る。 /////////////////////////////////////////////////////////////////////////////// * 鍵の削除 [#u090b1a5] + 削除するキーの ID を確認する $ gpg --list-keys pub rsa2048 2018-05-01 [SC] [有効期限: 2072-11-21] A7140500C0F8F52503D62770B4A3D5A542333C02 uid [ 信用度 ] Example User <user@example.com> + ID を指定して削除 $ gpg --delete-keys user@example.com /////////////////////////////////////////////////////////////////////////////// * 鍵の有効期限の更新 [#k78787ed] //============================================================================= ** 有効期限の更新をする [#de943eae] + gpg を更新対象のキーID を指定して起動 $ gpg --edit-key <key-ID> gpg (GnuPG) 2.1.18; 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. gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 10 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 10u gpg: next trustdb check due at 2022-07-23 sec rsa****/**************** created: <created-date> expires: 2022-07-23 usage: SC trust: ultimate validity: ultimate ssb rsa****/**************** created: <created-date> expired: <expired-date> usage: E [ultimate] (1). <user-name> <<key-ID>> ~ + expire (失効日)を指定するコマンドを実行し、プロンプトで期限を選択する gpg> expire Changing expiration time for the primary 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) ~ + 確認されるので、OK なら "y" [return] をタイプ。 Key expires at 2022年07月23日 12時47分39秒 JST Is this correct? (y/N) y sec rsa****/**************** created: <created-date> expires: 2022-07-23 usage: SC trust: ultimate validity: ultimate ssb rsa****/**************** created: <created-date> expired: <expired-date> usage: E [ultimate] (1). <user-name> <<key-ID>> gpg: WARNING: Your encryption subkey expires soon. gpg: You may want to change its expiration date too. ~ + ここまで問題なければ、 "q" [retuen], "y" [return] をタイプして終了。 gpg> q Save changes? (y/N) y $ //============================================================================= ** 有効期限更新後 [#c66636e8] - 公開鍵を生成し、差し替えを行う -- 公開鍵をどこかに登録している場合は、有効期限を更新した後生成し直した公開鍵に置き換える。 /////////////////////////////////////////////////////////////////////////////// * 鍵の公開 [#q249a67a] //============================================================================= ** キーサーバへのUP [#r7a33520] - 自分のキーを、キーサーバ subkeys.pgp.net で公開する: $ gpg --keyserver hkp://subkeys.pgp.net --send-keys <自分の Key-ID> ** キーサーバに UP した公開鍵を失効させる [#revoke-key-on-public-key-server] - 公開鍵をキーサーバに UP している場合は、これも失効させる必要がある。 - subkeys.pgp.net に UP している公開鍵を失効させる $ gpg --keyserver subkeys.pgp.net --send-keys <自分の Key-ID> //============================================================================= ** おまけ(自前サーバで公開鍵を公開する場合) [#zcfc761d] - GPG公開鍵用の MIME-Typeがある。サーバが既に拡張子を指定しているならその拡張子を使うのがよいと思われるが、そうでない場合は .htaccess で設定する。 - 下記は、公開パスを "~/public_html/public_keys"、公開鍵の拡張子を ".pubkey" とした場合の例。拡張子の "."(ピリオド) は必要ない。 $ vi ~/public_html/public_keys/.htaccess # Add MIME-Types AddType application/pgp-keys pubkey - ただ、公開鍵をASCII形式ファイルにしている場合は、「なにもここまでしなくても・・・」という話もある。 /////////////////////////////////////////////////////////////////////////////// * 参考文献 [#links] - [[Debian リファレンス 第 14 章 - GnuPG>http://qref.sourceforge.net/quick/ch-gnupg.ja.html]] - [[gnupg-3>http://www.math.s.chiba-u.ac.jp/~matsu/gpg/gpg-3.html]] - [[GnuPGの公開鍵を無効化するには>http://www.atmarkit.co.jp/flinux/rensai/linuxtips/793revokepubky.html]]