(57)【特許請求の範囲】
【請求項１】
コンピュータが、
第１のベクトルに対応する第１の多項式を準同型暗号により暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を前記準同型暗号により暗号化した第２の暗号化多項式とを用いて所定の演算を行い、前記所定の演算により得られた暗号演算結果に対して乱数を用いたマスク処理を行うことで、第３の多項式を前記準同型暗号により暗号化した暗号化結果に対応する第３の暗号化多項式を生成し、
前記第３の暗号化多項式を表す暗号情報を出力し、
前記第３の多項式は、前記第１の多項式と前記第２の多項式とを用いた前記所定の演算の演算結果に対して、前記乱数を用いたマスク処理を行った結果を表し、
前記第３の多項式に含まれる第１の項は、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有し、
前記第３の多項式に含まれる第２の項は、前記乱数によりマスクされた係数を有することを特徴とする暗号処理方法。
【請求項２】
前記第３の多項式に含まれる、前記第１の項以外の複数の項のうち、前記第２の項を含む１つ以上の項の係数が、前記乱数を含む１つ以上の乱数によりマスクされることを特徴とする請求項１記載の暗号処理方法。
【請求項３】
前記第１の項の次数は、前記準同型暗号の鍵生成パラメータである２冪の整数ｎと前記第１のベクトルの次元ｄと０以上の整数ｋとを用いて、ｄ＋ｋ＋１をｎで除算したときの剰余よりも１だけ小さい整数により表されることを特徴とする請求項１又は２記載の暗号処理方法。
【請求項４】
前記コンピュータは前記暗号情報を復号装置へ送信し、前記第３の多項式は前記第３の暗号化多項式の復号結果に対応し、前記整数ｋは１以上の整数であり、前記復号装置は、前記第３の暗号化多項式を復号することで前記第３の多項式を求め、ｄ＋ｋ＋１をｎで除算したときの剰余に基づいて前記第１の項の次数を求め、前記第３の多項式に含まれる前記第１の項が有する前記係数を求めることを特徴とする請求項３記載の暗号処理方法。
【請求項５】
前記コンピュータは前記暗号情報を復号装置へ送信し、前記第３の多項式は前記第３の暗号化多項式の復号結果に対応し、前記整数ｋは１以上の整数であり、前記復号装置は、前記第３の暗号化多項式の次数を−ｋだけシフトするシフト操作を行い、前記シフト操作により得られた暗号化多項式を復号することで、ｋ＝０の場合の前記第３の多項式を求め、ｄ＋１をｎで除算したときの剰余に基づいて前記第１の項の次数を求め、前記第３の多項式に含まれる前記第１の項が有する前記係数を求めることを特徴とする請求項３記載の暗号処理方法。
【請求項６】
第１のベクトルに対応する第１の多項式を準同型暗号により暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を前記準同型暗号により暗号化した第２の暗号化多項式とを用いて所定の演算を行い、前記所定の演算により得られた暗号演算結果に対して乱数を用いたマスク処理を行うことで、第３の多項式を前記準同型暗号により暗号化した暗号化結果に対応する第３の暗号化多項式を生成する生成部と、
前記第３の暗号化多項式を表す暗号情報を出力する出力部と、
を備え、
前記第３の多項式は、前記第１の多項式と前記第２の多項式とを用いた前記所定の演算の演算結果に対して、前記乱数を用いたマスク処理を行った結果を表し、
前記第３の多項式に含まれる第１の項は、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有し、
前記第３の多項式に含まれる第２の項は、前記乱数によりマスクされた係数を有することを特徴とする暗号処理装置。
【請求項７】
コンピュータのための暗号処理プログラムであって、
前記暗号処理プログラムは、
第１のベクトルに対応する第１の多項式を準同型暗号により暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を前記準同型暗号により暗号化した第２の暗号化多項式とを用いて所定の演算を行い、前記所定の演算により得られた暗号演算結果に対して乱数を用いたマスク処理を行うことで、第３の多項式を前記準同型暗号により暗号化した暗号化結果に対応する第３の暗号化多項式を生成し、
前記第３の暗号化多項式を表す暗号情報を出力する、
処理を前記コンピュータに実行させ、
前記第３の多項式は、前記第１の多項式と前記第２の多項式とを用いた前記所定の演算の演算結果に対して、前記乱数を用いたマスク処理を行った結果を表し、
前記第３の多項式に含まれる第１の項は、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有し、
前記第３の多項式に含まれる第２の項は、前記乱数によりマスクされた係数を有することを特徴とする暗号処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理方法、暗号処理装置、及び暗号処理プログラムに関する。
【背景技術】
【０００２】
近年、計算機やネットワークに関する技術の進展と普及に伴い、個人の属性や行動に関するデータ（個人データ）や企業等の組織の機密データの重要性が増している。個人データや機密データを演算又は分析して利用することで、これまでにない新たな知見を得たり、新たな機能を実現したりすることができる。
【０００３】
一方、個人データや機密データを利用することで、個人のプライバシーや組織の秘密が侵される危険性が指摘されている。そこで、個人データや機密データを保護したまま利用することを可能にする秘匿化技術が注目されている。
【０００４】
暗号技術を用いた秘匿化技術として、準同型暗号技術が知られている。準同型暗号技術は、暗号化と復号とで一対の異なる鍵を用いる公開鍵暗号方式の１つであり、データを暗号化したままでデータ操作が可能となる機能を有する。準同型暗号技術によれば、２つ以上の暗号文を対象に加算や乗算等に対応する操作を行うことで、暗号文を復号することなく、元の平文同士に対して加算や乗算等を行った演算結果の暗号文を得ることができる。
【０００５】
準同型暗号技術の１つとして、加算及び乗算を何度でも行える完全準同型暗号方式が提唱されている（例えば、非特許文献１を参照）。完全準同型暗号によれば、排他的論理和、論理積、否定等の操作が実現できるため、暗号文を復号することなく、あらゆる論理回路による演算を実現可能である。しかし、暗号化、復号、及び秘匿演算の処理時間や暗号文のサイズが膨大であり、現在のところ性能的には実用的ではない。
【０００６】
そこで、性能的により実用的な準完全準同型暗号方式が提唱されている（例えば、非特許文献２及び非特許文献３を参照）。準完全準同型暗号によれば、乗算回数等が制限されるものの、より高速な処理が実現できる。
【０００７】
準同型暗号を利用した秘匿距離計算において、暗号ベクトルデータのサイズと秘匿距離計算の時間の両方を削減する暗号処理装置も知られている（例えば、特許文献１及び非特許文献４を参照）。この暗号処理装置は、第１のベクトルから第１の変換多項式を用いて第１の多項式を得るとともに、第２のベクトルから第２の変換多項式を用いて第２の多項式を得る。次に、暗号処理装置は、第１のベクトルの秘匿距離に関する第１の重みと、第２のベクトルの秘匿距離に関する第２の重みとを得る。
【０００８】
次に、暗号処理装置は、第１の多項式、第２の多項式、第１の重み、及び第２の重みのそれぞれを準同型暗号方式を用いて暗号化し、第１の暗号化多項式、第２の暗号化多項式、第１の暗号化重み、及び第２の暗号化重みを得る。そして、暗号処理装置は、第１の暗号化多項式、第２の暗号化多項式、第１の暗号化重み、及び第２の暗号化重みから、第１のベクトルと第２のベクトルの秘匿距離の暗号化に対応する暗号化秘匿距離を得る。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１４−１２６８６５号公報
【非特許文献】
【００１０】
【非特許文献１】C. Gentry, “Fully Homomorphic Encryption Using Ideal Lattices”, STOC 2009, pp. 169-178, 2009.
【非特許文献２】C. Gentry and S. Halevi, “Implementing Gentry’s Fully Homomorphic Encryption Scheme”, EUROCRYPT 2011, LNCS 6632, pp. 129-148, 2011.
【非特許文献３】K. Lauter, M. Naehrig, V. Vaikuntanathan, “Can Homomorphic Encryption be Practical?”, CCSW 2011, pp. 113-124, 2011.
【非特許文献４】安田，下山，横山，小暮，「準同型暗号を用いた複数企業間の顧客情報分析」，第１２回情報科学技術フォーラム（ＦＩＴ  ２０１３），第４分冊  ｐｐ．１５−２２，２０１３．
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献１の暗号処理装置を用いた場合、復号者は、暗号化秘匿距離を復号することで、２つのベクトルの秘匿距離だけでなく、入力データである各ベクトルの要素に関する情報も知ることができる。これにより、復号者に対してベクトルの要素が漏洩してしまう可能性がある。
【００１２】
なお、かかる問題は、暗号化秘匿距離を復号する場合に限らず、２つの暗号化多項式を乗算した結果を表す暗号情報を復号する場合においても生ずるものである。
【００１３】
１つの側面において、本発明は、ベクトルの暗号乗算により生成された暗号情報の復号時におけるベクトル要素の漏洩を防止することを目的とする。
【課題を解決するための手段】
【００１４】
１つの案では、コンピュータが、第１の暗号化多項式と第２の暗号化多項式とを乗算した結果を用いて、第３の多項式の暗号化結果に対応する第３の暗号化多項式を生成し、第３の暗号化多項式を表す暗号情報を出力する。
【００１５】
第１の暗号化多項式は、第１のベクトルに対応する第１の多項式を暗号化した多項式であり、第２の暗号化多項式は、第２のベクトルに対応する第２の多項式を暗号化した多項式である。第３の多項式は、第１のベクトルと第２のベクトルとの内積に基づく係数を有する第１の項を含み、第１の項以外の第２の項が有する係数はマスクされている。
【発明の効果】
【００１６】
実施形態によれば、ベクトルの暗号乗算により生成された暗号情報の復号時におけるベクトル要素の漏洩を防止することができる。
【図面の簡単な説明】
【００１７】
【図１】暗号処理装置の機能的構成図である。
【図２】暗号処理のフローチャートである。
【図３】生体認証システムの構成図である。
【図４】生体認証システムが行う処理を示す図である。
【図５】暗号処理の具体例を示すフローチャートである。
【図６】マスク処理のフローチャートである。
【図７】認証処理のフローチャートである。
【図８】次数をシフトする第１の暗号化処理のフローチャートである。
【図９】シフト操作に基づくマスク処理のフローチャートである。
【図１０】シフト操作に基づく認証処理の第１の例を示すフローチャートである。
【図１１】シフト操作に基づく認証処理の第２の例を示すフローチャートである。
【図１２】次数をシフトする第２の暗号化処理のフローチャートである。
【図１３】次数をシフトする暗号処理のフローチャートである。
【図１４】情報処理装置の構成図である。
【発明を実施するための形態】
【００１８】
以下、図面を参照しながら、実施形態を詳細に説明する。
非特許文献３の３．２節には、非特許文献２の準完全準同型暗号方式を拡張した準完全準同型暗号方式の構成法について記載されている。この構成法では、まず、暗号鍵生成において、主に３つの鍵生成パラメータ（ｎ，ｑ，ｔ）が用いられる。ｎは２冪の整数であり、格子次元と呼ばれる。ｑは素数であり、ｔは素数ｑよりも小さい整数である。
【００１９】
暗号鍵生成の手順として、まず、秘密鍵として各係数が非常に小さいｎ−１次多項式ｓｋがランダムに生成される。各係数の大きさは、あるパラメータσにより制限される。次に、各係数がｑより小さいｎ−１次多項式ａ１と、各係数が非常に小さいｎ−１次多項式ｅとがランダムに生成される。そして、次式の多項式ａ０が計算され、多項式の組（ａ０，ａ１）が公開鍵ｐｋとして定義される。
ａ０＝−（ａ１＊ｓｋ＋ｔ＊ｅ）      （１）
【００２０】
ただし、多項式ａ０の計算では、ｎ次以上の多項式に対してｘn＝−１，ｘn+1＝−ｘ，．．．を適用することで、絶えずｎ次より小さい次数の多項式が計算される。さらに、多項式に含まれる各項の係数としては、その係数を素数ｑで除算したときの剰余が用いられる。このような多項式演算を行う空間は、学術的にはＲq：＝Ｆq［ｘ］／（ｘn＋１）と表されることが多い。
【００２１】
次に、各係数がｔより小さいｎ−１次多項式で表される平文データｍと公開鍵ｐｋとに対して、各係数が非常に小さい３つのｎ−１次多項式ｕ、ｆ、及びｇがランダムに生成され、平文データｍの暗号データＥｎｃ（ｍ，ｐｋ）が次式により定義される。
Ｅｎｃ（ｍ，ｐｋ）＝（ｃ０，ｃ１）      （２）
ｃ０＝ａ０＊ｕ＋ｔ＊ｇ＋ｍ      （３）
ｃ１＝ａ１＊ｕ＋ｔ＊ｆ      （４）
【００２２】
多項式ｃ０及び多項式ｃ１の計算においても、空間Ｒq上の多項式演算が用いられる。このとき、暗号データＥｎｃ（ｍ１，ｐｋ）＝（ｃ０，ｃ１）と暗号データＥｎｃ（ｍ２，ｐｋ）＝（ｄ０，ｄ１）とに対する暗号加算は、次式により計算される。
Ｅｎｃ（ｍ１，ｐｋ）＋Ｅｎｃ（ｍ２，ｐｋ）＝（ｃ０＋ｄ０，ｃ１＋ｄ１）  （５）
【００２３】
また、暗号データＥｎｃ（ｍ１，ｐｋ）と暗号データＥｎｃ（ｍ２，ｐｋ）とに対する暗号乗算は、次式により計算される。
Ｅｎｃ（ｍ１，ｐｋ）＊Ｅｎｃ（ｍ２，ｐｋ）
＝（ｃ０＊ｄ０，ｃ０＊ｄ１＋ｃ１＊ｄ０，ｃ１＊ｄ１）      （６）
【００２４】
式（６）の暗号乗算を行うと、暗号データが２次元ベクトルから３次元ベクトルに変化する。暗号乗算を複数回繰り返すと、乗算結果の暗号データの要素はさらに増加する。
【００２５】
次に、復号処理について説明する。複数回の暗号乗算等の操作により要素が増加した暗号データｃ＝（ｃ０，ｃ１，ｃ２，．．．）に対して、秘密鍵ｓｋを用いて次式の復号結果Ｄｅｃ（ｃ，ｓｋ）を計算することで、暗号データｃが復号される。
Ｄｅｃ（ｃ，ｓｋ）
＝［ｃ０＋ｃ１＊ｓｋ＋ｃ２＊ｓｋ2＋・・・］q  ｍｏｄ  ｔ      （７）
【００２６】
式（７）において、［ｆ（ｘ）］q  ｍｏｄ  ｔは、多項式ｆ（ｘ）の各係数ｚiを［ｚi］ｑ  ｍｏｄ  ｔに置き換えた多項式を表す。整数ｚに対する［ｚ］qの値は、ｚをｑで除算したときの剰余ｗを用いて、次式により定義される。
［ｚ］q＝ｗ      （ｗ＜ｑ／２の場合）      （８）
［ｚ］q＝ｗ−ｑ  （ｗ≧ｑ／２の場合）      （９）
【００２７】
したがって、［ｚ］qの値域は［−ｑ／２，ｑ／２）となる。また、ａ  ｍｏｄ  ｔは、整数ａをｔで除算したときの剰余を表す。
【００２８】
例えば、（ｎ，ｑ，ｔ）＝（４，１０３３，２０）の場合、秘密鍵ｓｋ、公開鍵ｐｋ、及び暗号データＥｎｃ（ｍ，ｐｋ）の簡単な例として、以下のような多項式が挙げられる。
ｓｋ＝Ｍｏｄ（Ｍｏｄ（４，１０３３）＊ｘ3＋Ｍｏｄ（４，１０３３）＊ｘ2
＋Ｍｏｄ（１，１０３３）＊ｘ，ｘ4＋１）                      （１０）
ｐｋ＝（ａ０，ａ１）                      （１１）
ａ０＝Ｍｏｄ（Ｍｏｄ（８８５，１０３３）＊ｘ3
＋Ｍｏｄ（５１９，１０３３）＊ｘ2＋Ｍｏｄ（６２１，１０３３）＊ｘ
＋Ｍｏｄ（３２７，１０３３），ｘ4＋１）                      （１２）
ａ１＝Ｍｏｄ（Ｍｏｄ（６６１，１０３３）＊ｘ3
＋Ｍｏｄ（６２５，１０３３）＊ｘ2＋Ｍｏｄ（８６１，１０３３）＊ｘ
＋Ｍｏｄ（３１１，１０３３），ｘ4＋１）                      （１３）
Ｅｎｃ（ｍ，ｐｋ）＝（ｃ０，ｃ１）                      （１４）
ｍ＝３＋２ｘ＋２ｘ2＋２ｘ3                      （１５）
ｃ０＝Ｍｏｄ（Ｍｏｄ（８２２，１０３３）＊ｘ3
＋Ｍｏｄ（１０１６，１０３３）＊ｘ2＋Ｍｏｄ（２９２，１０３３）＊ｘ
＋Ｍｏｄ（２４３，１０３３），ｘ4＋１）                      （１６）
ｃ１＝Ｍｏｄ（Ｍｏｄ（８４０，１０３３）＊ｘ3
＋Ｍｏｄ（２７５，１０３３）＊ｘ2＋Ｍｏｄ（６２８，１０３３）＊ｘ
＋Ｍｏｄ（９１１，１０３３），ｘ4＋１）                      （１７）
【００２９】
式（１０）〜式（１７）において、Ｍｏｄ（ａ，ｑ）は、整数ａを素数ｑで除算したときの剰余を表し、Ｍｏｄ（ｆ（ｘ），ｘ4＋１）は、多項式ｆ（ｘ）を多項式ｘ4＋１で除算したときの剰余（多項式）を表す。例えば、ｆ（ｘ）＝ｘ4に対するＭｏｄ（ｆ（ｘ），ｘ4＋１）は、ｆ（ｘ）＝−１に対するＭｏｄ（ｆ（ｘ），ｘ4＋１）と等しく、ｆ（ｘ）＝ｘ5に対するＭｏｄ（ｆ（ｘ），ｘ4＋１）は、ｆ（ｘ）＝−ｘに対するＭｏｄ（ｆ（ｘ），ｘ4＋１）と等しい。
【００３０】
このような準完全準同型暗号方式は、完全準同型暗号方式に比べて性能的に優れているが、ベクトルデータ（複数のデータの列）を一度に処理する場合には、依然として処理時間や暗号データのサイズが多大であり、実用的に十分な性能を有していない。
【００３１】
この問題に対して、特許文献１の暗号処理装置によれば、ベクトルデータを多項式変換により１つの多項式で表現し、その多項式を準同型暗号により暗号化することで、処理時間や暗号データのサイズが大幅に改善される。
【００３２】
この暗号処理装置では、例えば、次のような２つのｄ次元ベクトルが入力データとして用いられる。
Ａ＝（ａ1，ａ2，ａ3，．．．，ａd）      （２１）
Ｂ＝（ｂ1，ｂ2，ｂ3，．．．，ｂd）      （２２）
【００３３】
２つのベクトルを暗号化したままで２つのベクトルの間の距離を高速に計算するために、次のような昇順変換と降順変換の２種類の多項式変換が用いられる。
【００３４】
［昇順変換］
Ａ＝（ａ1，ａ2，ａ3，．．．，ａd）
⇒ｐｍ１（Ａ）＝ａ1＋ａ2ｘ＋ａ3ｘ2＋・・・＋ａdｘd-1      （２３）
［降順変換］
Ｂ＝（ｂ1，ｂ2，ｂ3，．．．，ｂd）
⇒ｐｍ２（Ｂ）＝ｂ1ｘd＋ｂ2ｘd-1＋・・・＋ｂdｘ      （２４）
【００３５】
多項式ｐｍ１（Ａ）及び多項式ｐｍ２（Ｂ）を準同型暗号Ｅにより暗号化すると、暗号化多項式Ｅ１（Ａ）及び暗号化多項式Ｅ２（Ｂ）が生成される。
Ｅ１（Ａ）＝Ｅ（ｐｍ１（Ａ））      （２５）
Ｅ２（Ｂ）＝Ｅ（ｐｍ２（Ｂ））      （２６）
【００３６】
暗号化多項式Ｅ１（Ａ）及び暗号化多項式Ｅ２（Ｂ）に対して準同型暗号の性質を用いれば、次式の暗号乗算処理により、ベクトルＡとベクトルＢの内積を高速に計算することができる。
Ｅ（Ｄ）＝Ｅ１（Ａ）＊Ｅ２（Ｂ）
＝Ｅ（ｐｍ１（Ａ））＊Ｅ（ｐｍ２（Ｂ））      （２７）
【００３７】
秘密鍵を持つ復号者が暗号乗算処理の乗算結果Ｅ（Ｄ）を復号して得られる多項式Ｄは、ｐｍ１（Ａ）＊ｐｍ２（Ｂ）の乗算により得られる多項式と等価である。このため、多項式Ｄに含まれるｘdの項の係数から、ベクトルＡとベクトルＢの内積ａ1ｂ1＋ａ2ｂ2＋・・・＋ａdｂdが得られる。
【００３８】
例えば、ベクトルＡ及びベクトルＢが２値ベクトルである場合、ベクトルＡの要素ａ1〜要素ａdのすべてが０又は１であり、ベクトルＢの要素ｂ1〜要素ｂdのすべてが０又は１である。この場合、式（２７）の暗号乗算処理の性質を用いて、Ｅ１（Ａ）及びＥ２（Ｂ）を準同型暗号化したままで、次式によりベクトルＡとベクトルＢのハミング距離を計算することができる。
Ｅ（ＤH）＝Ｅ１（Ａ）＊Ｅ２（Ｃ）＋Ｅ１（Ｃ）＊Ｅ２（Ｂ）
−２＊Ｅ１（Ａ）＊Ｅ２（Ｂ）                    （２８）
【００３９】
式（２８）において、ベクトルＣは、すべての要素が１であるベクトルである。
Ｃ＝（１，１，．．．，１）      （２９）
【００４０】
暗号化ハミング距離Ｅ（ＤH）を復号して得られる多項式ＤHは、次式の計算により得られる多項式と等価である。
ｐｍ１（Ａ）＊ｐｍ２（Ｃ）＋ｐｍ１（Ｃ）＊ｐｍ２（Ｂ）
−２＊ｐｍ１（Ａ）＊ｐｍ２（Ｂ）                    （３０）
【００４１】
このため、多項式ＤHに含まれるｘdの項の係数から、ベクトルＡとベクトルＢのハミング距離ＨＤが得られる。
ＨＤ＝ａ1＋ａ2＋・・・＋ａd＋ｂ1＋ｂ2＋・・・＋ｂd
−２（ａ1ｂ1＋ａ2ｂ2＋・・・＋ａdｂd）            （３１）
【００４２】
準同型暗号としては、ideal latticesベースの準同型暗号、ring-Lauter-Naehrig-Vaikuntanathan（ｒｉｎｇ−ＬＷＥ）ベースの準同型暗号等を用いることができる。
【００４３】
このような暗号演算処理によれば、２つのベクトルの内積又はハミング距離を求める秘匿計算を高速かつ小さなデータサイズで行うことができる。この暗号演算処理は、生体から取得したデータを比較する生体認証システム、多くのタグの中からある特徴を有するタグを検索するタグ検索システム等において利用される。
【００４４】
ところで、秘密鍵を持つ復号者がベクトルＡ及びベクトルＢのすべての要素を知っていても構わない場合、復号者は、暗号演算処理を行う代わりに、ベクトルＡ及びベクトルＢを直接用いて内積又はハミング距離を計算すればよい。しかし、復号者はベクトルＡとベクトルＢの内積又はハミング距離を知ってもよいが、ベクトルＡ及びベクトルＢの要素そのものを知ることは好ましくない、というセキュリティ要件が課されることがしばしばある。
【００４５】
特許文献１の暗号処理装置を用いた場合、暗号演算処理の副産物として、暗号化前の入力データの情報が暗号演算結果に残っている。このため、暗号演算結果を復号すると、復号者は、内積又はハミング距離等の演算結果だけでなく、入力データ同士の関係に関するその他の情報も多く知ることができる。この場合、復号者は、これらの情報から本来は秘匿すべき入力データの一部又は全部を求めることが可能になり、セキュリティ要件が満たされない。
【００４６】
例えば、式（２７）の乗算結果Ｅ（Ｄ）に対応する多項式Ｄは、ｘdの項の係数として、ベクトルＡとベクトルＢの内積ａ1ｂ1＋ａ2ｂ2＋・・・＋ａdｂdを含むとともに、ｘの他の次数の項の係数も含んでいる。例えば、ｘ0の項（定数項）にはａ1が含まれ、ｘ1の項の係数にはａ1ｂdが含まれ、ｘ2の項の係数にはａ1ｂd-1＋ａ2ｂd-2が含まれている。どの項にどの値が現れるかは、多項式演算を行う空間Ｒqの格子次元ｎに依存する。
【００４７】
これらの係数の値は、元のベクトルＡ及びベクトルＢの各要素の値に由来しており、これらの係数からベクトルＡ及びベクトルＢの要素の一部又は全部を決定的又は確率的に導き出すことができる。したがって、暗号演算結果を復号して演算結果を得る復号者には、本来知らせるべき演算結果だけでなく、秘匿したいベクトルＡ及びベクトルＢの情報が漏洩してしまう。
【００４８】
特に、復号者がベクトルＡ又はベクトルＢの一方を知っている場合や、復号者がベクトルＡ又はベクトルＢの一方を意図的に決められる場合は、情報の漏洩が顕著である。また、ベクトルＡ及びベクトルＢは公開鍵によって暗号化されるため、誰でも意図的に作成したベクトルの暗号データを用意することができる。このため、暗号がもたらす保護によって情報の漏洩を防止することは困難である。
【００４９】
図１は、実施形態の暗号処理装置の機能的構成例を示している。図１の暗号処理装置１０１は、記憶部１１１、生成部１１２、及び出力部１１３を含む。記憶部１１１は、第１のベクトルに対応する第１の多項式を暗号化した第１の暗号化多項式を表す暗号情報を記憶する。生成部１１２は、記憶部１１１が記憶する暗号情報を用いて暗号処理を行い、出力部１１３は、暗号処理の結果を出力する。
【００５０】
図２は、図１の暗号処理装置１０１が行う暗号処理の例を示すフローチャートである。生成部１１２は、第１の暗号化多項式と第２の暗号化多項式とを乗算した結果を用いて、第３の多項式の暗号化結果に対応する第３の暗号化多項式を生成する（ステップ２０１）。
【００５１】
第１の暗号化多項式は、第１のベクトルに対応する第１の多項式を暗号化した多項式であり、第２の暗号化多項式は、第２のベクトルに対応する第２の多項式を暗号化した多項式である。第３の多項式は、第１のベクトルと第２のベクトルとの内積に基づく係数を有する第１の項を含み、第１の項以外の第２の項が有する係数はマスクされている。出力部１１３は、第３の暗号化多項式を表す暗号情報を出力する（ステップ２０２）。
【００５２】
このような暗号処理装置１０１によれば、ベクトルの暗号乗算により生成された暗号情報の復号時におけるベクトル要素の漏洩を防止することができる。
【００５３】
図３は、図１の暗号処理装置１０１を含む生体認証システムの構成例を示している。図３の認証システムは、暗号処理装置１０１、端末装置３０１−１、端末装置３０１−２、及び認証装置３０２を含み、登録モードの動作と認証モードの動作とを行う。暗号処理装置１０１と、端末装置３０１−１、端末装置３０１−２、及び認証装置３０２とは、通信ネットワークにより接続されている。
【００５４】
端末装置３０１−１及び端末装置３０１−２は、生体情報を暗号化して暗号処理装置１０１へ送信する装置であり、例えば、生体情報を表すベクトルと公開鍵とを知っているユーザの装置である。
【００５５】
暗号処理装置１０１は、暗号化されたベクトルを用いた暗号演算処理を行って暗号演算結果を認証装置３０２へ送信する装置であり、例えば、公開鍵を知っているサービス業者の装置である。認証装置３０２は、暗号演算結果を復号して認証を行う装置であり、例えば、秘密鍵を知っている復号者の装置である。
【００５６】
図４は、図３の生体認証システムが行う処理の例を示している。登録モードにおいて、端末装置３０１−１は、登録者の生体情報をセンサにより取得し、生体情報から抽出した特徴情報を、式（２１）のようなベクトルＡに変換し、暗号化処理４０１−１を行う。センサにより取得される生体情報としては、指紋、顔、静脈、虹彩等の画像情報又は声等の音声情報を用いることができる。
【００５７】
暗号化処理４０１−１において、端末装置３０１−１は、ベクトルＡを式（２３）のような多項式ｐｍ１（Ａ）に変換し、多項式ｐｍ１（Ａ）を準同型暗号により暗号化して暗号化多項式Ｅ１（Ａ）を生成する。そして、端末装置３０１−１は、暗号化多項式Ｅ１（Ａ）を表す暗号情報を暗号処理装置１０１へ送信し、暗号処理装置１０１は、端末装置３０１−１から受信した暗号情報を、登録暗号情報３１１として記憶部１１１に格納する。暗号化多項式を表す暗号情報としては、例えば、暗号化多項式の各項が有する係数を用いることができる。
【００５８】
認証モードにおいて、端末装置３０１−２は、認証対象者の生体情報をセンサにより取得し、生体情報から抽出した特徴情報を、式（２２）のようなベクトルＢに変換し、暗号化処理４０１−２を行う。暗号化処理４０１−２において、端末装置３０１−２は、ベクトルＢを式（２４）のような多項式ｐｍ２（Ｂ）に変換し、多項式ｐｍ２（Ｂ）を準同型暗号により暗号化して暗号化多項式Ｅ２（Ｂ）を生成する。そして、端末装置３０１−２は、暗号化多項式Ｅ２（Ｂ）を表す暗号情報を暗号処理装置１０１へ送信する。
【００５９】
暗号処理装置１０１は、登録暗号情報３１１が表す暗号化多項式Ｅ１（Ａ）と、端末装置３０１−１から受信した暗号情報が表す暗号化多項式Ｅ２（Ｂ）とを用いて暗号演算処理４０２を行い、暗号演算処理４０２の結果に対してマスク処理４０３を行う。そして、暗号処理装置１０１は、マスク処理４０３により生成された暗号情報を認証装置３０２へ送信する。
【００６０】
認証装置３０２は、暗号処理装置１０１から受信した暗号情報を秘密鍵を用いて復号する復号処理４０４を行い、ベクトルＡとベクトルＢの演算結果を生成する。そして、認証装置３０２は、生成した演算結果に基づいて認証対象者の認証を行い、認証結果を出力する。
【００６１】
ベクトルＡとベクトルＢの演算結果は、ベクトルＡとベクトルＢの内積であってもよく、内積に基づく類似度（例えば、コサイン類似度）であってもよく、内積に基づく相違度（例えば、ハミング距離、ユークリッド距離等）であってもよい。
【００６２】
例えば、演算結果がベクトルＡとベクトルＢの内積に基づく類似度である場合、認証装置３０２は、類似度を閾値と比較して、認証の成否を判定することができる。この場合、類似度が閾値より大きれば、認証対象者の認証が成功したと判定され、類似度が閾値以下であれば、認証が失敗したと判定される。
【００６３】
演算結果がベクトルＡとベクトルＢの内積に基づく相違度である場合、認証装置３０２は、相違度を閾値と比較して、認証の成否を判定することができる。この場合、相違度が閾値より小さければ、認証対象者の認証が成功したと判定され、相違度が閾値以上であれば、認証が失敗したと判定される。
【００６４】
図５は、暗号処理装置１０１の生成部１１２が行う暗号処理の具体例を示すフローチャートである。まず、生成部１１２は、ベクトルＡとベクトルＢの演算結果に対応する暗号演算処理を行って、暗号演算結果Ｅ（Ｌ）を生成する（ステップ５０１）。
【００６５】
ベクトルＡとベクトルＢの演算結果は、ベクトルＡとベクトルＢの内積を含む。この演算結果は、ベクトルＡとベクトルＢの内積であってもよく、内積と他の値との加算結果であってもよく、ハミング距離ＨＤであってもよい。暗号演算結果Ｅ（Ｌ）に対応する多項式Ｌは、式（２７）のＥ（Ｄ）に対応する多項式Ｄであってもよく、式（２８）のＥ（ＤH）に対応する多項式ＤHであってもよい。
【００６６】
次に、生成部１１２は、暗号演算結果Ｅ（Ｌ）に対してマスク処理を行って、多項式Ｌに含まれる、ベクトルＡとベクトルＢの演算結果を表す係数を有する項以外の１つ以上の項が有する係数を、乱数によりマスクする（ステップ５０２）。マスクされる係数が多いほど、復号結果からベクトルの要素が漏洩する可能性が低くなる。
【００６７】
図６は、図５のステップ５０２におけるマスク処理の例を示すフローチャートである。まず、生成部１１２は、ベクトルＡ及びベクトルＢの次元ｄと準同型暗号の格子次元ｎを用いて、ｎと２ｄとを比較する（ステップ６０１）。
【００６８】
多項式ｐｍ１（Ａ）はｄ−１次多項式であり、多項式ｐｍ２（Ｂ）はｄ次多項式であるため、多項式Ｌの次数は高々２ｄ−１次である。さらに、ｎが２ｄより小さい場合、ｘn＝−１を適用すると、多項式Ｌの次数は高々ｎ−１次となる。
【００６９】
そこで、生成部１１２は、ｎが２ｄより小さい場合（ステップ６０１，ＹＥＳ）、乱数の個数を表す変数Ｎをｎに設定し（ステップ６０２）、ｎが２ｄ以上である場合（ステップ６０１，ＮＯ）、変数Ｎを２ｄに設定する（ステップ６０３）。
【００７０】
次に、多項式Ｌにおいて、ベクトルＡとベクトルＢの演算結果を表す係数を有するｘM-1の項を示す変数Ｍを、ｄ＋１  ｍｏｄ  ｎに設定し（ステップ６０４）、次式のようなＮ次元のランダムベクトルＲを生成する（ステップ６０５）。
Ｒ＝（ｒ1，ｒ2，ｒ3，．．．，ｒN）      （４１）
式（４１）のｒ1〜ｒM-1及びｒM+1〜ｒNは乱数であり、ｒMは定数０である。
【００７１】
次に、生成部１１２は、式（２３）と類似する昇順変換により、ランダムベクトルＲを次式のようなマスク多項式ｐｍ（Ｒ）に変換する（ステップ６０６）。
ｐｍ（Ｒ）＝ｒ1＋ｒ2ｘ＋ｒ3ｘ2＋・・・＋ｒM-1ｘM-2
＋ｒM+1ｘM＋・・・＋ｒNｘN-1            （４２）
【００７２】
マスク多項式ｐｍ（Ｒ）は、ｘM-1の項の係数のみが０であるＮ−１次多項式である。例えば、ｎが２ｄ以上である場合、Ｎ＝２ｄ、Ｍ＝ｄ＋１となり、ベクトルＡとベクトルＢの演算結果は多項式Ｌのｘdの項に現れるので、ｒd+1が０となる。一方、ｎが２ｄより小さい場合、Ｎ＝ｄ、Ｍ＝ｄ＋１  ｍｏｄ  ｎとなる。特にｎ＝ｄの場合、Ｎ＝ｄ＝ｎ、Ｍ＝１となり、ベクトルＡとベクトルＢの演算結果は、多項式Ｌのｘdの項ではなく、ｘ0の項（定数項）に現れるので、マスク多項式ｐｍ（Ｒ）の定数項ｒ1が０となる。
【００７３】
生成部１１２は、マスク多項式ｐｍ（Ｒ）を準同型暗号により暗号化して、暗号化マスク多項式Ｅ（ｐｍ（Ｒ））を生成する。
【００７４】
次に、生成部１１２は、暗号化マスク多項式Ｅ（ｐｍ（Ｒ））を暗号演算結果Ｅ（Ｌ）に加算して、多項式ＬのｘM-1の項以外の係数がマスクされた暗号化結果に対応する暗号化多項式Ｅ（Ｌ’）を生成する（ステップ６０７）。
Ｅ（Ｌ’）＝Ｅ（Ｌ）＋Ｅ（ｐｍ（Ｒ））      （４３）
【００７５】
そして、出力部１１３は、暗号化多項式Ｅ（Ｌ’）を表す暗号情報を認証装置３０２へ送信する。
【００７６】
図５のステップ５０１の暗号演算処理は、暗号処理装置１０１以外の装置が行うことも可能である。この場合、例えば、別のサービス業者が運用する装置が暗号化多項式Ｅ１（Ａ）と暗号化多項式Ｅ２（Ｂ）とを用いて暗号演算結果Ｅ（Ｌ）を生成し、暗号処理装置１０１に送信する。暗号処理装置１０１は、受信した暗号演算結果Ｅ（Ｌ）に対して、ステップ５０２のマスク処理を行う。
【００７７】
図７は、認証装置３０２が行う認証処理の例を示すフローチャートである。まず、認証装置３０２は、復号処理４０４を行って多項式Ｌ’を生成する（ステップ７０１）。次に、認証装置３０２は、図６のステップ６０４と同様の処理によりＭの値を求め（ステップ７０２）、多項式Ｌ’のｘM-1の項の係数から、ベクトルＡとベクトルＢの演算結果を求める（ステップ７０３）。
【００７８】
そして、認証装置３０２は、求めた演算結果を閾値と比較して認証の成否を判定し、認証対象者の認証結果を出力する（ステップ７０４）。
【００７９】
図６のマスク処理によれば、認証装置３０２が知りたい演算結果は、多項式Ｌ’のｘM-1の項の係数としてそのまま存在するが、それ以外のｘiの項（ｉ≠Ｍ−１）の係数には乱数ｒi+1が加算されている。このため、知りたい演算結果以外のベクトルＡ及びベクトルＢの情報が認証装置３０２に漏洩することはない。
【００８０】
ベクトルＡ及びベクトルＢは、ユーザの生体情報に基づくベクトルであるため機微性が高い場合がある。また、ベクトルＡを知る者は、暗号化多項式Ｅ１（Ａ）を登録した登録者になりすまして暗号処理装置１０１にアクセスし、認証を成功させることもできる。このため、生体認証システムにおいては、ベクトルＡ及びベクトルＢの情報を秘匿することが重要である。暗号演算結果Ｅ（Ｌ）に対してマスク処理を行うことで、ベクトルＡ及びベクトルＢの情報を効果的に秘匿することができる。
【００８１】
ところで、１以上の整数ｋをシフト数として用いて、多項式Ｌのマスクしない項の次数Ｍ−１をｋだけシフトすることも可能である。例えば、図４の暗号化処理４０１−１において、端末装置３０１−１が多項式ｐｍ１（Ａ）の次数ｄ−１をｋだけシフトすることで、多項式Ｌにおいて演算結果が現れる項の次数Ｍ−１をｋだけシフトすることができる。この場合、端末装置３０１−１、暗号処理装置１０１、及び認証装置３０２は、ｋの値を記憶しているものとする。
【００８２】
図８は、多項式ｐｍ１（Ａ）の次数をシフトする暗号化処理の例を示すフローチャートである。まず、端末装置３０１−１は、ベクトルＡを多項式ｐｍ１（Ａ）に変換し（ステップ８０１）、多項式ｐｍ１（Ａ）にｘkを乗算することで、多項式ｐｍ１’（Ａ）を生成する（ステップ８０２）。
ｐｍ１’（Ａ）＝ｐｍ１（Ａ）＊ｘk
＝ａ1ｘk＋ａ2ｘk+1＋ａ3ｘk+2＋・・・＋ａdｘk+d-1      （５１）
【００８３】
多項式ｐｍ１（Ａ）にｘkを乗算する操作は、シフト操作（ローテート操作）とみなすことができる。
【００８４】
次に、端末装置３０１−１は、多項式ｐｍ１’（Ａ）を準同型暗号により暗号化して暗号化多項式Ｅ（ｐｍ１’（Ａ））を生成する（ステップ８０３）。そして、端末装置３０１−１は、暗号化多項式Ｅ（ｐｍ１’（Ａ））を暗号化多項式Ｅ１（Ａ）として用いて暗号情報を生成し、生成した暗号情報を暗号処理装置１０１へ送信する。
【００８５】
一方、端末装置３０１−２は、暗号化処理４０１−２において、多項式ｐｍ２（Ｂ）の次数をシフトすることなく、暗号化多項式Ｅ２（Ｂ）を生成する。
【００８６】
暗号処理装置１０１は、暗号化多項式Ｅ１（Ａ）と暗号化多項式Ｅ２（Ｂ）とを用いて暗号演算処理４０２を行い、暗号演算結果Ｅ（Ｌ）を生成する。このとき、生成部１１２は、多項式ＬにおいてベクトルＡとベクトルＢの演算結果が現れる項の次数がｋだけシフトするように、暗号演算処理４０２を行う。例えば、多項式Ｌが内積の多項式Ｄに対応する場合、生成部１１２は、式（２７）により暗号演算結果Ｅ（Ｄ）を生成する。
【００８７】
一方、多項式Ｌがハミング距離の多項式ＤHに対応する場合、生成部１１２は、多項式ｐｍ１（Ｃ）にｘkを乗算することで、多項式ｐｍ１’（Ｃ）を生成する。
ｐｍ１’（Ｃ）＝ｐｍ１（Ｃ）＊ｘk
＝（１＋ｘ＋ｘ2＋・・・＋ｘd-1）＊ｘk
＝ｘk＋ｘk+1＋ｘk+2＋・・・＋ｘk+d-1      （５２）
【００８８】
そして、生成部１１２は、暗号化多項式Ｅ（ｐｍ１’（Ｃ））を生成し、暗号化多項式Ｅ（ｐｍ１’（Ｃ））を暗号化多項式Ｅ１（Ｃ）として用いて、式（２８）により暗号演算結果Ｅ（ＤH）を生成する。
【００８９】
図９は、シフト操作に基づくマスク処理の例を示すフローチャートである。暗号処理装置１０１は、図５のステップ５０２において、図９のマスク処理を行う。図９のステップ９０１〜ステップ９０３及びステップ９０５〜ステップ９０７の処理は、図６のステップ６０１〜ステップ６０３及びステップ６０５〜ステップ６０７の処理と同様である。
【００９０】
Ｎの値を設定すると、生成部１１２は、多項式ＬのｘM-1の項を示す変数Ｍを、ｄ＋ｋ＋１  ｍｏｄ  ｎに設定し（ステップ９０４）、ステップ９０５以降の処理を行う。
【００９１】
そして、出力部１１３は、暗号化多項式Ｅ（Ｌ’）を表す暗号情報を認証装置３０２へ送信する。多項式Ｌ’においても、ベクトルＡとベクトルＢの演算結果が現れる項の次数は、ｋだけシフトしている。
【００９２】
図１０は、シフト操作に基づく認証処理の例を示すフローチャートである。図１０のステップ１００１、ステップ１００３、及びステップ１００４の処理は、図７のステップ７０１、ステップ７０３、及びステップ７０４の処理と同様である。
【００９３】
多項式Ｌ’を生成すると、認証装置３０２は、図９のステップ９０４と同様の処理によりＭの値を求め（ステップ１００２）、ステップ１００３以降の処理を行う。
【００９４】
図１１は、シフト操作に基づく別の認証処理の例を示すフローチャートである。図１１のステップ１１０２〜ステップ１１０５の処理は、図７のステップ７０１〜ステップ７０４の処理と同様である。
【００９５】
認証装置３０２は、ｘ-kを準同型暗号により暗号化してＥ（ｘ-k）を生成し、暗号化多項式Ｅ（Ｌ’）にＥ（ｘ-k）を乗算する（ステップ１１０１）。これにより、多項式Ｌ’においてベクトルＡとベクトルＢの演算結果が現れる項の次数が−ｋだけシフトし、端末装置３０１−１によるシフト操作の効果がキャンセルされる。その後、認証装置３０２は、ステップ１１０２以降の処理を行う。
【００９６】
以上のようなシフト操作によれば、ｋの値を記憶していない暗号処理装置は、正しいマスク処理を行うことがなく、ｋの値を記憶していない認証装置は、正しい認証処理を行うことがない。したがって、ｋの値を記憶していない暗号処理装置又は認証装置が介在した場合にはベクトルＡとベクトルＢの正しい演算結果が生成されないため、演算結果の秘匿性が向上する。
【００９７】
図８の暗号化処理において、多項式ｐｍ１（Ａ）にｘkを乗算する代わりに、ベクトルＡを次式のようなｄ＋ｋ次元のベクトルＡ’に変換してから、多項式ｐｍ１（Ａ’）を生成してもよい。
Ａ’＝（０，０，．．．，０，ａ1，ａ2，ａ3，．．．，ａd）      （５３）
【００９８】
式（５３）のベクトルＡ’の第１要素〜第ｋ要素は０であり、第ｋ＋１要素〜第ｋ＋ｄ要素はａ1〜ａdである。この場合、多項式ｐｍ１（Ａ’）は多項式ｐｍ１’（Ａ）と等価になる。
【００９９】
また、端末装置３０１−１が多項式ｐｍ１（Ａ）の次数ｄ−１をｋだけシフトする代わりに、端末装置３０１−２が多項式ｐｍ２（Ｂ）の次数ｄをｋだけシフトしてもよい。これにより、多項式Ｌにおいて演算結果が現れる項の次数Ｍ−１をｋだけシフトすることができる。
【０１００】
この場合、端末装置３０１−１は、多項式ｐｍ１（Ａ）の次数をシフトすることなく、暗号化多項式Ｅ１（Ａ）を生成する。
【０１０１】
一方、端末装置３０１−２、暗号処理装置１０１、及び認証装置３０２は、ｋの値を記憶しており、端末装置３０１−２は、図８と同様の暗号化処理を行う。図８のステップ８０２において、端末装置３０１−２は、多項式ｐｍ２（Ｂ）にｘkを乗算することで、多項式ｐｍ２’（Ｂ）を生成する。
ｐｍ２’（Ｂ）＝ｐｍ２（Ｂ）＊ｘk
＝ｂ1ｘk+d＋ｂ2ｘk+d-1＋・・・＋ｂdｘk+1      （５４）
【０１０２】
そして、端末装置３０１−２は、暗号化多項式Ｅ（ｐｍ２’（Ｂ））を暗号化多項式Ｅ２（Ｂ）として用いて暗号情報を生成し、生成した暗号情報を暗号処理装置１０１へ送信する。
【０１０３】
多項式Ｌが内積の多項式Ｄに対応する場合、暗号処理装置１０１の生成部１１２は、式（２７）により暗号演算結果Ｅ（Ｄ）を生成する。一方、多項式Ｌがハミング距離の多項式ＤHに対応する場合、生成部１１２は、多項式ｐｍ２（Ｃ）にｘkを乗算することで、多項式ｐｍ２’（Ｃ）を生成する。
ｐｍ２’（Ｃ）＝ｐｍ２（Ｃ）＊ｘk
＝（ｘd＋ｘd-1＋・・・＋ｘ）＊ｘk
＝ｘk+d＋ｘk+d-1＋・・・＋ｘk+1      （５５）
【０１０４】
そして、生成部１１２は、暗号化多項式Ｅ（ｐｍ２’（Ｃ））を生成し、暗号化多項式Ｅ（ｐｍ２’（Ｃ））を暗号化多項式Ｅ２（Ｃ）として用いて、式（２８）により暗号演算結果Ｅ（ＤH）を生成する。
【０１０５】
暗号処理装置１０１が行うマスク処理は、図９と同様であり、認証装置３０２が行う認証処理は、図１０と同様である。
【０１０６】
多項式ｐｍ２（Ｂ）にｘkを乗算する代わりに、ベクトルＢを次式のようなｄ＋ｋ次元のベクトルＢ’に変換してから、多項式ｐｍ２（Ｂ’）を生成してもよい。
Ｂ’＝（ｂ1，ｂ2，ｂ3，．．．，ｂd，０，０，．．．，０）      （５６）
【０１０７】
式（５６）のベクトルＢ’の第１要素〜第ｄ要素はｂ1〜ｂdであり、第ｄ＋１要素〜第ｄ＋ｋ要素は０である。この場合、多項式ｐｍ２（Ｂ’）は多項式ｐｍ２’（Ｂ）と等価になる。
【０１０８】
多項式ｐｍ１（Ａ）又は多項式ｐｍ２（Ｂ）にｘkを乗算する操作は、暗号化多項式Ｅ１（Ａ）又は暗号化多項式Ｅ２（Ｂ）に対しても、暗号化されたままで実施できる。そこで、端末装置３０１−１又は端末装置３０１−２の代わりに、暗号処理装置１０１が暗号化多項式Ｅ１（Ａ）又は暗号化多項式Ｅ２（Ｂ）に対してＥ（ｘk）を乗算してもよい。あるいは、暗号処理装置１０１は、暗号演算結果Ｅ（Ｌ）に対してＥ（ｘk）を乗算してもよい。
【０１０９】
図９のステップ９０１〜ステップ９０６の処理は、暗号処理装置１０１以外の装置が行うことも可能である。例えば、別のサービス業者が運用する装置が暗号化マスク多項式Ｅ（ｐｍ（Ｒ））を生成して暗号処理装置１０１に送信すれば、暗号処理装置１０１は、ｋの値を記憶していなくても、ステップ９０７の処理を行うことができる。
【０１１０】
図１１のステップ１１０１の処理は、認証装置３０２以外の装置が行うことも可能である。例えば、別のサービス業者が運用する装置がＥ（ｘ-k）を生成して認証装置３０２に送信すれば、認証装置３０２は、ｋの値を記憶していなくても、ステップ１１０２〜ステップ１１０５の処理を行うことができる。
【０１１１】
多項式Ｌのマスクしない項の次数をシフトする操作を一度に行うのではなく、複数回に分けて行うことも可能である。例えば、ｋ＝ｋ１＋ｋ２となるｋ１及びｋ２（ｋ１及びｋ２は１以上の整数）を用いて、端末装置３０１−１が多項式ｐｍ１（Ａ）の次数ｄ−１をｋ１だけシフトし、暗号処理装置１０１が暗号演算結果Ｅ（Ｌ）の次数をｋ２だけシフトしてもよい。これにより、多項式Ｌにおいて演算結果が現れる項の次数Ｍ−１をｋだけシフトすることができる。
【０１１２】
この場合、端末装置３０１−１は、ｋ１の値を記憶しており、暗号処理装置１０１及び認証装置３０２は、ｋ１及びｋ２の値を記憶している。
【０１１３】
図１２は、多項式ｐｍ１（Ａ）の次数をｋ１だけシフトする暗号化処理の例を示すフローチャートである。図１２のステップ１２０１〜ステップ１２０３の処理は、ｋをｋ１に置き換えた点を除いて、図８のステップ８０１〜ステップ８０３の処理と同様である。
【０１１４】
図１３は、暗号演算結果Ｅ（Ｌ）の次数をｋ２だけシフトする暗号処理の例を示すフローチャートである。図１３のステップ１３０１の暗号演算処理は、図５のステップ５０１の暗号演算処理と同様であり、ステップ１３０３のマスク処理は、図９のマスク処理と同様である。
【０１１５】
暗号演算結果Ｅ（Ｌ）を生成すると、生成部１１２は、ｘk2を準同型暗号により暗号化してＥ（ｘk2）を生成し、暗号演算結果Ｅ（Ｌ）にＥ（ｘk2）を乗算する（ステップ１３０２）。これにより、暗号演算結果Ｅ（Ｌ）の次数がｋ２だけシフトされる。その後、生成部１１２は、ステップ１３０３のマスク処理を行う。認証装置３０２が行う認証処理は、図１０又は図１１と同様である。
【０１１６】
なお、ステップ１３０２のシフト操作は、ステップ１３０３の後で行うことも可能である。この場合、生成部１１２は、ｋをｋ１に置き換えてステップ１３０３のマスク処理を行った後、生成した暗号化多項式Ｅ（Ｌ’）にＥ（ｘk2）を乗算する。
【０１１７】
端末装置３０１−１が多項式ｐｍ１（Ａ）の次数ｄ−１をｋ１だけシフトする代わりに、端末装置３０１−２が多項式ｐｍ２（Ｂ）の次数ｄをｋ１だけシフトしてもよい。
【０１１８】
このように、シフト操作をどの装置で実行するか、及びシフト操作を何回に分けて実行するかについては、様々な方法が考えられる。しかし、いずれの方法においても、シフト操作とマスク操作とを組み合わせることが可能である。
【０１１９】
暗号化マスク多項式Ｅ（ｐｍ（Ｒ））は、公開鍵ｐｋと、ベクトルＡ及びベクトルＢの次元ｄと、シフト数ｋとに依存して生成され、ベクトルＡ及びベクトルＢの要素には依存しない。このため、利用形態によっては、ベクトルＡ及びベクトルＢの暗号化処理よりも前に、暗号化マスク多項式Ｅ（ｐｍ（Ｒ））を生成することが可能である。事前に暗号化マスク多項式Ｅ（ｐｍ（Ｒ））を生成しておけば、マスク処理の処理時間を短縮することができる。
【０１２０】
図６のステップ６０５又は図９のステップ９０５において、ランダムベクトルＲの第Ｍ要素ｒMとして０を用いる代わりに、乱数を用いてもよい。この場合、ｒMの値を認証装置３０２へ通知することで、認証装置３０２は、多項式Ｌ’のｘM-1の項の係数からｒMを減算して、ベクトルＡとベクトルＢの演算結果を求めることができる。一方、ｒMの値を通知されていなければ、認証装置３０２は、暗号化多項式Ｅ（Ｌ’）からベクトルＡとベクトルＢの演算結果を求めることが極めて困難になる。したがって、ｒMとして乱数を用いることで、演算結果の秘匿性がさらに向上する。
【０１２１】
図１の暗号処理装置１０１及び図３の生体認証システムの構成は一例に過ぎず、暗号処理装置１０１の用途や条件に応じて一部の構成要素を省略又は変更してもよい。例えば、図３の生体認証システムにおいて、暗号処理装置１０１以外の装置が暗号演算処理を行う場合、登録暗号情報３１１を記憶する記憶部１１１を省略することができる。
【０１２２】
図３の生体認証システムにおいて、暗号化処理４０１−１と暗号化処理４０１−２とを、同じ端末装置（端末装置３０１−１又は端末装置３０１−２）が行ってもよい。複数のユーザが暗号化処理４０１−１を行ってもよく、複数のユーザのための複数の端末装置３０１−１を設けてもよい。同様に、複数のユーザが暗号化処理４０１−２を行ってもよく、複数のユーザのための複数の端末装置３０１−２を設けてもよい。
【０１２３】
さらに、図１の暗号処理装置１０１は、ベクトルＡとベクトルＢの内積を含む演算結果を利用する、生体認証システム以外のシステムにも適用できる。例えば、多くのタグの中からある特徴を有するタグを検索するタグ検索システムにおいて、暗号処理装置１０１が、２つのタグの特徴ベクトルを比較するための暗号処理を行ってもよい。
【０１２４】
図２及び図５〜図１３のフローチャートは一例に過ぎず、暗号処理装置１０１又は生体認証システムの構成や条件に応じて一部の処理を省略又は変更してもよい。例えば、ｎと２ｄとの大小関係があらかじめ決められている場合、図６のステップ６０１〜ステップ６０３の処理と、図９のステップ９０１〜ステップ９０３の処理とを省略することができる。
【０１２５】
また、図６及び図９のマスク処理において、多項式Ｌに含まれるｘM-1の項以外のすべての係数をマスクする必要はない。例えば、多項式Ｌの一部の項の係数からベクトルＡ又はベクトルＢの情報が漏洩する可能性が低い場合、ステップ６０５及びステップ９０５において、式（４１）のｒ1〜ｒM-1及びｒM+1〜ｒNのうち、その項に対応する係数を０にしてもよい。
【０１２６】
式（１）〜式（１７）、式（２１）〜式（３１）、式（４１）〜式（４３）、及び式（５１）〜式（５６）は一例に過ぎず、他の定式化を用いてもよい。例えば、式（２３）の昇順変換を登録者のベクトルＡに対して適用し、式（２４）の降順変換を認証対象者のベクトルＢに対して適用する代わりに、昇順変換をベクトルＢに対して適用し、降順変換をベクトルＡに対して適用してもよい。
【０１２７】
図１及び図３の暗号処理装置１０１、端末装置３０１−１、端末装置３０１−２、及び認証装置３０２は、例えば、ハードウェア回路として実装することができる。この場合、暗号処理装置１０１の各構成要素を個別の回路として実装してもよく、複数の構成要素を１つの集積回路として実装してもよい。
【０１２８】
暗号処理装置１０１、端末装置３０１−１、端末装置３０１−２、及び認証装置３０２は、図１４に示すような情報処理装置（コンピュータ）を用いて実現することも可能である。
【０１２９】
図１４の情報処理装置は、Central Processing Unit（ＣＰＵ）１４０１、メモリ１４０２、入力装置１４０３、出力装置１４０４、補助記憶装置１４０５、媒体駆動装置１４０６、及びネットワーク接続装置１４０７を含む。これらの構成要素はバス１４０８により互いに接続されている。
【０１３０】
メモリ１４０２は、例えば、Read Only Memory（ＲＯＭ）、Random Access Memory（ＲＡＭ）、フラッシュメモリ等の半導体メモリである。メモリ１４０２は、暗号処理装置１０１、端末装置３０１−１、端末装置３０１−２、又は認証装置３０２が行う処理のためのプログラム及びデータを格納する。メモリ１４０２は、記憶部１１１として用いることができる。
【０１３１】
情報処理装置が暗号処理装置１０１である場合、ＣＰＵ１４０１は、例えば、メモリ１４０２を利用してプログラムを実行することにより、生成部１１２として動作し、暗号処理を行う。
【０１３２】
情報処理装置が端末装置３０１−１、端末装置３０１−２、又は認証装置３０２である場合、ＣＰＵ１４０１は、例えば、メモリ１４０２を利用してプログラムを実行することにより、端末装置３０１−１、端末装置３０１−２、又は認証装置３０２の処理を行う。
【０１３３】
入力装置１４０３は、例えば、キーボード、ポインティングデバイス等であり、ユーザ又はオペレータからの指示や情報の入力に用いられる。出力装置１４０４は、例えば、表示装置、プリンタ、スピーカ等であり、ユーザ又はオペレータへの問い合わせや処理結果の出力に用いられる。処理結果は、認証装置３０２による認証処理の判定結果であってもよい。
【０１３４】
補助記憶装置１４０５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。補助記憶装置１４０５は、ハードディスクドライブ又はフラッシュメモリであってもよい。情報処理装置は、補助記憶装置１４０５にプログラム及びデータを格納しておき、それらをメモリ１４０２にロードして使用することができる。補助記憶装置１４０５は、記憶部１１１として用いることができる。
【０１３５】
媒体駆動装置１４０６は、可搬型記録媒体１４０９を駆動し、その記録内容にアクセスする。可搬型記録媒体１４０９は、メモリデバイス、フレキシブルディスク、光ディスク、光磁気ディスク等である。可搬型記録媒体１４０９は、Compact Disk Read Only Memory（ＣＤ−ＲＯＭ）、Digital Versatile Disk（ＤＶＤ）、Universal Serial Bus（ＵＳＢ）メモリ等であってもよい。ユーザ又はオペレータは、この可搬型記録媒体１４０９にプログラム及びデータを格納しておき、それらをメモリ１４０２にロードして使用することができる。
【０１３６】
このように、プログラム及びデータを格納するコンピュータ読み取り可能な記録媒体は、メモリ１４０２、補助記憶装置１４０５、及び可搬型記録媒体１４０９のような、物理的な（非一時的な）記録媒体である。
【０１３７】
ネットワーク接続装置１４０７は、Local Area Network（ＬＡＮ）、インターネット等の通信ネットワークに接続され、通信に伴うデータ変換を行う通信インタフェースである。情報処理装置は、ネットワーク接続装置１４０７を介して外部の装置からプログラム及びデータを受信し、それらをメモリ１４０２にロードして使用することができる。ネットワーク接続装置１４０７は、出力部１１３として用いることができる。
【０１３８】
なお、情報処理装置が図１４のすべての構成要素を含む必要はなく、用途や条件に応じて一部の構成要素を省略することも可能である。例えば、ユーザ又はオペレータからの指示や情報の入力を行わない場合は、入力装置１４０３を省略してもよく、ユーザ又はオペレータへの問い合わせや処理結果の出力を行わない場合は、出力装置１４０４を省略してもよい。情報処理装置が可搬型記録媒体１４０９にアクセスしない場合は、媒体駆動装置１４０６を省略してもよい。
【０１３９】
開示の実施形態とその利点について詳しく説明したが、当業者は、特許請求の範囲に明確に記載した本発明の範囲から逸脱することなく、様々な変更、追加、省略をすることができるであろう。
【０１４０】
図１乃至図１４を参照しながら説明した実施形態に関し、さらに以下の付記を開示する。
（付記１）
コンピュータが、
第１のベクトルに対応する第１の多項式を暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を暗号化した第２の暗号化多項式とを乗算した結果を用いて、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有する第１の項を含み、前記第１の項以外の第２の項が有する係数がマスクされた第３の多項式の暗号化結果に対応する第３の暗号化多項式を生成し、
前記第３の暗号化多項式を表す暗号情報を出力する、
ことを特徴とする暗号処理方法。
（付記２）
前記第３の多項式に含まれる複数の項のうち前記第２の項を含む１つ以上の項の係数が乱数によりマスクされることを特徴とする付記１記載の暗号処理方法。
（付記３）
前記第１の暗号化多項式と前記第２の暗号化多項式とは、格子次元ｎの準同型暗号により生成され、前記第１の項の次数は、前記第１のベクトルの次元ｄと０以上の整数ｋとを用いて、ｄ＋ｋ＋１をｎで除算したときの剰余よりも１だけ小さい整数により表されることを特徴とする付記１又は２記載の暗号処理方法。
（付記４）
前記コンピュータは前記暗号情報を復号装置へ送信し、前記第３の多項式は前記第３の暗号化多項式の復号結果に対応し、前記整数ｋは１以上の整数であり、前記復号装置は、前記整数ｋを用いて、前記第３の多項式に含まれる前記第１の項が有する前記係数を求めることを特徴とする付記３記載の暗号処理方法。
（付記５）
前記内積に基づく前記係数は、前記第１のベクトルと前記第２のベクトルの相違度又は類似度を表すことを特徴とする付記１乃至４のいずれか１項に記載の暗号処理方法。
（付記６）
第１のベクトルに対応する第１の多項式を暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を暗号化した第２の暗号化多項式とを乗算した結果を用いて、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有する第１の項を含み、前記第１の項以外の第２の項が有する係数がマスクされた第３の多項式の暗号化結果に対応する第３の暗号化多項式を生成する生成部と、
前記第３の暗号化多項式を表す暗号情報を出力する出力部と、
を備えることを特徴とする暗号処理装置。
（付記７）
前記第３の多項式に含まれる複数の項のうち前記第２の項を含む１つ以上の項の係数が乱数によりマスクされることを特徴とする付記６記載の暗号処理装置。
（付記８）
前記第１の暗号化多項式と前記第２の暗号化多項式とは、格子次元ｎの準同型暗号により生成され、前記第１の項の次数は、前記第１のベクトルの次元ｄと０以上の整数ｋとを用いて、ｄ＋ｋ＋１をｎで除算したときの剰余よりも１だけ小さい整数により表されることを特徴とする付記６又は７記載の暗号処理装置。
（付記９）
前記出力部は前記暗号情報を復号装置へ送信し、前記第３の多項式は前記第３の暗号化多項式の復号結果に対応し、前記整数ｋは１以上の整数であり、前記復号装置は、前記整数ｋを用いて、前記第３の多項式に含まれる前記第１の項が有する前記係数を求めることを特徴とする付記８記載の暗号処理装置。
（付記１０）
前記内積に基づく前記係数は、前記第１のベクトルと前記第２のベクトルの相違度又は類似度を表すことを特徴とする付記６乃至９のいずれか１項に記載の暗号処理装置。
（付記１１）
第１のベクトルに対応する第１の多項式を暗号化した第１の暗号化多項式と、第２のベクトルに対応する第２の多項式を暗号化した第２の暗号化多項式とを乗算した結果を用いて、前記第１のベクトルと前記第２のベクトルとの内積に基づく係数を有する第１の項を含み、前記第１の項以外の第２の項が有する係数がマスクされた第３の多項式の暗号化結果に対応する第３の暗号化多項式を生成し、
前記第３の暗号化多項式を表す暗号情報を出力する、
処理をコンピュータに実行させる暗号処理プログラム。
（付記１２）
前記第３の多項式に含まれる複数の項のうち前記第２の項を含む１つ以上の項の係数が乱数によりマスクされることを特徴とする付記１１記載の暗号処理プログラム。
（付記１３）
前記第１の暗号化多項式と前記第２の暗号化多項式とは、格子次元ｎの準同型暗号により生成され、前記第１の項の次数は、前記第１のベクトルの次元ｄと０以上の整数ｋとを用いて、ｄ＋ｋ＋１をｎで除算したときの剰余よりも１だけ小さい整数により表されることを特徴とする付記１１又は１２記載の暗号処理プログラム。
（付記１４）
前記コンピュータは前記暗号情報を復号装置へ送信し、前記第３の多項式は前記第３の暗号化多項式の復号結果に対応し、前記整数ｋは１以上の整数であり、前記復号装置は、前記整数ｋを用いて、前記第３の多項式に含まれる前記第１の項が有する前記係数を求めることを特徴とする付記１３記載の暗号処理プログラム。
（付記１５）
前記内積に基づく前記係数は、前記第１のベクトルと前記第２のベクトルの相違度又は類似度を表すことを特徴とする付記１１乃至１４のいずれか１項に記載の暗号処理プログラム。
【符号の説明】
【０１４１】
１０１  暗号処理装置
１１１  記憶部
１１２  生成部
１１３  出力部
３０１−１、３０１−２  端末装置
３０２  認証装置
３１１  登録暗号情報
４０１−１、４０１−２  暗号化処理
４０２  暗号演算処理
４０３  マスク処理
４０４  復号処理
１４０１  ＣＰＵ
１４０２  メモリ
１４０３  入力装置
１４０４  出力装置
１４０５  補助記憶装置
１４０６  媒体駆動装置
１４０７  ネットワーク接続装置
１４０８  バス
１４０９  可搬型記録媒体
【図１】
0006413598.tif 000002
【図２】
0006413598.tif 000003
【図３】
0006413598.tif 000004
【図４】
0006413598.tif 000005
【図５】
0006413598.tif 000006
【図６】
0006413598.tif 000007
【図７】
0006413598.tif 000008
【図８】
0006413598.tif 000009
【図９】
0006413598.tif 000010
【図１０】
0006413598.tif 000011
【図１１】
0006413598.tif 000012
【図１２】
0006413598.tif 000013
【図１３】
0006413598.tif 000014
【図１４】
0006413598.tif 000015