Time Capsule Encryption

2007/9/2 タイムカプセル暗号クライアント ver. 3.0を追加
タイムカプセル暗号
概略
タイムカプセル暗号とは, 暗号化されたコンテンツを受け取った人(復号する人)が, 指定された時刻になって, 署名つき時報を受け取ることで復号できる暗号化方式です.
コンテンツを暗号化した人は, 自分が決めた復号してよい時刻まで暗号化鍵を管理せずにすむのが最大の特長です. また, 暗号化をする人と復号する人との間で鍵をやりとりする必要もありません.

クライアントソフト ver. 2.10 for Win [2007/9/2]
Windows Xp, Pentium 4用クライアントソフトを公開します.

tc-bin.20070902.zip [binary for Windows download]
tc-src.20070902.zip [source for Windows/Linux download]

2006/5/30 Norton AntiVirusでエラーになるのを修正
2006/6/10 公開鍵のフォーマット変更
2007/9/2 Visual C++ 2005 Express Edition(VC8)対応

ライセンス
エンジンの一部であるペアリングライブラリは 「平成15年度未踏ソフトウェア創造事業」 における成果物を利用しています. ソースは修正BSDライセンスです. 詳細はreadme.txtを参照してください.

解説
登場人物は次の三人です: 次の特長を持っています: イメージ図です: 概略図
資料
詳細は 「タイムカプセル暗号って何?」初公開時のpdfファイルを参照してください.

サンプルアプリ[古いバージョン]
サンプルアプリは上記ソースをコンパイルすると得られます.
使い方:
注:未だに本来|p|+1ビットですむE(Fp2)の表現を10進文字列x2と無駄に大きい表現をしています. → [2006/6/10:無駄な表現を無くしました]
理論
以下のやり方はタイムカプセル暗号の実装の一つです[2006/6/10:内容を実装に合わせました].
詳細は吉田真紀さん電子情報通信学会研究会ISEC(12月)やICISC2005などで発表されたものを参照してください.

(G1, +), (G2, ×) をそれぞれ離散対数問題が困難な群とし,

e : G1 × G1 → G2

をペアリング写像 (e(nP, Q) = e(P, nQ) が成り立つ) とします.
実装パラメータ
G1 として E[m], G2 として Fp2 を利用しました. ただし, それぞれのパラメータは
p+1 = 2^512 - 2^384 + 2^160 - 2^128 - 2^64
    = m × 2 ^ 64 × 4083347321136877
      × 626211632945787132711495483863 
      × 296090721933842419838212125193885104528533

m = 960010107982557278263008018855396039340009821353
    (about 160bits)
を意味します. 楕円曲線は, 座標系, およびdistorsion写像としては
E : y^2 = 4x^3 - 12x
Jacobi coordinate x = X/Z^2, y = Y/Z^3
e : E[m] × E[m] → F_(p^2)

distorsion map E[m] : (x, y) → (-x, iy) 
                                          (i^2 = -1)
を利用しました.
コンテンツ自体の暗号化にはRijndael暗号を利用しています. ソースファイルはVincent Rijmenさんたちのものを利用しています. 彼らに感謝します.
履歴
2004/9/9 初版
2004/9/10 注釈追加
2004/10/6 Linux版ソース追加
2005/5/20 「タイムカプセル暗号って何?」を追加
2006/5/26 タイムカプセル暗号クライアントを追加
2006/5/27 タイムカプセル暗号エンジンソースアップデート
2006/6/10 タイムカプセル暗号クライアント更新
2007/9/2 タイムカプセル暗号エンジンコード整理

御意見は光成滋生<herumi@nifty.com>までお願いします