(57)【特許請求の範囲】
【請求項１】
ＦＩＢＥ方式の公開鍵を用いて平文から暗号文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の暗号化装置において、暗号文を生成する際に用いる暗号化関数（数１式）の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｎ（ｘ）（数２式）の演算処理方法であって、
前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める前記数２式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する第１のステップと、
前記補間係数算出手段が、前記数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップと、
前記補間係数算出手段が、各スレッドが担当する前記数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する第３のステップと、
前記補間係数算出手段が、各ブロック内において、各変数ｊについて前記第３のステップで得られた演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップと、
を含むことを特徴とする演算処理方法。
【数１】
0005709773.tif 000008
【数２】
0005709773.tif 000009
【請求項２】
前記数２式を変形して得られる数３式を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求め、
前記第２のステップにおいて、前記補間係数算出手段が、前記数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を実行するブロックを、前記ブロック内に変数ｊ毎に生成し、
前記第３のステップにおいて、前記補間係数算出手段が、各スレッドが担当する前記数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行し、
前記第４のステップにおいて、前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで得られた（ｘ−ｊ）の演算結果および（ｉ−ｊ）の演算結果それぞれの総積処理を、前記ＧＰＵを用いて並列に実行し、
更に、
前記補間係数算出手段が、前記第４のステップの総積処理により得られた（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理を、ＣＰＵを用いてシーケンシャルに実行する第５のステップを含むことを特徴とする請求項１に記載の演算処理方法。
【数３】
0005709773.tif 000010
【請求項３】
前記第５のステップが、
前記補間係数算出手段が、（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する第６のステップと、
前記補間係数算出手段が、各ブロック内に、前記各乗算処理における各桁の乗算処理を実行する各スレッドを生成する第７のステップと、
前記補間係数算出手段が、各スレッドが担当する前記各桁の乗算処理を、前記ＧＰＵを用いて並列に実行する第８のステップと、
前記補間係数算出手段が、前記第８のステップで実行された前記各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する第９のステップと、
前記補間係数算出手段が、前記各桁の乗算処理結果の加算処理を、前記ＧＰＵを用いて並列に実行する第１０のステップと、
を含むことを特徴とする請求項２に記載の演算処理方法。
【請求項４】
前記第５のステップは、更に、
前記補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する第１１のステップと、
前記補間係数算出手段が、各スレッドが担当する加算処理を、前記ＧＰＵを用いて並列に実行する第１２のステップと、
を含み、
前記補間係数算出手段が、下位桁からの繰り上がりが無くなるまで前記第１２のステップを繰り返すことを特徴とする請求項３に記載の演算処理方法。
【請求項５】
ＦＩＢＥ方式の秘密鍵と暗号文とを入力として、復号関数（数４式）から平文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｓ（０）（数５式）の演算処理方法であって、
前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｓ（０）を求める前記数５式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する第１のステップと、
前記補間係数算出手段が、前記数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップと、
前記補間係数算出手段が、各スレッドが担当する前記数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップと、
前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップと、
を含むことを特徴とする演算処理方法。
【数４】
0005709773.tif 000011
【数５】
0005709773.tif 000012
【請求項６】
ＦＩＢＥ方式の公開鍵を用いて平文から暗号文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の暗号化装置において、暗号文を生成するのに必要な暗号化関数（数６式）の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｎ（ｘ）（数７式）の演算処理方法をコンピュータに実行させるプログラムであって、
前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める前記数７式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する第１のステップと、
前記補間係数算出手段が、前記数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップと、
前記補間係数算出手段が、各スレッドが担当する前記数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップと、
前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップと、
をコンピュータに実行させるプログラム。
【数６】
0005709773.tif 000013
【数７】
0005709773.tif 000014
【請求項７】
ＦＩＢＥ方式の秘密鍵と暗号文とを入力として、復号関数（数８式）から平文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｓ（０）（数９式）の演算処理方法をコンピュータに実行させるプログラムであって、
前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｓ（０）を求める前記数９式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する第１のステップと、
前記補間係数算出手段が、前記数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップと、
前記補間係数算出手段が、各スレッドが担当する前記数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップと、
前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップと、
をコンピュータに実行させるプログラム。
【数８】
0005709773.tif 000015
【数９】
0005709773.tif 000016
【請求項８】
前記補間係数算出手段が、請求項１から請求項４のいずれか１項に記載の演算処理方法を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求め、
前記暗号化関数値算出手段が、前記補間係数算出手段で算出されたラグランジュの補間係数Δｉ，Ｎ（ｘ）、および前記公開鍵に基づいて、前記暗号化関数の値を求め、
更に、
乱数を生成する乱数生成手段と、
生成された乱数、前記平文、および前記公開鍵に基づいて、２つの暗号文の要素を生成する第１の要素生成手段と、
前記生成された乱数、前記暗号化関数値算出手段で求められた暗号化関数の値、および前記公開鍵に基づいて、暗号文の要素を生成する第２の要素生成手段と、
を備え、
前記第１の要素生成手段および前記第２の要素生成手段で生成された要素を暗号文として生成することを特徴とする暗号化装置。
【請求項９】
前記補間係数算出手段が、請求項５に記載の演算処理方法を用いてラグランジュの補間係数の値を求め、
前記補間係数算出手段で求められたラグランジュの補間係数と、前記秘密鍵および前記暗号文とに基づいて、前記数４式に示す演算行い、平文を生成することを特徴とする復号装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＦＩＢＥ方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラムに関する。
【背景技術】
【０００２】
近年、銀行のＡＴＭやオフィスの入退室管理等において生体認証が広く使用されている。生体認証では、テンプレートとよばれる生体情報を事前に採取登録し、認証時にセンサで取得した情報とテンプレートとを比較することで認証を行う。生体認証は、パスワード認証等に比べて高い安全性が期待されているが、生体情報は生涯不変であるため、一度複製によって破られてしまうと一生安全性を回復できないという問題点があった。
【０００３】
そこで、生体情報を安全に保護する技術が重要であって、近年、Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ（ＦＩＢＥ）と呼ばれる暗号方式が注目されている（例えば、非特許文献１参照。）。ＦＩＢＥ方式は、信頼できる第三者である秘密鍵生成装置（ＰＫＧ：Ｐｒｉｖａｔｅ  Ｋｅｙ  Ｇｅｎｅｒａｔｏｒ）が、自らのマスター鍵を用いて各ユーザのＩＤ（生体情報等の属性の集合）に対応する公開鍵（暗号化鍵）および秘密鍵（復号鍵）を生成してユーザ端末に配布し、ユーザ端末は暗号化と復号とで異なる２つの鍵（公開鍵および秘密鍵）を使用する公開鍵暗号方式の一種である。
【０００４】
ＦＩＢＥ方式の特徴は、ある情報を暗号化する際に誤差を設定し、復号鍵がその誤差内に含まれていれば暗号化されている情報を正しく復号できることである。復号鍵として用いる、センサ等から取得された生体情報にはノイズが含まれるが、ＦＩＢＥ方式であれば、正規ユーザの生体情報に含まれるノイズは誤差内に抑えられ、暗号化されている情報を正しく復号することができる。一方で、非正規ユーザがなりすましを試みた場合、非正規ユーザの生体情報に含まれるノイズは誤差よりも大きくなるので、暗号化されている情報を復号することはできない。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ａｍｉｔ  Ｓａｈａｉ  ａｎｄ  Ｂｒｅｎｔ  Ｗａｔｅｒｓ，“Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ−Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ，”ＥＵＲＯＣＲＹＰＴ  ２００５，  ２００５．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したＦＩＢＥ方式は、生体認証の安全性を確保する技術として有効である。しかしながら、ＦＩＢＥ方式の暗号化処理および復号処理は計算量が多いために処理時間が長く、実用化が困難であるという問題点があった。特に、暗号化処理において暗号文を生成する際に用いる暗号化関数内の２重のループ処理がボトルネックであった。また、復号処理においても平文を生成する際に用いる復号関数内の２重のループ処理がボトルネックであった。
【０００７】
ところで、描画処理に利用されるＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の計算性能の高さから、ＧＰＵを科学計算に応用する技術が普及し始めている。ＧＰＵは、汎用の処理装置であるＣＰＵ（中央処理装置：Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）に比べ、浮動小数点演算を並列かつ高速に実行できる。すなわち、ＧＰＵは、大量のデータに並列に同じ演算を繰り返すような用途であれば、ＣＰＵに比べ非常に効率よく高速に処理を実行できる。
【０００８】
そこで、本発明は、上述の課題に鑑みてなされたものであり、ＦＩＢＥ方式の暗号化処理において、暗号化関数内の２重のループ処理を分割し、ＧＰＵで並列に演算することにより、ＦＩＢＥ方式の暗号化処理を高速化したＦＩＢＥ方式の暗号化装置、ＦＩＢＥ方式の暗号化関数の計算方法、およびプログラムを提供することを目的とする。また、ＦＩＢＥ方式の復号処理において、復号関数内の２重のループ処理を分割し、ＧＰＵで並列に演算することによって、処理を高速化したＦＩＢＥ方式の復号装置、ＦＩＢＥ方式の復号方法、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
【００１０】
（１）  本発明は、ＦＩＢＥ方式の公開鍵を用いて平文から暗号文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の暗号化装置において、暗号文を生成する際に用いる暗号化関数（数１式）の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｎ（ｘ）（数２式）の演算処理方法であって、前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める前記数２式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する第１のステップ（例えば、図７のステップＳ４１に相当）と、前記補間係数算出手段が、前記数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップ（例えば、図７のステップＳ４２に相当）と、前記補間係数算出手段が、各スレッドが担当する前記数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する第３のステップ（例えば、図７のステップＳ４３に相当）と、前記補間係数算出手段が、各ブロック内において、各変数ｊについて前記第３のステップで得られた演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップ（例えば、図７のステップＳ４４に相当）と、を含むことを特徴とする演算処理方法を提案している。
【００１１】
この発明によれば、まず、第１のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める数２式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する。次に、第２のステップにおいて、補間係数算出手段が、数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する。次に、第３のステップにおいて、補間係数算出手段が、各スレッドが担当する数２式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する。次に、第４のステップにおいて、補間係数算出手段が、各ブロック内において、各変数ｊについて第３のステップで得られた演算結果の総積処理を、ＧＰＵを用いて並列に実行する。したがって、ＦＩＢＥ方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δｉ，Ｎ（ｘ）の演算処理において、ｉを変数としたループ処理、およびｉを変数としたループ処理に含まれるｊを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、ＧＰＵを用いて並列に実行することにより、暗号化処理を高速化することができる。
【００１２】
（２）  本発明は、（１）のラグランジュの補間係数Δｉ，Ｎ（ｘ）の演算処理方法について、前記数２式を変形して得られる数３式を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求め、前記第２のステップにおいて、前記補間係数算出手段が、前記数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を実行するブロックを、前記ブロック内に変数ｊ毎に生成し、前記第３のステップにおいて、前記補間係数算出手段が、各スレッドが担当する前記数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行し、前記第４のステップにおいて、前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで得られた（ｘ−ｊ）の演算結果および（ｉ−ｊ）の演算結果それぞれの総積処理を、前記ＧＰＵを用いて並列に実行し、更に、前記補間係数算出手段が、前記第４のステップの総積処理により得られた（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理を、ＣＰＵを用いてシーケンシャルに実行する第５のステップを含むことを特徴とする演算処理方法を提案している。
【００１３】
この発明によれば、数２式を変形して得られる数３式を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める。第１のステップに続いて、第２のステップにおいて、補間係数算出手段が、数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を実行するブロックを、ブロック内に変数ｊ毎に生成する。次に、第３のステップにおいて、補間係数算出手段が、各スレッドが担当する数３式の多項式（ｘ−ｊ）および（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する。次に、第４のステップにおいて、補間係数算出手段が、各ブロック内において、各ｊについて第３のステップで得られた（ｘ−ｊ）の演算結果および（ｉ−ｊ）の演算結果それぞれの総積処理を、ＧＰＵを用いて並列に実行する。次に、第５のステップにおいて、補間係数算出手段が、第４のステップの総積処理により得られた（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理を、ＣＰＵを用いてシーケンシャルに実行する。したがって、ＦＩＢＥ方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δｉ，Ｎ（ｘ）の式を変形し、変形した式によるラグランジュの補間係数Δｉ，Ｎ（ｘ）演算処理において、ｉを変数としたループ処理、およびｉを変数としたループ処理に含まれるｊを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、ＧＰＵを用いて並列に実行し、更に、除算回数を削減するともにＣＰＵで実行することにより、更に暗号化処理を高速化することができる。
【００１４】
（３）  本発明は、（２）のラグランジュの補間係数Δｉ，Ｎ（ｘ）の演算処理方法について、前記第５のステップが、前記補間係数算出手段が、（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する第６のステップと、前記補間係数算出手段が、各ブロック内に、前記各乗算処理における各桁の乗算処理を実行する各スレッドを生成する第７のステップと、前記補間係数算出手段が、各スレッドが担当する前記各桁の乗算処理を、前記ＧＰＵを用いて並列に実行する第８のステップと、前記補間係数算出手段が、前記第８のステップで実行された前記各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する第９のステップと、前記補間係数算出手段が、前記各桁の乗算処理結果の加算処理を、前記ＧＰＵを用いて並列に実行する第１０のステップと、を含むことを特徴とする演算処理方法を提案している。
【００１５】
この発明によれば、第６のステップにおいて、補間係数算出手段が、（ｘ−ｊ）の総積結果と（ｉ−ｊ）の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する。次に、第７のステップにおいて、補間係数算出手段が、各ブロック内に、各乗算処理における各桁の乗算処理を実行する各スレッドを生成する。次に、第８のステップにおいて、補間係数算出手段が、各スレッドが担当する各桁の乗算処理を、ＧＰＵを用いて並列に実行する。次に、第９のステップにおいて、補間係数算出手段が、第８のステップで実行された各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する。次に、第１０のステップにおいて、補間係数算出手段が、各桁の乗算処理結果の加算処理を、ＧＰＵを用いて並列に実行する。したがって、除算処理に含まれる乗算処理をブロックに、乗算処理における各桁の乗算処理をスレッドに割り当て、ＧＰＵを用いて並列に実行することにより、暗号化処理を更に高速化することができる。
【００１６】
（４）  本発明は、（３）のラグランジュの補間係数Δｉ，Ｎ（ｘ）の演算処理方法について、前記第５のステップは、更に、前記補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する第１１のステップと、前記補間係数算出手段が、各スレッドが担当する加算処理を、前記ＧＰＵを用いて並列に実行する第１２のステップと、を含み、前記補間係数算出手段が、下位桁からの繰り上がりが無くなるまで前記第１２のステップを繰り返すことを特徴とする演算処理方法を提案している。
【００１７】
この発明によれば、第１０のステップに続いて、第１１のステップにおいて、補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する。次に、第１２のステップにおいて、補間係数算出手段が、各スレッドが担当する加算処理を、ＧＰＵを用いて並列に実行する。そして、補間係数算出手段が、下位桁からの繰り上がりが無くなるまで第１２のステップを繰り返す。したがって、各桁を所定長に揃える規格化における、繰り上がりと上位桁との加算処理をスレッドに割り当て、ＧＰＵを用いて並列に実行することにより、暗号化処理を更に高速化することができる。
【００１８】
（５）  本発明は、ＦＩＢＥ方式の秘密鍵と暗号文とを入力として、復号関数（数４式）から平文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｓ（０）（数５式）の演算処理方法であって、前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｓ（０）を求める前記数５式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する第１のステップ（例えば、図１４のステップＳ１１１）と、前記補間係数算出手段が、前記数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップ（例えば、図１４のステップＳ１１２）と、前記補間係数算出手段が、各スレッドが担当する前記数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップ（例えば、図１４のステップＳ１１３）と、前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップ（例えば、図１４のステップＳ１１４）と、を含むことを特徴とする演算処理方法を提案している。
【００１９】
この発明によれば、まず、第１のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δｉ，Ｓ（０）を求める数５式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する。次に、第２のステップにおいて、補間係数算出手段が、数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する。次に、第３のステップにおいて、補間係数算出手段が、各スレッドが担当する数５式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する。次に、第４のステップにおいて、補間係数算出手段が、各ブロック内において、各ｊについて第３のステップで実行された演算結果の総積処理を、ＧＰＵを用いて並列に実行する。したがって、ＦＩＢＥ方式の復号処理にあって、処理に時間を要していた復号関数に含まれるラグランジュの補間係数の演算処理において、ｉを変数としたループ処理、およびｉを変数としたループ処理に含まれるｊを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、ＧＰＵを用いて並列に実行することにより、復号処理を高速化することができる。
【００２０】
（６）  本発明は、ＦＩＢＥ方式の公開鍵を用いて平文から暗号文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の暗号化装置において、暗号文を生成するのに必要な暗号化関数（数６式）の値を求める暗号化関数算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｎ（ｘ）（数７式）の演算処理方法をコンピュータに実行させるプログラムであって、前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める前記数７式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する第１のステップ（例えば、図７のステップＳ４１に相当）と、前記補間係数算出手段が、前記数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップ（例えば、図７のステップＳ４２に相当）と、前記補間係数算出手段が、各スレッドが担当する前記数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップ（例えば、図７のステップＳ４３に相当）と、前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップ（例えば、図７のステップＳ４４に相当）と、をコンピュータに実行させるプログラムを提案している。
【００２１】
この発明によれば、まず、第１のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める数７式の右辺の演算処理を実行するブロックを変数ｉ毎に生成する。次に、第２のステップにおいて、補間係数算出手段が、数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する。次に、第３のステップにおいて、補間係数算出手段が、各スレッドが担当する数７式の多項式（ｘ−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する。次に、第４のステップにおいて、補間係数算出手段が、各ブロック内において、各変数ｊについて第３のステップで得られた演算結果の総積処理を、ＧＰＵを用いて並列に実行する。したがって、ＦＩＢＥ方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δｉ，Ｎ（ｘ）の演算処理において、ｉを変数としたループ処理、およびｉを変数としたループ処理に含まれるｊを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、ＧＰＵを用いて並列に実行することにより、暗号化処理を高速化することができる。
【００２２】
（７）  本発明は、ＦＩＢＥ方式の秘密鍵と暗号文とを入力として、復号関数（数８式）から平文を生成するＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δｉ，Ｓ（０）（数９式）の演算処理方法をコンピュータに実行させるプログラムであって、前記補間係数算出手段が、前記ラグランジュの補間係数Δｉ，Ｓ（０）を算出する前記数９式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する第１のステップ（例えば、図１４のステップＳ１１１）と、前記補間係数算出手段が、前記数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する第２のステップ（例えば、図１４のステップＳ１１２）と、前記補間係数算出手段が、各スレッドが担当する前記数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、前記ＧＰＵを用いて並列に実行する第３のステップ（例えば、図４のステップＳ１１３）と、前記補間係数算出手段が、各ブロック内において、各ｊについて前記第３のステップで実行された演算結果の総積処理を、前記ＧＰＵを用いて並列に実行する第４のステップ（例えば、図１４のステップＳ１１４）と、をコンピュータに実行させるプログラムを提案している。
【００２３】
この発明によれば、まず、第１のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δｉ，Ｓ（０）を求める数９式の右辺の演算処理を実行するブロックを、変数ｉ毎に生成する。次に、第２のステップにおいて、補間係数算出手段が、数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを、ブロック内に変数ｊ毎に生成する。次に、第３のステップにおいて、補間係数算出手段が、各スレッドが担当する数９式の多項式（−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵを用いて並列に実行する。次に、第４のステップにおいて、補間係数算出手段が、各ブロック内において、各ｊについて第３のステップで実行された演算結果の総積処理を、ＧＰＵを用いて並列に実行する。したがって、ＦＩＢＥ方式の復号処理にあって、処理に時間を要していた復号関数に含まれるラグランジュの補間係数の演算処理において、ｉを変数としたループ処理、およびｉを変数としたループ処理に含まれるｊを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、ＧＰＵを用いて並列に実行することにより、復号処理を高速化することができる。
【００２４】
（８）  本発明は、前記補間係数算出手段（例えば、図３の補間係数算出部１５１に相当）が、（１）から（４）のいずれか１項に記載の演算処理方法を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求め、前記暗号化関数算出手段（例えば、図３の暗号化関数値算出部１５０に相当）が、前記補間係数算出手段で算出されたラグランジュの補間係数Δｉ，Ｎ（ｘ）、および前記公開鍵に基づいて、前記暗号化関数の値を求め、更に、乱数を生成する乱数生成手段（例えば、図３の乱数生成部１１０に相当）と、生成された乱数、前記平文、および前記公開鍵に基づいて、２つの暗号文の要素を生成する第１の要素生成手段（例えば、図３のＥ´算出部１２０およびＥ´´算出部１３０に相当）と、前記生成された乱数、前記暗号化関数算出手段で求められた暗号化関数の値、および前記公開鍵に基づいて、暗号文の要素を生成する第２の要素生成手段（例えば、図３のＥｉ算出部１４０に相当）と、を備え、前記第１の要素生成手段および第２の要素生成手段で生成された要素を暗号文として生成することを特徴とする暗号化装置を提案している。
【００２５】
この発明によれば、補間係数算出手段は、（１）から（４）のいずれかに記載の演算処理方法を用いてラグランジュの補間係数Δｉ，Ｎ（ｘ）を求める。暗号化関数算出手段は、補間係数算出手段で算出されたラグランジュの補間係数Δｉ，Ｎ（ｘ）、および公開鍵に基づいて、暗号化関数の値を求める。乱数生成手段は、乱数を生成する。第１の要素生成手段は、生成された乱数、平文、および公開鍵に基づいて、２つの暗号文の要素を生成する。第２の要素生成手段は、生成された乱数、暗号化関数算出手段で求められた暗号化関数の値、および公開鍵に基づいて、暗号文の要素を生成する。したがって、ＧＰＵを用いて並列に処理を実行することにより高速化されたラグランジュの補間係数の演算処理方法を用いることにより、処理速度が向上した暗号化装置を提供することができる。
【００２６】
（９）  本発明は、前記補間係数算出手段が、（５）に記載の演算処理方法を用いてラグランジュの補間係数の値を求め、前記補間係数算出手段で求められたラグランジュの補間係数と、前記秘密鍵および前記暗号文とに基づいて、前記数４式に示す演算行い、平文を生成することを特徴とする復号装置を提案している。
【００２７】
この発明によれば、補間係数算出手段が、（５）に記載の演算処理方法を用いてラグランジュの補間係数の値を求める。復号装置が、補間係数算出手段で求められたラグランジュの補間係数と、秘密鍵および暗号文とに基づいて、数４式に示す演算行い、平文を生成する。したがって、ＧＰＵを用いて並列に処理を実行することにより高速化されたラグランジュの補間係数の演算処理方法を用いることにより、処理速度が向上した復号装置を提供することができる。
【発明の効果】
【００２８】
本発明によれば、ＦＩＢＥ方式の暗号化処理において、暗号化関数内の２重のループ処理を分割し、ＧＰＵで並列に演算することにより、ＦＩＢＥ方式の暗号化処理を高速化することができる。また、ＦＩＢＥ方式の復号処理において、復号関数内の２重のループ処理を分割し、ＧＰＵで並列に演算することによって、復号処理を高速化することができる。
【図面の簡単な説明】
【００２９】
【図１】本実施形態に係る暗号化装置、復号化装置、および秘密鍵生成装置のハードウェア構成の一例を示す図である。
【図２】ＦＩＢＥ方式の暗号システムの処理フローを示す図である。
【図３】ＦＩＢＥ方式の暗号化装置の構成の一例を示す図である。
【図４】ＦＩＢＥ方式の暗号化処理のフローを示す図である。
【図５】ＦＩＢＥ方式の暗号化処理における暗号化関数Ｔ（ｉ）の演算処理のフローを示す図である。
【図６】第１の実施形態に係るΔｉ，Ｎ（ｘ）の演算処理を、ＧＰＵを用いて並列に実行する１つ目の方法を示す図である。
【図７】第１の実施形態に係るΔｉ，Ｎ（ｘ）の演算処理を、ＧＰＵを用いて並列に実行する暗号化関数Ｔ（ｉ）の演算処理フローを示す図である。
【図８】第１の実施形態に係るΔｉ，Ｎ（ｘ）の演算処理を、ＧＰＵを用いて並列に実行する２つ目の方法を示す図である。
【図９】第１の実施形態に係る３桁×３桁の多倍長整数乗算を、ＧＰＵを用いて並列に実行する方法を示す図である。
【図１０】第１の実施形態に係る３桁×３桁の多倍長整数乗算の規格化を、ＧＰＵを用いて並列に実行する方法を示す図である。
【図１１】ＦＩＢＥ方式の復号装置の構成の一例を示す図である。
【図１２】ＦＩＢＥ方式の復号処理のフローを示す図である。
【図１３】第２の実施形態に係るΔｉ，Ｓ（０）の演算処理を、ＧＰＵを用いて並列に実行する方法を示す図である。
【図１４】第２の実施形態に係るΔｉ，Ｓ（０）の演算処理を、ＧＰＵを用いて並列に実行する復号関数の演算処理フローを示す図である。
【発明を実施するための形態】
【００３０】
以下、図面を用いて、本発明の実施形態について詳細に説明する。なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含むさまざまなバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００３１】
＜第１の実施形態＞
本実施形態では、非特許文献１の６章に記載のＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式における暗号化処理において暗号文を生成する際に用いる暗号化関数内の２重のループ処理を分割し、分割した処理をＧＰＵを用いて並列に実行することにより、暗号化処理を高速化する方法について説明する。
【００３２】
＜ＦＩＢＥ方式の暗号システム＞
ＦＩＢＥ方式とは、ユーザのＩＤ（生体情報等のユーザ属性の集合）から生成された公開鍵（暗号化鍵）および秘密鍵（復号鍵）の２つの異なる鍵を暗号化と復号とで使用する公開鍵暗号方式の一種であって、暗号化を行う暗号化装置と、復号を行う復号装置と、秘密鍵および公開鍵を生成するのに必要なデータを生成および秘密鍵を生成する秘密鍵生成装置とを基本構成として備える。なお、秘密鍵生成装置は、信頼できる第三者が各種鍵を管理する装置であり、ＰＫＧ（Ｐｒｉｖａｔｅ  Ｋｅｙ  Ｇｅｎｅｒａｔｏｒ）ともいう。
【００３３】
図１は、本実施形態に係るＦＩＢＥ方式の暗号化装置（以下、単に暗号化装置という）、ＦＩＢＥ方式の復号化装置（以下、単に復号化装置という）、およびＦＩＢＥ方式の秘密鍵生成装置（以下、単に秘密鍵生成装置という）のハードウェア構成の一例を示す図である。暗号化装置、復号化装置、および秘密鍵生成装置は、演算処理等のプログラムを実行するＣＰＵ１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＣＰＵ１０から指示を受けた処理を並列に実行するＧＰＵ２０（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＲＯＭやＲＡＭ等のメインメモリ３１とハードディスクといった外部記憶部３２とを含む記憶部３０と、他の装置と通信を行う通信部４０と、ディスプレイやスピーカ等の出力部５０と、キーボードやマウス等の入力部６０とを備える。
【００３４】
本実施形態において、ＧＰＵ２０として、ＮＶＩＤＩＡが提供するＣＵＤＡ（Ｃｏｍｐｕｔｅ  Ｕｎｉｆｉｅｄ  Ｄｅｖｉｃｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ、ｈｔｔｐ：／／ｄｅｖｅｌｏｐｅｒ．ｎｖｉｄｉａ．ｃｏｍ／ｃａｔｅｇｏｒｙ／ｚｏｎｅ／ｃｕｄａ−ｚｏｎｅ［２０１１年１０月２５日検索］）を利用する。ＣＵＤＡを利用したＧＰＵ２０は、並列処理を行う複数のマルチプロセッサ２１（図には、２１ａ、２１ｂの２つのマルチプロセッサを例示）とデバイスメモリ２２を備える。マルチプロセッサ２１には、並列処理を行う複数のストリーム・プロセッサ２３（図には、各マルチプロセッサに４つずつ例示）とシェードメモリ２４（（図には、各ストリーム・プロセッサに１つ、シェードメモリ２４ａ、２４ｂを例示））が備えられている。
【００３５】
記憶部３０には、本実施形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ１０によって読みだされ、ＣＰＵ１０またはＧＰＵ２０で実行される。
【００３６】
図２は、非特許文献１の６章に記載のＦＩＢＥ方式の暗号システムの処理フローを示す図である。
【００３７】
まず、ステップＳ１において、秘密鍵生成装置は、セキュリティパラメータを入力として、マスター鍵、およびマスター鍵と対の公開パラメータを生成するセットアップ処理を実行する。
【００３８】
次に、ステップＳ２において、秘密鍵生成装置は、ステップＳ１で生成したマスター鍵および公開パラメータと、復号ユーザのＩＤ（以下、復号ＩＤという）ωとを入力として、復号ユーザが暗号文Ｅを復号する際に用いる秘密鍵を生成する秘密鍵生成処理を実行する。ここで、復号ＩＤωは、ユーザの属性の集合である。本実施形態において、復号ＩＤωは、１からｎ＋１までの整数からなる集合ω：｛１，２，…，ｎ＋１｝とする。
【００３９】
次に、ステップＳ３において、暗号化装置は、ステップＳ１で生成された公開パラメータ、および暗号化に用いるＩＤ（以下、暗号化ＩＤという）ω´を公開鍵として、平文Ｍを暗号化した暗号文Ｅを生成する暗号化処理を実行する。なお、暗号化に用いるＩＤω´も、復号ＩＤωと同様にユーザ属性の集合であって、本実施形態においては、１からｎ＋１までの整数からなる集合ω´：｛１，２，…，ｎ＋１｝とする。なお、復号ＩＤωと暗号化ＩＤω´の要素数は同一とは限らない。
【００４０】
次に、ステップＳ４において、復号装置は、暗号化装置から受信した暗号文Ｅ、およびステップＳ２で生成された秘密鍵を入力とし、暗号文Ｅを復号した平文Ｍを生成する復号処理を行う。
【００４１】
＜暗号化装置構成＞
図３は、ＦＩＢＥ方式の暗号化装置１００の構成の一例を示す図である。暗号化装置１００は、公開パラメータおよび暗号化ＩＤω´からなる公開鍵により平文Ｍを暗号化し、（１）式で表される暗号文Ｅを生成する。暗号文Ｅは、Ｅ´、Ｅ´´、Ｅｉを要素として含み、各要素は（１）式に含まれるそれぞれの式により算出される。（１）式に含まれる記号ｅ、ｇ、ｇ１、ｇ２、ｓの定義は、以下の（２）式に示す。
【００４２】
【数１】
0005709773.tif 000002
【００４３】
【数２】
0005709773.tif 000003
【００４４】
図３に示すように、暗号化装置１００は、乱数生成部１１０、Ｅ´算出部１２０、Ｅ´´算出部１３０、およびＥｉ算出部１４０を備える。Ｅｉ算出部１４０は、暗号化関数値算出部１５０、および累乗部１６０を備える。各部の処理について、図４に示すＦＩＢＥ方式の暗号化処理のフローを用いて説明する。
【００４５】
＜暗号化処理＞
まず、ステップＳ１１において、乱数生成部１１０は、Ｚｐ上のランダムな要素ｓを生成する。
【００４６】
次に、ステップＳ１２において、Ｅ´算出部１２０は、秘密鍵生成装置で生成された公開パラメータと、平文Ｍと、ステップＳ１で生成されたＺｐ上のランダムな要素ｓとを入力として、暗号文Ｅの要素であるＥ´を求める。
【００４７】
次に、ステップＳ１３において、Ｅ´´算出部１３０は、秘密鍵生成装置で生成された公開パラメータと、ステップＳ１で生成されたＺｐ上のランダムな要素ｓとを入力として、暗号文Ｅの要素であるＥ´´を求める。
【００４８】
次に、ステップＳ１４において、Ｅｉ算出部１４０は、暗号化ＩＤω´（１からｎ＋１のｎ＋１個の整数）から、１つずつ順に選択して、変数ｉの値とする。
【００４９】
次に、ステップＳ１５において、暗号化関数値算出部１５０は、公開パラメータと、ｉとを入力として、Ｅｉを生成するのに必要な暗号化関数Ｔ（ｉ）の値を、以下の（３）式から求める。なお、Δｉ，Ｎ（ｘ）は、ラグランジュの補間係数である。
【００５０】
【数３】
0005709773.tif 000004
【００５１】
次に、ステップＳ１６において、累乗部１６０は、ステップＳ１５で算出された暗号化関数Ｔ（ｉ）の値とステップＳ１で生成されたＺｐ上のランダムな要素ｓとを入力として、Ｔ（ｉ）のｓ乗を暗号文Ｅの要素であるＥｉとして求める。
【００５２】
次に、ステップＳ１７において、Ｅｉ算出部１４０は、暗号化ＩＤω´の全ての要素をステップＳ１４で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ１４に処理を戻し、全ての要素を選択したと判断した場合は、処理を終了する。
【００５３】
＜暗号化関数Ｔ（ｉ）＞
図３に戻って、暗号化関数値算出部１５０は、補間係数算出部１５１、累乗部１５２、および関数値算出部１５３を備える。各部の処理について、図５に示すＦＩＢＥ方式の暗号化関数Ｔ（ｉ）の演算処理のフローを用いて説明する。
【００５４】
まず、ステップＳ２１において、暗号化関数値算出部１５０は、集合Ｎ（１からｎ＋１のｎ＋１個の整数）の中から、１つずつ順に選択して、変数ｊの値とする。
【００５５】
次に、ステップＳ２２において、補間係数算出部１５１は、（３）式に示したΔｉ，Ｎ（ｘ）の（ｘ−ｊ）を求める。
【００５６】
次に、ステップＳ２３において、暗号化関数値算出部１５０は、集合Ｎの全ての要素をステップＳ２１で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ２１に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ２４に処理を進める。
【００５７】
次に、ステップＳ２４において、暗号化関数値算出部１５０は、暗号化ＩＤω´（１からｎ＋１のｎ＋１個の整数）から、１つずつ順に選択して、変数ｉの値とする。
【００５８】
次に、ステップＳ２５において、補間係数算出部１５１は、集合Ｎ（１からｎ＋１のｎ＋１個の整数）の中から、１つずつ順に選択して、変数ｊの値とする。
【００５９】
次に、ステップＳ２６において、補間係数算出部１５１は、ステップＳ２２で求めた（ｘ−ｊ）の結果を（ｉ−ｊ）で除算し、商［（ｘ−ｊ）／（ｉ−ｊ）］を求める。
【００６０】
次に、ステップＳ２７において、補間係数算出部１５１は、集合Ｎの全ての要素をステップＳ２５で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ２５に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ２８に処理を進める。
【００６１】
次に、ステップＳ２８において、補間係数算出部１５１は、各ｊについてステップＳ２６で求めた商［（ｘ−ｊ）／（ｉ−ｊ）］の総積を求め、Δｉ，Ｎ（ｘ）を求める。
【００６２】
次に、ステップＳ２９において、累乗部１５２は、各変数ｉについて、公開鍵の要素ｔｉとステップＳ２８で求めたΔｉ，Ｎ（ｘ）を入力として、ｔｉ＾Δｉ，Ｎ（ｘ）を求める。
【００６３】
次に、ステップＳ３０において暗号化関数値算出部１５０は、暗号化ＩＤω´の全ての要素をステップＳ２４で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ２４に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ３１に処理を進める。
【００６４】
次に、ステップＳ３１において、関数値算出部１５３は、ｇ２ｘ＾ｎおよび、各ｉについてステップＳ２９で求めたｔｉ＾Δｉ，Ｎ（ｘ）の総積を求め、求めたｇ２ｘ＾ｎとｔｉ＾Δｉ，Ｎ（ｘ）の総積との積を、暗号化関数Ｔ（ｉ）としてを求める。
【００６５】
上述した暗号化関数Ｔ（ｉ）の演算方法では、処理に時間を要するループ処理が３つも含まれるために、暗号化処理に時間がかかっていた。特に、２重のループ処理を含むステップＳ２４〜Ｓ２８のΔｉ，Ｎ（ｘ）を求める処理がボトルネックであった。本実施形態において、このボトルネックであったΔｉ，Ｎ（ｘ）を求める処理を、ＧＰＵ２０を用いて並列に実行することによって、暗号化処理の速度を向上させる。以下に、Δｉ，Ｎ（ｘ）を求める処理を、ＧＰＵ２０を用いて並列に実行する方法を２つ説明する。
【００６６】
＜方法１＞
本方法では、Δｉ，Ｎ（ｘ）の演算処理をＧＰＵ２０が担当し、Δｉ，Ｎ（ｘ）における（ｘ−ｊ）／（ｉ−ｊ）の演算処理と（ｘ−ｊ）／（ｉ−ｊ）の総積を求める演算処理とを、並列に実行する。図６を用いて、Δｉ，Ｎ（ｘ）の演算処理を、ＧＰＵ２０を用いて実行する方法について説明する。
【００６７】
まず、Δｉ，Ｎ（ｘ）の演算処理を実行する複数のブロック、本実施形態においては変数ｉの要素数ｎ＋１個のブロックが生成される。そして、図６に示すように、ｉ＝１のΔ１，Ｎ（ｘ）の演算処理をＢＬ０、ｉ＝２のΔ２，Ｎ（ｘ）の演算処理をＢＬ１と、変数ｉ毎にΔｉ，Ｎ（ｘ）の演算処理を各ブロックが担当する。生成されたブロックはマルチプロセッサ２１に割り当てられ、マルチプロセッサ２１で並列に実行される。すなわち、各変数ｉ（ｉ＝１からｎ＋１のｎ＋１個の整数）についてのΔｉ，Ｎ（ｘ）の演算処理を並列に実行することができる。
【００６８】
ブロック内には、複数のスレッドが生成される。スレッドは、Δｉ，Ｎ（ｘ）の各処理と１対１対応するので、変数ｊの要素数（ｎ＋１）−１個のスレッドが生成される。（３）式に示したようにｊ≠ｉであるので、ｊ＝ｉのスレッドは生成されないからである。
【００６９】
よって、図６に示すように、ｊ＝２の（ｘー２）／（１−２）の演算処理をＴＲ０、ｊ＝３の（ｘー３）／（１−３）の演算処理をＴＲ２と、各変数ｊの（ｘーｊ）／（ｉ−ｊ）の演算処理を各スレッドが担当し、（ｘーｊ）／（ｉ−ｊ）の演算処理をブロック内で並列に実行する。スレッドはストリーム・プロセッサ２３に割り当てられ、ストリーム・プロセッサ２３で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ２４に格納される。
【００７０】
シェードメモリ２４に格納されている（ｘーｊ）／（ｉ−ｊ）の演算結果の数と同数のスレッド、すなわちｎ個のスレッドが各ブロック内に起動される。そして、リダクションを実行して、シェードメモリ２４に格納されている（ｘーｊ）／（ｉ−ｊ）の演算結果の総積を求め、各ブロックにて各変数ｉについてのΔｉ，Ｎ（ｘ）を求める。
【００７１】
得られた各変数ｉについてのΔｉ，Ｎ（ｘ）は、デバイスメモリ２２に格納された後、メインメモリ３１に転送される。そして、ＣＰＵ１０において、メインメモリ３１に格納された各変数ｉのΔｉ，Ｎ（ｘ）と各変数ｉの公開鍵の要素ｔｉとを入力として、ｔｉ＾Δｉ，Ｎ（ｘ）を求め、続いて、ｔｉ＾Δｉ，Ｎ（ｘ）の総積を暗号化関数Ｔ（ｉ）として求める。
【００７２】
上述した方法により、Δｉ，Ｎ（ｘ）の演算処理を、ＧＰＵ２０を用いて実行する暗号化関数Ｔ（ｉ）の演算処理フローを図７に示す。補間係数算出部１５１が、Δｉ，Ｎ（ｘ）の演算処理をＣＰＵ１０からＧＰＵ２０に転送することで、ＧＰＵ２０を用いたΔｉ，Ｎ（ｘ）の演算処理を開始する。
【００７３】
まず、ステップＳ４１において、補間係数算出部１５１は、変数ｉ毎にΔｉ，Ｎ（ｘ）の演算処理を実行するブロックを生成する。本実施形態においては、変数ｉの要素数ｎ＋１個のブロックを生成する。
【００７４】
次に、ステップＳ４２において、補間係数算出部１５１は、変数ｊ毎に（ｘーｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを各ブロック内に生成する。本実施形態においては、変数ｊの要素数（ｎ＋１）−１個（ｊ＝ｉの値を除く）のブロックを生成する。
【００７５】
次に、ステップＳ４３において、補間係数算出部１５１は、ステップＳ４２で生成された各スレッドが担当する（ｘーｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵ２０のストリーム・プロセッサ２３を用いて並列に実行し、演算結果をシェードメモリ２４に格納する。
【００７６】
次に、ステップＳ４４において、補間係数算出部１５１は、各ブロック内にてリダクションを実行して、ステップＳ４３でシェードメモリ２４に格納された（ｘーｊ）／（ｉ−ｊ）の演算結果の総積を求め、各ブロックにて各変数ｉについてのΔｉ，Ｎ（ｘ）としてデバイスメモリ２２に格納する。
【００７７】
次に、ステップＳ４５において、補間係数算出部１５１は、ステップＳ４４でデバイスメモリ２２に格納された各変数ｉのΔｉ，Ｎ（ｘ）をＣＰＵ１０の転送し、転送された各変数ｉのΔｉ，Ｎ（ｘ）はメインメモリ３１に格納される。
【００７８】
次に、ステップＳ４６において、補間係数算出部１５１は、暗号化ＩＤω´（１からｎ＋１のｎ＋１個の整数）から、１つずつ順に選択して、変数ｉの値とする。
【００７９】
次に、ステップＳ４７において、累乗部１５２は、各変数ｉについて、公開鍵の要素ｔｉと、ステップＳ４６でメインメモリ３１に格納されたΔｉ，Ｎ（ｘ）とを入力として、ｔｉ＾Δｉ，Ｎ（ｘ）を求める。
【００８０】
次に、ステップＳ４８において、暗号化関数値算出部１５０は、暗号化ＩＤω´の全ての要素をステップＳ４６で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ４６に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ４９に処理を進める。
【００８１】
次に、ステップＳ４９において、関数値算出部１５３は、ｇ２ｘ＾ｎおよび、各ｉについてステップＳ４７で求めたｔｉ＾Δｉ，Ｎ（ｘ）の総積を求め、求めたｇ２ｘ＾ｎとｔｉ＾Δｉ，Ｎ（ｘ）の総積との積を、暗号化関数Ｔ（ｉ）として求める。
【００８２】
以上説明したように、暗号化関数Ｔ（ｉ）において、ボトルネックであったΔｉ，Ｎ（ｘ）の演算処理を、ＧＰＵ２０を用いて並列に実行することにより、暗号化処理の速度を向上させることができる。
【００８３】
＜方法２＞
本方法では、上述した（３）式で示されるΔｉ，Ｎ（ｘ）を以下の（４）式のように変形する。（４）式の分母Π（ｘ−ｊ）および分子Π（ｉ―ｊ）それぞれの演算処理を、ＧＰＵ２０を用いて並列に実行する。そして、分母Π（ｘ−ｊ）と分子Π（ｉ―ｊ）との除算をＣＰＵ１０を用いて実行することによって、Δｉ，Ｎ（ｘ）を求める。Δｉ，Ｎ（ｘ）を（４）式のように変形することにより、方法１では（ｉの要素数）×（ｊの要素数−１）回行っていた除算回数をｉの要素数回に削減することができる。また、除算をＣＰＵ１０で実行することにより、上述した方法１において除算をＧＰＵ２０で行うことで生じていたデバイスメモリ２２へのランダムアクセスの大量発生を失くし、ＧＰＵ２０を有効に活用し、暗号化処理を更に高速化することができる。
【００８４】
【数４】
0005709773.tif 000005
【００８５】
図８を用いて、（４）式に変形したΔｉ，Ｎ（ｘ）の演算処理をＧＰＵ２０を用いて実行する方法について説明する。
【００８６】
まず、（４）式の右辺の分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）の演算処理を実行する複数のブロック、本実施形態においては変数ｉの要素数ｎ＋１個のブロックが生成される。そして、図８に示すように、ｉ＝１における分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）の演算処理をＢＬ０、ｉ＝２における分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）の演算処理をＢＬ１と、変数ｉ毎に分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）の演算処理を各ブロックが担当する。なお、本方法において、ブロックは２次元構成である。生成されたブロックはマルチプロセッサ２１に割り当てられ、マルチプロセッサ２１で並列に実行される。すなわち、各変数ｉ（ｉ＝１〜ｎ＋１）についての分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）の演算処理を並列に実行することができる。
【００８７】
ブロック内には、複数のスレッドが生成される。本方法において、ブロックと同様にスレッドも２次元構成であって、（ｘーｊ）および（ｉ−ｊ）の各変数ｊにおける演算処理と１対１対応し、変数ｊの要素数（ｎ＋１）−１個のスレッドが生成される。（４）式に示したようにｊ≠ｉであるので、ｊ＝ｉのスレッドは生成されないからである。
【００８８】
よって、図８に示すように、ｊ＝２の（ｘー２）／（１−２）の演算処理をＴＲ０、ｊ＝３の（ｘー３）／（１−３）の演算処理をＴＲ１と、各変数ｊの（ｘーｊ）の演算処理および（ｉ−ｊ）の演算処理を各スレッドが担当し、（ｘーｊ）の演算処理および（ｉ−ｊ）の演算処理を並列に実行する。スレッドはストリーム・プロセッサ２３に割り当てられ、ストリーム・プロセッサ２３で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ２４に格納される。
【００８９】
シェードメモリ２４に格納されている（ｉ−ｊ）の演算結果の数（（ｘ−ｊ）の演算結果の数も同数である）と同数のスレッド、すなわちｎ個のスレッドがブロック内に起動される。そして、リダクションを実行して、シェードメモリ２４に格納されている（ｘーｊ）の演算結果の総積および（ｉ−ｊ）の演算結果の総積を求め、（４）式の右辺の分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）を求める。
【００９０】
得られた分母Π（ｘ−ｊ）および分子Π（ｉ−ｊ）は、デバイスメモリ２２に格納された後、メインメモリ３１に転送される。そして、ＣＰＵ１０において、メインメモリ３１に格納された分母Π（ｘ−ｊ）と分子Π（ｉ−ｊ）とを、変数ｉ毎にシーケンシャル除算することによって、各変数ｉのΔｉ，Ｎ（ｘ）を求める。そして、ＣＰＵ１０において、得られた各変数ｉのΔｉ，Ｎ（ｘ）と各変数ｉの公開鍵の要素ｔｉとから、ｔｉ＾Δｉ，Ｎ（ｘ）を求め、続いて、ｔｉ＾Δｉ，Ｎ（ｘ）の総積を暗号化関数Ｔ（ｉ）として求める。
【００９１】
以上説明したように、暗号化関数Ｔ（ｉ）において、ボトルネックであったΔｉ，Ｎ（ｘ）の演算処理のうち、Π（ｘ−ｊ）およびΠ（ｉ−ｊ）の演算を、ＧＰＵ２０を用いて並列に実行するとともに、除算をＣＰＵ１０で実行することにより、ＧＰＵ２０を有効に活用し、暗号化処理の速度を更に向上させることができる。
【００９２】
上述した方法２においてＣＰＵ１０で実行している除算を、ＧＰＵ２０で実行することにより、暗号化処理の速度を更に向上させることができる。具体的には、Π（ｘ−ｊ）とΠ（ｉ−ｊ）との除算に含まれる多倍長整数乗算（以下、単に乗算という）を、ＧＰＵ２０を用いて並列に実行する。
【００９３】
補間係数算出部１５１が、Π（ｘ−ｊ）とΠ（ｉ−ｊ）との除算処理をＣＰＵ１０からＧＰＵ２０に転送することで、ＧＰＵ２０においてΠ（ｘ−ｊ）とΠ（ｉ−ｊ）との除算処理が開始する。１回の除算を１つのブロックが担当し、除算の回数分のブロックが生成される。本実施形態においては変数ｉ毎にΠ（ｘ−ｊ）とΠ（ｉ−ｊ）との除算が実行されるので、変数ｉの要素数ｎ＋１個のブロックが生成される。生成されたブロックはマルチプロセッサ２１に割り当てられ、マルチプロセッサ２１で並列に実行される。
【００９４】
除算に含まれる乗算処理のＧＰＵ２０を用いた並列化について、３桁×３桁の多倍長整数乗算を例に、図９を用いて説明する。図９に示すように、３桁の多倍長整数をｘ、ｙとし、ｘの各桁を上からｘ２、ｘ１、ｘ０、ｙの各桁を上からｙ２、ｙ１、ｙ０とする。
【００９５】
ブロック内に、各桁の乗算処理を実行する複数のスレッドが生成される。本例では、ｘ２＊ｙ２、ｘ１＊ｙ２、ｘ０＊ｙ２、…、ｘ０＊ｙ０の９個の乗算があるので、図に示すようにＴ（２，２），Ｔ（１，２）…Ｔ（０，０）の９個のスレッドが生成され、各スレッドにおいて乗算処理が並列に実行される。各スレッドの乗算結果は、シェードメモリ２４に格納される。
【００９６】
また、ブロック内に、各桁の乗算処理結果の加算処理を実行するスレッドが、桁毎に生成される。スレッドはストリーム・プロセッサ２３に割り当てられ、ストリーム・プロセッサ２３で並列に実行される。シェードメモリ２４に格納された乗算結果を図に示すように桁毎に組み合わせて、各桁の加算処理を、生成された各スレッドにて並列に実行し、各桁の加算結果は、乗算結果と同様、シェードメモリ２４に格納される。本例では、３桁×３桁の多倍長整数乗算の結果が５桁になるので、ＴＲ０〜ＴＲ４の５個のスレッドが生成され、各スレッドにて並列に加算処理が実行される。
【００９７】
次に、図９を用いて説明した３桁×３桁の多倍長整数乗算により得られた各桁の値の規格化を、ＧＰＵ２０を用いて並列に実行する方法について図１０を用いて説明する。
【００９８】
あらかじめ、図９に示したＴＲ０〜ＴＲ４で実行される各桁の加算結果ｖａｌ０〜ｖａｌ４は、加算処理の後１５ｂｉｔ長に規格化され、１５ｂｉｔ長となった各桁の値をｖａｌ０´〜ｖａｌ４´として、それによる桁上がり分をそれぞれｃａｒｒｙ０〜ｃａｒｒｙ４としてシェードメモリ２４に格納される。ｃａｒｒｙの値と１つ上の桁のｖａｌの値との加算処理を、各スレッドにて並列に実行する。そして、得られた結果を再度規格化し、ｃａｒｒｙ０〜４の値が０になるまで繰り返し同処理を行う。このようにして、乗算処理における規格化も、ＧＰＵ２０を用いて並列に実行することができる。
【００９９】
以上説明したように、非特許文献１の６章に記載のＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式における暗号化処理の暗号化関数Ｔ（ｉ）内の２重のループ処理を分割し、分割した処理を、ＧＰＵ２０を用いて並列に演算することにより、暗号化処理を高速化することができる。除算処理を削減することや、除算処理に含まれる乗算処理を、ＧＰＵ２０を用いて並列に実行することにより暗号化処理を更に高速化することができる。
【０１００】
＜第２の実施形態＞
図１１から図１３を用いて、本発明の第２の実施形態について説明する。第１の実施形態では、非特許文献１の６章に記載のＦＩＢＥ方式における暗号化処理を高速化したが、本実施形態においては同ＦＩＢＥ方式における復号処理を高速化する。具体的には、復号処理において暗号文から平文を生成する際に用いる復号関数内の２重のループ処理を分割し、分割した処理を、ＧＰＵを用いて並列に演算することにより、復号処理を高速化する。なお、第１の実施形態と同一の符号を付す構成要素については、同一の機能を有することから、その詳細な説明は省略する。
【０１０１】
図１１は、ＦＩＢＥ方式の復号装置２００の構成の一例を示す図である。復号装置２００は、暗号化装置１００で生成された暗号文Ｅを秘密鍵生成装置で生成された秘密鍵により復号し、平文Ｍを生成する。平文Ｍは（５）式に示す復号関数を解くことにより生成される。
【０１０２】
【数５】
0005709773.tif 000006
【０１０３】
＜復号装置構成＞
図に示すように、復号装置２００は、平文要素算出部２１０、および関数値算出部２２０を備える。平文要素算出部２１０は、ペアリング値算出部２１１、除算部２１２、補間係数算出部２１３、および累乗部２１４を備える。各部の処理について、図１２に示す復号処理のフローを用いて説明する。
【０１０４】
＜復号処理＞
まず、ステップＳ１０１において、平文要素算出部２１０が、複合化ＩＤω∩暗号化ＩＤω´の集合Ｓの中から、要素を１つずつ選択してｉとする。なお、集合Ｓの各要素は、集合Ｓの要素のインデックスｋを用いて、Ｓｋで表す。ここで、なお、ｋは、１からｄのｄ個の整数であって、ｄはＦＩＢＥ方式の暗号化システムにおいて、予め設定されたエラー許容パラメータである。
【０１０５】
次に、ステップＳ１０２において、ペアリング値算出部２１１は、秘密鍵（Ｄｉ，ｄｉ）と暗号文の要素（Ｅ´´，Ｅｉ）とを入力として、ｄｉとＥｉとの組をペアリング写像ｅにより写像したｅ（ｄｉ，Ｅｉ）と、ＤｉとＥ´´との組をペアリング写像ｅにより写像したｅ（Ｄｉ，Ｅ´´）を求める。
【０１０６】
次に、ステップＳ１０３において、除算部２１２は、ステップＳ１０２で算出されたｅ（ｄｉ，Ｅｉ）をｅ（Ｄｉ，Ｅ´´）で割った商［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］を求める。
【０１０７】
次に、ステップＳ１０４において、補間係数算出部２１３は、（５）式によりラグランジュの補間係数Δｉ，Ｓ（０）の値を求める。
【０１０８】
次に、ステップＳ１０５において、累乗部２１４は、ステップＳ１０３で求められた［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］と、ステップＳ１０４で求められたΔｉ，Ｓ（０）を入力として、［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］＾Δｉ，Ｓ（０）を求める。
【０１０９】
次に、ステップＳ１０６において、平文要素算出部２１０は、複合化ＩＤω∩暗号化ＩＤω´の集合Ｓの全ての要素をステップＳ１０１で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ１０１に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ１０７に処理を進める。
【０１１０】
次に、ステップＳ１０７において、関数値算出部２２０は、各ｉについて、ステップＳ１０５で求められた［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］＾Δｉ，Ｓ（０）の総積を求め、求めた総積と暗号文の要素Ｅ´との積を平文Ｍとして求める。
【０１１１】
復号処理において、（５）式に示した復号関数にもラグランジュの補間係数Δｉ，Ｓ（０）が用いられているので、実施形態１で説明したΔｉ，Ｎ（ｘ）と同様に、ボトルネックである２重のループ処理が含まれている。そこで、本実施形態において、このボトルネックであったΔｉ，Ｓ（０）を求める処理を、ＧＰＵ２０を用いて並列に実行することにより復号処理の速度を向上させる。
【０１１２】
ところで、復号関数で使用するラグランジュの補間係数Δｉ，Ｓ（０）と暗号化関数で使用するラグランジュの補間係数Δｉ，Ｎ（ｘ）とは、Δｉ，Ｎ（ｘ）のｊが１からｎ＋１の連番の整数からなる集合Ｎを用いていたのに対し、Δｉ，Ｓ（０）は複合化ＩＤω∩暗号化ＩＤω´の集合であり連番ではない集合Ｓを用いている点、およびΔｉ，Ｎ（ｘ）のｘの値が常に０である点で異なる。すなわち、ｊおよびｘの取り得る値が異なるだけであるので、第１の実施形態と同様の方法（方法１および方法２）を用いて、Δｉ，Ｓ（０）の演算処理をＧＰＵ２０を用いて並列化することができる。
【０１１３】
上述した方法１を用いたΔｉ，Ｓ（０）の演算処理をＧＰＵ２０を用いて実行する方法について、図１３を用いて説明する。
【０１１４】
まず、Δｉ，Ｓ（０）の演算処理を実行する複数のブロック、本実施形態においては変数ｉの要素数ｄ個のブロックが生成される。そして、図１３に示すように、ｉ＝Ｓ１のΔ１，Ｎ（ｘ）の演算処理をＢＬ０、ｉ＝ＳｋのΔｋ，Ｎ（ｘ）の演算処理をＢＬｋ−１と、変数ｉ毎にΔｉ，Ｓ（０）の演算処理を各ブロックが担当する。生成されたブロックはマルチプロセッサ２１に割り当てられ、マルチプロセッサ２１で並列に実行される。すなわち、各変数ｉのΔｉ，Ｓ（０）演算処理を並列に実行することができる。
【０１１５】
ブロック内には、複数のスレッドが生成される。スレッドは、Δ１，Ｓ（０）の各処理と１対１対応するので、変数ｊの要素数ｄ−１個のスレッドが生成される。（５）式に示したようにｊ≠ｉであるので、ｊ＝ｉのスレッドは生成されないからである。
【０１１６】
よって、図１３に示すように、ｊ＝Ｓ２の（−Ｓ２）／（１−Ｓ２）の演算処理をＴＲ１、ｊ＝Ｓｋの（Ｓｋ）／（１−Ｓｋ）の演算処理をＴＲｋ−１と、各変数ｊの（−ｊ）／（ｉ−ｊ）の演算処理を各スレッドが担当し、（−ｊ）／（ｉ−ｊ）の演算処理を並列に実行する。スレッドはストリーム・プロセッサ２３に割り当てられ、ストリーム・プロセッサ２３で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ２４に格納される。
【０１１７】
シェードメモリ２４に格納されている（−ｊ）／（ｉ−ｊ）の演算結果の数と同数のスレッド、すなわちｄ−１個のスレッドがブロック内に起動される。そして、リダクションを実行して、シェードメモリ２４に格納されている（−ｊ）／（ｉ−ｊ）の演算結果の総積を演算し、各変数ｉのΔｉ，Ｓ（ｘ）を求める。
【０１１８】
得られた各変数ｉのΔｉ，Ｓ（ｘ）は、デバイスメモリ２２に格納された後、メインメモリ３１に転送される。そして、ＣＰＵ１０において、メインメモリ３１に格納された各変数ｉのΔｉ，Ｓ（ｘ）、除算部２１２で求められた［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］、および暗号文の要素Ｅ´を入力として、復号化関数の値として平文Ｍを求める。
【０１１９】
上述した方法により、Δｉ，Ｓ（０）の演算処理を、ＧＰＵ２０を用いて実行する復号関数の演算処理フローを図１４に示す。補間係数算出部２１３が、Δｉ，Ｓ（０）の演算処理をＣＰＵ１０からＧＰＵ２０に転送することで、ＧＰＵ２０を用いたΔｉ，Ｓ（０）の演算処理を開始する。
【０１２０】
まず、ステップＳ１１１において、補間係数算出部２１３は、変数ｉ毎にΔｉ，Ｓ（０）の演算処理を実行するブロックを生成する。本実施形態においては、変数ｉの要素数ｄ個のブロックを生成する。
【０１２１】
次に、ステップＳ１１２において、補間係数算出部２１３は、変数ｊ毎に（−ｊ）／（ｉ−ｊ）の演算処理を実行するスレッドを各ブロック内に生成する。本実施形態においては、変数ｊの要素数ｄ−１個のスレッドを生成する。
【０１２２】
次に、ステップＳ１１３において、補間係数算出部２１３は、ステップＳ１１２で生成された各スレッドが担当する（−ｊ）／（ｉ−ｊ）の演算処理を、ＧＰＵ２０のストリーム・プロセッサ２３を用いて並列に実行し、演算結果をシェードメモリ２４に格納する。
【０１２３】
次に、ステップＳ１１４において、補間係数算出部２１３は、各ブロック内にてリダクションを実行して、ステップＳ１１３でシェードメモリ２４に格納された（−ｊ）／（ｉ−ｊ）の演算結果の総積を求め、各変数ｉのΔｉ，Ｓ（０）とし、デバイスメモリ２２に格納する。
【０１２４】
次に、ステップＳ１１５において、補間係数算出部２１３は、ステップＳ１１４でデバイスメモリ２２に格納された各変数ｉのΔｉ，Ｓ（０）をＣＰＵ１０に転送し、転送された各変数ｉのΔｉ，Ｓ（０）はメインメモリ３１に格納される。
【０１２５】
次に、ステップＳ１１６において、平文要素算出部２１０は、複合化ＩＤω∩暗号化ＩＤω´の集合Ｓの中から、要素を１つずつ選択してｉとする。なお、上述したように各要素は、集合Ｓの要素のインデックスｋ（ｋは１からｄのｄ個の整数）を用いてＳｋで表す。
【０１２６】
次に、ステップＳ１１７において、ペアリング値算出部２１１は、秘密鍵（Ｄｉ，ｄｉ）と暗号文の要素（Ｅ´´，Ｅｉ）とを入力として、ｄｉとＥｉとの組をペアリング写像ｅにより写像したｅ（ｄｉ，Ｅｉ）と、ＤｉとＥ´´との組をペアリング写像ｅにより写像したｅ（Ｄｉ，Ｅ´´）を求める。
【０１２７】
次に、ステップＳ１１８において、除算部２１２は、ステップＳ１１７で算出されたｅ（ｄｉ，Ｅｉ）をｅ（Ｄｉ，Ｅ´´）で割った商［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］を求める。なお、ステップＳ１１７および本ステップＳ１１８は、ステップＳ１１１の前であってもよい。
【０１２８】
次に、ステップＳ１１９において、累乗部２１４は、ステップＳ１１７で求められた［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］と、ステップＳ１１６でのメインメモリ３１に格納された各変数ｉのΔｉ，Ｓ（０）とを入力として、［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］＾Δｉ，Ｓ（０）を求める。
【０１２９】
次に、ステップＳ１２０において、平文要素算出部２１０は、複合化ＩＤω∩暗号化ＩＤω´の集合Ｓの全ての要素をステップＳ１０１で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップＳ１１６に処理を戻し、全ての要素を選択したと判断した場合は、ステップＳ１２１に処理を進める。
【０１３０】
次に、ステップＳ１２１において、関数値算出部２２０は、各ｉについて、ステップＳ１１９で求められた［ｅ（ｄｉ，Ｅｉ）／ｅ（Ｄｉ，Ｅ´´）］＾Δｉ，Ｓ（０）の総積を求め、求めた総積と暗号文の要素Ｅ´との積を平文Ｍとして求める。
【０１３１】
なお、以下の（６）式のように（５）式に示す復号関数を変形し、第１の実施形態の方法２を用いて、除算回数を減らし、復号処理を更に高速化することができる。
【０１３２】
【数６】
0005709773.tif 000007
【０１３３】
以上説明したように、非特許文献１の６章に記載のＦＩＢＥ（Ｆｕｚｚｙ  Ｉｄｅｎｔｉｔｙ  Ｂａｓｅｄ  Ｅｎｃｒｙｐｔｉｏｎ）方式における復号処理の復号関数内の２重のループ処理を分割し、分割した処理を、ＧＰＵ２０を用いて並列に演算することにより、復号処理を高速化することができる。また、除算処理を削減することや、除算処理に含まれる乗算処理を、ＧＰＵ２０を用いて並列に実行することにより復号処理を更に高速化することができる。
【０１３４】
なお、暗号化装置および復号装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを暗号化装置および復号装置に読み込ませ、実行することによって本発明の暗号化装置および復号装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【０１３５】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【０１３６】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。更に、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【０１３７】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【０１３８】
１０    ＣＰＵ
２０    ＧＰＵ
２１（２１ａ、２１ｂ）    マルチプロセッサ
２２    デバイスメモリ
２３    ストリーム・プロセッサ
２４（２４ａ、２４ｂ）    シェードメモリ
３０    記憶部
３１    メインメモリ
３２    外部記憶部
４０    通信部
５０    出力部
６０    入力部
【図１】
0005709773.tif 000017
【図２】
0005709773.tif 000018
【図３】
0005709773.tif 000019
【図４】
0005709773.tif 000020
【図５】
0005709773.tif 000021
【図６】
0005709773.tif 000022
【図７】
0005709773.tif 000023
【図８】
0005709773.tif 000024
【図９】
0005709773.tif 000025
【図１０】
0005709773.tif 000026
【図１１】
0005709773.tif 000027
【図１２】
0005709773.tif 000028
【図１３】
0005709773.tif 000029
【図１４】
0005709773.tif 000030