情報通信研究機構(NICT)が開発した「LOTUS」(ロータス)

ノイズを入れた情報を相手に渡す

 LOTUSは、格子暗号という暗号技術の実装の一つだ。どうして「格子」と呼ぶのか、イメージをしやすいように2次元の格子暗号を例に説明しよう(実際の格子暗号の実装には複数の方法があり、ここではイメージしやすいGGH方式を示した)。

 2次元の格子暗号では、互いに直交する二つの矢印(ベクトル)で空間を表現する(図で示したa1とa2)。直交とは、矢印が直角に交わっているという意味だ。3次元なら三つ、n次元ならn個の矢印で表現する。空間とは、図内にある黒丸(格子)のこと。これらの格子はすべて、整数倍した矢印の組み合わせで表現できる。この基になる二つの矢印を、格子暗号では秘密鍵とする。この秘密鍵が漏洩しない限り、暗号文は解読されないことになっている。
格子暗号では、直交する矢印(ベクトル)を秘密鍵に、秘密鍵から作られる直交しない矢印を公開鍵に使う
f:id:nonbei:20180209053826j:plain

 格子暗号の公開鍵、つまり暗号文を作る相手に渡すデータは、直交しない二つの矢印を使う。このとき、二つの矢印は同じ方向または逆方向にしない。そうすれば、これら二つの矢印を使って、秘密鍵である二つの矢印を表現できる。ただし、2次元の例のように次元が低いと公開鍵から秘密鍵を求めるのは簡単だが、次元数が高くなると困難になる。これが、格子暗号で公開鍵から秘密鍵を導き出せない根拠になっている。

 公開鍵を受け取った相手が情報(平文)を暗号化するときは、まず公開鍵を使って情報を変換する。例えば「-1、2」という数字の組み合わせを送る場合は、公開鍵を使って「-1×b1+2×b2」と計算する。さらに変換後、わずかなノイズを加えた点を暗号文とする(図で示した茶色の点)。わずかなノイズとは、ノイズを加えた点に1番近い格子点が、変換後の格子点と一致するほど小さいことを示す。この暗号文を相手に送る。
格子暗号の暗号文は公開鍵を使って変換した後にノイズを入れる
f:id:nonbei:20180209053859j:plain

 暗号文を受け取った相手は、秘密鍵である直交した矢印を使って暗号文の最寄りの格子点を探し出す。格子点が見つかれば、送信元と逆の変換を実行して平文を取り出せる。

 一方、相手が秘密鍵を持っていなければ、最寄りの格子点を探すのは困難である。これを「格子点探索問題」という。これを利用しているのが格子暗号なのだ。

 格子暗号が「量子コンピュータでも解読できない」というのは、格子点探索問題を解ける量子コンピュータアルゴリズムが存在しない、という意味だ。量子コンピュータで格子点探索問題を解けるアルゴリズムが見つかれば、格子暗号を使ったLOTUSも危険ということになる。また格子暗号を通常のコンピュータで解読する試みも進んでおり、九州大学KDDI研究所は共同で2016年10月、60次元の格子暗号を約16日で解読した、と発表している。

 NISTによる次世代暗号の標準化プロジェクトは始まったばかりで、決定までに数年を要する見込みだ。LOTUSは、単に量子コンピュータに強い格子暗号を使っただけでなく、暗号文を復号する際、暗号文の破損をチェックするなど、独自の機能を追加して使いやすくしている。国産の技術に決まるのか、わくわくしながら見守っていきたい。


ソ−ス:ニュース解説 - 次世代国産暗号、量子コンピュータの弱点を突く:ITpro