はじめに
みなさんこんにちは。
VIPPOOL でエンジニアをやっています、星月です。
さて、前回予告した通り、今回は GSW の論文の解説をします。
前回は完全準同型暗号とはどういうものなのか解説しました。
そして、GSW はその完全準同型暗号の手法の1つとして 2013 年に提案された論文です。
こちらは高校数学レベルの線形代数(行列・ベクトル)の知識があれば理解できますので、
先に高校数学レベルの行列とベクトルの要点だけおさらいしておきましょう。
GSW の仕組みのカギとなる、固有値と固有ベクトルの性質について簡単にまとめます。
大変申し訳ないのですが、基本的な定義や計算などについては高校数学についての
参考書的なサイトがいくつもありますので、そちらも参考にしてみてください。
固有値と固有ベクトル
行列 とベクトル と実数 があるとき、
が成り立つ を固有ベクトル、 を固有値と呼びます。
要するに、固有ベクトル を行列 で線形変換した時、
元のベクトル の長さが 倍になって、方向は変わらない。ということです。
行列 を主体で考えると、 による線形変換で、
向きが変わらずに長さだけ変わる方向が、固有ベクトルで、
その拡大率が固有値。と言い換えることもできます。
ここで注目したいのは、共通の固有ベクトル を持つ行列 と があり、
それぞれの固有値を 、 としたとき、
が成り立つため、行列 の固有ベクトルは のまま変わらず、固有値は和になります。
と計算できるため、行列 の固有ベクトルも のまま変わらず、固有値は積になります。
共通の固有ベクトルを持つ行列が2つあると、
その積も和も、固有ベクトルは変化せず、固有値は積や和になります。
勘のいい方はこの辺で、どうやって完全準同型にするのか、
想像がつくのではないでしょうか。
LWE 問題
さて、完全準同型「暗号」というからには、暗号文から平文に戻すのが
難しくなければなりません。
このままでは、暗号文である行列から固有値固有ベクトルを計算するのは容易です。
そこで出てくるのが LWE 問題(Learning With Errors Problem)です。
まず、 個の変数でできた一次方程式が、特定の条件で 個あれば連立方程式として解けます。
個の連立方程式を行列の形で と書き直して
( は 正方行列、, は 次元ベクトル)、
を求めることができれば(これが「特定の条件」)、 で解けます。
では、ここに変数を1つ加えましょう。
( も 次元ベクトル)。
これだけで、 を知らない人にとっては を求めることはできなくなります。
この は小さい値で十分です。要するに誤差成分ですね。連立方程式に誤差を加えた問題。
これを LWE 問題と呼びます。この問題は量子コンピュータを使っても解けません。
つまり量子耐性がある問題なのです。
秘密の情報を知らないと解けない問題。これは暗号に使えますね。
というわけで、これを応用するのが LWE 暗号です。
GSW の原型を組み立てる
行列を暗号文、固有値を平文、固有ベクトルを秘密鍵とする考え方をそのままに、
元の式、 に誤差成分を足します。 と。
この が存在することによって、 からは も も、求められなくなります。
復号するには、 から好きな行を取り出して、秘密鍵 との内積を取ります。
そして、 の同じ行の要素で割ります。すると得られるのが 。
が復号で得たい平文なので、平文λは常に整数だという制約を加えた上で、
の部分が -0.5~0.5 の間に収まっていれば
を四捨五入することで平文 が得られます。
の要素が小さすぎると、 から固有値固有ベクトルの近似値が求まってしまうので、
ある程度 の要素を大きくして、 を小さいままに を大きくする必要があります。
まとめ
今回は GSW の論文で提案されている完全準同型暗号の原型まで解説しました。
次回はこのアルゴリズムの問題点と制限についてお話します。
今回はここまで。
ご質問、ご意見等ありましたらお気軽にリプライください。