最近テレビ(やラジオ?)などの放送のデジタル化が進んでいます.
こういったデジタル放送ではコンテンツの保護が一つのポイントとなります.
保護のためにはコンテンツを暗号化することが必要なのですが,
その際に必要な鍵の不正利用を無くすにはどうすればよいのか?
という観点から考えられました.
鍵の不正利用を減らす(残念ながら無くすとは言えない)一つの方式を提案しました.
これは
- 一つの暗号化鍵に対して, 復号鍵を複数個作成できる.
- 復号鍵を作ることができるのは暗号化鍵を作った人のみである.
- 各復号鍵には好きな情報(約160bit)を埋め込むことができる.
- 暗号化鍵を知らない人は復号鍵をいくつ集めても暗号化鍵を逆算することはできない.
- 復号鍵は約320bitでRSAなどに比べて小さい.
という性質を持っています. この性質を利用すれば
- コンテンツ配信者はコンテンツを暗号化して配信する.
- 契約したユーザごとにユーザの名前や口座番号などの情報を埋め込んだ復号鍵を渡す.
- 各ユーザはその鍵を用いてコンテンツを視聴する.
とした場合, 復号鍵を不特定多数に漏洩されにくくなります.
例えばシリアルキーを考えた場合, これが不用意にコピーされるのは誰が漏洩したのかが分からないからです.
鍵に自分の名前や住所が入っていればそういうことは減るでしょう.
また何人かで復号鍵を集めて暗号化鍵を見破ろうとしても, それができないことが保証されているのもポイントです.
既存の方式では上限があったり, 鍵サイズが人数に比例して増えるという問題点がありました.
ただし開発中に, 依然として鍵を見破ることはできないのだけれども, 別の理由から欠点があることが分かりました.
それを完全に解消できるか否かは今後の研究課題です.
現在の実装ではその欠点がでないように作っていますが安全性が保証されたわけではありません.
上記内容を実現するために以下のものを作成しました.
- Pentium4 SSE2を利用した512bit〜1024bit多倍長演算ルーチン
- C++テンプレートを利用した楕円曲線上の演算ルーチン
- 本方式のキーポイントとなるTate pairing演算ルーチン
- 効率のよい楕円曲線のパラメータを見つけるためのツール
1.はアセンブリ言語で記述されていますが,
それ以外はVisual Studio .NET2003やgcc 3.3(on Linux, Mac)
といったコンパイラでコンパイル&実行できます.
全てスクラッチからの実装です. 2.は1.とは独立であり,
例えば
GMPを下位の多倍長演算ルーチンとして利用することも可能です.
あと
- これらを利用した簡単なWindows用サンプル
- 暗号化されたコンテンツをWindows Media Playerで再生できるdirectShow filter
も作成しました.
私が発表したときはそうではなかったのですが, ここ最近"pairing"はブームになっているようです.
などなど. 上記実装技術はこれらのネタにも使えるはずです.