JP5709773B2 - Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム - Google Patents

Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム Download PDF

Info

Publication number
JP5709773B2
JP5709773B2 JP2012007716A JP2012007716A JP5709773B2 JP 5709773 B2 JP5709773 B2 JP 5709773B2 JP 2012007716 A JP2012007716 A JP 2012007716A JP 2012007716 A JP2012007716 A JP 2012007716A JP 5709773 B2 JP5709773 B2 JP 5709773B2
Authority
JP
Japan
Prior art keywords
interpolation coefficient
arithmetic processing
gpu
encryption
equation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012007716A
Other languages
English (en)
Other versions
JP2013148641A (ja
Inventor
有登 仲野
有登 仲野
清本 晋作
晋作 清本
三宅 優
優 三宅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
KDDI Corp
Original Assignee
KDDI Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by KDDI Corp filed Critical KDDI Corp
Priority to JP2012007716A priority Critical patent/JP5709773B2/ja
Publication of JP2013148641A publication Critical patent/JP2013148641A/ja
Application granted granted Critical
Publication of JP5709773B2 publication Critical patent/JP5709773B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、FIBE方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラムに関する。
近年、銀行のATMやオフィスの入退室管理等において生体認証が広く使用されている。生体認証では、テンプレートとよばれる生体情報を事前に採取登録し、認証時にセンサで取得した情報とテンプレートとを比較することで認証を行う。生体認証は、パスワード認証等に比べて高い安全性が期待されているが、生体情報は生涯不変であるため、一度複製によって破られてしまうと一生安全性を回復できないという問題点があった。
そこで、生体情報を安全に保護する技術が重要であって、近年、Fuzzy Identity Based Encryption(FIBE)と呼ばれる暗号方式が注目されている(例えば、非特許文献1参照。)。FIBE方式は、信頼できる第三者である秘密鍵生成装置(PKG:Private Key Generator)が、自らのマスター鍵を用いて各ユーザのID(生体情報等の属性の集合)に対応する公開鍵(暗号化鍵)および秘密鍵(復号鍵)を生成してユーザ端末に配布し、ユーザ端末は暗号化と復号とで異なる2つの鍵(公開鍵および秘密鍵)を使用する公開鍵暗号方式の一種である。
FIBE方式の特徴は、ある情報を暗号化する際に誤差を設定し、復号鍵がその誤差内に含まれていれば暗号化されている情報を正しく復号できることである。復号鍵として用いる、センサ等から取得された生体情報にはノイズが含まれるが、FIBE方式であれば、正規ユーザの生体情報に含まれるノイズは誤差内に抑えられ、暗号化されている情報を正しく復号することができる。一方で、非正規ユーザがなりすましを試みた場合、非正規ユーザの生体情報に含まれるノイズは誤差よりも大きくなるので、暗号化されている情報を復号することはできない。
Amit Sahai and Brent Waters,"Fuzzy Identity−Based Encryption,"EUROCRYPT 2005, 2005.
上述したFIBE方式は、生体認証の安全性を確保する技術として有効である。しかしながら、FIBE方式の暗号化処理および復号処理は計算量が多いために処理時間が長く、実用化が困難であるという問題点があった。特に、暗号化処理において暗号文を生成する際に用いる暗号化関数内の2重のループ処理がボトルネックであった。また、復号処理においても平文を生成する際に用いる復号関数内の2重のループ処理がボトルネックであった。
ところで、描画処理に利用されるGPU(Graphics Processing Unit)の計算性能の高さから、GPUを科学計算に応用する技術が普及し始めている。GPUは、汎用の処理装置であるCPU(中央処理装置:Central Processing Unit)に比べ、浮動小数点演算を並列かつ高速に実行できる。すなわち、GPUは、大量のデータに並列に同じ演算を繰り返すような用途であれば、CPUに比べ非常に効率よく高速に処理を実行できる。
そこで、本発明は、上述の課題に鑑みてなされたものであり、FIBE方式の暗号化処理において、暗号化関数内の2重のループ処理を分割し、GPUで並列に演算することにより、FIBE方式の暗号化処理を高速化したFIBE方式の暗号化装置、FIBE方式の暗号化関数の計算方法、およびプログラムを提供することを目的とする。また、FIBE方式の復号処理において、復号関数内の2重のループ処理を分割し、GPUで並列に演算することによって、処理を高速化したFIBE方式の復号装置、FIBE方式の復号方法、およびプログラムを提供することを目的とする。
本発明は、上記の課題を解決するために、以下の事項を提案している。なお、理解を容易にするために、本発明の実施形態に対応する符号を付して説明するが、これに限定されるものではない。
(1) 本発明は、FIBE方式の公開鍵を用いて平文から暗号文を生成するFIBE(Fuzzy Identity Based Encryption)方式の暗号化装置において、暗号文を生成する際に用いる暗号化関数(数1式)の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,N(x)(数2式)の演算処理方法であって、前記補間係数算出手段が、前記ラグランジュの補間係数Δi,N(x)を求める前記数2式の右辺の演算処理を実行するブロックを変数i毎に生成する第1のステップ(例えば、図7のステップS41に相当)と、前記補間係数算出手段が、前記数2式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップ(例えば、図7のステップS42に相当)と、前記補間係数算出手段が、各スレッドが担当する前記数2式の多項式(x−j)/(i−j)の演算処理を、GPUを用いて並列に実行する第3のステップ(例えば、図7のステップS43に相当)と、前記補間係数算出手段が、各ブロック内において、各変数jについて前記第3のステップで得られた演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップ(例えば、図7のステップS44に相当)と、を含むことを特徴とする演算処理方法を提案している。
この発明によれば、まず、第1のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δi,N(x)を求める数2式の右辺の演算処理を実行するブロックを変数i毎に生成する。次に、第2のステップにおいて、補間係数算出手段が、数2式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する。次に、第3のステップにおいて、補間係数算出手段が、各スレッドが担当する数2式の多項式(x−j)/(i−j)の演算処理を、GPUを用いて並列に実行する。次に、第4のステップにおいて、補間係数算出手段が、各ブロック内において、各変数jについて第3のステップで得られた演算結果の総積処理を、GPUを用いて並列に実行する。したがって、FIBE方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δi,N(x)の演算処理において、iを変数としたループ処理、およびiを変数としたループ処理に含まれるjを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、GPUを用いて並列に実行することにより、暗号化処理を高速化することができる。
(2) 本発明は、(1)のラグランジュの補間係数Δi,N(x)の演算処理方法について、前記数2式を変形して得られる数3式を用いてラグランジュの補間係数Δi,N(x)を求め、前記第2のステップにおいて、前記補間係数算出手段が、前記数3式の多項式(x−j)および(i−j)の演算処理を実行するブロックを、前記ブロック内に変数j毎に生成し、前記第3のステップにおいて、前記補間係数算出手段が、各スレッドが担当する前記数3式の多項式(x−j)および(i−j)の演算処理を、前記GPUを用いて並列に実行し、前記第4のステップにおいて、前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで得られた(x−j)の演算結果および(i−j)の演算結果それぞれの総積処理を、前記GPUを用いて並列に実行し、更に、前記補間係数算出手段が、前記第4のステップの総積処理により得られた(x−j)の総積結果と(i−j)の総積結果との除算処理を、CPUを用いてシーケンシャルに実行する第5のステップを含むことを特徴とする演算処理方法を提案している。
この発明によれば、数2式を変形して得られる数3式を用いてラグランジュの補間係数Δi,N(x)を求める。第1のステップに続いて、第2のステップにおいて、補間係数算出手段が、数3式の多項式(x−j)および(i−j)の演算処理を実行するブロックを、ブロック内に変数j毎に生成する。次に、第3のステップにおいて、補間係数算出手段が、各スレッドが担当する数3式の多項式(x−j)および(i−j)の演算処理を、GPUを用いて並列に実行する。次に、第4のステップにおいて、補間係数算出手段が、各ブロック内において、各jについて第3のステップで得られた(x−j)の演算結果および(i−j)の演算結果それぞれの総積処理を、GPUを用いて並列に実行する。次に、第5のステップにおいて、補間係数算出手段が、第4のステップの総積処理により得られた(x−j)の総積結果と(i−j)の総積結果との除算処理を、CPUを用いてシーケンシャルに実行する。したがって、FIBE方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δi,N(x)の式を変形し、変形した式によるラグランジュの補間係数Δi,N(x)演算処理において、iを変数としたループ処理、およびiを変数としたループ処理に含まれるjを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、GPUを用いて並列に実行し、更に、除算回数を削減するともにCPUで実行することにより、更に暗号化処理を高速化することができる。
(3) 本発明は、(2)のラグランジュの補間係数Δi,N(x)の演算処理方法について、前記第5のステップが、前記補間係数算出手段が、(x−j)の総積結果と(i−j)の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する第6のステップと、前記補間係数算出手段が、各ブロック内に、前記各乗算処理における各桁の乗算処理を実行する各スレッドを生成する第7のステップと、前記補間係数算出手段が、各スレッドが担当する前記各桁の乗算処理を、前記GPUを用いて並列に実行する第8のステップと、前記補間係数算出手段が、前記第8のステップで実行された前記各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する第9のステップと、前記補間係数算出手段が、前記各桁の乗算処理結果の加算処理を、前記GPUを用いて並列に実行する第10のステップと、を含むことを特徴とする演算処理方法を提案している。
この発明によれば、第6のステップにおいて、補間係数算出手段が、(x−j)の総積結果と(i−j)の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する。次に、第7のステップにおいて、補間係数算出手段が、各ブロック内に、各乗算処理における各桁の乗算処理を実行する各スレッドを生成する。次に、第8のステップにおいて、補間係数算出手段が、各スレッドが担当する各桁の乗算処理を、GPUを用いて並列に実行する。次に、第9のステップにおいて、補間係数算出手段が、第8のステップで実行された各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する。次に、第10のステップにおいて、補間係数算出手段が、各桁の乗算処理結果の加算処理を、GPUを用いて並列に実行する。したがって、除算処理に含まれる乗算処理をブロックに、乗算処理における各桁の乗算処理をスレッドに割り当て、GPUを用いて並列に実行することにより、暗号化処理を更に高速化することができる。
(4) 本発明は、(3)のラグランジュの補間係数Δi,N(x)の演算処理方法について、前記第5のステップは、更に、前記補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する第11のステップと、前記補間係数算出手段が、各スレッドが担当する加算処理を、前記GPUを用いて並列に実行する第12のステップと、を含み、前記補間係数算出手段が、下位桁からの繰り上がりが無くなるまで前記第12のステップを繰り返すことを特徴とする演算処理方法を提案している。
この発明によれば、第10のステップに続いて、第11のステップにおいて、補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する。次に、第12のステップにおいて、補間係数算出手段が、各スレッドが担当する加算処理を、GPUを用いて並列に実行する。そして、補間係数算出手段が、下位桁からの繰り上がりが無くなるまで第12のステップを繰り返す。したがって、各桁を所定長に揃える規格化における、繰り上がりと上位桁との加算処理をスレッドに割り当て、GPUを用いて並列に実行することにより、暗号化処理を更に高速化することができる。
(5) 本発明は、FIBE方式の秘密鍵と暗号文とを入力として、復号関数(数4式)から平文を生成するFIBE(Fuzzy Identity Based Encryption)方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,S(0)(数5式)の演算処理方法であって、前記補間係数算出手段が、前記ラグランジュの補間係数Δi,S(0)を求める前記数5式の右辺の演算処理を実行するブロックを、変数i毎に生成する第1のステップ(例えば、図14のステップS111)と、前記補間係数算出手段が、前記数5式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップ(例えば、図14のステップS112)と、前記補間係数算出手段が、各スレッドが担当する前記数5式の多項式(−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップ(例えば、図14のステップS113)と、前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップ(例えば、図14のステップS114)と、を含むことを特徴とする演算処理方法を提案している。
この発明によれば、まず、第1のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δi,S(0)を求める数5式の右辺の演算処理を実行するブロックを、変数i毎に生成する。次に、第2のステップにおいて、補間係数算出手段が、数5式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する。次に、第3のステップにおいて、補間係数算出手段が、各スレッドが担当する数5式の多項式(−j)/(i−j)の演算処理を、GPUを用いて並列に実行する。次に、第4のステップにおいて、補間係数算出手段が、各ブロック内において、各jについて第3のステップで実行された演算結果の総積処理を、GPUを用いて並列に実行する。したがって、FIBE方式の復号処理にあって、処理に時間を要していた復号関数に含まれるラグランジュの補間係数の演算処理において、iを変数としたループ処理、およびiを変数としたループ処理に含まれるjを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、GPUを用いて並列に実行することにより、復号処理を高速化することができる。
(6) 本発明は、FIBE方式の公開鍵を用いて平文から暗号文を生成するFIBE(Fuzzy Identity Based Encryption)方式の暗号化装置において、暗号文を生成するのに必要な暗号化関数(数6式)の値を求める暗号化関数算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,N(x)(数7式)の演算処理方法をコンピュータに実行させるプログラムであって、前記補間係数算出手段が、前記ラグランジュの補間係数Δi,N(x)を求める前記数7式の右辺の演算処理を実行するブロックを変数i毎に生成する第1のステップ(例えば、図7のステップS41に相当)と、前記補間係数算出手段が、前記数7式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップ(例えば、図7のステップS42に相当)と、前記補間係数算出手段が、各スレッドが担当する前記数7式の多項式(x−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップ(例えば、図7のステップS43に相当)と、前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップ(例えば、図7のステップS44に相当)と、をコンピュータに実行させるプログラムを提案している。
この発明によれば、まず、第1のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δi,N(x)を求める数7式の右辺の演算処理を実行するブロックを変数i毎に生成する。次に、第2のステップにおいて、補間係数算出手段が、数7式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する。次に、第3のステップにおいて、補間係数算出手段が、各スレッドが担当する数7式の多項式(x−j)/(i−j)の演算処理を、GPUを用いて並列に実行する。次に、第4のステップにおいて、補間係数算出手段が、各ブロック内において、各変数jについて第3のステップで得られた演算結果の総積処理を、GPUを用いて並列に実行する。したがって、FIBE方式の暗号化処理にあって、処理に時間を要していた暗号化関数に含まれるラグランジュの補間係数Δi,N(x)の演算処理において、iを変数としたループ処理、およびiを変数としたループ処理に含まれるjを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、GPUを用いて並列に実行することにより、暗号化処理を高速化することができる。
(7) 本発明は、FIBE方式の秘密鍵と暗号文とを入力として、復号関数(数8式)から平文を生成するFIBE(Fuzzy Identity Based Encryption)方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,S(0)(数9式)の演算処理方法をコンピュータに実行させるプログラムであって、前記補間係数算出手段が、前記ラグランジュの補間係数Δi,S(0)を算出する前記数9式の右辺の演算処理を実行するブロックを、変数i毎に生成する第1のステップ(例えば、図14のステップS111)と、前記補間係数算出手段が、前記数9式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップ(例えば、図14のステップS112)と、前記補間係数算出手段が、各スレッドが担当する前記数9式の多項式(−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップ(例えば、図4のステップS113)と、前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップ(例えば、図14のステップS114)と、をコンピュータに実行させるプログラムを提案している。
この発明によれば、まず、第1のステップにおいて、補間係数算出手段が、ラグランジュの補間係数Δi,S(0)を求める数9式の右辺の演算処理を実行するブロックを、変数i毎に生成する。次に、第2のステップにおいて、補間係数算出手段が、数9式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する。次に、第3のステップにおいて、補間係数算出手段が、各スレッドが担当する数9式の多項式(−j)/(i−j)の演算処理を、GPUを用いて並列に実行する。次に、第4のステップにおいて、補間係数算出手段が、各ブロック内において、各jについて第3のステップで実行された演算結果の総積処理を、GPUを用いて並列に実行する。したがって、FIBE方式の復号処理にあって、処理に時間を要していた復号関数に含まれるラグランジュの補間係数の演算処理において、iを変数としたループ処理、およびiを変数としたループ処理に含まれるjを変数としたループ処理を分割し、分割した処理をブロック及びブロック内のスレッドに分けて、GPUを用いて並列に実行することにより、復号処理を高速化することができる。
(8) 本発明は、前記補間係数算出手段(例えば、図3の補間係数算出部151に相当)が、(1)から(4)のいずれか1項に記載の演算処理方法を用いてラグランジュの補間係数Δi,N(x)を求め、前記暗号化関数算出手段(例えば、図3の暗号化関数値算出部150に相当)が、前記補間係数算出手段で算出されたラグランジュの補間係数Δi,N(x)、および前記公開鍵に基づいて、前記暗号化関数の値を求め、更に、乱数を生成する乱数生成手段(例えば、図3の乱数生成部110に相当)と、生成された乱数、前記平文、および前記公開鍵に基づいて、2つの暗号文の要素を生成する第1の要素生成手段(例えば、図3のE´算出部120およびE´´算出部130に相当)と、前記生成された乱数、前記暗号化関数算出手段で求められた暗号化関数の値、および前記公開鍵に基づいて、暗号文の要素を生成する第2の要素生成手段(例えば、図3のE算出部140に相当)と、を備え、前記第1の要素生成手段および第2の要素生成手段で生成された要素を暗号文として生成することを特徴とする暗号化装置を提案している。
この発明によれば、補間係数算出手段は、(1)から(4)のいずれかに記載の演算処理方法を用いてラグランジュの補間係数Δi,N(x)を求める。暗号化関数算出手段は、補間係数算出手段で算出されたラグランジュの補間係数Δi,N(x)、および公開鍵に基づいて、暗号化関数の値を求める。乱数生成手段は、乱数を生成する。第1の要素生成手段は、生成された乱数、平文、および公開鍵に基づいて、2つの暗号文の要素を生成する。第2の要素生成手段は、生成された乱数、暗号化関数算出手段で求められた暗号化関数の値、および公開鍵に基づいて、暗号文の要素を生成する。したがって、GPUを用いて並列に処理を実行することにより高速化されたラグランジュの補間係数の演算処理方法を用いることにより、処理速度が向上した暗号化装置を提供することができる。
(9) 本発明は、前記補間係数算出手段が、(5)に記載の演算処理方法を用いてラグランジュの補間係数の値を求め、前記補間係数算出手段で求められたラグランジュの補間係数と、前記秘密鍵および前記暗号文とに基づいて、前記数4式に示す演算行い、平文を生成することを特徴とする復号装置を提案している。
この発明によれば、補間係数算出手段が、(5)に記載の演算処理方法を用いてラグランジュの補間係数の値を求める。復号装置が、補間係数算出手段で求められたラグランジュの補間係数と、秘密鍵および暗号文とに基づいて、数4式に示す演算行い、平文を生成する。したがって、GPUを用いて並列に処理を実行することにより高速化されたラグランジュの補間係数の演算処理方法を用いることにより、処理速度が向上した復号装置を提供することができる。
本発明によれば、FIBE方式の暗号化処理において、暗号化関数内の2重のループ処理を分割し、GPUで並列に演算することにより、FIBE方式の暗号化処理を高速化することができる。また、FIBE方式の復号処理において、復号関数内の2重のループ処理を分割し、GPUで並列に演算することによって、復号処理を高速化することができる。
本実施形態に係る暗号化装置、復号化装置、および秘密鍵生成装置のハードウェア構成の一例を示す図である。 FIBE方式の暗号システムの処理フローを示す図である。 FIBE方式の暗号化装置の構成の一例を示す図である。 FIBE方式の暗号化処理のフローを示す図である。 FIBE方式の暗号化処理における暗号化関数T(i)の演算処理のフローを示す図である。 第1の実施形態に係るΔi,N(x)の演算処理を、GPUを用いて並列に実行する1つ目の方法を示す図である。 第1の実施形態に係るΔi,N(x)の演算処理を、GPUを用いて並列に実行する暗号化関数T(i)の演算処理フローを示す図である。 第1の実施形態に係るΔi,N(x)の演算処理を、GPUを用いて並列に実行する2つ目の方法を示す図である。 第1の実施形態に係る3桁×3桁の多倍長整数乗算を、GPUを用いて並列に実行する方法を示す図である。 第1の実施形態に係る3桁×3桁の多倍長整数乗算の規格化を、GPUを用いて並列に実行する方法を示す図である。 FIBE方式の復号装置の構成の一例を示す図である。 FIBE方式の復号処理のフローを示す図である。 第2の実施形態に係るΔi,S(0)の演算処理を、GPUを用いて並列に実行する方法を示す図である。 第2の実施形態に係るΔi,S(0)の演算処理を、GPUを用いて並列に実行する復号関数の演算処理フローを示す図である。
以下、図面を用いて、本発明の実施形態について詳細に説明する。なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組み合わせを含むさまざまなバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
<第1の実施形態>
本実施形態では、非特許文献1の6章に記載のFIBE(Fuzzy Identity Based Encryption)方式における暗号化処理において暗号文を生成する際に用いる暗号化関数内の2重のループ処理を分割し、分割した処理をGPUを用いて並列に実行することにより、暗号化処理を高速化する方法について説明する。
<FIBE方式の暗号システム>
FIBE方式とは、ユーザのID(生体情報等のユーザ属性の集合)から生成された公開鍵(暗号化鍵)および秘密鍵(復号鍵)の2つの異なる鍵を暗号化と復号とで使用する公開鍵暗号方式の一種であって、暗号化を行う暗号化装置と、復号を行う復号装置と、秘密鍵および公開鍵を生成するのに必要なデータを生成および秘密鍵を生成する秘密鍵生成装置とを基本構成として備える。なお、秘密鍵生成装置は、信頼できる第三者が各種鍵を管理する装置であり、PKG(Private Key Generator)ともいう。
図1は、本実施形態に係るFIBE方式の暗号化装置(以下、単に暗号化装置という)、FIBE方式の復号化装置(以下、単に復号化装置という)、およびFIBE方式の秘密鍵生成装置(以下、単に秘密鍵生成装置という)のハードウェア構成の一例を示す図である。暗号化装置、復号化装置、および秘密鍵生成装置は、演算処理等のプログラムを実行するCPU10(Central Processing Unit)と、CPU10から指示を受けた処理を並列に実行するGPU20(Graphics Processing Unit)と、ROMやRAM等のメインメモリ31とハードディスクといった外部記憶部32とを含む記憶部30と、他の装置と通信を行う通信部40と、ディスプレイやスピーカ等の出力部50と、キーボードやマウス等の入力部60とを備える。
本実施形態において、GPU20として、NVIDIAが提供するCUDA(Compute Unified Device Architecture、http://developer.nvidia.com/category/zone/cuda−zone[2011年10月25日検索])を利用する。CUDAを利用したGPU20は、並列処理を行う複数のマルチプロセッサ21(図には、21a、21bの2つのマルチプロセッサを例示)とデバイスメモリ22を備える。マルチプロセッサ21には、並列処理を行う複数のストリーム・プロセッサ23(図には、各マルチプロセッサに4つずつ例示)とシェードメモリ24((図には、各ストリーム・プロセッサに1つ、シェードメモリ24a、24bを例示))が備えられている。
記憶部30には、本実施形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、CPU10によって読みだされ、CPU10またはGPU20で実行される。
図2は、非特許文献1の6章に記載のFIBE方式の暗号システムの処理フローを示す図である。
まず、ステップS1において、秘密鍵生成装置は、セキュリティパラメータを入力として、マスター鍵、およびマスター鍵と対の公開パラメータを生成するセットアップ処理を実行する。
次に、ステップS2において、秘密鍵生成装置は、ステップS1で生成したマスター鍵および公開パラメータと、復号ユーザのID(以下、復号IDという)ωとを入力として、復号ユーザが暗号文Eを復号する際に用いる秘密鍵を生成する秘密鍵生成処理を実行する。ここで、復号IDωは、ユーザの属性の集合である。本実施形態において、復号IDωは、1からn+1までの整数からなる集合ω:{1,2,…,n+1}とする。
次に、ステップS3において、暗号化装置は、ステップS1で生成された公開パラメータ、および暗号化に用いるID(以下、暗号化IDという)ω´を公開鍵として、平文Mを暗号化した暗号文Eを生成する暗号化処理を実行する。なお、暗号化に用いるIDω´も、復号IDωと同様にユーザ属性の集合であって、本実施形態においては、1からn+1までの整数からなる集合ω´:{1,2,…,n+1}とする。なお、復号IDωと暗号化IDω´の要素数は同一とは限らない。
次に、ステップS4において、復号装置は、暗号化装置から受信した暗号文E、およびステップS2で生成された秘密鍵を入力とし、暗号文Eを復号した平文Mを生成する復号処理を行う。
<暗号化装置構成>
図3は、FIBE方式の暗号化装置100の構成の一例を示す図である。暗号化装置100は、公開パラメータおよび暗号化IDω´からなる公開鍵により平文Mを暗号化し、(1)式で表される暗号文Eを生成する。暗号文Eは、E´、E´´、Eを要素として含み、各要素は(1)式に含まれるそれぞれの式により算出される。(1)式に含まれる記号e、g、g、g、sの定義は、以下の(2)式に示す。
Figure 0005709773
Figure 0005709773
図3に示すように、暗号化装置100は、乱数生成部110、E´算出部120、E´´算出部130、およびE算出部140を備える。E算出部140は、暗号化関数値算出部150、および累乗部160を備える。各部の処理について、図4に示すFIBE方式の暗号化処理のフローを用いて説明する。
<暗号化処理>
まず、ステップS11において、乱数生成部110は、Z上のランダムな要素sを生成する。
次に、ステップS12において、E´算出部120は、秘密鍵生成装置で生成された公開パラメータと、平文Mと、ステップS1で生成されたZ上のランダムな要素sとを入力として、暗号文Eの要素であるE´を求める。
次に、ステップS13において、E´´算出部130は、秘密鍵生成装置で生成された公開パラメータと、ステップS1で生成されたZ上のランダムな要素sとを入力として、暗号文Eの要素であるE´´を求める。
次に、ステップS14において、E算出部140は、暗号化IDω´(1からn+1のn+1個の整数)から、1つずつ順に選択して、変数iの値とする。
次に、ステップS15において、暗号化関数値算出部150は、公開パラメータと、iとを入力として、Eを生成するのに必要な暗号化関数T(i)の値を、以下の(3)式から求める。なお、Δi,N(x)は、ラグランジュの補間係数である。
Figure 0005709773
次に、ステップS16において、累乗部160は、ステップS15で算出された暗号化関数T(i)の値とステップS1で生成されたZ上のランダムな要素sとを入力として、T(i)のs乗を暗号文Eの要素であるEとして求める。
次に、ステップS17において、E算出部140は、暗号化IDω´の全ての要素をステップS14で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS14に処理を戻し、全ての要素を選択したと判断した場合は、処理を終了する。
<暗号化関数T(i)>
図3に戻って、暗号化関数値算出部150は、補間係数算出部151、累乗部152、および関数値算出部153を備える。各部の処理について、図5に示すFIBE方式の暗号化関数T(i)の演算処理のフローを用いて説明する。
まず、ステップS21において、暗号化関数値算出部150は、集合N(1からn+1のn+1個の整数)の中から、1つずつ順に選択して、変数jの値とする。
次に、ステップS22において、補間係数算出部151は、(3)式に示したΔi,N(x)の(x−j)を求める。
次に、ステップS23において、暗号化関数値算出部150は、集合Nの全ての要素をステップS21で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS21に処理を戻し、全ての要素を選択したと判断した場合は、ステップS24に処理を進める。
次に、ステップS24において、暗号化関数値算出部150は、暗号化IDω´(1からn+1のn+1個の整数)から、1つずつ順に選択して、変数iの値とする。
次に、ステップS25において、補間係数算出部151は、集合N(1からn+1のn+1個の整数)の中から、1つずつ順に選択して、変数jの値とする。
次に、ステップS26において、補間係数算出部151は、ステップS22で求めた(x−j)の結果を(i−j)で除算し、商[(x−j)/(i−j)]を求める。
次に、ステップS27において、補間係数算出部151は、集合Nの全ての要素をステップS25で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS25に処理を戻し、全ての要素を選択したと判断した場合は、ステップS28に処理を進める。
次に、ステップS28において、補間係数算出部151は、各jについてステップS26で求めた商[(x−j)/(i−j)]の総積を求め、Δi,N(x)を求める。
次に、ステップS29において、累乗部152は、各変数iについて、公開鍵の要素tとステップS28で求めたΔi,N(x)を入力として、t^Δi,N(x)を求める。
次に、ステップS30において暗号化関数値算出部150は、暗号化IDω´の全ての要素をステップS24で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS24に処理を戻し、全ての要素を選択したと判断した場合は、ステップS31に処理を進める。
次に、ステップS31において、関数値算出部153は、g x^nおよび、各iについてステップS29で求めたt^Δi,N(x)の総積を求め、求めたg x^nとt^Δi,N(x)の総積との積を、暗号化関数T(i)としてを求める。
上述した暗号化関数T(i)の演算方法では、処理に時間を要するループ処理が3つも含まれるために、暗号化処理に時間がかかっていた。特に、2重のループ処理を含むステップS24〜S28のΔi,N(x)を求める処理がボトルネックであった。本実施形態において、このボトルネックであったΔi,N(x)を求める処理を、GPU20を用いて並列に実行することによって、暗号化処理の速度を向上させる。以下に、Δi,N(x)を求める処理を、GPU20を用いて並列に実行する方法を2つ説明する。
<方法1>
本方法では、Δi,N(x)の演算処理をGPU20が担当し、Δi,N(x)における(x−j)/(i−j)の演算処理と(x−j)/(i−j)の総積を求める演算処理とを、並列に実行する。図6を用いて、Δi,N(x)の演算処理を、GPU20を用いて実行する方法について説明する。
まず、Δi,N(x)の演算処理を実行する複数のブロック、本実施形態においては変数iの要素数n+1個のブロックが生成される。そして、図6に示すように、i=1のΔ1,N(x)の演算処理をBL0、i=2のΔ2,N(x)の演算処理をBL1と、変数i毎にΔi,N(x)の演算処理を各ブロックが担当する。生成されたブロックはマルチプロセッサ21に割り当てられ、マルチプロセッサ21で並列に実行される。すなわち、各変数i(i=1からn+1のn+1個の整数)についてのΔi,N(x)の演算処理を並列に実行することができる。
ブロック内には、複数のスレッドが生成される。スレッドは、Δi,N(x)の各処理と1対1対応するので、変数jの要素数(n+1)−1個のスレッドが生成される。(3)式に示したようにj≠iであるので、j=iのスレッドは生成されないからである。
よって、図6に示すように、j=2の(xー2)/(1−2)の演算処理をTR0、j=3の(xー3)/(1−3)の演算処理をTR2と、各変数jの(xーj)/(i−j)の演算処理を各スレッドが担当し、(xーj)/(i−j)の演算処理をブロック内で並列に実行する。スレッドはストリーム・プロセッサ23に割り当てられ、ストリーム・プロセッサ23で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ24に格納される。
シェードメモリ24に格納されている(xーj)/(i−j)の演算結果の数と同数のスレッド、すなわちn個のスレッドが各ブロック内に起動される。そして、リダクションを実行して、シェードメモリ24に格納されている(xーj)/(i−j)の演算結果の総積を求め、各ブロックにて各変数iについてのΔi,N(x)を求める。
得られた各変数iについてのΔi,N(x)は、デバイスメモリ22に格納された後、メインメモリ31に転送される。そして、CPU10において、メインメモリ31に格納された各変数iのΔi,N(x)と各変数iの公開鍵の要素tとを入力として、t^Δi,N(x)を求め、続いて、t^Δi,N(x)の総積を暗号化関数T(i)として求める。
上述した方法により、Δi,N(x)の演算処理を、GPU20を用いて実行する暗号化関数T(i)の演算処理フローを図7に示す。補間係数算出部151が、Δi,N(x)の演算処理をCPU10からGPU20に転送することで、GPU20を用いたΔi,N(x)の演算処理を開始する。
まず、ステップS41において、補間係数算出部151は、変数i毎にΔi,N(x)の演算処理を実行するブロックを生成する。本実施形態においては、変数iの要素数n+1個のブロックを生成する。
次に、ステップS42において、補間係数算出部151は、変数j毎に(xーj)/(i−j)の演算処理を実行するスレッドを各ブロック内に生成する。本実施形態においては、変数jの要素数(n+1)−1個(j=iの値を除く)のブロックを生成する。
次に、ステップS43において、補間係数算出部151は、ステップS42で生成された各スレッドが担当する(xーj)/(i−j)の演算処理を、GPU20のストリーム・プロセッサ23を用いて並列に実行し、演算結果をシェードメモリ24に格納する。
次に、ステップS44において、補間係数算出部151は、各ブロック内にてリダクションを実行して、ステップS43でシェードメモリ24に格納された(xーj)/(i−j)の演算結果の総積を求め、各ブロックにて各変数iについてのΔi,N(x)としてデバイスメモリ22に格納する。
次に、ステップS45において、補間係数算出部151は、ステップS44でデバイスメモリ22に格納された各変数iのΔi,N(x)をCPU10の転送し、転送された各変数iのΔi,N(x)はメインメモリ31に格納される。
次に、ステップS46において、補間係数算出部151は、暗号化IDω´(1からn+1のn+1個の整数)から、1つずつ順に選択して、変数iの値とする。
次に、ステップS47において、累乗部152は、各変数iについて、公開鍵の要素tと、ステップS46でメインメモリ31に格納されたΔi,N(x)とを入力として、t^Δi,N(x)を求める。
次に、ステップS48において、暗号化関数値算出部150は、暗号化IDω´の全ての要素をステップS46で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS46に処理を戻し、全ての要素を選択したと判断した場合は、ステップS49に処理を進める。
次に、ステップS49において、関数値算出部153は、g x^nおよび、各iについてステップS47で求めたt^Δi,N(x)の総積を求め、求めたg x^nとt^Δi,N(x)の総積との積を、暗号化関数T(i)として求める。
以上説明したように、暗号化関数T(i)において、ボトルネックであったΔi,N(x)の演算処理を、GPU20を用いて並列に実行することにより、暗号化処理の速度を向上させることができる。
<方法2>
本方法では、上述した(3)式で示されるΔi,N(x)を以下の(4)式のように変形する。(4)式の分母Π(x−j)および分子Π(i―j)それぞれの演算処理を、GPU20を用いて並列に実行する。そして、分母Π(x−j)と分子Π(i―j)との除算をCPU10を用いて実行することによって、Δi,N(x)を求める。Δi,N(x)を(4)式のように変形することにより、方法1では(iの要素数)×(jの要素数−1)回行っていた除算回数をiの要素数回に削減することができる。また、除算をCPU10で実行することにより、上述した方法1において除算をGPU20で行うことで生じていたデバイスメモリ22へのランダムアクセスの大量発生を失くし、GPU20を有効に活用し、暗号化処理を更に高速化することができる。
Figure 0005709773
図8を用いて、(4)式に変形したΔi,N(x)の演算処理をGPU20を用いて実行する方法について説明する。
まず、(4)式の右辺の分母Π(x−j)および分子Π(i−j)の演算処理を実行する複数のブロック、本実施形態においては変数iの要素数n+1個のブロックが生成される。そして、図8に示すように、i=1における分母Π(x−j)および分子Π(i−j)の演算処理をBL0、i=2における分母Π(x−j)および分子Π(i−j)の演算処理をBL1と、変数i毎に分母Π(x−j)および分子Π(i−j)の演算処理を各ブロックが担当する。なお、本方法において、ブロックは2次元構成である。生成されたブロックはマルチプロセッサ21に割り当てられ、マルチプロセッサ21で並列に実行される。すなわち、各変数i(i=1〜n+1)についての分母Π(x−j)および分子Π(i−j)の演算処理を並列に実行することができる。
ブロック内には、複数のスレッドが生成される。本方法において、ブロックと同様にスレッドも2次元構成であって、(xーj)および(i−j)の各変数jにおける演算処理と1対1対応し、変数jの要素数(n+1)−1個のスレッドが生成される。(4)式に示したようにj≠iであるので、j=iのスレッドは生成されないからである。
よって、図8に示すように、j=2の(xー2)/(1−2)の演算処理をTR0、j=3の(xー3)/(1−3)の演算処理をTR1と、各変数jの(xーj)の演算処理および(i−j)の演算処理を各スレッドが担当し、(xーj)の演算処理および(i−j)の演算処理を並列に実行する。スレッドはストリーム・プロセッサ23に割り当てられ、ストリーム・プロセッサ23で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ24に格納される。
シェードメモリ24に格納されている(i−j)の演算結果の数((x−j)の演算結果の数も同数である)と同数のスレッド、すなわちn個のスレッドがブロック内に起動される。そして、リダクションを実行して、シェードメモリ24に格納されている(xーj)の演算結果の総積および(i−j)の演算結果の総積を求め、(4)式の右辺の分母Π(x−j)および分子Π(i−j)を求める。
得られた分母Π(x−j)および分子Π(i−j)は、デバイスメモリ22に格納された後、メインメモリ31に転送される。そして、CPU10において、メインメモリ31に格納された分母Π(x−j)と分子Π(i−j)とを、変数i毎にシーケンシャル除算することによって、各変数iのΔi,N(x)を求める。そして、CPU10において、得られた各変数iのΔi,N(x)と各変数iの公開鍵の要素tとから、t^Δi,N(x)を求め、続いて、t^Δi,N(x)の総積を暗号化関数T(i)として求める。
以上説明したように、暗号化関数T(i)において、ボトルネックであったΔi,N(x)の演算処理のうち、Π(x−j)およびΠ(i−j)の演算を、GPU20を用いて並列に実行するとともに、除算をCPU10で実行することにより、GPU20を有効に活用し、暗号化処理の速度を更に向上させることができる。
上述した方法2においてCPU10で実行している除算を、GPU20で実行することにより、暗号化処理の速度を更に向上させることができる。具体的には、Π(x−j)とΠ(i−j)との除算に含まれる多倍長整数乗算(以下、単に乗算という)を、GPU20を用いて並列に実行する。
補間係数算出部151が、Π(x−j)とΠ(i−j)との除算処理をCPU10からGPU20に転送することで、GPU20においてΠ(x−j)とΠ(i−j)との除算処理が開始する。1回の除算を1つのブロックが担当し、除算の回数分のブロックが生成される。本実施形態においては変数i毎にΠ(x−j)とΠ(i−j)との除算が実行されるので、変数iの要素数n+1個のブロックが生成される。生成されたブロックはマルチプロセッサ21に割り当てられ、マルチプロセッサ21で並列に実行される。
除算に含まれる乗算処理のGPU20を用いた並列化について、3桁×3桁の多倍長整数乗算を例に、図9を用いて説明する。図9に示すように、3桁の多倍長整数をx、yとし、xの各桁を上からx2、x1、x0、yの各桁を上からy2、y1、y0とする。
ブロック内に、各桁の乗算処理を実行する複数のスレッドが生成される。本例では、x2*y2、x1*y2、x0*y2、…、x0*y0の9個の乗算があるので、図に示すようにT(2,2),T(1,2)…T(0,0)の9個のスレッドが生成され、各スレッドにおいて乗算処理が並列に実行される。各スレッドの乗算結果は、シェードメモリ24に格納される。
また、ブロック内に、各桁の乗算処理結果の加算処理を実行するスレッドが、桁毎に生成される。スレッドはストリーム・プロセッサ23に割り当てられ、ストリーム・プロセッサ23で並列に実行される。シェードメモリ24に格納された乗算結果を図に示すように桁毎に組み合わせて、各桁の加算処理を、生成された各スレッドにて並列に実行し、各桁の加算結果は、乗算結果と同様、シェードメモリ24に格納される。本例では、3桁×3桁の多倍長整数乗算の結果が5桁になるので、TR0〜TR4の5個のスレッドが生成され、各スレッドにて並列に加算処理が実行される。
次に、図9を用いて説明した3桁×3桁の多倍長整数乗算により得られた各桁の値の規格化を、GPU20を用いて並列に実行する方法について図10を用いて説明する。
あらかじめ、図9に示したTR0〜TR4で実行される各桁の加算結果val0〜val4は、加算処理の後15bit長に規格化され、15bit長となった各桁の値をval0´〜val4´として、それによる桁上がり分をそれぞれcarry0〜carry4としてシェードメモリ24に格納される。carryの値と1つ上の桁のvalの値との加算処理を、各スレッドにて並列に実行する。そして、得られた結果を再度規格化し、carry0〜4の値が0になるまで繰り返し同処理を行う。このようにして、乗算処理における規格化も、GPU20を用いて並列に実行することができる。
以上説明したように、非特許文献1の6章に記載のFIBE(Fuzzy Identity Based Encryption)方式における暗号化処理の暗号化関数T(i)内の2重のループ処理を分割し、分割した処理を、GPU20を用いて並列に演算することにより、暗号化処理を高速化することができる。除算処理を削減することや、除算処理に含まれる乗算処理を、GPU20を用いて並列に実行することにより暗号化処理を更に高速化することができる。
<第2の実施形態>
図11から図13を用いて、本発明の第2の実施形態について説明する。第1の実施形態では、非特許文献1の6章に記載のFIBE方式における暗号化処理を高速化したが、本実施形態においては同FIBE方式における復号処理を高速化する。具体的には、復号処理において暗号文から平文を生成する際に用いる復号関数内の2重のループ処理を分割し、分割した処理を、GPUを用いて並列に演算することにより、復号処理を高速化する。なお、第1の実施形態と同一の符号を付す構成要素については、同一の機能を有することから、その詳細な説明は省略する。
図11は、FIBE方式の復号装置200の構成の一例を示す図である。復号装置200は、暗号化装置100で生成された暗号文Eを秘密鍵生成装置で生成された秘密鍵により復号し、平文Mを生成する。平文Mは(5)式に示す復号関数を解くことにより生成される。
Figure 0005709773
<復号装置構成>
図に示すように、復号装置200は、平文要素算出部210、および関数値算出部220を備える。平文要素算出部210は、ペアリング値算出部211、除算部212、補間係数算出部213、および累乗部214を備える。各部の処理について、図12に示す復号処理のフローを用いて説明する。
<復号処理>
まず、ステップS101において、平文要素算出部210が、複合化IDω∩暗号化IDω´の集合Sの中から、要素を1つずつ選択してiとする。なお、集合Sの各要素は、集合Sの要素のインデックスkを用いて、Sで表す。ここで、なお、kは、1からdのd個の整数であって、dはFIBE方式の暗号化システムにおいて、予め設定されたエラー許容パラメータである。
次に、ステップS102において、ペアリング値算出部211は、秘密鍵(Di,di)と暗号文の要素(E´´,Ei)とを入力として、diとEiとの組をペアリング写像eにより写像したe(di,Ei)と、DiとE´´との組をペアリング写像eにより写像したe(Di,E´´)を求める。
次に、ステップS103において、除算部212は、ステップS102で算出されたe(di,Ei)をe(Di,E´´)で割った商[e(di,Ei)/e(Di,E´´)]を求める。
次に、ステップS104において、補間係数算出部213は、(5)式によりラグランジュの補間係数Δi,S(0)の値を求める。
次に、ステップS105において、累乗部214は、ステップS103で求められた[e(di,Ei)/e(Di,E´´)]と、ステップS104で求められたΔi,S(0)を入力として、[e(di,Ei)/e(Di,E´´)]^Δi,S(0)を求める。
次に、ステップS106において、平文要素算出部210は、複合化IDω∩暗号化IDω´の集合Sの全ての要素をステップS101で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS101に処理を戻し、全ての要素を選択したと判断した場合は、ステップS107に処理を進める。
次に、ステップS107において、関数値算出部220は、各iについて、ステップS105で求められた[e(di,Ei)/e(Di,E´´)]^Δi,S(0)の総積を求め、求めた総積と暗号文の要素E´との積を平文Mとして求める。
復号処理において、(5)式に示した復号関数にもラグランジュの補間係数Δi,S(0)が用いられているので、実施形態1で説明したΔi,N(x)と同様に、ボトルネックである2重のループ処理が含まれている。そこで、本実施形態において、このボトルネックであったΔi,S(0)を求める処理を、GPU20を用いて並列に実行することにより復号処理の速度を向上させる。
ところで、復号関数で使用するラグランジュの補間係数Δi,S(0)と暗号化関数で使用するラグランジュの補間係数Δi,N(x)とは、Δi,N(x)のjが1からn+1の連番の整数からなる集合Nを用いていたのに対し、Δi,S(0)は複合化IDω∩暗号化IDω´の集合であり連番ではない集合Sを用いている点、およびΔi,N(x)のxの値が常に0である点で異なる。すなわち、jおよびxの取り得る値が異なるだけであるので、第1の実施形態と同様の方法(方法1および方法2)を用いて、Δi,S(0)の演算処理をGPU20を用いて並列化することができる。
上述した方法1を用いたΔi,S(0)の演算処理をGPU20を用いて実行する方法について、図13を用いて説明する。
まず、Δi,S(0)の演算処理を実行する複数のブロック、本実施形態においては変数iの要素数d個のブロックが生成される。そして、図13に示すように、i=SのΔ1,N(x)の演算処理をBL0、i=SのΔk,N(x)の演算処理をBLk−1と、変数i毎にΔi,S(0)の演算処理を各ブロックが担当する。生成されたブロックはマルチプロセッサ21に割り当てられ、マルチプロセッサ21で並列に実行される。すなわち、各変数iのΔi,S(0)演算処理を並列に実行することができる。
ブロック内には、複数のスレッドが生成される。スレッドは、Δ1,S(0)の各処理と1対1対応するので、変数jの要素数d−1個のスレッドが生成される。(5)式に示したようにj≠iであるので、j=iのスレッドは生成されないからである。
よって、図13に示すように、j=Sの(−S)/(1−S)の演算処理をTR1、j=Sの(S)/(1−S)の演算処理をTRk−1と、各変数jの(−j)/(i−j)の演算処理を各スレッドが担当し、(−j)/(i−j)の演算処理を並列に実行する。スレッドはストリーム・プロセッサ23に割り当てられ、ストリーム・プロセッサ23で並列に実行される。各スレッドの演算結果は、スレッド毎にシェードメモリ24に格納される。
シェードメモリ24に格納されている(−j)/(i−j)の演算結果の数と同数のスレッド、すなわちd−1個のスレッドがブロック内に起動される。そして、リダクションを実行して、シェードメモリ24に格納されている(−j)/(i−j)の演算結果の総積を演算し、各変数iのΔi,S(x)を求める。
得られた各変数iのΔi,S(x)は、デバイスメモリ22に格納された後、メインメモリ31に転送される。そして、CPU10において、メインメモリ31に格納された各変数iのΔi,S(x)、除算部212で求められた[e(di,Ei)/e(Di,E´´)]、および暗号文の要素E´を入力として、復号化関数の値として平文Mを求める。
上述した方法により、Δi,S(0)の演算処理を、GPU20を用いて実行する復号関数の演算処理フローを図14に示す。補間係数算出部213が、Δi,S(0)の演算処理をCPU10からGPU20に転送することで、GPU20を用いたΔi,S(0)の演算処理を開始する。
まず、ステップS111において、補間係数算出部213は、変数i毎にΔi,S(0)の演算処理を実行するブロックを生成する。本実施形態においては、変数iの要素数d個のブロックを生成する。
次に、ステップS112において、補間係数算出部213は、変数j毎に(−j)/(i−j)の演算処理を実行するスレッドを各ブロック内に生成する。本実施形態においては、変数jの要素数d−1個のスレッドを生成する。
次に、ステップS113において、補間係数算出部213は、ステップS112で生成された各スレッドが担当する(−j)/(i−j)の演算処理を、GPU20のストリーム・プロセッサ23を用いて並列に実行し、演算結果をシェードメモリ24に格納する。
次に、ステップS114において、補間係数算出部213は、各ブロック内にてリダクションを実行して、ステップS113でシェードメモリ24に格納された(−j)/(i−j)の演算結果の総積を求め、各変数iのΔi,S(0)とし、デバイスメモリ22に格納する。
次に、ステップS115において、補間係数算出部213は、ステップS114でデバイスメモリ22に格納された各変数iのΔi,S(0)をCPU10に転送し、転送された各変数iのΔi,S(0)はメインメモリ31に格納される。
次に、ステップS116において、平文要素算出部210は、複合化IDω∩暗号化IDω´の集合Sの中から、要素を1つずつ選択してiとする。なお、上述したように各要素は、集合Sの要素のインデックスk(kは1からdのd個の整数)を用いてSで表す。
次に、ステップS117において、ペアリング値算出部211は、秘密鍵(Di,di)と暗号文の要素(E´´,Ei)とを入力として、diとEiとの組をペアリング写像eにより写像したe(di,Ei)と、DiとE´´との組をペアリング写像eにより写像したe(Di,E´´)を求める。
次に、ステップS118において、除算部212は、ステップS117で算出されたe(di,Ei)をe(Di,E´´)で割った商[e(di,Ei)/e(Di,E´´)]を求める。なお、ステップS117および本ステップS118は、ステップS111の前であってもよい。
次に、ステップS119において、累乗部214は、ステップS117で求められた[e(di,Ei)/e(Di,E´´)]と、ステップS116でのメインメモリ31に格納された各変数iのΔi,S(0)とを入力として、[e(di,Ei)/e(Di,E´´)]^Δi,S(0)を求める。
次に、ステップS120において、平文要素算出部210は、複合化IDω∩暗号化IDω´の集合Sの全ての要素をステップS101で選択したか否かを判定する。まだ、選択していない要素があると判断した場合は、ステップS116に処理を戻し、全ての要素を選択したと判断した場合は、ステップS121に処理を進める。
次に、ステップS121において、関数値算出部220は、各iについて、ステップS119で求められた[e(di,Ei)/e(Di,E´´)]^Δi,S(0)の総積を求め、求めた総積と暗号文の要素E´との積を平文Mとして求める。
なお、以下の(6)式のように(5)式に示す復号関数を変形し、第1の実施形態の方法2を用いて、除算回数を減らし、復号処理を更に高速化することができる。
Figure 0005709773
以上説明したように、非特許文献1の6章に記載のFIBE(Fuzzy Identity Based Encryption)方式における復号処理の復号関数内の2重のループ処理を分割し、分割した処理を、GPU20を用いて並列に演算することにより、復号処理を高速化することができる。また、除算処理を削減することや、除算処理に含まれる乗算処理を、GPU20を用いて並列に実行することにより復号処理を更に高速化することができる。
なお、暗号化装置および復号装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムを暗号化装置および復号装置に読み込ませ、実行することによって本発明の暗号化装置および復号装置を実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。更に、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
10 CPU
20 GPU
21(21a、21b) マルチプロセッサ
22 デバイスメモリ
23 ストリーム・プロセッサ
24(24a、24b) シェードメモリ
30 記憶部
31 メインメモリ
32 外部記憶部
40 通信部
50 出力部
60 入力部

Claims (9)

  1. FIBE方式の公開鍵を用いて平文から暗号文を生成するFIBE(Fuzzy Identity Based Encryption)方式の暗号化装置において、暗号文を生成する際に用いる暗号化関数(数1式)の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,N(x)(数2式)の演算処理方法であって、
    前記補間係数算出手段が、前記ラグランジュの補間係数Δi,N(x)を求める前記数2式の右辺の演算処理を実行するブロックを変数i毎に生成する第1のステップと、
    前記補間係数算出手段が、前記数2式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップと、
    前記補間係数算出手段が、各スレッドが担当する前記数2式の多項式(x−j)/(i−j)の演算処理を、GPUを用いて並列に実行する第3のステップと、
    前記補間係数算出手段が、各ブロック内において、各変数jについて前記第3のステップで得られた演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップと、
    を含むことを特徴とする演算処理方法。
    Figure 0005709773

    Figure 0005709773
  2. 前記数2式を変形して得られる数3式を用いてラグランジュの補間係数Δi,N(x)を求め、
    前記第2のステップにおいて、前記補間係数算出手段が、前記数3式の多項式(x−j)および(i−j)の演算処理を実行するブロックを、前記ブロック内に変数j毎に生成し、
    前記第3のステップにおいて、前記補間係数算出手段が、各スレッドが担当する前記数3式の多項式(x−j)および(i−j)の演算処理を、前記GPUを用いて並列に実行し、
    前記第4のステップにおいて、前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで得られた(x−j)の演算結果および(i−j)の演算結果それぞれの総積処理を、前記GPUを用いて並列に実行し、
    更に、
    前記補間係数算出手段が、前記第4のステップの総積処理により得られた(x−j)の総積結果と(i−j)の総積結果との除算処理を、CPUを用いてシーケンシャルに実行する第5のステップを含むことを特徴とする請求項1に記載の演算処理方法。
    Figure 0005709773
  3. 前記第5のステップが、
    前記補間係数算出手段が、(x−j)の総積結果と(i−j)の総積結果との除算処理内の各乗算処理を実行する各ブロックを生成する第6のステップと、
    前記補間係数算出手段が、各ブロック内に、前記各乗算処理における各桁の乗算処理を実行する各スレッドを生成する第7のステップと、
    前記補間係数算出手段が、各スレッドが担当する前記各桁の乗算処理を、前記GPUを用いて並列に実行する第8のステップと、
    前記補間係数算出手段が、前記第8のステップで実行された前記各桁の乗算処理結果の加算処理を実行するスレッドを桁毎に生成する第9のステップと、
    前記補間係数算出手段が、前記各桁の乗算処理結果の加算処理を、前記GPUを用いて並列に実行する第10のステップと、
    を含むことを特徴とする請求項2に記載の演算処理方法。
  4. 前記第5のステップは、更に、
    前記補間係数算出手段が、下位桁からの繰り上がりと上位桁との加算処理を実行するスレッドを桁毎に生成する第11のステップと、
    前記補間係数算出手段が、各スレッドが担当する加算処理を、前記GPUを用いて並列に実行する第12のステップと、
    を含み、
    前記補間係数算出手段が、下位桁からの繰り上がりが無くなるまで前記第12のステップを繰り返すことを特徴とする請求項3に記載の演算処理方法。
  5. FIBE方式の秘密鍵と暗号文とを入力として、復号関数(数4式)から平文を生成するFIBE(Fuzzy Identity Based Encryption)方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,S(0)(数5式)の演算処理方法であって、
    前記補間係数算出手段が、前記ラグランジュの補間係数Δi,S(0)を求める前記数5式の右辺の演算処理を実行するブロックを、変数i毎に生成する第1のステップと、
    前記補間係数算出手段が、前記数5式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップと、
    前記補間係数算出手段が、各スレッドが担当する前記数5式の多項式(−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップと、
    前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップと、
    を含むことを特徴とする演算処理方法。
    Figure 0005709773

    Figure 0005709773
  6. FIBE方式の公開鍵を用いて平文から暗号文を生成するFIBE(Fuzzy Identity Based Encryption)方式の暗号化装置において、暗号文を生成するのに必要な暗号化関数(数6式)の値を求める暗号化関数値算出手段に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,N(x)(数7式)の演算処理方法をコンピュータに実行させるプログラムであって、
    前記補間係数算出手段が、前記ラグランジュの補間係数Δi,N(x)を求める前記数7式の右辺の演算処理を実行するブロックを変数i毎に生成する第1のステップと、
    前記補間係数算出手段が、前記数7式の多項式(x−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップと、
    前記補間係数算出手段が、各スレッドが担当する前記数7式の多項式(x−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップと、
    前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップと、
    をコンピュータに実行させるプログラム。
    Figure 0005709773

    Figure 0005709773
  7. FIBE方式の秘密鍵と暗号文とを入力として、復号関数(数8式)から平文を生成するFIBE(Fuzzy Identity Based Encryption)方式の復号装置において、当該復号装置に備えられた補間係数算出手段におけるラグランジュの補間係数Δi,S(0)(数9式)の演算処理方法をコンピュータに実行させるプログラムであって、
    前記補間係数算出手段が、前記ラグランジュの補間係数Δi,S(0)を求める前記数9式の右辺の演算処理を実行するブロックを、変数i毎に生成する第1のステップと、
    前記補間係数算出手段が、前記数9式の多項式(−j)/(i−j)の演算処理を実行するスレッドを、ブロック内に変数j毎に生成する第2のステップと、
    前記補間係数算出手段が、各スレッドが担当する前記数9式の多項式(−j)/(i−j)の演算処理を、前記GPUを用いて並列に実行する第3のステップと、
    前記補間係数算出手段が、各ブロック内において、各jについて前記第3のステップで実行された演算結果の総積処理を、前記GPUを用いて並列に実行する第4のステップと、
    をコンピュータに実行させるプログラム。
    Figure 0005709773

    Figure 0005709773
  8. 前記補間係数算出手段が、請求項1から請求項4のいずれか1項に記載の演算処理方法を用いてラグランジュの補間係数Δi,N(x)を求め、
    前記暗号化関数値算出手段が、前記補間係数算出手段で算出されたラグランジュの補間係数Δi,N(x)、および前記公開鍵に基づいて、前記暗号化関数の値を求め、
    更に、
    乱数を生成する乱数生成手段と、
    生成された乱数、前記平文、および前記公開鍵に基づいて、2つの暗号文の要素を生成する第1の要素生成手段と、
    前記生成された乱数、前記暗号化関数値算出手段で求められた暗号化関数の値、および前記公開鍵に基づいて、暗号文の要素を生成する第2の要素生成手段と、
    を備え、
    前記第1の要素生成手段および前記第2の要素生成手段で生成された要素を暗号文として生成することを特徴とする暗号化装置。
  9. 前記補間係数算出手段が、請求項5に記載の演算処理方法を用いてラグランジュの補間係数の値を求め、
    前記補間係数算出手段で求められたラグランジュの補間係数と、前記秘密鍵および前記暗号文とに基づいて、前記数4式に示す演算行い、平文を生成することを特徴とする復号装置。
JP2012007716A 2012-01-18 2012-01-18 Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム Active JP5709773B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012007716A JP5709773B2 (ja) 2012-01-18 2012-01-18 Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012007716A JP5709773B2 (ja) 2012-01-18 2012-01-18 Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム

Publications (2)

Publication Number Publication Date
JP2013148641A JP2013148641A (ja) 2013-08-01
JP5709773B2 true JP5709773B2 (ja) 2015-04-30

Family

ID=49046220

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012007716A Active JP5709773B2 (ja) 2012-01-18 2012-01-18 Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム

Country Status (1)

Country Link
JP (1) JP5709773B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6460660B2 (ja) * 2014-07-01 2019-01-30 株式会社Screenホールディングス データ演算装置、データ演算方法および欠陥検査装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7916864B2 (en) * 2006-02-08 2011-03-29 Nvidia Corporation Graphics processing unit used for cryptographic processing
US7890747B2 (en) * 2006-07-06 2011-02-15 Accenture Global Services Limited Display of decrypted data by a graphics processing unit
US7890750B2 (en) * 2006-07-06 2011-02-15 Accenture Global Services Limited Encryption and decryption on a graphics processing unit

Also Published As

Publication number Publication date
JP2013148641A (ja) 2013-08-01

Similar Documents

Publication Publication Date Title
CN110419194B (zh) 密钥交换设备和方法
Albrecht et al. Implementing RLWE-based schemes using an RSA co-processor
US10218494B1 (en) Performing block form reductions modulo non-Mersenne primes in cryptographic protocols
CN108737115B (zh) 一种具有隐私保护的私有属性集交集求解方法
Joye et al. Private yet efficient decision tree evaluation
US20190109701A1 (en) Methods and systems for enhanced data-centric homomorphic encryption sorting using geometric algebra
JP4682852B2 (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
US20190044697A1 (en) Methods and systems for enhanced data-centric homomorphic encryption searching using geometric algebra
JP6974461B2 (ja) 幾何代数を用いた高度データ中心型暗号化システムのための方法およびシステム
US20180294951A1 (en) Methods and systems for enhanced data-centric scalar multiplicative homomorphic encryption systems using geometric algebra
KR101233682B1 (ko) 타원곡선암호를 위한 연산 장치 및 방법
US11902432B2 (en) System and method to optimize generation of coprime numbers in cryptographic applications
Ayub et al. Parallelized RSA algorithm: An analysis with performance evaluation using OpenMP library in high performance computing environment
Ukwuoma et al. Post-quantum cryptography-driven security framework for cloud computing
JP2014137474A (ja) 改ざん検知装置、改ざん検知方法、およびプログラム
JP5709773B2 (ja) Fibe方式における、暗号化関数の演算処理方法、復号関数の演算処理方法、暗号化装置、復号装置、およびプログラム
Muhammed et al. Improved cloud-based N-primes model for symmetric-based fully homomorphic encryption using residue number system
Dawson et al. Ensuring privacy and confidentiality of cloud data: A comparative analysis of diverse cryptographic solutions based on run time trend
Swathi et al. Privacy-Cheating Discouragement: A New Homomorphic Encryption Scheme for Cloud Data Security
Imam et al. An empirical study of secure and complex variants of RSA scheme
Mittal et al. Comparative evaluation of fully homomorphic encryption algorithms in cloud environment
JP6212377B2 (ja) 演算装置、演算方法およびコンピュータプログラム
Lu et al. Efficient Key Generation on Lattice Cryptography for Privacy Protection in Mobile IoT Crowdsourcing
WO2019079355A1 (en) METHODS AND SYSTEMS FOR HOMOMORPHE ENCRYPTION SORTING BASED ON ENHANCED DATA USING GEOMETRIC ALGEBRA
Nguyen Advancing Privacy and Accuracy with Federated Learning and Homomorphic Encryption

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140731

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150224

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150303

R150 Certificate of patent or registration of utility model

Ref document number: 5709773

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150