セッションキーとは †
gnuPGはセッションキーというパスワードでファイルを共通鍵暗号化し、そのセッションキーを公開鍵暗号しています。本当はこのセッションキーを内緒にしておかないと公開鍵方式の根底がくずれます。
しかし、今回の用途ではgpgファイルを作成したとき(暗号化したとき)に公開鍵が登録されていない場合、対応する秘密鍵をもっていても復号できなくなってしまいます。つまりあとから登録したひとは過去のgpgファイルを利用できないことになってしまいます。
これを回避するために、セッションキーを公開することにしました。
- 公開物
- Sessionkeys.db.gpg
Sessionkeys.dbを毎朝その時点で登録されている公開鍵で公開鍵暗号化したものです。
セッションキーがあればたとえばファイルAAA.gpgのセッションキー hogehoge を使って
gpg --override-session-key hogehoge AAA.gpg
で復号できるようになります。hogehogeを知っていれば公開/秘密鍵はいりません。
だれでも復号できます。
以上から、後から公開鍵を登録した人はSessionkeys.db.gpgを復号して、それから
gpgファイルのセッションキーを得て復号すればいいことになります。
この作業を実現するサンプルプログラムをつくりました。参照してください。
またサンプルプログラムを利用しない手順の一例をセッションキーの取り出し方で簡単に説明してあります。