GnuPGの応用:タイムカプセル

タイムカプセルとは未来人に向けて保存されたカプセルのことですが、これと似たようなことを暗号で実現することができます。移り変わりの大きい世の中ですから、100年や1000年の単位で考えるのは技術的に難しいかもしれませんが、3年や5年、または10年ぐらいであれば充分使用できます。(OpenPGP自体が定義された規格であるため、たとえGnuPGの開発が10年後に継続されていなくとも、他のソフトにより処理することは可能かと思います。)

もっともシンプルなタイムカプセル

一番シンプルな方法は、あるデータを圧縮し、それを関係者を受信者として暗号化し、データをどこかに置いておく、という手です。シンプルですが、暗号化データを持っている限り、途中でファイルを開封することができてしまいますから、タイムカプセルとしての機能を果たすことができません。しかし、データをどこかに保存し、開封日に取り出すという方法では、データの破損や紛失なども考えられます。

対称暗号と公開鍵暗号の組み合わせ

公開鍵暗号だけでこれを行う以外の方法としては、対称暗号と公開鍵暗号を組み合わせる方法です。これにより対称暗号の内容を複数人で分散して共有することにより、一人では開けられなくする方法です。 まず、データ自体を対称暗号で暗号化し、パスフレーズとして比較的長い、乱数的な組み合わせのものを生成します。 ここでは40文字のパスフレーズを選択したとします。
E56ty1751qQG1D4YA30uE34I5924g3572S495tDS
仮に参加する関係者を4人と仮定します。この場合、シンプルな方法では20文字のパスワードをそれぞれ10文字ずつ保持することが考えられますが、実際には以下のように分けます。
これらをそれぞれの人の公開鍵で暗号化します。復号化を行う場合はそれぞれの自分の秘密鍵で復号化し、結果を組み合わせることになります。この場合、暗号化を復号化には最低2人、場合によっては3人要することになります。さらに人数が多いと、復号化を行うのにさらなる人数が必要となります。単純に分けて10文字ずつ保持する場合、一人でもいなくなってしまうとパスフレーズを選択できなくなってしまいます。人数がさらに多い場合はその強度とこの冗長性のバランスをどのようにパスフレーズを分散するかによって調整することが可能です。重要な点はそれぞれのパスフレーズがどの部分のものであるか、を明記しておくことです。これがないとパスフレーズがどの部分のものなのかがわからなくなってしまいます。

また、この方法で有益なのはデータ自体はそれぞれの関係者が持っていても問題がないということです。あらかじめ必要な人数が結託しない限りは一人では復号化することができなくなります。そのため、データ自体が紛失してしまうリスクを比較的軽減することができます。


GNU Privacy Guard講座