開発NOTE
暗号のさらなる高機能化と
安全性の両立の追求。
それが開発の基本です。
2013年の「秘匿検索基盤ソフトウェア」発表後に「安全性が高く安心だが、完全一致だけでなく、もっと柔軟に検索したい」といった声を多くいただきました。そういった要望に応えるために部分一致検索機能の開発を始めました。まず考えたのは暗号化された登録データと検索キーワードそれぞれをひと文字ずつ分けて照合する方法です。しかし文字をバラバラにすれば、安全性が損なわれると私たちは考えました。
例えばアルファベットは26文字しかありません。悪意ある誰かがバラバラになった暗号を集め、文法や文字の出現頻度などで「この暗号はa、この暗号はe」というように、解析される危険性があります。より安全に部分一致を実現するには文字を完全に分けず、文字同士の関係性を維持したまま検索する必要がありました。その答えが「文字位置」も暗号化し、隣同士の文字をくっつけておくという方法です。
データの保護のみの用途であれば、データを暗号化すれば高い安全性を保障できます。しかし暗号化したまま検索などの情報処理ができるような暗号技術は、通常の暗号の使い方では現れなかった危険性が生じ得ます。私たちセキュリティー研究者が一番苦労することは、暗号化したまま情報処理ができる新しい暗号技術が、本当に安全であることを示すことです。暗号の利便性を高めることで、どのような攻撃が新たに考えられるのか、どのような理由で情報が漏れるのかについて、ごく小さな可能性も見逃さずに解析しなくてはなりません。考えられるどのような状況にも耐え得る高い安全性を持つ方式を設計するとともに、本当にその耐性を持つか数学的に証明しなくてはなりません。
「文字位置」もデータの属性だと気づいたとき、解決策が見えてきました。
今回、最も頭を悩ませたのは、暗号文をひと文字ずつずらす方法です。今回はクラウドで「文字位置」を示す数値に対して何か演算をすることで、「文字位置」の情報を更新し、元は1文字目であった文字を3文字目へ、といったようにずらすことを考えていました。その演算は検索キーワードの中身の文字を知らずともできる必要があり、尚且つずらす方法が外部にわからないようにしなければなりません。もしその内容が第三者にわかれば情報が漏れる恐れがあるからです。
本来、暗号文は自由に動かせないものです。そこにずらすという性質を持たせたうえで、しかも数学的に安全性を証明しなければならないのです。解決のヒントになったのは、以前に研究していた「関数型暗号」の暗号文に埋め込む属性や条件式を復号することなく、書き換える技術です。「この文字は先頭から何文字目」ということも、データの属性のひとつだと気づいたのです。「関数型暗号」の優れた数学的特性と今まで続けてきた議論が、解決の道を開いてくれたと言えます。