セッションキーとは

gnuPGはセッションキーというパスワードでファイルを共通鍵暗号化し、そのセッションキーを公開鍵暗号しています。本当はこのセッションキーを内緒にしておかないと公開鍵方式の根底がくずれます。
しかし、今回の用途ではgpgファイルを作成したとき(暗号化したとき)に公開鍵が登録されていない場合、対応する秘密鍵をもっていても復号できなくなってしまいます。つまりあとから登録したひとは過去のgpgファイルを利用できないことになってしまいます。
これを回避するために、セッションキーを公開することにしました。

  • 公開物
    • Sessionkeys.db.gpg
      Sessionkeys.dbを毎朝その時点で登録されている公開鍵で公開鍵暗号化したものです。
  • Sessionkeys.db
    Sessionkeys.dbはsqlite3のデータベースファイルで、テーブル構造は
           CREATE TABLE sKey (filename TEXT PRIMARY KEY,
                              sessionkey TEXT,
                              UNIQUE(filename) on conflict REPLACE);
    で作られています。 つまり、(gpgファイル名, セッションキー)の表です。
    テキストで充分ですが、それもちょっとと言うことで。
    (さぁ、今度はSQLだ。)

セッションキーがあればたとえばファイルAAA.gpgのセッションキー hogehoge を使って

gpg --override-session-key hogehoge AAA.gpg

で復号できるようになります。hogehogeを知っていれば公開/秘密鍵はいりません。 だれでも復号できます。

以上から、後から公開鍵を登録した人はSessionkeys.db.gpgを復号して、それから gpgファイルのセッションキーを得て復号すればいいことになります。
この作業を実現するサンプルプログラムをつくりました。参照してください。
またサンプルプログラムを利用しない手順の一例をセッションキーの取り出し方で簡単に説明してあります。


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-11-28 (土) 23:46:43 (3065d)