イマッチの暗号特集 -7ページ目

イマッチの暗号特集

情報セキュリティについてまとめている管理人イマッチのブログです。暗号の専門家になるために奮闘しています。

日本語で「関数型暗号」についてGoogle検索してもなかなか出てくれません(泣)

という愚痴はさておき,関数型暗号(functional encryption)は公開鍵暗号系で,公開鍵と秘密鍵にパラメータを与えて,パラメータの対応関係ができたときかつそのときに限り,復号できるという方式です.

従来の公開鍵暗号系だと公開鍵と秘密鍵の対応が1対1であったのに対して,この関数型暗号だと公開鍵1つに対して,秘密鍵の対応をパラメータを変えて複数個作ることができます.

これはどういうことでしょうか?

例えばこういったものを考えて見ましょう.

AさんはBさん,Cさん,Dさんの3人に情報を送りたいです.
Bさんと,Cさんには情報を見せたいが,Dさんには見せたくない.
でも,そうすると暗号文が2つ必要になってデータが2倍になってしまう.
しかも,公開鍵と秘密鍵を1回1回作らなければならず,鍵の管理の手間もかかる.
鍵を配送するときにリスクが伴う.

従来の暗号系だと暗号文をその都度作らなければなりません.

関数型暗号ではパラメータを変えて秘密鍵を作ることができるので,暗号文が1つで済みます.
データの転送時間も暗号文1回分の時間で済みます.
BさんとCさんには情報を見せたいがDさんには見せたくないというようなパラメータを設定して秘密鍵を作れば,Dさんだけは復号できない暗号文が出来上がります.

インターネットでは,データが大きくなるとその分転送時間がかかるので,こういった暗号方式は重要でしょう.

インターネット家庭教師Netty

参考資料
日産エレクトロニクス「復号化できる鍵の条件を自由に設定できる画期的な暗号が登場」、今年も暗号の第一人者が最新技術をレクチャー
Amit Sahai, Brent Waters:Fuzzy Identity-Based Encryption. EUROCRYPT 2005: 457-473
Dan Boneh, Amit Sahai, Brent Waters: Functional Encryption: Definitions and Challenges. TCC 2011: 253-273

暗号化デバイスも最近は小型化してきて,なおかつ消費電力を減らそうという考えになってきています.
回路を小さくしても安全性をできる限り落とさないことが必要です.

軽量暗号は,AESの128ビットよりも小さいブロック長,例えば,32ビットや64ビットの環境で動かします.
それによって,総当たり探索に対する耐性は必然と低くはなります.
しかし,特定の環境ではあまり問題にならないように設計していることが多いです.

なぜ暗号を小さくしたほうがよいのでしょうか?

スマートフォンの普及もありますが,最近のトレンドでは自動車のセキュリティにも大きくかかわっています.
あとはリアルタイムで処理する必要な環境もあります.

そういったところではAESの速度や消費電力ですら致命的になる場合もあります.

とにかく小さく設計することで,遅延とか消費電力を極力抑えていきます.

~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp

RSA-Paillier暗号の続きです.

今度はRSA-Paillier暗号の安全性についてお話ししましょう.
RSA-Paillier暗号は選択平文攻撃に対しては識別できないという意味で安全(IND-CPA安全)です.

まずは,Z*_N という集合を自然数 N とは互いに素である数の集合とします.
つまり計算式で書くと
Z*_N = { x ∈ Z_N | gcd(x, N) = 1 }
となります.

このような集合を用意します.

X = { (N, e, y) | y = R^e mod N^2, R ∈ Z*_N }
Y = { (N, e, y) | y = R^e mod N^2, R ∈ Z*_(N^2)}

この集合 X と Y が効率よく見分けられないとき,RSA-Paillier暗号は選択平文攻撃に対して効率よく見分けることができないということを証明してみましょう.

集合 X と Y は違いがないように見えますが,乱数 R の選び方が mod N か mod N^2 かでどう影響するのでしょうか?

普通に証明することもできますがそれでは難しいので,対偶を考えてみましょう.

RSA-Paillier暗号が選択平文攻撃に対して効率よく見分けられるとき,集合 X と Y は効率よく見分けられると.

A:RSA-Paillier暗号のIND-CPA安全を破る敵
B:集合 X と Y を識別する敵
としましょう.
つまりBさんはAさんの力を借りて,何としてでも集合 X と Y を見分けてやろうということです.

1. BさんはRSA-Paillier暗号の公開鍵 (N, e) をAさんに教えます.
2. AさんがBさんに平文 M0 と M1 を教えます.
3. Bさんは M0 か M1 のどちらかを無作為に選んで,その暗号文 C = y (1 + Mb × N) mod N^2 (b = 0 または b = 1)を作って,Aさんに送ります.
4. Aさんは識別して判定結果 d をBさんに教えます.
5. Bさんは (b = d) だったら1を,そうでなければ0を最終結果として出力します.

このとき,(b = d) となる確率が1/2よりも大きく離れていればBさんの勝ちです.

X と Y に違いはどこに現れるのでしょうか?さて見ていきましょう.

(N, e, y) ∈ X のとき
y = R^e mod N であり,乱数 R は mod N から選ばれているので,暗号文 C = y (1 + Mb × N) mod N^2 はRSA-Paillier暗号の正しい暗号文です.
よって,(b = d) となる確率は 1/2 + ε (ε:大きな数)より大きい確率です.

(N, e, y) ∈ Y のとき
乱数 R は mod N^2 から選ばれているので,暗号文 C は完全な乱数になってしまいます.
よって, (b = d) となる確率は 1/2 です.

よって,Bさんの識別利得は
1/2 + ε - 1/2 = ε
より大きくなるので,Aさんの力を借りてBさんは集合 X と Y を見分けることに成功したと言えます.
(証明終わり)

2人の共同作業の結果ですね(笑).

対偶が証明されたのでもとの命題も証明されたことになります.

mod N から選ばれるか mod N^2 から選ばれるかで,最終結果に差が生じるというところが大きなポイントです.

インターネット家庭教師Netty