(57)【特許請求の範囲】
【請求項１】
暗号化対象の平文系列に含まれる第１の値を複数の第２の値の和に分解する平文分解手段と、
前記第２の値を加法準同型性を満たす暗号方式で暗号化処理し、前記第２の値に対応する原暗号文を生成する原暗号文生成手段と、
前記平文分解手段で分解された第２の値に対応する原暗号文の組み合わせを選択する原暗号文選択手段と、
前記原暗号文選択手段で選択された原暗号文の組み合わせを掛け算することで前記第１の値の暗号文を生成する積計算手段と
を具備し、
前記原暗号文選択手段は、前記平文系列に複数の同一の前記第１の値が含まれる場合に、前記原暗号文の組み合わせを重複しないように選択することを特徴とする暗号文生成装置。
【請求項２】
前記平文系列に含まれる前記第１の値とその個数に基づいて、前記原暗号文生成手段で前記原暗号文を作成すべき前記第２の値とその個数を決定する原暗号文作成個数決定手段を、さらに具備することを特徴とする請求項１に記載の暗号文生成装置。
【請求項３】
前記積計算手段で生成される前記第１の値の暗号文を前記原暗号文の一つとして用いることをさらに特徴とする請求項１又は２に記載の暗号文生成装置。
【請求項４】
前記平文系列に複数の前記第１の値が含まれる場合に、その一部の前記第１の値を複数の前記第２の値の和に分解せずに１つずつ暗号化することをさらに特徴とする請求項１乃至３のいずれか１項に記載の暗号文生成装置。
【請求項５】
情報処理装置が実行する、暗号化対象の平文系列を暗号化する方法であって、
前記平文系列に含まれる第１の値を複数の第２の値の和に分解する平文分解ステップと、
前記第２の値を加法準同型性を満たす暗号方式で暗号化処理し、前記第２の値に対応する原暗号文を生成する原暗号文生成ステップと、
前記平文分解ステップで分解された第２の値に対応する原暗号文の組み合わせを選択する原暗号文選択ステップと、
前記原暗号文選択ステップで選択された原暗号文の組み合わせを掛け算することで前記第１の値の暗号文を生成する積計算ステップと
を有し、
前記原暗号文選択ステップでは、前記平文系列に複数の同一の前記第１の値が含まれる場合に、前記原暗号文の組み合わせを重複しないように選択することを特徴とする暗号文生成方法。
【請求項６】
コンピュータを請求項１乃至４のいずれかに１項に記載の暗号文生成装置が具備する各手段として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、大量のデータを暗号化するための暗号文生成装置、暗号文生成方法およびプログラムに関する。
【背景技術】
【０００２】
多くのユーザの嗜好情報（各アイテムへの評価）を蓄積し、各ユーザの嗜好を推論して情報推薦を行う方法として協調フィルタリングがある。しかし協調フィルタリングを利用したサービスでは、サービス提供事業者は各ユーザの嗜好情報を把握していることとなり、プライバシの観点から問題視されている。この問題を解決する方法として、加法準同型性を持つ暗号を利用して、嗜好情報を秘匿したまま情報推薦を行うプライバシ保護協調フィルタリングが考案されている（例えば、非特許文献１を参照）。
【０００３】
プライバシ保護協調フィルタリングを行う際に、各ユーザはアイテムに対する評価値同士の積を暗号化して送信する。この暗号化の際は加法準同型性をもつ暗号（例えばPaillier暗号）を利用することができる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】多田美奈子他、「アイテム間類似度に基づくプライバシ保護協調フィルタリングの提案」、情報処理学会論文誌Vol. 51 No. 9 1554-1562 (Sep. 2010)
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところが、評価値同士の積の数は、プライバシ保護協調フィルタリングを行う際の対象とするアイテムの個数の二乗に比例する。例えば、アイテムベースのプライバシ保護協調フィルタリングを利用し、対象とするアイテム数を1500個とすると、評価値同士の積は113万通りであり、ユーザ端末内で113万個の評価値同士の積を暗号化する必要がある。Paillier暗号の場合、１つの値を暗号化するのにかかる時間は端末によっては110ms程度かかり、113万個の値を暗号化するためには35時間もかかる。また、未評価の評価値は0であり、ほとんどが未評価であることから、評価値の積の大部分は0である。  
このように、プライバシ保護協調フィルタリングを行う際は大量のデータを暗号化して送信するが、大量のデータを全て暗号化するのに非常に時間がかかる。
【０００６】
この発明は上記事情に着目してなされたもので、その目的とするところは、暗号文の作成処理に要する時間を短縮することができる暗号文生成装置、暗号文生成方法およびプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するためにこの発明の第１の態様は、暗号化対象の平文系列に含まれる第１の値を複数の第２の値の和に分解する平文分解手段と、上記第２の値を加法準同型性を満たす暗号方式で暗号化処理し、上記第２の値に対応する原暗号文を生成する原暗号文生成手段と、上記平文分解手段で分解された第２の値に対応する原暗号文の組み合わせを選択する原暗号文選択手段と、上記原暗号文選択手段で選択された原暗号文の組み合わせを掛け算することで上記第１の値の暗号文を生成する積計算手段とを具備し、前記原暗号文選択手段は、前記平文系列に複数の同一の前記第１の値が含まれる場合に、前記原暗号文の組み合わせを重複しないように選択することを特徴とする暗号文生成装置と、これに対応する暗号文生成方法およびプログラムを提供する。
【０００８】
上記第１の態様では、暗号化より掛け算のほうが高速なことを利用して、暗号文同士の掛け算で新たな暗号文を作成することで、暗号化処理を高速化することが可能となる。なお、和に分解する際は、２つの数値の和に分解してもよいし、３つ以上の数値の和に分解してもよい。
また、原暗号文の組み合わせを重複しないように選択することで、平文に同じ値が複数含まれる場合でも、作成される暗号文を全て異なる値にすることができるため、暗号強度を高めることが可能となる。
【００１０】
また、この発明の第２の態様は、上記平文系列に含まれる上記第１の値とその個数に基づいて、上記原暗号文生成手段で上記原暗号文を作成すべき上記第２の値とその個数を決定する原暗号文作成個数決定手段をさらに備えるものである。
上記第２の態様によれば、例えば、0の個数をxとすると、y(y-1)/2 >= xとなる最小の整数yを選ぶことで、原暗号文を作成する第２の個数を最小にすることができ、暗号処理にかかる時間を短縮することが可能となる。
【００１１】
また、この発明の第３の態様は、上記積計算手段で生成される上記第１の値の暗号文を上記原暗号文の一つとして用いるものである。
上記第３の態様によれば、作成される暗号文をさらに複雑にすることができ、暗号強度を高めることができる。
【００１２】
また、この発明の第４の態様は、上記平文系列に複数の上記第１の値が含まれる場合に、その一部の上記第１の値を複数の上記第２の値の和に分解せずに１つずつ暗号化するものである。
上記第４の態様によれば、平文系列のうちの一部の上記第１の値を原暗号文を用いて暗号化し、残りの上記第１の値を複数の上記第２の値の和に分解せずに１つずつ暗号化することで、作成される暗号文が複雑になり、暗号強度をより高めることが可能となる。
【発明の効果】
【００１３】
すなわちこの発明によれば、暗号文の作成処理に要する時間を短縮することができる暗号文生成装置、暗号文生成方法およびプログラムを提供することができる。
【図面の簡単な説明】
【００１４】
【図１】第１実施形態に係る暗号化装置の機能構成を示すブロック図。
【図２】第１実施形態の暗号化処理の手順を示すフローチャート。
【図３】第１実施形態の暗号化処理の動作を示す図。
【図４】第２実施形態に係る暗号化装置の機能構成を示すブロック図。
【図５】第２実施形態の暗号化処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１５】
以下、図面を参照してこの発明に係る実施の形態を説明する。  
（第１実施形態）  
第１実施形態では、平文データの全てを原暗号文を用いて暗号化する手法について説明する。例えば、Paillier暗号を用いてプライバシ保護協調フィルタリングを行う際に、大量のデータを暗号化して送信する必要があり、大量のデータは数値で、値はほとんど０である。このような場合の暗号化に本発明の手法は有用である。
【００１６】
図１は、第１実施形態に係る暗号化装置の機能構成を示すブロック図である。この暗号化装置は、平文データ１０に対応する暗号文データ１７を作成するものであり、原暗号文作成個数決定部１１、原暗号文生成部１２、原平文−原暗号文対応テーブル１３、平文分解部１４、原暗号文選択部１５、および積計算部１６を有する。この暗号化装置は、
なお、この暗号化装置は、コンピュータとプログラムによっても実現でき、プログラムを記録媒体に記録することも、ネットワークを通して提供することも可能である。
【００１７】
原暗号文作成個数決定部１１は、平文データ１０を参照し、その平文系列の構成から原暗号文を作成すべき原平文とその個数を決定する。
原暗号文生成部１２は、原暗号文作成個数決定部１１で決定した原平文に対する原暗号文の個数だけ原平文の暗号化処理を行い、原平文−原暗号文対応テーブル１３に保存する。
【００１８】
平文分解部１４は、平文データ１０を参照し、各平文を複数の数の和に分解する。
原暗号文選択部１５は、平文分解部１４で分解された値に対応する原暗号文を原平文−原暗号文対応テーブル１３から選択する。このとき、重複しない組み合わせになるように原暗号文を選択することで、データの秘匿性をより高めることができる。
積計算部１６は、原暗号文選択部１５で選択された原暗号文同士の積を計算することで、平文データ１０に対応する暗号文データ１７を作成する。
【００１９】
次に、第１実施形態の動作手順について具体例を用いて説明する。図２は、第１実施形態の暗号化処理の手順を示すフローチャートである。ここでは、一例として、平文データ１０として、平文系列{a_m} = {0,2,0,0,0,0,0}が保存されているものとする。
【００２０】
［作成する原暗号文と個数の決定：ステップＳ１１］  
原暗号文作成個数決定部１１は、暗号作成用の原平文と原暗号文を作成する個数Map<平文, 個数>を決定する。例えば、0の個数をxとすると、y(y-1)/2 >= xとなる最小の整数yを選ぶ。そして、<原平文, 原暗号文の個数>= <0, y>, <1, 1>, <2, 1>,…というように、0の原暗号文はy個作り、平文系列に出現する0以外の数値を原平文とする原暗号文をそれぞれ一つづつ作る。この例では、原暗号文作成個数決定部１１は、平文データ１０を参照し、原平文“0”の原暗号文を4個、原平文“2”の原暗号文を1つ作成することを決定する。
【００２１】
［原暗号文の作成：ステップＳ１２］  
原暗号文生成部１２は、原暗号文作成個数決定部１１が決定した原平文に対応する原暗号文の個数だけ、原平文の暗号化処理を行う。この暗号化処理は、加法準同型性を満たす暗号方式で行い、例えばPaillier暗号を用いることができる。Paillier暗号等では、値aを暗号化した暗号文と、値bを暗号化した暗号文を掛けたものを復号化するとa+bとなる（加法準同型）。
【００２２】
［テーブルに保存する：ステップＳ１３］  
原暗号文生成部１２は、上記作成した原平文に対応する原暗号文を、原平文，原暗号文の形式で、原平文−原暗号文対応テーブル１３に保存する。なお、図１に示すように、原平文“0”に４つの原暗号文“0449”，“5bc1”，“0b88”，“c2d1”があるように、同一の原平文に複数の原暗号文がある。
【００２３】
［平文a_iをs+tに分解し、原暗号文を選択：ステップＳ１４］  
平文分解部１４は、平文データ１０を参照し、各平文a_iを複数の数の和s+tに分解する。例えば、a_i=0については0+0と分解し、a_i=2については0+2と分解する。
【００２４】
そして、原暗号文選択部１５は、s=0, t=a_iとして、ステップＳ１３で保存した原平文−原暗号文対応テーブル１３から平文sの暗号文Enc(s)と平文tの暗号文Enc(t)を同じ組み合わせにならないようにランダムで選択する。ここで、Enc(s)とは復号化するとsになる暗号文である。例えば、a_i=0を0+0に分解した場合、“0499”と“5bc1”の組み合わせを選択する。
【００２５】
［積を計算：ステップＳ１５］  
積計算部１６は、原暗号文選択部１５で選択した２つの原暗号文Enc(s)，Enc(t)同士の積Enc(s) * Enc(t)を取ることで、平文データ１０に対応する暗号文データ１７を作成する。  
Enc(s) * Enc(t) = Enc(s+t) = Enc(a_i) (mod n^2)  
なお、n^2はPaillier暗号を用いて暗号化するときの手法と同様である。
【００２６】
図２に示すように、a_i=0をs : 0, t : 0に分解した場合、選択する原暗号文は原平文が0のものを２つ選択する。なお、他のa_j=0をs:0, t:0に分解した際には、既に選択した原暗号文の組み合わせと異なるように、重複がないように選択する。ここでは、“0499”と“5bc1”の2つを選択をする。この場合の暗号文は、原暗号文同士の積を取ると以下のように求められる。  
0449 * 5bc1 = da59(mod n^2)
【００２７】
a_i=2をs : 0, t : 2に分解した場合、選択する原暗号文は原平文が0と2のものを１つずつ重複がないように、例えば“0499”と“3509”の２つを選択する。重複がないとは、a_j=2 でs : 0, t : 2となるように分解した際に、原暗号文として“0499”と“3509”の組み合わせを選択しているjはi以外にないという意味である。この場合の暗号文は、原暗号文同士の積を取ると以下のように求められる。  
0449 * 3509 = 4391(mod n^2)
このように第１実施形態の例では、平文系列{a_m}に対応する暗号系列{Enc(a_m)} = {da59, 4391, 69c8, d199, 0988, 2a91, 7a08}が作成される。
【００２８】
図３は、第１実施形態の暗号化処理の動作を示したものである。すなわち、0の個数xのときに、0の暗号化をx回行うのではなく、予め作成しておいた暗号文（原暗号文）を組み合わせることで暗号化を行う。図３に示すように、あらかじめ0を暗号化した原暗号文をy個作成し、２つの原暗号文を重複しない組み合わせで掛けることで新たな暗号文を作成する。0の暗号文同士を掛けたものは、復号すると0になる。暗号化するより暗号文同士の掛け算のほうが高速である点を利用して、原暗号文y個からyC2個の暗号文を作成可能である。つまり、原暗号文yC2個 = x となるy個あればよい。
【００２９】
ここで、比較のため、例えば、既存の方法で、データ100万個をPaillier暗号を用いて１つずつ暗号化する場合は、Paillier暗号の1暗号化あたりの時間を110 msとすると、  
100万 * 110 ms = 110000秒 = 1833分  
もかかることになる。
【００３０】
これに対し、第１実施形態の手法を用いた場合は、例えば、Paillier暗号の1暗号化あたりの時間を110 ms、暗号文同士の掛け算にかかる時間を1 msとすると、データ100万個中99%が0の場合、x=99万, y=1408なので、原暗号文作成にかかる時間＋掛け算にかかる時間は次のようになる。  
1408 * 110 ms + 100万*1ms = 1155秒 = 19.3分
【００３１】
以上述べたように、上記第１実施形態では、数値aを加法準同型性を持つ暗号方式で暗号化する際に、加法準同型性を用いることで、a=s+tというように2つの数値の和に分解し、sを暗号化した原暗号文とtを暗号化した原暗号文との掛け算をすることでaの暗号文を作成する。つまり、0の個数xのときに、0の暗号化をx回行うのではなく、予め作成しておいた暗号文（原暗号文）を組み合わせることで暗号化する。したがって第１実施形態によれば、複数の数値をそれぞれ同一の鍵で暗号化する際に、全ての数値を暗号化するまでの時間を短縮することが可能となる。
【００３２】
（第２実施形態）  
第２実施形態は、上記第１実施形態をベースにした変形例であり、平文データのうちの一部のデータを原暗号文を用いて暗号化し、残りのデータを通常どおり暗号化する手法である。また、第１実施形態では原暗号文を予め作成したが、第２実施形態では原暗号文を随時作成するようにする。
【００３３】
図４は、第２実施形態の暗号化装置の構成を示すブロック図である。第２実施形態の暗号化装置は、原暗号文生成部１２、原平文−原暗号文対応テーブル１３、平文分解部１４、原暗号文選択部１５、積計算部１６、分岐部１８、および暗号文生成部１９を有する。つまり、第２実施形態の暗号化装置は、上記図１に示す第１実施形態の構成から原暗号文作成個数決定部１１を削除し、分岐部１８と暗号文生成部１９とを追加したものである。なお、図４において、図１と同一の構成には同一の符号を付し、詳しい説明は省略する。
【００３４】
分岐部１８は、平文データのうちの一部のデータを平文分解部１４に分岐させ、残りのデータを暗号文生成部１９に分岐させる。平文分解部１４に分岐されたデータは、上記第１実施形態で述べた原暗号文を用いた暗号化を行う。
暗号文生成部１９は、分岐部１８で分岐されたデータについて通常どおりの暗号化（例えば、Paillier暗号を用いてデータを１つずつ暗号化する）を行う。
【００３５】
次に、第２実施形態の動作手順について説明する。図５は、第２実施形態の暗号化処理の手順を示すフローチャートである。上記第１実施形態と同様に、平文データ１０として、平文系列{a_m} = {0,2,0,0,0,0,0}が保存されているものとする。
【００３６】
［分岐：ステップＳ２６］  
分岐部１８は、例えば、暗号化する平文を確率pで平文分解部１４へ、確率1−pで暗号文生成部１９へ分岐する。
［平文a_iをs+tに分解し、原暗号文を選択：ステップＳ２４］  
平文分解部１４は、平文データ１０を参照し、各平文a_iを複数の数の和s+tに分解する。例えば、a_i=0については0+0と分解し、a_i=2については0+2と分解する。
【００３７】
そして、原暗号文選択部１５は、平文分解部１４で分解された数s, tに対応する原暗号文を選択する。この際、原暗号文の組み合わせは重複がないように選択し、十分な原暗号文が存在しない場合は、原暗号文生成部１２にリクエストを送り原暗号文の作成を行い、十分な原暗号文が存在するようになるまで繰り返し、原暗号文を重複のない組み合わせで選択する。
【００３８】
［原暗号文の作成：ステップＳ２２］  
原暗号文生成部１２は、原暗号文選択部１５から上記リクエストを受けて、原平文に対応する原暗号文を作成する。この暗号化処理は、加法準同型性を満たす暗号方式で行い、例えばPaillier暗号を用いることができる。
【００３９】
［テーブルに保存する：ステップＳ２３］  
原暗号文生成部１２は、上記作成した原平文に対応する原暗号文を、原平文，原暗号文の形式で、原平文−原暗号文対応テーブル１３に保存する。
【００４０】
［積を計算：ステップＳ２５］  
積計算部１６は、原暗号文選択部１５で選択した２つの原暗号文Enc(s)，Enc(t)同士の積Enc(s) * Enc(t)を取ることで、平文データ１０に対応する暗号文データ１７を作成する。
Enc(s) * Enc(t) = Enc(s+t) = Enc(a_i) (mod n^2)  
なお、n^2はPaillier暗号を用いて暗号化するときの手法と同様である。
【００４１】
［暗号文の作成：ステップＳ２７］  
一方、分岐部１８で暗号文生成部１９に分岐された平文データは、暗号文生成部１９において通常どおり１つずつ暗号化される。例えば、平文系列{a_m}のうち４番目のデータ0が分岐部１８で暗号文生成部１９に分岐された場合、暗号文生成部１９は、この0についてPaillier暗号を用いて暗号化を行い、“842b”を出力する。  
この第２実施形態の例では、平文系列{a_m}に対応する暗号系列{Enc(a_m)} = {da59, 4391, 69c8, 842b, 0988, 2a91, 7a08}が作成される。
【００４２】
このように第２実施形態によれば、平文データのうちの一部のデータを原暗号文を用いて暗号化し、残りのデータを通常どおり暗号化することで、作成される暗号文が複雑になり、暗号強度をより高めることが可能となる。また、原暗号文を随時作成することで、予め全ての平文系列を見て原暗号文の個数を決定する必要がないため、最初から全ての平文系列が揃っていなくても、徐々に受信しながら暗号化処理を進めることができる。
【００４３】
なお、この発明は上記実施形態に限定されるものではない。例えば、平文a=s+t+u+…というように３つ以上の和に分解しても良い。また、複数の原暗号文の積で作成された暗号文をさらに原暗号文の一つとして用いるようにしてもよい。これらのようにすると、作成される暗号文をさらに複雑にすることができ、暗号文がどの原暗号文の積であるかを特定することが難しくなり、暗号強度を高めることができる。
【００４４】
要するにこの発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【符号の説明】
【００４５】
１０…平文データ、１１…原暗号文作成個数決定部、１２…原暗号文生成部、１３…原平文−原暗号文対応テーブル、１４…平文分解部、１５…原暗号文選択部、１６…積計算部、１７…暗号文データ、１８…分岐部、１９…暗号文生成部。
【図１】
0005965873.tif 000002
【図２】
0005965873.tif 000003
【図３】
0005965873.tif 000004
【図４】
0005965873.tif 000005
【図５】
0005965873.tif 000006