(57)【特許請求の範囲】
【請求項１】
暗号処理装置の特定部によって、複数の属性の各々についての属性値の組み合わせを複数格納するデータ格納部に格納されている前記組み合わせの各々について、前記複数の属性のうち、前記組み合わせの集合である集計単位を特定するための第１の属性の属性値に従って、当該組み合わせが属する集計単位を特定するステップと、
前記暗号処理装置の処理部によって、特定された前記集計単位に応じた準同型暗号処理を、前記組み合わせにおける第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納するステップと、
を含み、前記暗号処理装置であるコンピュータにより実行される暗号処理方法。
【請求項２】
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて公開鍵に含まれる元を選択し、当該元を用いた準同型暗号処理を実施する処理である
請求項１記載の暗号処理方法。
【請求項３】
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じてビットシフト量を特定し、特定された前記ビットシフト量だけ前記第２の属性の属性値を左ビットシフトさせた上で準同型暗号処理を実施する処理である
請求項１記載の暗号処理方法。
【請求項４】
素数の法がｎであり、
０＜ｓ＜ｎ−１を満たす第１の乱数を秘密鍵ｓとし、
前記第２の属性の属性値がｍであり、
法ｎ上の原始元がｇであり、
暗号化鍵がｙ＝ｇs （ｍｏｄ  ｎ）であり、
選択された前記元がｇaであるとすると、
前記準同型暗号処理が、
０＜ｒ＜ｎ−１を満たす第２の乱数ｒを生成し、
暗号文ｃ＝ｇr（ｍｏｄ  ｎ）を算出し、
暗号文ｄ＝ｙrｇam（ｍｏｄ  ｎ）を算出する
処理を含む
請求項２記載の暗号処理方法。
【請求項５】
特定された前記ビットシフト量だけ左ビットシフトさせた前記第２の属性の属性値をｍとし、
２つの素数の積がｎであり、
元をｇとすると、
前記準同型暗号処理が、
０＜ｒ＜ｎ−１を満たす乱数ｒを生成し、
暗号文ｃ＝ｒnｇm（ｍｏｄ  ｎ2）を算出する
処理を含む
請求項３記載の暗号処理方法。
【請求項６】
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて、当該集計単位について前記第２の属性の属性値を集計するための第１の元及び当該集計単位の出現回数を計数するための第２の元を選択し、当該第１の元及び第２の元を用いた準同型暗号処理を実施する処理を含む
請求項１記載の暗号処理方法。
【請求項７】
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて第１のビットシフト量を特定し、特定された前記第１のビットシフト量だけ前記第２の属性の属性値を左ビットシフトさせることで第１のビット列を生成し、
前記集計単位に応じて当該集計単位の出現回数をカウントするために設定されている第２のビットシフト量を特定し、特定された前記第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、
前記第１のビット列と前記第２のビット列とを結合させたビット列に対して準同型暗号処理を実施する処理を含む
請求項１記載の暗号処理方法。
【請求項８】
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて当該集計単位の出現回数をカウントするための第２のビットシフト量を特定し、特定された前記第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、前記第２のビット列に対して準同型暗号処理をさらに実施する処理を含む
請求項３記載の暗号処理方法。
【請求項９】
前記暗号処理装置の前記処理部によって、
前記複数の属性のうち前記第１の属性及び前記第２の属性以外の第３の属性の属性値に応じて、前記第２の属性の属性値に対して用意されるべき複数の暗号文のうち特定の暗号文を選択し、
前記複数の暗号文のうち前記特定の暗号文以外の暗号文を、０に対する前記準同型暗号処理を実施することで生成し、
前記複数の暗号文のうち前記特定の暗号文を、特定された前記集計単位に応じた準同型暗号処理を前記第２の属性の属性値に対して実施することで生成する
請求項１記載の暗号処理方法。
【請求項１０】
復号処理装置の受信部によって、複数の属性の各々についての属性値の組み合わせの集合である集計単位を特定するための、前記組み合わせにおける第１の属性の属性値に従って特定される集計単位に応じて異なる準同型暗号の暗号化処理を、前記組み合わせにおける第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記復号処理装置の処理部によって、前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を含み、前記復号処理装置であるコンピュータにより実行される復号処理方法。
【請求項１１】
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理
を含む請求項１０記載の復号処理方法。
【請求項１２】
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応するビット範囲を抽出する処理
を含む請求項１０記載の復号処理方法。
【請求項１３】
素数の法がｎであり、
各前記集計単位ａに対応する元ｇaについて、ｇapa（ｍｏｄ  ｎ）＝１を満たす素数ｐ
ａが用意されており、
前記暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、  秘密鍵がｓであるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
Ｕ＝Ｃs（ｍｏｄ  ｎ）及びＶ＝Ｄ×Ｕ-1（ｍｏｄ  ｎ）を算出し、
前記特定の集計単位以外の各集計単位ｉに対応する素数ｐiについて、Ｚ＝Ｖpi（ｍｏｄ  ｎ）及びＶ＝Ｚ1/pi（ｍｏｄ  ｎ）の演算を前記特定の集計単位以外の各集計単位ｉについて繰り返し行う
処理を含む請求項１０記載の復号処理方法。
【請求項１４】
２つの素数の積がｎであり、
元がｇであり、
前記暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、  秘密鍵がｓであり、
Ｌ（ｘ）は（ｘ−１）／ｎという関数であるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
Ｍ＝Ｌ（Ｃs（ｍｏｄ  ｎ2））／Ｌ（ｇs（ｍｏｄ  ｎ2））（ｍｏｄ  ｎ2）を算出し、
前記Ｍから、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む請求項１０記載の復号処理方法。
【請求項１５】
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する、前記第２の属性の属性値を集計するための元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理と、
前記特定の集計単位の出現回数を計数するための元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理と、
を含む請求項１０記載の復号処理方法。
【請求項１６】
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記第２の属性の属性値の集計のために設定されているビット範囲を抽出する処理と、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記特定の集計単位の出現回数を計数するために設定されているビット範囲を抽出する処理と、
を含む請求項１０記載の復号処理方法。
【請求項１７】
前記暗号化演算結果が、前記第２の属性の属性値の集計結果のための第１の暗号化演算結果と、前記集計単位の出現回数の計数結果のための第２の暗号化演算結果とを含み、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記第１の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第１のビット列を生成し、
前記平文の第１のビット列から、前記特定の集計単位に対応するビット範囲を抽出し、  前記第２の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第２のビット列を生成し、
前記平文の第２のビット列から、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む請求項１０記載の復号処理方法。
【請求項１８】
前記復号処理装置の前記処理部によって、
前記第１の属性及び前記第２の属性以外の第３の属性の属性値に応じて前記第２の属性の属性値に対する前記準同型暗号の暗号処理の結果を複数種類の暗号文のうち第１の種類の暗号文に割り当て且つ残余の種類の暗号文については０に対する前記準同型暗号の暗号処理の結果を割り当てることで得られる前記複数種類の暗号文の種類毎に前記準同型暗号の加算演算を実施した結果である複数の暗号化演算結果を、前記暗号化演算結果が含み、
前記複数の暗号化演算結果のうち前記第３の属性の特定の属性値に対応する暗号化演算結果を特定し、
特定された前記暗号化演算結果に対して前記準同型暗号の復号処理を実施する
請求項１０記載の復号処理方法。
【請求項１９】
暗号処理装置の特定部によって、複数の属性の各々についての属性値の組み合わせを複数格納するデータ格納部に格納されている前記組み合わせの各々について、前記複数の属性のうち、前記組み合わせの集合である集計単位を特定するための第１の属性の属性値に従って、当該組み合わせが属する集計単位を特定するステップと、
前記暗号処理装置の処理部によって、特定された前記集計単位に応じた準同型暗号処理を、前記組み合わせにおける第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納するステップと、
を、前記暗号処理装置であるコンピュータに実行させるための暗号処理プログラム。
【請求項２０】
復号処理装置の受信部によって、複数の属性の各々についての属性値の組み合わせの集合である集計単位を特定するための、前記組み合わせにおける第１の属性の属性値に従って特定される集計単位に応じて異なる準同型暗号の暗号化処理を、前記組み合わせにおける第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記復号処理装置の処理部によって、前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を、前記復号処理装置であるコンピュータに実行させるための復号処理プログラム。
【請求項２１】
複数の属性の各々についての属性値の組み合わせを複数格納するデータ格納部に格納されている前記組み合わせの各々について、前記複数の属性のうち、前記組み合わせの集合である集計単位を特定するための第１の属性の属性値に従って、当該組み合わせが属する集計単位を特定する特定部と、
特定された前記集計単位に応じた準同型暗号処理を、前記組み合わせにおける第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納する処理部と、
を有する暗号処理装置。
【請求項２２】
複数の属性の各々についての属性値の組み合わせの集合である集計単位を特定するための、前記組み合わせにおける第１の属性の属性値に従って特定される集計単位に応じて異なる準同型暗号の暗号化処理を、前記組み合わせにおける第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納する受信部と、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納する処理部と、
を有する復号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データを秘匿しつつ集計するための技術に関する。
【背景技術】
【０００２】
データマイニング技術とは、データベースに格納された大量のデータに含まれるデータ間の相関関係を、コンピュータを用いて発見する技術であり、人間では処理不可能な大量のデータに対しても、データ間の相関関係を発見することができる。データマイニング技術の利用方法の代表例が、消費者が購入する商品の組み合わせの発見であり、データマイニングを用いることで、性別や年齢層ごとの商品嗜好などの各種分析を実現でき、ビジネス上の意思決定に用いることができる。
【０００３】
従来のデータマイニングは、自社のコンピュータを用いてデータ収集と分析を行っていた。しかし、今後クラウドコンピューティングの普及に伴い、データの収集と分析を外部のクラウドコンピューティング環境で実施することで、システムの維持コストを低く抑えつつ、高い分析効果を得る方法が主流となると予想される。データの収集と分析を外部のクラウドコンピューティング環境に任せることで、コストが低くなる反面、プライバシが低下するという問題が知られている。すなわち、従来のデータマイニングでは自社の閉じた計算機環境で処理を行っており、機密情報の漏洩が発生しにくかったのに対し、クラウドコンピューティングを利用したデータマイニングでは、オープンな計算機環境を複数の利用者で利用するため、機密情報の漏洩リスクが高まると予想されている。
【０００４】
クラウドコンピューティングのようなオープンな環境下でも、安全な分析を実現するための手法は、プライバシ保護データマイニング（Privacy-Preserving Data Mining, PPDM）と呼ばれる。クラウド上に預けるデータは常に暗号化を行った暗号化データとし、暗号化に用いた鍵はクラウドに預けずに、ユーザのローカル環境のみに保管する。これによって、クラウドに預けたデータが第三者に万が一漏洩した場合でも、そのデータを復号することができないため情報漏洩を防ぐことができる。クラウド上でのデータ分析処理は、暗号化データに対して行うことで、暗号化された分析結果を生成し、ユーザに送信する。クラウドは、分析処理を行い、結果を生成することはできるが、鍵を持たないためデータを復号できず、ユーザの機密情報がクラウドに知られることはない。ユーザは、暗号化された分析結果をクラウドから受け取り、自分自身が保有する鍵で復号することで、分析結果を得ることができる。暗号化と復号に用いる鍵は、同一である場合と異なる場合があり、用いる暗号方式に依存する。次に述べる「準同型暗号」では、暗号化と復号の鍵が異なる方式を用いている。
【０００５】
ＰＰＤＭを実現するためには、暗号化したままの状態で、分析に用いられる各種演算（加算及び乗算）を実行できる暗号方式を用いることになる。多数の暗号方式のうち、暗号化したままの状態で演算処理が可能なものを「準同型暗号（Homomorphic Encryption）」と呼ぶ。準同型暗号は、暗号化したままの状態で可能な演算処理の種類に応じて分類されるが、暗号化したままの状態での加算を可能とする暗号化方式を、「加算準同型暗号（Additive Homomorphic Encryption）」と呼ぶ。暗号化したままの状態での加算が可能ならば、集計が可能となる。集計は、単純ではあるが、多くの分析者にとって非常に分かりやすい直感的な結果を生成するため、ビジネス分析の世界では広く用いられている手法であるため、加算準同型暗号は、クラウド上の有力なＰＰＤＭ手法として注目されている。加算準同型暗号は、公開鍵暗号を用いた手法により実現できる。公開鍵暗号を用いる関係上、暗号化と復号に用いる鍵は異なるため、データ収集者とデータ分析者を別々にできる。加算準同型暗号には、（１）ElGamal暗号と、（２）Paillier暗号の２種類が知られている。
【０００６】
クラウド上の加算準同型暗号の処理概要を図１に示す。図１では、「性別」「年齢」「年収」の３つの属性について、各個人の情報を集めたデータを、ユーザが持つオリジナルデータとしている。クラウド上にデータを預ける場合は、これらの個人データは暗号化鍵（公開鍵暗号における公開鍵）を用いて暗号化される。ここで注意したいのが、暗号化処理には「確率的暗号」を用いていることである。「確率的暗号」とは、同一の平文に対して暗号化処理を行った結果、乱数を用いて複数の暗号化結果の一つを確率的に選択する暗号処理である。確率的暗号を用いない場合、平文に対する暗号は常に確定的となり、例えば「男性」という平文の暗号化結果は常に「AK*;」、「女性」という平文の暗号化結果は常に「;@00-2」となるため、これら２種類の暗号文の出現頻度の統計分析を行うことで、暗号文から平文を推定されてしまうという問題がある。確率的暗号を用いることで、「男性」という平文の暗号化結果は「KoP」もしくは「Jk(」…、もしくは「9l,」のように、暗号化結果が不確定となるため、出現頻度を用いた統計分析を無効化することができる。図１では、「性別」「年齢」「年収」の全てが確率的暗号によって暗号化されている利用例を示している。左側がユーザローカル環境のオリジナルデータであり、右側がクラウド環境の暗号化データである。クラウド上「年収」の平均値を算出するための分析を行う際は、右側の暗号化された「年収」データで加算処理を行う。
【０００７】
図１の例では、５人の年収は「２２３万円」「４２２万円」「５３０万円」「６７０万円」「８００万円」であるが、準同型加算処理においては、入力データも出力データも暗号化されるため、クラウドからはデータ内容を見ることができない。準同型暗号の加算処理の結果、暗号化された加算結果が算出され、ユーザに返送される。ユーザは、暗号化された加算結果に対し、ユーザの復号鍵（公開鍵暗号における秘密鍵）を用いて復号することで、集計結果「２６４５万円」が得られる。この集計結果を、人数（５人）で割り算することで、平均年収「５２９万円」を得られる。
【０００８】
図１に示した加算準同型暗号処理を用いることで、集計に関するＰＰＤＭを実現することができる。しかし、単純な数値加算を実現することはできでも、属性値に紐づいた準同型加算処理を実現することはできない。属性値に紐づいた準同型加算処理とは、「女性の平均年収」や「２０歳代男性の平均年収」など、個人の属性に応じた数値の集計である。このような集計処理は、顧客ターゲットを絞り込むためのマーケッティング分析において一般的に用いられている手法である。しかし、従来の準同型暗号では、属性に無関係な全ての個人に関する準同型加算処理を実行することはできるが、属性値に紐づいた準同型加算処理を実行することはできない。なぜなら、「性別」や「年齢」等の属性情報が、確率的暗号で暗号化されている場合、暗号化されたデータから属性値の判別は困難であり、暗号化データを属性値に紐付けることは困難であるからである。
【０００９】
次に、加算準同型暗号であるElgamal暗号について従来の演算内容を説明しておく。まず、鍵のセットアップとして、秘密鍵ｓを０＜ｓ＜ｎ−１（ｎは以下で示すように素数の法である）を満たす乱数により算出する。また、公開鍵として、法ｎ（素数）と、法ｎ上の原始元である元ｇと、暗号化鍵ｙ＝ｇs（ｍｏｄ  ｎ）とを用意する。
【００１０】
そして、暗号化する場合には、公開鍵（ｎ，ｇ，ｙ）と平文ｍiとを用いて以下の演算を実施する。
【００１１】
【数１】
0005790471.tif 000002
【００１２】
このように暗号文（ｃi，ｄi）が得られる。
【００１３】
次に、準同型加算を行う時には、ｔ個の暗号文（ｃi，ｄi）（ｉ＝１，２，．．．ｔ）及び公開鍵ｎを用いて以下の演算を実施する。
【００１４】
【数２】
0005790471.tif 000003
【００１５】
最後に準同型加算の加算結果を復号する場合には、公開鍵（ｎ，ｇ，ｙ）及び秘密鍵ｓから、以下の演算を実施する。
【００１６】
【数３】
0005790471.tif 000004
【００１７】
一般的に、ｇM（ｍｏｄ  ｎ）からＭを求めるには、Ｍの最大値に比例した回数のべき乗剰余演算による総当りが必要となるが、Baby-Step-Giant-Step法（ＢＳＧＳ法）と呼ばれる公知の方法を用いることで、総当りの回数をＭの最大値の平方根に減らすことができる。
【００１８】
また、加算準同型暗号であるPaillier暗号について従来の演算内容を説明しておく。まず、鍵のセットアップとして、秘密鍵として、素数ｐ及びｑを用意し、ｓ＝ｌｃｍ（ｐ−１，ｑ−１）（ｌｃｍ（ａ，ｂ）は、ａとｂの最小公倍数を出力する関数）を用意する。さらに、公開鍵として、合成数ｎ＝ｐ×ｑ、法ｎ2及びある整数αに対して、ｇ＝１＋αｎ（ｍｏｄ  ｎ2）を満たす元ｇとを用意する。
【００１９】
そして、暗号化する場合には、公開鍵（ｎ2，ｇ）と平文ｍiとを用いて以下のような演算を実施する。
【００２０】
【数４】
0005790471.tif 000005
【００２１】
次に、準同型加算を行う時には、ｔ個の暗号文ｃi（ｉ＝１，２，．．．ｔ）及び公開鍵ｎ2を用いて以下の演算を実施する。
【００２２】
【数５】
0005790471.tif 000006
【００２３】
最後に準同型加算の加算結果を復号する場合には、公開鍵（ｎ，ｎ2，ｇ）及び秘密鍵ｓから、以下の演算を実施する。
【００２４】
【数６】
0005790471.tif 000007
【００２５】
なお、Ｌ（ｘ）＝（ｘ−１）／ｎである。
【先行技術文献】
【特許文献】
【００２６】
【特許文献１】特開２００８−１０９３０８号公報
【特許文献２】特開平９−２８８６５８号公報
【特許文献３】特開２０１０−９３４２４号公報
【非特許文献】
【００２７】
【非特許文献１】Taher ElGamal, “A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms”, CRYPTO ’84, pp. 10 - 18, Springer-Verlag.
【非特許文献２】Pascal Paillier, “Public-Key Cryptosystems Based on Composite Degree Residuosity Classes, EUROCRYPT 1999”, pp223-238
【発明の概要】
【発明が解決しようとする課題】
【００２８】
上で述べたように、秘匿したまま、属性値を集計すべき第１の属性以外の第２の属性の属性値に応じて第１の属性の属性値を区分けして集計することができる従来技術は存在していない。
【００２９】
本技術の目的は、一側面によれば、秘匿したまま、属性値を集計すべき第１の属性以外の第２の属性の属性値に応じて第１の属性の属性値を区分けして集計できるようにするための技術を提供することである。
【課題を解決するための手段】
【００３０】
本技術に係る暗号処理方法は、（Ａ）複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている上記データについて、複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定する処理と、（Ｂ）特定された集計単位に応じた準同型暗号処理を、上記データに含まれる複数の属性のうち第１の属性以外の第２の属性の属性値に対して実施し、暗号化された第２の属性の属性値を、データ格納部に格納する処理とを含む。
【００３１】
本技術に係る復号処理方法は、（Ａ）平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納する処理と、（Ｂ）データ格納部に格納されている暗号化演算結果に対して、特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、第２の属性の属性値の集計結果を抽出し、データ格納部に格納する処理とを含む。
【発明の効果】
【００３２】
秘匿したまま、属性値を集計すべき第１の属性以外の第２の属性の属性値に応じて第１の属性の属性値を区分けして集計できるようになる。
【図面の簡単な説明】
【００３３】
【図１】図１は、加算準同型暗号を説明するための図である。
【図２】図２は、本技術の第１の実施の形態の概要を示す図である。
【図３】図３は、第１の実施の形態のフレームワークを示す図である。
【図４】図４は、第１の実施の形態に係る暗号化処理装置（Elgamalベースの方法）の機能ブロック図である。
【図５】図５は、第１の実施の形態に係る暗号化処理（Elgamalベースの方法）の処理フローを示す図である。
【図６】図６は、第１の実施の形態に係る復号化処理装置（Elgamalベースの方法）の機能ブロック図である。
【図７】図７は、第１の実施の形態に係る復号化処理（Elgamalベースの方法）の処理フローを示す図である。
【図８】図８は、第１の実施の形態に係る暗号化処理装置（Paillerベースの方法）の機能ブロック図である。
【図９】図９は、第１の実施の形態に係る暗号化処理（Paillerベースの方法）の処理フローを示す図である。
【図１０】図１０は、第１の実施の形態に係る復号化処理装置（Paillerベースの方法）の機能ブロック図である。
【図１１】図１１は、第１の実施の形態に係る暗号化処理（Paillerベースの方法）の処理フローを示す図である。
【図１２】図１２は、第２の実施の形態に係るシステム構成を示す図である。
【図１３】図１３は、第２の実施の形態に係る暗号化処理装置のブロック図である。
【図１４】図１４は、第２の実施の形態で用いる鍵を示す図である。
【図１５】図１５は、第２の実施の形態に係る準同型暗号処理部の機能ブロック図である。
【図１６】図１６は、第２の実施の形態において用いられる鍵を説明するための図である。
【図１７】図１７は、第２の実施の形態における暗号処理の処理フローを示す図である。
【図１８】図１８は、第２の実施の形態における分析支援装置の機能ブロック図である。
【図１９】図１９は、第２の実施の形態における復号化処理部の機能ブロック図である。
【図２０】図２０は、第２の実施の形態における分析時の処理の処理フローを示す図である。
【図２１】図２１は、第２の実施の形態における分析時の処理の処理フローを示す図である。
【図２２】図２２は、第２の実施の形態における復号化処理の処理フローを示す図である。
【図２３】図２３は、第３の実施の形態において用いられる鍵を説明するための図である。
【図２４】図２４は、第３の実施の形態における準同型暗号処理部の機能ブロック図である。
【図２５】図２５は、ビットシフト量を表す定数の一例を示す図である。
【図２６Ａ】図２６Ａは、第３の実施の形態における暗号処理の処理フローを示す図である。
【図２６Ｂ】図２６Ｂは、第３の実施の形態における暗号処理の処理フローを示す図である。
【図２７】図２７は、第３の実施の形態における復号化処理部の機能ブロック図である。
【図２８】図２８は、第３の実施の形態における分析時の処理の処理フローを示す図である。
【図２９】図２９は、第３の実施の形態における分析時の処理の処理フローを示す図である。
【図３０】図３０は、第３の実施の形態における復号化処理の処理フローを示す図である。
【図３１】図３１は、第４の実施の形態において用いられる鍵を説明するための図である。
【図３２】図３２は、第４の実施の形態における暗号化処理の処理フローを示す図である。
【図３３】図３３は、属性値に応じて暗号文を分ける場合を模式的に説明するための図である。
【図３４】図３４は、第４の実施の形態における分析時の処理の処理フローを示す図である。
【図３５】図３５は、第４の実施の形態における分析時の処理の処理フローを示す図である。
【図３６】図３６は、第５の実施の形態において用いられる鍵を説明するための図である。
【図３７】図３７は、第５の実施の形態における暗号化処理の処理フローを示す図である。
【図３８】図３８は、第５の実施の形態における暗号化処理の処理フローを示す図である。
【図３９】図３９は、第５の実施の形態における分析時の処理の処理フローを示す図である。
【図４０】図４０は、第５の実施の形態における分析時の処理の処理フローを示す図である。
【図４１】図４１は、コンピュータの機能ブロック図である。
【図４２】図４２は、暗号処理装置の機能ブロック図である。
【図４３】図４３は、復号処理装置の機能ブロック図である。
【発明を実施するための形態】
【００３４】
［実施の形態１］
本実施の形態では、図２に示すように、性別、年齢及び年収という複数の属性の属性値を含む複数のレコードが秘匿化された状態で、男性の平均年収、２０代の平均年収といったように、「年収」という集計すべき属性とは異なる属性「性別」や「年齢」の集計単位（例えば「男」や「女」、「２０歳代」「３０歳代」など）毎に集計を行う。集計単位は、「２０代男性」といったように複数の属性の属性値の組み合わせである場合もある。
【００３５】
これを実現するためのフレームワークを図３に示す。本実施の形態でも、ローカル環境において、（１）データの暗号化及び（３）暗号化された集計結果の復号化を実施する。これらの処理は１又は複数のコンピュータにより実行される。また、暗号化されたデータの保管（例えばデータベース（ＤＢ）への蓄積）及び（２）暗号化されたデータに対する準同型加算処理については、クラウドで行う。クラウド側でも、１又は複数のコンピュータによって、データの保管及び準同型加算処理を実施する。
【００３６】
（１）データの暗号化の前に、レコードに含まれる複数の属性を、集計対象の属性と、集計単位を設定する属性とに分類する。図３の例では、年収が集計対象の属性であり、性別が集計単位を設定する属性である。集計単位は「男」及び「女」である。
【００３７】
そして、（１）データの暗号化を行う場合には、暗号化対象のレコードにおいて集計単位が設定されている属性の属性値に応じて集計単位を特定し、当該集計単位に応じた準同型暗号処理を、公開鍵を用いて集計対象の属性の属性値に対して実施する。例えば、性別「男」であれば性別「男」に応じた準同型暗号処理を年収「３１２」又は「２７７」に対して実施し、性別「女」であれば性別「女」に応じた準同型暗号処理を年収「４５１」に対して実施する。この準同型暗号処理の詳細については、後に述べる。なお、集計対象の属性以外の属性の属性値については、準同型暗号を用いなくても良いが、用いても良い。暗号方式は、一般的な確率的暗号方式であってもよい。公開鍵方式であってもよいし共通鍵方式であっても良い。
【００３８】
このようにして暗号化されたデータは、クラウドに送信されてクラウドのＤＢで保管される。その後、ローカル環境におけるユーザなどから指示があると、（２）準同型加算処理を実施する。本実施の形態では、ＤＢに蓄積されている暗号化データについて、通常どおりの準同型暗号の加算演算を実施することで暗号化演算結果を生成して、要求元のローカル環境に送信する。
【００３９】
そして、ローカル環境では、（３）暗号化演算結果の復号化を秘密鍵を用いて実施する。この復号化においては、クラウドから受信した暗号化演算結果に対して、例えばローカル環境におけるユーザが指定した特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、集計対象の属性値の集計結果を抽出する。例えば集計単位である性別「男」を指定した場合には、性別「男」に応じた、準同型暗号の復号化処理を実施して、集計対象の属性である年収の値を抽出する。図３の例では「５８９」が得られる。ここで男の人数が分かれば、男の平均年収を算出することも可能である。準同型暗号の復号化処理の詳細については、後に詳しく述べる。
【００４０】
次に、本実施の形態で用いられる準同型暗号の暗号処理及び復号処理について説明する。なお、本実施の形態では２種類の手法を採用でき、それぞれについて説明する。
【００４１】
［Elgamalベースの手法］
（Ａ）鍵のセットアップ
前処理として鍵のセットアップを実施する。秘密鍵ｓを、０＜ｓ＜ｎ−１（ｎは素数の法）を満たす乱数により生成する。また、秘密鍵として、集計単位の個数ｂに対応する素数ｐa（ａ＝１，２，．．，ｂ）を生成する。
【００４２】
さらに、公開鍵として、素数の法ｎと、法ｎ上の原始元である元ｇと、暗号化鍵ｙ＝ｇs（ｍｏｄ  ｎ）と、ｂ個の集計単位に対応するｂ個の元ｇaと、互いに異なる素数ｐa（ａ＝１，２，．．，ｂ）とを生成する。
【００４３】
また、ｐaに対応する逆元ｈa＝ｐa-1（ｍｏｄ  ｐ1,..ｐa-1ｐa+1,..,ｐb）を生成する場合もある。
【００４４】
なお、素数ｐaは、集計単位ａで集計した結果である集計値の最大値として設定する。集計単位ａに対応する元ｇaは、ｇa（ｍｏｄ  ｎ）＝１を満たすように設定される。
【００４５】
さらに、素数ｎは、秘密鍵である素数ｐaを用いてｎ＝ｐ1×ｐ2×・・・ｐb×ｑ×ｋ＋１の形で表される。なお、ｑは十分大きな素数（８０ビットから１２８ビット）であり、ｋは任意の偶数である。
【００４６】
（Ｂ）暗号化処理
ローカル環境に、例えば図４に示すような暗号化処理装置１００を設ける。暗号化処理装置１００は、データ入力部１０１と、送信部１０２と、データ格納部１０３と、公開鍵格納部１０４と、元選択部１０５と、暗号文生成部１０６と、乱数生成部１０７とを有する。
【００４７】
データ入力部１０１は、ユーザからの入力又はローカル環境における他のコンピュータなどから暗号化すべき平文データを取得してデータ格納部１０３に格納する。送信部１０２は、データ格納部１０３に格納され且つ暗号化されたデータをクラウド環境に送信する。公開鍵格納部１０４は、公開鍵のデータを格納する。乱数生成部１０７は、公開鍵に含まれる法ｎに従って、乱数を発生させ、暗号文生成部１０６に出力する。元選択部１０５は、データ格納部１０３に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部１０４に格納されている元を選択して、暗号文生成部１０６に出力する。暗号文生成部１０６は、元選択部１０５からの元と、公開鍵格納部１０４に格納されている他の公開鍵のデータを用いて、暗号文生成のための処理を実施し、データ格納部１０３に格納する。
【００４８】
このような暗号化処理装置１００の処理内容を図５を用いて説明する。例えば、データ入力部１０１は、複数の属性の属性値を含む平文ｍを取得して、データ格納部１０３に格納する（ステップＳ１）。また、暗号文生成部１０６は、この平文ｍに応じて、乱数生成部１０７に対して乱数ｒを生成するように指示し、これに対して乱数生成部１０７は、０＜ｒ＜ｎ−１を満たす乱数ｒを生成し、暗号文生成部１０６に出力する（ステップＳ３）。
【００４９】
そして、暗号文生成部１０６は、暗号文１としてｃ＝ｇr（ｍｏｄ  ｎ）を生成し、データ格納部１０３に格納する（ステップＳ５）。また、元選択部１０５は、平文ｍにおいて集計単位が設定されている特定の属性の属性値に応じて集計単位ｉを特定し、当該集計単位ｉに対応する元ｇiを選択し、当該元ｇiを暗号文生成部１０６に出力する（ステップＳ７）。
【００５０】
そして、暗号文生成部１０６は、公開鍵に含まれる暗号化鍵ｙと法ｎと乱数ｒと平文ｍと元ｇiとから、暗号文２であるｄ＝ｙrｇim（ｍｏｄ  ｎ）を生成し、データ格納部１０３に格納する（ステップＳ９）。そうすると、送信部１０２は、データ格納部１０３に格納されている暗号文（ｃ，ｄ）を、クラウド環境の所定のコンピュータ宛に送信する（ステップＳ１１）。
【００５１】
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
【００５２】
なお、クラウド環境において実施すべき準同型加算演算については、従来のElgamal暗号において行われる準同型暗号処理と全く同じ演算であるから、詳しい説明を省略する。但し、通常のElgamalでは、Ｃ＝１及びＤ＝１を初期値として、Ｃ＝Ｃ×ｃi（ｍｏｄ  ｎ2）及びＤ＝Ｄ×ｄi（ｍｏｄ  ｎ）（ｉはデータの暗号文のインデックス）を繰り返すと、Ｄにおいて同じ元ｇのべき数として平文ｍiの集計値が与えられるようになる。しかしながら、本実施の形態では、元が集計単位毎に異なるので、同じ演算を実施すると、以下のようになる。
Ｃ＝ｇr1+r2+...rt（ｍｏｄ  ｎ）
Ｄ＝ｙr1+r2+...+rtｇ1M1ｇ2M2・・・ｇtMt（ｍｏｄ  ｎ）
【００５３】
なお、ｇs（ｍｏｄ  ｎ）＝ｙである。また、Ｍ１乃至Ｍｔは、集計単位１乃至ｔの各々について集計対象属性の属性値を加算した結果である。
【００５４】
（Ｃ）復号化処理
ローカル環境に、例えば図６に示すような復号化処理装置１２０を設ける。
【００５５】
復号化処理装置１２０は、入力部１２１と、通信部１２２と、データ格納部１２３と、鍵格納部１２４と、素数選択部１２５と、復号演算部１２６と、ＢＳＧＳ処理部１２７とを有する。
【００５６】
入力部１２１は、ローカル環境のユーザなどからの指示を受け付け、通信部１２２、素数選択部１２５及び復号演算部１２６等に処理を指示する。また、通信部１２２は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、データ格納部１２３に格納する。鍵格納部１２４は、公開鍵及び秘密鍵を格納している。また、素数選択部１２５は、入力部１２１から指定される集計単位ｗに応じて、復号演算部１２６で用いられる素数を抽出し、復号演算部１２６に出力する。復号演算部１２６は、暗号化演算結果に対して、鍵格納部１２４に格納されている鍵のデータ及び素数選択部１２５により選択された素数のデータを用いて、復号処理のための演算を実施し、処理結果をデータ格納部１２３に格納する。また、復号演算部１２６から指示を受けたＢＳＧＳ処理部１２７は、データ格納部１２３に格納された復号演算結果に対して、周知のＢＳＧＳ法にて集計結果を抽出する処理を実施し、データ格納部１２３に格納する。
【００５７】
次に、図７を用いて復号化処理装置１２０の処理内容について説明する。入力部１２１は、ユーザなどから集計単位ｗの指定を含む集計指示を受け付けると、通信部１２２に対して集計要求をクラウドに送信するように指示する。そうすると、通信部１２２は、クラウドに対して集計要求を送信し、クラウドから集計要求の応答として暗号化演算結果（暗号文（Ｃ，Ｄ）とも呼ぶ。）を受信し、データ格納部１２３に格納する。また、入力部１２１は、指定された集計単位ｗのデータを素数選択部１２５に出力する（ステップＳ３１）。なお、集計単位ｔ個あるものとする。また、入力部１２１は、復号演算部１２６に処理を指示する。
【００５８】
復号演算部１２６は、鍵格納部１２４に格納されている秘密鍵ｓ及び法ｎから、Ｕ＝Ｃs（ｍｏｄ  ｎ）を算出し、例えばメインメモリなどの記憶装置に格納する（ステップＳ３３）。これによってｙs*(r1+r2+..+rt)（ｍｏｄ  ｎ）＝ｇr1+r2+..+rt（ｍｏｄ  ｎ）が得られる。
【００５９】
また、復号演算部１２６は、Ｖ＝Ｄ×Ｕ-1＝ｇ1M1ｇ2M2・・・ｇtMt（ｍｏｄ  ｎ）を算出し、例えばメインメモリ等の記憶装置に格納する（ステップＳ３５）。
【００６０】
また、素数選択部１２５は、指定された集計単位ｗのデータから、ｗを除く各集計単位についての素数ｐi（その逆元鍵ｈi＝１／ｐiも）を鍵格納部１２４から読み出し、復号演算部１２６に出力する。そして、復号演算部１２６は、ｗを除く各集計単位ｉ＝１，２，．．．，ｗ−１，ｗ＋１，．．．，ｔについて、以下の演算を繰り返し行い、データ格納部１２４に格納する（ステップＳ３７）。
Ｚ＝Ｖpi（ｍｏｄ  ｎ）
Ｖ＝Ｚ1/pi（ｍｏｄ  ｎ）
【００６１】
これは上で述べたｇapa（ｍｏｄ  ｎ）＝１であることを用いている。すなわち、ｉ＝１であればＺ＝Ｖp1（ｍｏｄ  ｎ）＝ｇ1M1*p1ｇ2M2*p1・・・ｇtMt*p1（ｍｏｄ  ｎ）＝１M1×ｇ2M2*p1・・・ｇtMt*p1（ｍｏｄ  ｎ）となる。従って、Ｚ1/pi（ｍｏｄ  ｎ）を算出すれば、Ｖ＝ｇ2M2・・・ｇtMt（ｍｏｄ  ｎ）が得られ、集計単位１の元ｇ1のべき乗部分が消去されることになる。これを繰り返して集計結果ｗ以外の集計単位についてその元のべき乗部分を消去すれば、最終的に集計結果ｗの元ｇwのべき乗ｇwMw（ｍｏｄ  ｎ）がＶとして得られる。この演算が終了すると、復号演算部１２６は、ＢＳＧＳ処理部１２７に処理開始を指示する。
【００６２】
ＢＳＧＳ処理部１２７は、データ格納部１２３に格納されている、ステップＳ３７の最終計算結果Ｖ＝ｇwMw（ｍｏｄ  ｎ）の値から、ＢＳＧＳ法を用いて集計単位ｗの集計結果Ｍｗを算出し、データ格納部１２３に格納する（ステップＳ３９）。
【００６３】
また、例えばＢＳＧＳ処理部１２７は、集計単位ｗの集計結果Ｍｗを、表示装置や印刷装置その他の出力装置又は他のコンピュータに出力する（ステップＳ４１）。
【００６４】
以上のような処理を実施することで、例えば性別「男」の年収集計値を算出することができる。
【００６５】
なお、従来のElgamal暗号との差異について纏めておく。
【００６６】
（α）集計単位の数ｔと同数の元ｇ1、ｇ2，．．．ｇtを用意する点
性別「男」及び「女」に分けて集計すればよいのであれば、２つの元ｇ1及びｇ2を生成する。また、年齢を「２０歳以下」「２０歳超から６０歳以下」「６０歳超」の３つに分類し、性別を「男」及び「女」の２つに分類して、合計６つに分類する場合には、６種類の元ｇ1乃至ｇ6を生成して用いる。
【００６７】
（β）集計単位ｉ毎にその集計単位ｉでの集計値の最大値を互いに異なる素数ｐiとして設定し、各素数ｐiがｇipi（ｍｏｄ  ｎ）＝１を満たすように設定する点
例えば、個人の年収を１万円単位で取り扱う場合、ｐiには３２ビットの素数を設定すれば十分である。例えば、平均年収が１０００万円を超えず、且つ最大登録個人数を４００万とすると、年収値を１０００万円／１万円は、１０ビット数値として表現でき、個人の総数４００万は２２ビット数値なので、すべての個人年収値を合計しても、３２ビットの範囲に収まる。すなわち、個人年収値の合計値の最大値として、３２ビット素数を用いるのが適切である。ただし、これらの素数ｐiは、互いに異なる値に設定するものとする。
【００６８】
（γ）素数ｐi（ｉ＝１，２，．．．，ｔ）に対応する逆元鍵として、ｈi＝ｐi-1 （ｍｏｄ ｐ1,...,ｐi-1ｐi+1,...,ｐt）を計算する点
【００６９】
（δ）素数の法ｎを、ｎ＝ｐ1×ｐ2×・・・×ｐt×ｑ×ｋ＋１として与える点。
但し、ｑは十分大きな素数（８０ビットから１２８ビット）であり、ｋは任意の偶数である。
【００７０】
上記（α）乃至（γ）は、集計単位毎に集計結果を得るための工夫である。元ｇ1に「男」を、元ｇ2に「女」を対応付ける場合、「男」に対応付けられている他の属性の属性値はｇ1の指数部のみに集積され、「女」に対応付けられている他の属性の属性値はｇ2の指数部のみに蓄積される。すなわち、「男」と「女」で異なる元の下に暗号化を行うことで、数値が属性に対応した元の指数部として振り分けられるため、これらの結果を集計することで、属性値ごとの集計値の分離を行うことができる。すなわち、準同型加算を行った結果は、上でも述べたように、
Ｃ＝ｇr1+r2+...rt（ｍｏｄ  ｎ）
Ｄ＝ｙr1+r2+...+rtｇ1M1ｇ2M2・・・ｇtMt（ｍｏｄ  ｎ）
が得られるようになる。すなわち、Ｍ＝Ｍ１＋Ｍ２＋．．．Ｍｔであり、Ｍが集計単位に拘わらず集計対象の属性の属性値を合計した値であり、Ｍ１は集計単位１の集計結果、Ｍ２は集計単位２の集計結果、Ｍｔは集計単位ｔの集計結果である。このように集計単位に応じて元を使い分ければ、集計単位の集計結果が各元に振り分けられる。
【００７１】
なお、（β）は、（δ）と組み合わされて、復号処理において正しい結果を得る、という効果をもたらす。例えば、「男」と「女」にそれぞれ対応した２つの元ｇ1及びｇ2を用いる場合、
Ｃ＝ｇr1+r2（ｍｏｄ  ｎ）
Ｄ＝ｙr1+r2ｇ1M1ｇ2M2（ｍｏｄ  ｎ）
【００７２】
上で述べたように、Ｕ＝Ｃs（ｍｏｄ  ｎ）＝ｇs(r1+r2)（ｍｏｄ  ｎ）＝ｙr1+r2（ｍｏｄ  ｎ）が得られる。そして、Ｖ＝Ｄ×Ｕ-1（ｍｏｄ  ｎ）＝ｇ1M1ｇ2M2（ｍｏｄ  ｎ）が算出される。よって、「男」の年収集計値を算出する場合には、Ｚ＝Ｖp2＝ｇ1M1×p2ｇ2M2×p2（ｍｏｄ  ｎ）＝ｇ1M1×p2（ｍｏｄ  ｎ）が算出される。ここでｐ２を除去するため、（γ）から、Ｖ＝Ｚh2＝ｇ1M1×p2×h2（ｍｏｄ  ｎ）＝ｇ1M1（ｍｏｄ  ｎ）が得られる。なお、（α）より、元ｇ1の指数の周期はｐ1、すなわちｇ1p1＝１（ｍｏｄ  ｎ）である。元ｇ1の指数の周期はｐ1であるため、「男」の年収の集計値Ｍ１の値がｐ1を超えたら、計算結果がオーバーフローするため正しい結果を保証できない。よって、ｐ1は、「男」の年収の集計の最大値として与えられる定数であり、ｐ2は「女」の年収の集計の最大値として与えらえる定数である。よって、集計単位ａに該当する数値の合計値が素数ｐaを超えない限り、復号処理により正しい結果を得ることを保証できる。これらの効果は（β）及び（γ）によりもたらされるものである。
【００７３】
さらに、（δ）は、本実施の形態の安全性保証及び制約条件を示すものである。ｎが素数であるため、全ての元ｇ、ｇ1、．．．ｇtの、法ｎに関するべき乗剰余演算における指数の周期は、ｎ−１もしくはｎ−１の約数である（このこと自体は一般的に知られた性質である）。（δ）に示されるように、ｎを、ｎ＝ｐ1×ｐ2×・・・×ｐt×ｑ×ｋ＋１と設定することで、（β）に示されたｇapa＝１（ｍｏｄ  ｎ）（全てのａ＝１乃至ｔ）を満たす全てのｇaを容易に設定できる。なぜなら、
ｇa＝ｇp1×p2×...×p(a-1)×p(a+1)..×pt×q×k（ｍｏｄ  ｎ）
と設定することで、
ｇapa（ｍｏｄ  ｎ）＝ｇp1×p2×...×p(a-1)×pa×p(a+1)..×pt×q×k（ｍｏｄ  ｎ）＝ｇn-1（ｍｏｄ  ｎ）＝１
だからである。
【００７４】
ｎ−１＝ｐ1×ｐ2×・・・×ｐt×ｑ×ｋは、十分大きな素数ｑ（８０ビットから１２８ビット）と任意の偶数ｋを用いて算出される。素数ｑは、ElGamal暗号の安全性を保証するために用いられる。なぜなら、ElGamal暗号の安全性は、ｎ−１を素因数分解した値の最大の素数値であることが一般的に知られている。ｐ1，．．．ｐtは集計の最大値であり、３０ビット程度が適切であるため大きくできない。さらに、ｋは任意の偶数であり、最小値は２である。これらを考慮すると、素数ｑを十分大きな値にしないと安全性が担保できない。ｑのビット長の設定はｎのビット長に依存する。ｎが１０２４ビットの場合、ElGamal暗号の解読に必要な計算量は２80であるため、ｑを８０ビットの素数に設定するのが適切である。ｎが２０４８ビットの場合、ElGamal暗号の解読に必要な計算量は２112であるため、ｑを１１２ビットの素数に設定するのが適切である。ｎの値が素数でありさえすれば、ｋは任意の小さな偶数値でよく、最小の場合ｋ＝２となる。すなわち、（δ）は、本実施の形態を安全に実行するためのｎの設定法を示している。
【００７５】
また、この条件は本実施の形態の制約条件を表している。例えば、ｎが１０２４ビット、ｑが８０ビット、ｋ＝２の場合、
ｎ＝２×ｐ1×ｐ2×・・・×ｐt×ｑ＋１
である。
すなわち、ｐ1×ｐ2×・・・×ｐt＝（ｎ−１）／２ｑである。（ｎ−１）／２ｑのビット長は、１０２４−８０−１＝９４３ビットであることを考慮すると、ｐ1×ｐ2×・・・×ｐtが、９４３ビットの範囲に収まる必要があることを意味している。ｐ1，．．．ｐtは、集計単位における集計結果の最大値であるが、全ての値を３０ビットに設定した場合、ｔの最大値は３１となる。すなわち、扱える属性値は、最大３１とおりとなる。一般化すると、以下のように表される。
（集計結果の最大値のビット長）×（集計単位の数）≦（ｎのビット長）−（ｑ，ｋのビット長の合計）
【００７６】
よって、（δ）は、本実施の形態における制約条件を示している。
【００７７】
このように、（α）乃至（δ）の相違点は、本実施の形態の目的である「集計単位毎の加算」を実現するために生じたものである。
【００７８】
［Pallierベースの方法］
（Ａ）鍵のセットアップ
秘密鍵として素数ｐ及びｑを生成し、ｓをｐ−１とｑ−１の最小公倍数として生成する。
【００７９】
公開鍵として、合成数ｎ＝ｐ×ｑと、法ｎ2と、元ｇ（ｇn＝１（ｍｏｄ  ｎ2）を満たす）、定数ｅ1，ｅ2，．．，ｅt+1を生成する。但し、ｅ1，ｅ2，．．，ｅtは、ｔ個の集計単位に対応したビットシフト量ｅi（ｉ＝１，２，．．，ｔ）であり、ｅ1＜ｅ2＜．．．＜ｅtであり、且つｅtはｎのビット長未満である。また、ｅt+1はｎのビット長となる。また、ｅi+1−ｅiは、集計単位ｉについての集計値の最大値のビット長を表すように設定する。
【００８０】
（Ｂ）暗号化
ローカル環境に、例えば図８に示すような暗号化処理装置１４０を設ける。暗号化処理装置１４０は、データ入力部１４１と、送信部１４２と、データ格納部１４３と、公開鍵格納部１４４と、乱数生成部１４５と、シフト処理部１４６と、暗号文生成部１４７とを有する。
【００８１】
データ入力部１４１は、ユーザからの入力又はローカル環境における他のコンピュータなどから暗号化すべき平文データを取得してデータ格納部１４３に格納する。送信部１４２は、データ格納部１４３に格納され且つ暗号化されたデータをクラウド環境に送信する。公開鍵格納部１４４は、公開鍵のデータを格納する。乱数生成部１４５は、公開鍵に含まれる法ｎに従って、乱数を発生させ、暗号文生成部１４７に出力する。シフト処理部１４６は、データ格納部１４３に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部１４４に格納されているビットシフト量を特定し、集計対象の属性の属性値を当該ビットシフト量で左シフトさせる処理を実施し、処理結果を暗号文生成部１４７に出力する。暗号文生成部１４７は、乱数生成部１４５からの乱数と、公開鍵格納部１４４に格納されている公開鍵とを用いて、シフト処理部１４６からのシフト処理結果を暗号化する処理を実施し、処理結果をデータ格納部１４３に格納する。
【００８２】
このような暗号化処理装置１４０の処理内容を図９を用いて説明する。
【００８３】
データ入力部１４１は、複数の属性の属性値を含む平文ｍを取得して、データ格納部１４３に格納する（ステップＳ５１）。また、暗号文生成部１４７は、この平文ｍに応じて、乱数生成部１４５に対して乱数ｒを生成するように指示し、これに対して乱数生成部１４５は、０＜ｒ＜ｎ−１を満たす乱数ｒを生成し、暗号文生成部１４７に出力する（ステップＳ５３）。
【００８４】
そして、暗号文生成部１４７が、シフト処理部１４６に対して平文ｍに対してシフト処理を実施するように要求すると、シフト処理部１４６は、平文ｍにおいて集計単位が設定されている特定の属性の属性値に応じて集計単位ｉを特定し、当該集計単位ｉに対応するビットシフト量の定数ｅiを公開鍵格納部１４４から読み出して、データ格納部１４３に格納されている平文ｍをｅiだけ左シフトさせる処理を実施し、処理結果を暗号文生成部１４７に出力する（ステップＳ５５）。なお、シフト処理後の平文をｍbと表すものとする。
【００８５】
そして、暗号文生成部１４７は、公開鍵格納部１４４から法ｎ2とｎとを読み出して、暗号文としてｃ＝ｒnｇmb（ｍｏｄ  ｎ2）を生成し、データ格納部１４３に格納する（ステップＳ５７）。
【００８６】
その後、送信部１４２は、データ格納部１４３に格納されている暗号文ｃを、クラウド環境の所定のコンピュータ宛に送信する（ステップＳ５９）。
【００８７】
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
【００８８】
なお、クラウド環境において実施すべき準同型加算演算については、従来のPailler暗号において行われる準同型暗号処理と全く同じ演算であるから、詳しい説明を省略する。すなわち、Ｃ＝１として、Ｃ＝Ｃ×ｃi（ｍｏｄ  ｎ2）を繰り返せば、Ｃ＝（ｒ1×ｒ2×・・・ｒt）n×ｇM1+M2+...Mt（ｍｏｄ  ｎ2）が得られる。但し、元ｇのべき数については、集計単位毎に使用されるビット範囲が決まっている。例えば１０２４ビットのうち、性別「男」という集計単位に０から５１１ビットが割り当てられ、性別「女」という集計単位に５１２から１０２３ビットを割り当てるものとする。そうすると、集計処理を実施する場合、性別「男」の年収はビットシフト量０でべき数の０から５１１ビットの桁範囲で加算されてゆく。一方、性別「女」の年収はビットシフト量５１２ビットでべき数の５１２乃至１０２３ビットの桁範囲で加算されて行く。
【００８９】
より簡単にするために、性別「男」のデータの出現頻度をビットシフト量０でべき数の０から７ビットの桁範囲で加算し、性別「女」のデータの出現頻度をビットシフト量８でべき数の８から１５ビットの桁範囲で加算する場合を想定する。例えば、性別「男」のデータが４回出現すると、以下のような演算（べき数のみ）が実施される。「｜」は説明の便宜上、桁範囲を分かり易くするために示す。
（１）００００００００｜０００００００１
（２）００００００００｜００００００１０
（３）００００００００｜００００００１１
（４）００００００００｜０００００１００
【００９０】
ここで性別「女」のデータが２回出現し、性別「男」のデータが１回出現すれば、以下のような演算（べき数のみ）が実施される。
（５）０００００００１｜０００００１００
（６）００００００１０｜０００００１００
（７）００００００１０｜０００００１０１
【００９１】
このように桁あふれが生じないようにビットシフト量を設定しておけば、べき数のビットの桁範囲において、各集計単位の集計値が保持されるようになる。
【００９２】
（Ｃ）復号化処理
ローカル環境に、例えば図１０に示すような復号化処理装置１６０を設ける。
【００９３】
復号化処理装置１６０は、入力部１６１と、通信部１６２と、データ格納部１６３と、鍵格納部１６４と、ビット抽出部１６５と、復号演算部１６６とを有する。
【００９４】
入力部１６１は、ローカル環境のユーザなどからの指示を受け付け、通信部１６２、ビット抽出部１６５及び復号演算部１２６等に処理を指示する。また、通信部１６２は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、データ格納部１６３に格納する。鍵格納部１６４は、公開鍵及び秘密鍵を格納している。復号演算部１６６は、データ格納部１６３に格納されている暗号化演算結果に対して、鍵格納部１６４に格納されている秘密鍵及び公開鍵を用いて復号演算を実施して、復号演算結果をビット抽出部１６５に出力する。ビット抽出部１６５は、入力部１６１から指定される集計対象ｗに応じて、鍵格納部１６４からビットシフト量を特定し、復号演算部１６６からの復号演算結果から、当該ビットシフト量に対応するビット範囲のデータを抽出して、データ格納部１６３に格納する。
【００９５】
次に、図１１を用いて復号化処理装置１６０の処理内容について説明する。入力部１６１は、ユーザなどから集計単位ｗの指定を含む集計指示を受け付けると、通信部１６２に対して集計要求をクラウドに送信するように指示する。そうすると、通信部１６２は、クラウドに対して集計要求を送信し、クラウドから集計要求の応答として暗号化演算結果（暗号文ｃとも呼ぶ。）を受信し、データ格納部１６３に格納する。また、入力部１６１は、指定された集計単位ｗのデータをビット抽出部１６５に出力する（ステップＳ７１）。なお、集計単位ｔ個あるものとする。また、入力部１６１は、復号演算部１６６に処理を指示する。
【００９６】
そうすると、復号演算部１６６は、鍵格納部１６４に格納されている秘密鍵ｓ、ｎ、法ｎ2及び元ｇを用いて、暗号文ｃに対する復号演算結果Ｍを以下の式にて算出し、復号演算結果Ｍをビット抽出部１６５に出力する（ステップＳ７３）。
Ｍ＝Ｌ（ｃs（ｍｏｄ  ｎ2））／Ｌ（ｇs（ｍｏｄ  ｎ2））（ｍｏｄ  ｎ2）
なお、Ｌ（ｘ）＝（ｘ−１）／ｎという関数である。この演算は従来と同じである。
【００９７】
そして、ビット抽出部１６５は、入力部１６１から指定された集計単位ｗに対応するビットシフト量を表す定数ｅw及び集計単位ｗ＋１に対応するビットシフト量を表す定数ｅw+1を鍵格納部１６４から読み出して、復号演算結果Ｍのｅw+1−１ビットからｅwビットの値を、集計単位ｗの集計結果Ｍwとして復号演算結果Ｍから抽出し、データ格納部１６３に格納する（ステップＳ７５）。本ステップが、従来とは異なるステップである。そして、例えばビット抽出部１６５は集計結果Ｍwを出力する（ステップＳ７７）。
【００９８】
上で述べた例で性別「男」（ｗ＝１）の出現頻度を抽出する場合には、ｅ2＝８であり、ｅ1＝０であるから、７（＝８−１）ビットから０ビットまでの値を、復号演算結果Ｍ「００００００１００００００１０１」から抽出すると、「０００００１０１」が得られるようになる。
【００９９】
上で述べたように従来のPailler暗号とは異なり、暗号化の時点で集計単位ｉに応じた定数ｅi（ｉ＝１，２，．．．，ｔ）による右シフト処理を実行する。右シフトによる桁ずらしを行うことで、異なる集計単位の集計値が分離されるため、復号化処理によって特定の集計単位の集計値を抽出することができるようになる。
【０１００】
この定数ｅiは、鍵セットアップ時に設定される。このｅiの設定を行う際には、以下の制約に従うことになる。
（制約１）ｅ1＜ｅ2＜・・・＜ｅt且つｅtはｎのビット長未満であり、ｅt+1はｎのビット長である。
（制約２）ｅt+1をｎのビット長としたとき、ｅw+1−ｅwが集計単位ｗに対応する集計値の最大値のビット長を表す。
【０１０１】
制約１は、異なる属性間の集計結果が混同されないようにするための制約である。例えば、上で述べたように、集計単位が性別「男」及び「女」であるとすると、１０２３ビットから５１２ビットを「女」の集計値に割り当て、５１１ビットから０ビットを「男」の集計値に割り当てる。そうすると、集計単位「男」に対応するビットシフト量である定数ｅ1＝０であり、集計単位「女」に対応するビットシフト量である定数ｅ2＝５１２である。
【０１０２】
すなわち、集計単位「男」及び「女」の２つの集計単位で集計を行う場合には、最大５１２ビットの数値までの加算処理を実行することができる。ElGamal暗号ベースの方法と異なり、ｎのビット桁全てを加算処理の数値として扱うことができるが、法ｎの２乗値ｎ2の計算を行うので、ElGamal暗号の２倍のビット長を用いることになる。すなわち、準同型暗号処理において、ElGamal暗号ベースの方法の２倍の計算量となる。具体的には、ビット長が２倍となるため乗算剰余処理の計算量が４倍となり、全体で４×１／２＝２倍の計算量となる。
【０１０３】
制約２は、全ての加算結果をｎの範囲内に収めつつ、異なる集計単位の集計結果が分離されているために必要な条件である。「男」「女」の２つの属性を扱う先ほどの例では、ｎが１０２４ビットであったとしても、例えばｅ1＝０、ｅ2＝１０のようなパラメータをセットした場合、「男」に割り当てられているビット桁は９ビットから０ビットであるため、「男」に関する集計結果が１０ビット＝１０２４を超えることはできない。この範囲を超えた場合、「女」の集計結果に影響を及ぼすのは明らかである。制約２は、ElGamalベースの方法と同様に、本実施の形態における集計条件の限界を表しており、（集計結果の最大値のビット長）×（集計単位の数）≦（ｎのビット長）である。すなわち、ｎを１０２４ビット、集計値の最大値のビット長を３０ビットとすると、集計単位の数は最大３４となる。
【０１０４】
以上述べた適切なパラメータ設定下で、復号処理を実行した復号演算結果Ｍに対し、集計単位ｗであれば、ｅwの右ビットシフトと、ｅw+1−ｅwビットのビットマスク処理を行うことで、異なる集計単位の集計値が混合することなく、正しい集計結果を得ることができる。
【０１０５】
［実施の形態２］
本実施の形態では、ElGamalベースの方法を用いて、顧客の購入履歴データを秘匿化し、集計処理を実施する。購入履歴データのデータベースでは、顧客のデータ（顧客ＩＤ、年齢、性別）、購入毎のデータ（１０円単位の購入額、商品ＩＤ及び購入年月）が蓄積される。そして、本実施の形態では、年齢及び性別という属性の属性値の組み合わせで集計単位が設定されるものとする。なお、顧客ＩＤは、個人毎のユニークな値である。年齢は、２０歳以下、２０歳代、３０歳代、４０歳代、５０歳代、６０歳代、７０歳代、８０歳以上という８つの属性値が設定可能であり、性別は「男」及び「女」の２つの属性値が設定可能である。従って集計単位は１６とおりとなる。
【０１０６】
この場合、図１２に示すようなシステム構成を採用する。図１２に示すように、インターネットなどのネットワーク１を介してクラウド３００とユーザシステム２００とが接続されており、クラウド３００には分析サーバ３１０とデータベース（ＤＢ）３２０とが設けられている。分析サーバ３１０は、ユーザシステム２００からのリクエストに応じてＤＢ３２０に格納されている暗号文に対して従来と同じ準同型加算処理を実施する。
【０１０７】
ユーザシステム２００は暗号化処理装置２１０を有しており、図１３に示すように、暗号化処理装置２１０は、データ収集部２１１と、第１データ格納部２１２と、ＡＥＳ（Advanced Encryption Standard）暗号処理部２１３と、ハッシュ処理部２１４と、準同型暗号化処理部２１５と、第２データ格納部２１６と、送信部２１７とを有する。
【０１０８】
データ収集部２１１は、例えばＰＯＳ（Point Of Sales）装置などから購入毎に購入履歴データを収集して、第１データ格納部２１２に格納する。上でも述べたように、購入履歴データには、顧客ＩＤ、年齢、性別、１０円単位の購入額、商品ＩＤ及び購入年月が含まれる。
【０１０９】
本実施の形態では、図１４に示すように、顧客ＩＤ、年齢、性別、商品ＩＤについては、ＡＥＳ暗号処理部２１３が例えば１２８ビットの暗号化鍵で暗号化する。例えば、これらの属性の属性値が３２ビット値である場合には、ＡＥＳ暗号処理部２１３は、例えば９６ビットの乱数を生成し、この乱数と属性値とのビット結合結果を暗号化鍵で暗号化処理を実施する。暗号化は、属性毎に行われる。また、ＡＥＳ暗号処理部２１３は、ＡＥＳによる暗号文を、第２データ格納部２１６に格納する。
【０１１０】
なお、これらの属性の属性値は、分析処理では用いられないが、クラウド３００から暗号文をダウンロードして用いる場合には、同じ暗号化鍵で復号して乱数部分を削除すればこれらの属性の属性値を復元できる。
【０１１１】
また、購入年月については、ハッシュ処理部２１４が、例えば１２８ビットのＳａｌｔ値Ｓとビット結合した上で例えばＳＨＡ−２５６等のハッシュ関数でハッシュ値を算出し、第２データ格納部２１６に格納する。
【０１１２】
準同型暗号化処理部２１５は、第１の実施の形態におけるElgamalベースの方法で述べた処理を行う。すなわち、準同型暗号処理部２１５は、図１５に示すような構成を有し、購入額に対して性別及び年齢による集計単位に応じて準同型暗号化処理を実施し、準同型暗号による暗号文を第２データ格納部２１６に格納する。
【０１１３】
図１５に、準同型暗号処理部２１５の構成を示す。準同型暗号処理部２１５は、データ入力部４０１と、出力部４０２と、第３データ格納部４０３と、公開鍵格納部４０４と、元選択部４０５と、暗号文生成部４０６と、乱数生成部４０７とを有する。
【０１１４】
データ入力部４０１は、第１データ格納部２１２から、各レコードの集計対象属性の属性値及び集計単位が設定されている属性の属性値を読み出して、第３データ格納部４０３に格納する。出力部４０２は、第３データ格納部４０３に格納され且つ暗号化されたデータを第２データ格納部２１６に格納する。公開鍵格納部４０４は、公開鍵のデータを格納する。乱数生成部４０７は、公開鍵に含まれる法ｎに従って、乱数を発生させ、暗号文生成部４０６に出力する。元選択部４０５は、第３データ格納部４０３に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部４０４に格納されている元を選択して、暗号文生成部４０６に出力する。暗号文生成部４０６は、元選択部４０５からの元と、公開鍵格納部４０４に格納されている他の公開鍵のデータを用いて、暗号文生成のための処理を実施し、第３データ格納部４０３に格納する。
【０１１５】
なお、第１データ格納部２１２に格納されているレコード毎に、ＡＥＳによる暗号文、ハッシュ値及び準同型暗号による暗号文が生成される。
【０１１６】
送信部２１７は、第２データ格納部２１６に格納されているＡＥＳによる暗号文、ハッシュ値及び準同型暗号による暗号文を、クラウド３００に送信する。
【０１１７】
クラウド３００のサーバは、ユーザシステム２００からデータを受信すると、ＤＢ３２０に蓄積する。
【０１１８】
次に、本実施の形態で用いる鍵について説明する。図１６には主要な鍵を示している。上でも述べたように、顧客ＩＤ、年齢、性別、商品ＩＤの４属性については、１２８ビットのＡＥＳ鍵Ｋを用いる。このＡＥＳ鍵Ｋは乱数により生成する。
【０１１９】
また、１０２４ビットの鍵（ｎ，ｇ，ｇ1，．．，ｇ32，ｐ1，．．．，ｐ32，ｈ1，．．．，ｈ32，ｙ，ｓ）を生成する。本実施の形態では、上で述べたように集計単位は、２種類の性別と８種類の年齢区分とで１６種類となる。このため、これだけで元ｇ1，．．，ｇ16，素数ｐ1，．．．，ｐ16，逆元鍵ｈ1，．．．，ｈ16が用いられる。３２ビット値を集計の最大値と設定すると、ｐ1乃至ｐ16を３３ビット素数に設定すればよい。さらに、本実施の形態では、平均購入額を算出するため、各集計単位について該当する属性値の出現回数を計数するための元ｇ17，．．，ｇ32、素数ｐ17，．．．，ｐ32及び逆元鍵ｈ17，．．．，ｈ32も用意する。これらの集計値の最大値が１６ビットであれば、素数ｐ17，．．．，ｐ32は、１７ビットあればよい。  
【０１２０】
なお、元ｇ1，．．，ｇ32及び逆元鍵ｈ1，．．．，ｈ32の生成は、第１の実施の形態で述べた方法で行うことができる。秘密鍵ｓ及び公開鍵ｙについても同様である。ｑ及びｋについては、鍵生成時には必要であるが、この処理が終了した後は用いないため消去してよい。
【０１２１】
なお、１２８ビットＳａｌｔ値Ｓについては、上でも述べたように、購入年月のハッシュ値を生成する際、出力値から入力値を推定されないようにするための１２８ビット乱数で生成する。
【０１２２】
次に、準同型暗号処理部２１５の処理内容について図１７を用いて説明する。
【０１２３】
データ入力部４０１は、集計単位が設定されている属性の属性値及び購入額ｍi（ｉはレコード番号）を取得して、第３データ格納部４０３に格納する（ステップＳ１０１）。また、暗号文生成部４０６は、この購入額ｍiに応じて、乱数生成部４０７に対して乱数ｒiを生成するように指示し、これに対して乱数生成部４０７は、０＜ｒi＜ｎ−１を満たす乱数ｒiを生成し、暗号文生成部４０６に出力する（ステップＳ１０３）。
【０１２４】
そして、暗号文生成部４０６は、暗号文１としてｃi＝ｇri（ｍｏｄ  ｎ）を生成し、第３データ格納部４０３に格納する（ステップＳ１０５）。また、元選択部４０５は、購入額ｍiについての集計単位が設定されている特定の属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応する元ｇa及びｇa+16を選択し、当該元ｇa及びｇa+16を暗号文生成部４０６に出力する（ステップＳ１０７）。
【０１２５】
そして、暗号文生成部４０６は、公開鍵に含まれる暗号化鍵ｙと法ｎと乱数ｒiと購入額ｍiと元ｇa及びｇa+16とから、暗号文２であるｄi＝ｙriｇamiｇa+161（ｍｏｄ  ｎ）を生成し、第３データ格納部４０３に格納する（ステップＳ１０９）。ｇa+161におけるべき数「１」は、集計単位ａについての属性値が１回出現したことを表す。すなわち、準同型加算を行うことでｇa+16のべき数に、出現回数の総計が現れるようになる。
【０１２６】
例えば、「２０代の男性が５０００円の商品」を購入すると、図１６からすると集計単位ａ＝２となり、元ｇ2及びｇ18が特定される。そして、ｄi＝ｙriｇ2500ｇ181（ｍｏｄ  ｎ）が算出される。  
【０１２７】
そうすると、出力部４０２は、第３データ格納部４０３に格納されている暗号文（ｃi，ｄi）を、第２データ格納部２１６に格納する（ステップＳ１１１）。
【０１２８】
以上のような処理を実施することで、以下で説明するように、集計単位毎の集計を実施することができるようになる。
【０１２９】
次に、分析時の処理について説明する。ユーザシステム２００は分析支援装置２２０を有しており、図１８に示すように、分析支援装置２２０は、復号化処理部２２１と、後処理部２２２と、出力部２２３とを有する。復号化処理部２２１は、クラウド３００に対する要求を行って暗号化演算結果を取得すると共に、指定の集計単位についての集計値（購入額合計値及び出現回数総計（即ち購入人数合計））を算出し、後処理部２２２に出力する。後処理部２２２は、購入額合計値／出現回数総計によって平均購入額を算出し、出力部２２３に出力する。出力部２２３は、購入額合計、出現回数総計及び平均購入額を出力装置（表示装置や印刷装置など）や他のコンピュータに出力する。
【０１３０】
復号化処理部２２１は、図１９に示すように、入力部４２１と、通信部４２２と、第４データ格納部４２３と、鍵格納部４２４と、素数選択部４２５と、復号演算部４２６と、ＢＳＧＳ処理部４２７と、出力部４２８と、ハッシュ生成部４２９とを有する。
【０１３１】
入力部４２１は、ユーザシステム２００のユーザなどからの分析指示を受け付け、通信部４２２、素数選択部４２５及び復号演算部４２６等に処理を指示する。また、通信部４２２は、例えば集計条件を含む集計要求をクラウド３００に送信して、その応答として暗号化演算結果を受信し、第４データ格納部４２３に格納する。集計条件は、例えばユーザから指定された購入年月とＳａｌｔ値Ｓとに対してハッシュ生成部４２９が生成したハッシュ値が含まれる。すなわち、ハッシュ生成部４２９は、通信部４２２（又は入力部４２１）からの指示に応じてハッシュ値を算出して、通信部４２２に出力する。
【０１３２】
鍵格納部４２４は、公開鍵及び秘密鍵を格納している。また、素数選択部４２５は、入力部４２１から指定される集計単位ｗに応じて、復号演算部４２６で用いられる素数を抽出し、復号演算部４２６に出力する。復号演算部４２６は、暗号化演算結果に対して、鍵格納部４２４に格納されている鍵のデータ及び素数選択部４２５により選択された素数のデータを用いて、復号処理のための演算を実施し、処理結果を第４データ格納部４２３に格納する。また、復号演算部４２６は、ＢＳＧＳ処理部４２７は、周知のＢＳＧＳ法にて集計結果を抽出する処理を実施し、第４データ格納部４２３に格納する。出力部４２８は、第４データ格納部４２３に格納されている集計結果を、後処理部２２２に出力する。
【０１３３】
次に、図２０乃至図２２を用いて、分析時の処理について説明する。入力部４２１は、ユーザシステム２００のユーザなどから集計すべき「購入年月」及び集計単位ｗの入力を受け付ける（図２０：ステップＳ１２１）。これに対して、入力部４２１は、入力された「購入年月」のデータを通信部４２２に出力する。通信部４２２は、ハッシュ生成部４２９に「購入年月」と鍵格納部４２４に格納されているＳａｌｔ値Ｓとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド３００に送信する（ステップＳ１２３）。
【０１３４】
これに対してクラウド３００の分析サーバ３１０は、ユーザシステム２００から「購入年月」のハッシュ値を含むリクエストを受信する（図２１：ステップＳ１３１）。そうすると、分析サーバ３１０は、ＤＢ３２０において、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額の暗号文（ｃi，ｄi）（ｉはレコードの識別子。ｉ＝１，２，．．．，ｔ）を抽出する（ステップＳ１３３）。そして、分析サーバ３１０は、（Ｃ，Ｄ）＝１に初期化し（ステップＳ１３５）、ｉを１に初期化する（ステップＳ１３７）。
【０１３５】
その後、分析サーバ３１０は、（Ｃ，Ｄ）＝（Ｃ×ｃi（ｍｏｄ  ｎ），Ｄ×ｄi（ｍｏｄ  ｎ））を算出する（ステップＳ１３９）。この演算は従来と同じである。さらに、分析サーバ３１０は、ｉを１インクリメントし（ステップＳ１４１）、ｉがｔを超えたか判断する（ステップＳ１４３）。ｉがｔ以下であれば、処理はステップＳ１３９に戻る。
【０１３６】
ｉがｔを超えた場合には、分析サーバ３１０は、暗号化演算結果（Ｃ，Ｄ）を要求元のユーザシステム２００に返信する（ステップＳ１４５）。
【０１３７】
これに対して、ユーザシステム２００の通信部４２２は、クラウド３００から暗号化演算結果（Ｃ，Ｄ）を受信し、第４データ格納部４２３に格納する（ステップＳ１２４）。その後、復号化処理部２２１は、暗号化演算結果（Ｃ，Ｄ）から、指定された集計単位ｗに対応する購入額合計値Ｍwを算出する（ステップＳ１２５）。さらに、復号化処理部２２１は、暗号化演算結果（Ｃ，Ｄ）から、指定された集計単位ｗからｗ＝ｗ＋１６と設定して合計人数Ｎwを算出する（ステップＳ１２６）。そして、出力部４２８は、第４データ格納部４２３に格納されている購入額合計値Ｍw及び合計人数Ｎw（出現回数又は購入回数とも呼ぶ）を、後処理部２２２に出力する（ステップＳ１２７）。後処理部２２２は、購入額合計値Ｍw／合計人数Ｎwにより平均購入額を算出し、購入額合計値Ｍw及び合計人数Ｎwと共に出力部２２３に出力する（ステップＳ１２８）。そして、出力部２２３は、購入額合計値Ｍw、合計人数Ｎw及び平均購入額を出力装置などに出力する（ステップＳ１２９）。
【０１３８】
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
【０１３９】
なお、ステップＳ１２５及びＳ１２６についてはほぼ同様の処理であり、図２２を用いて説明する。
【０１４０】
入力部４２１は、ユーザからの指示に従って、指定された集計単位ｗのデータを素数選択部４２５に出力しておく。なお、集計単位ｔ個あるものとする。従って、合計人数を集計単位毎に計数するので、元の数は２ｔ個になる。
【０１４１】
そして、通信部４２２が、暗号化演算結果（Ｃ，Ｄ）を第４データ格納部４２３に格納すると、復号演算部４２６は、鍵格納部４２４に格納されている秘密鍵ｓ及び法ｎから、Ｕ＝Ｃs（ｍｏｄ  ｎ）を算出し、例えばメインメモリなどの記憶装置に格納する（ステップＳ１５１）。これによってｙs*(r1+r2+..+r2t)（ｍｏｄ  ｎ）＝ｇr1+r2+..+r2t（ｍｏｄ  ｎ）が得られる。
【０１４２】
また、復号演算部４２６は、Ｖ＝Ｄ×Ｕ-1＝ｇ1M1ｇ2M2・・・ｇ2tM2t（ｍｏｄ  ｎ）を算出し、例えばメインメモリ等の記憶装置に格納する（ステップＳ１５５）。
【０１４３】
また、素数選択部４２５は、指定された集計単位ｗのデータから、ｗを除く各集計単位についての素数ｐw（その逆元鍵ｈw＝１／ｐwも）を鍵格納部４２４から読み出し、復号演算部４２６に出力する。そして、復号演算部４２６は、ｗを除く各集計単位ｉ＝１，２，．．．，ｗ−１，ｗ＋１，．．．，２ｔについて、以下の演算を繰り返し行い、第４データ格納部４２３に格納する（ステップＳ１５７）。
Ｚ＝Ｖpi（ｍｏｄ  ｎ）
Ｖ＝Ｚ1/pi（ｍｏｄ  ｎ）
【０１４４】
これは上で述べたｇapa（ｍｏｄ  ｎ）＝１であることを用いている。すなわち、ｉ＝１であればＺ＝Ｖp1（ｍｏｄ  ｎ）＝ｇ1M1*p1ｇ2M2*p1・・・ｇ2tM2t*p1（ｍｏｄ  ｎ）＝１M1×ｇ2M2*p1・・・ｇ2tM2t*p1（ｍｏｄ  ｎ）となる。従って、Ｚ1/pi（ｍｏｄ  ｎ）を算出すれば、Ｖ＝ｇ2M2・・・ｇ2tM2t（ｍｏｄ  ｎ）が得られ、集計単位１の元ｇ1のべき乗部分が消去されることになる。これを繰り返して集計結果ｗ以外の集計単位についてのその元のべき乗部分を消去すれば、最終的に集計結果ｗの元ｇwのべき乗ｇwMw（ｍｏｄ  ｎ）がＶとして得られる。この演算が終了すると、復号演算部４２６は、ＢＳＧＳ処理部４２７に処理開始を指示する。
【０１４５】
ＢＳＧＳ処理部４２７は、第４データ格納部４２３に格納されている、ステップＳ１５７の最終計算結果Ｖ＝ｇwMw（ｍｏｄ  ｎ）の値から、ＢＳＧＳ法を用いて集計単位ｗの集計結果Ｍｗを算出し、第４データ格納部４２３に格納する（ステップＳ１５９）。
【０１４６】
また、出力部４２８は、第４データ格納部４２３に格納されている、集計単位ｗの集計結果Ｍｗを、後処理部２２２に出力する（ステップＳ１６１）。
【０１４７】
以上のような処理を実施することで、購入額合計値及び合計人数を復号することができるようになる。
【０１４８】
［実施の形態３］
本実施の形態ではPaillerベースの方法を採用する。但し、購入履歴データを取り扱う点は第２の実施の形態と同じであり、購入履歴データに含まれる属性の種類及び集計単位が設定されている属性についても同様である。
【０１４９】
さらに、図１２に示したシステムの全体構成も第２の実施の形態と同様である。さらに、図１３に示した暗号化処理装置２１０の構成、図１８に示した分析支援装置２２０の構成も、第２の実施の形態と同様である。
【０１５０】
一方、用いる暗号処理が異なるので、鍵の構成は異なる。本実施の形態では、図２３に示すように、顧客ＩＤ、性別、商品ＩＤについては、ＡＥＳ暗号処理部２１３が例えば１２８ビットの暗号化鍵で暗号化する。例えば、これらの属性の属性値が３２ビット値である場合には、ＡＥＳ暗号処理部２１３は、例えば９６ビットの乱数を生成し、この乱数と属性値とのビット結合結果を暗号化鍵で暗号化処理を実施する。暗号化は、属性毎に行われる。また、ＡＥＳ暗号処理部２１３は、ＡＥＳによる暗号文を、第２データ格納部２１６に格納する。
【０１５１】
なお、これらの属性の属性値は、分析処理では用いられないが、クラウド３００から暗号文をダウンロードして用いる場合には、同じ暗号化鍵で復号して乱数部分を削除すればこれらの属性の属性値を復元できる。
【０１５２】
また、本実施の形態では、集計は行われないが、年齢についても、準同型暗号処理の対象となっている。すなわち、元ｇのべき数の中に埋め込まれる。
【０１５３】
また、購入年月については、ハッシュ処理部２１４が、例えば１２８ビットのＳａｌｔ値Ｓとビット結合した上で例えばＳＨＡ−２５６等のハッシュ関数でハッシュ値を算出し、第２データ格納部２１６に格納する。
【０１５４】
準同型暗号化処理部２１５ｂ（第３の実施の形態では第２の実施の形態と区別するため２１５ｂとする）は、第１の実施の形態におけるPaillerベースの方法で述べた処理を行う。すなわち、準同型暗号処理部２１５ｂは、図２４に示すような構成を有し、購入額に対して、性別及び年齢による集計単位に応じて準同型暗号化処理を実施し、準同型暗号による暗号文を第２データ格納部２１６に格納する。年齢の暗号化については、準同型加算処理を行わないので集計単位に応じた準同型暗号処理ではない。
【０１５５】
図２４に示すように、準同型暗号処理部２１５ｂは、データ入力部４５１と、出力部４５２と、第５データ格納部４５３と、公開鍵格納部４５４と、乱数生成部４５５と、シフト処理部４５６と、暗号文生成部４５７とを有する。
【０１５６】
データ入力部４５１は、第１データ格納部２１２に格納されている平文データのうち準同型暗号処理の対象である属性の属性値及び集計単位が設定されている属性の属性値を取得して第５データ格納部４５３に格納する。出力部４５２は、第５データ格納部４５３に格納され且つ暗号化されたデータを第２データ格納部２１６に格納する。
【０１５７】
公開鍵格納部４５４は、公開鍵のデータを格納する。乱数生成部４５５は、公開鍵に含まれる法ｎに従って、乱数を発生させ、暗号文生成部４５７に出力する。シフト処理部４５６は、第５データ格納部４５３に格納されているデータに含まれ且つ集計単位が設定されている属性の属性値に応じて、公開鍵格納部４５４に格納されているビットシフト量を特定し、集計対象の属性等（準同型加算処理の対象属性）の属性値を当該ビットシフト量で左シフトさせる処理を実施し、処理結果を暗号文生成部４５７に出力する。暗号文生成部４５７は、乱数生成部４５５からの乱数と、公開鍵格納部４５４に格納されている公開鍵とを用いて、シフト処理部４５６からのシフト処理結果を暗号化する処理を実施し、処理結果を第５データ格納部４５３に格納する。
【０１５８】
第１データ格納部２１２に格納されているレコード毎に、ＡＥＳによる暗号文、ハッシュ値及び準同型暗号による暗号文が生成される。
【０１５９】
送信部２１７は、第２データ格納部２１６に格納されているＡＥＳによる暗号文、ハッシュ値及び準同型暗号による暗号文を、クラウド３００に送信する。
【０１６０】
クラウド３００のサーバは、ユーザシステム２００からデータを受信すると、ＤＢ３２０に蓄積する。
【０１６１】
次に、本実施の形態で用いる鍵について説明する。上でも述べたように、顧客ＩＤ、性別、商品ＩＤの３属性については、１２８ビットのＡＥＳ鍵Ｋを用いる。このＡＥＳ鍵Ｋは乱数により生成する。
【０１６２】
また、上で述べたように集計単位は１６種類であるから、ビットシフト量を表す定数ｅ1乃至ｅ16を設ける。さらに、各集計単位の出現回数（購入回数又は人数若しくは個人総数とも呼ぶ）についても別の暗号文で計数するため、同じビットシフト量を表す定数ｅ1乃至ｅ16を用いる。
【０１６３】
さらに、本実施の形態では、「年齢」属性をも準同型暗号処理で暗号化するので、年齢そのものを暗号化するために用いるシフト定数ｅ17を用いる。このように属性がビットシフト量に対応付けられている。
【０１６４】
このように、図２５に示すように、上限値を表すｅ18を含め合計１８個の定数ｅ1乃至ｅ18を用いる。
【０１６５】
図２５に示すように定数ｅ1乃至ｅ16は、購入額の集計と個人総数の集計に用いられるが、前者の上限値は３２ビット値であり、後者の上限値は１６ビット値であるが、前者に合わせて３２ビットである。従って、ｅ1乃至ｅ17で５１２ビットとなる。さらに年齢についても３２ビットで十分であるから、ｅ18＝５４４ビットとなる。ｅ18の値からは、ｎを５４５ビットに設定すれば十分であるが、Paillier暗号は、ＲＳＡ（Rivest Shamir Adleman）暗号と同様に安全性が素因数分解に基づく暗号のため、２つの素数の積であるｎ＝５４５はビット長として不十分であり、安全性確保のために、ｎには１０２４ビットが設定される。ｎのビット長を１０２４ビットとしたうえで、一般的なPaillier暗号の鍵セットアップ法に従い、合成数ｎ, 公開法ｎ2、秘密鍵ｓ及び元ｇが設定される。
【０１６６】
なお、１２８ビットＳａｌｔ値Ｓについては、第１の実施の形態と同様に、購入年月のハッシュ値を生成する際、出力値から入力値を推定されないようにするための１２８ビット乱数で生成する。
【０１６７】
次に、準同型暗号処理部２１５ｂの処理内容について図２６Ａ及び図２６Ｂを用いて説明する。まず、図２６Ａを用いて購入額についての暗号文の生成処理について説明する。
【０１６８】
データ入力部４５１は、集計単位が設定されている属性の属性値及び購入額ｍi,1（ｉはレコード番号を表す。１は暗号文の識別子を示す）を取得して、第５データ格納部４５３に格納する（ステップＳ２０１）。また、暗号文生成部４５７は、この購入額ｍi,1に応じて、乱数生成部４５５に対して乱数ｒi,1を生成するように指示し、これに対して乱数生成部４５５は、０＜ｒi,1＜ｎ−１を満たす乱数ｒi,1を生成し、暗号文生成部４５７に出力する（ステップＳ２０３）。
【０１６９】
そして、暗号文生成部４５７が、シフト処理部４５６に対して購入額ｍi,1に対してシフト処理を実施するように要求すると、シフト処理部４５６は、集計単位が設定されている属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応するビットシフト量の定数ｅaを公開鍵格納部４５４から読み出して、第５データ格納部４５３に格納されている購入額ｍi,1をｅaだけ左シフトさせる処理を実施し、処理結果を暗号文生成部４５７に出力する（ステップＳ２０５）。なお、シフト処理後の平文をｍbi,1と表すものとする。
【０１７０】
そして、暗号文生成部４５７は、公開鍵格納部４５４から法ｎ2とｎとを読み出して、暗号文１としてｃi,1＝ｒi,1nｇmb(i,1)（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３に格納する（ステップＳ２０７）。
【０１７１】
その後、出力部４５２は、第５データ格納部４５３に格納されている暗号文１であるｃi,1を、第２データ格納部２１６に格納する（ステップＳ２０９）。
【０１７２】
以上のような処理を実施することで、購入額ｍi,1についての暗号文１が得られる。
【０１７３】
次に、図２６Ｂを用いて年齢及び人数についての暗号文の生成処理について説明する。
【０１７４】
データ入力部４５１は、集計単位が設定されている属性の属性値及び年齢ｍi,2（ｉはレコード番号を表す。２は暗号文の識別子を示す）を取得して、第５データ格納部４５３に格納する（ステップＳ２１１）。また、暗号文生成部４５７は、この年齢ｍi,2に応じて、乱数生成部４５５に対して乱数ｒi,2を生成するように指示し、これに対して乱数生成部４５５は、０＜ｒi,2＜ｎ−１を満たす乱数ｒi,2を生成し、暗号文生成部４５７に出力する（ステップＳ２１３）。
【０１７５】
そして、暗号文生成部４５７が、シフト処理部４５６に対して年齢ｍi,2及び人数に対してシフト処理を実施するように要求すると、シフト処理部４５６は、集計単位が設定されている属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応するビットシフト量の定数ｅa及び年齢属性に対応するビットシフト量の定数ｅ17を公開鍵格納部４５４から読み出す。そして、シフト処理部４５６は、人数１をｅaだけ左シフトさせると共に、第５データ格納部４５３に格納されている年齢ｍi,2をｅ17だけ左シフトさせる処理を実施し、２つのビット列を連結させた上で、処理結果ｍci,2を暗号文生成部４５７に出力する（ステップＳ２１５）。
【０１７６】
例えば、「２０歳代の男性」という集計単位であれば、図２５からするとｅ2が特定される。従って、人数１はｅ2＝３２ビットだけ左シフトされる。また、年齢に対応するｅ17＝５１２ビットであるから、年齢「２０歳代」の「２」を５１２ビットだけ左シフトさせる。そして、ビット結合させると、以下のようになる。
ｍci,2＝ｍi,2＜＜512 || １＜＜32 
＝200...00(0が120個)0000000100000000
【０１７７】
そして、暗号文生成部４５７は、公開鍵格納部４５４から法ｎ2とｎとを読み出して、暗号文２としてｃi,2＝ｒi,2nｇmc(i,2)（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３に格納する（ステップＳ２１７）。
【０１７８】
その後、出力部４５２は、第５データ格納部４５３に格納されている暗号文２であるｃi,2を、第２データ格納部２１６に格納する（ステップＳ２１９）。
【０１７９】
以上のような処理を実施することで、年齢ｍi,2及び人数についての暗号文２が得られる。
【０１８０】
次に、分析時の処理について説明する。ユーザシステム２００は分析支援装置２２０を有している点、及び分析支援装置２２０の構成は、第２の実施の形態と同様である。
【０１８１】
但し、復号化処理部２２１ｂ（第２の実施の形態における復号化処理部２２１と区別するために本実施の形態では２２１ｂとする）は、図２７に示すような構成を有する。
【０１８２】
復号化処理部２２１ｂは、入力部４６１と、通信部４６２と、第６データ格納部４６３と、鍵格納部４６４と、ビット抽出部４６５と、復号演算部４６６と、出力部４６７と、ハッシュ生成部４６８とを有する。
【０１８３】
入力部４６１は、ユーザシステム２００のユーザなどからの指示を受け付け、通信部４６２、ビット抽出部４６５及び復号演算部４６６等に処理を指示する。また、通信部４６２は、例えば集計要求をクラウドに送信して、その応答として暗号化演算結果を受信し、第６データ格納部４６３に格納する。鍵格納部４６４は、公開鍵及び秘密鍵を格納している。復号演算部４６６は、第６データ格納部４６３に格納されている暗号化演算結果に対して、鍵格納部４６４に格納されている秘密鍵及び公開鍵を用いて復号演算を実施して、復号演算結果をビット抽出部４６５に出力する。ビット抽出部４６５は、入力部４６１から指定される集計単位ｗに応じて、鍵格納部４６４からビットシフト量を特定し、復号演算部４６６からの復号演算結果から、当該ビットシフト量に対応するビット範囲のデータを抽出して、第６データ格納部４６３に格納する。出力部４６７は、第６データ格納部４６３に格納されている集計結果を、後処理部２２６に出力する。
【０１８４】
次に、図２８乃至図３０を用いて、分析時の処理について説明する。入力部４６１は、ユーザシステム２００のユーザなどから集計すべき「購入年月」及び集計単位ｗの入力を受け付ける（図２８：ステップＳ２２１）。これに対して、入力部４６１は、入力された「購入年月」のデータを通信部４６２に出力する。通信部４６２は、ハッシュ生成部４６８に「購入年月」と鍵格納部４６４に格納されているＳａｌｔ値Ｓとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド３００に送信する（ステップＳ２２３）。
【０１８５】
これに対してクラウド３００の分析サーバ３１０は、ユーザシステム２００から「購入年月」のハッシュ値を含むリクエストを受信する（図２９：ステップＳ２４１）。そうすると、分析サーバ３１０は、ＤＢ３２０において、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額及び人数（年齢も含む）の暗号文（ｃi,1，ｃi,2）（ｉはレコードの識別子。ｉ＝１，２，．．．，ｔ）を抽出する（ステップＳ２４３）。そして、分析サーバ３１０は、（Ｃ1，Ｃ2）＝１に初期化し（ステップＳ２４５）、ｉを１に初期化する（ステップＳ２４７）。
【０１８６】
その後、分析サーバ３１０は、Ｃ1＝Ｃ1×ｃi,1（ｍｏｄ  ｎ2）及びＣ2＝Ｃ2×ｃi,2（ｍｏｄ  ｎ2）を算出する（ステップＳ２４９）。この演算は従来と同じである。さらに、分析サーバ３１０は、ｉを１インクリメントし（ステップＳ２５１）、ｉがｔを超えたか判断する（ステップＳ２５３）。ｉがｔ以下であれば、処理はステップＳ２４９に戻る。
【０１８７】
ｉがｔを超えた場合には、分析サーバ３１０は、暗号化演算結果Ｃ1及びＣ2を要求元のユーザシステム２００に返信する（ステップＳ２５５）。
【０１８８】
これに対して、ユーザシステム２００の通信部４６２は、クラウド３００から暗号化演算結果Ｃ1及びＣ2を受信し、第６データ格納部４６３に格納する（ステップＳ２５５）。
【０１８９】
その後、復号演算部４６６は、暗号化演算結果Ｃ1から、指定された集計単位ｗに対応する購入額合計値Ｍwを算出する（ステップＳ２２７）。さらに、復号演算部４６６は、暗号化演算結果Ｃ2から、指定された集計単位ｗに対応する合計人数Ｎwを算出する（ステップＳ２２９）。そして、出力部４６７は、第６データ格納部４６３に格納されている購入額合計値Ｍw及び合計人数Ｎw（出現回数又は購入回数とも呼ぶ）を、後処理部２２２に出力する（ステップＳ２３１）。後処理部２２２は、購入額合計値Ｍw／合計人数Ｎwにより平均購入額を算出し、購入額合計値Ｍw及び合計人数Ｎwと共に出力部２２３に出力する（ステップＳ２３３）。そして、出力部２２３は、購入額合計値Ｍw、合計人数Ｎw及び平均購入額を出力装置などに出力する（ステップＳ２３５）。
【０１９０】
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
【０１９１】
なお、ステップＳ２２７及びＳ２２９についてはほぼ同様の処理であり、図３０を用いて説明する。
【０１９２】
入力部４６１は、ユーザからの指示に従って、指定された集計単位ｗのデータをビット抽出部４６５に出力しておく。
【０１９３】
そして、通信部４６２が、暗号化演算結果ｃ（Ｃ1又はＣ2）を第６データ格納部４６３に格納すると、復号演算部４６６は、鍵格納部４６４に格納されている秘密鍵ｓ、ｎ、法ｎ2及び元ｇを用いて、暗号文ｃに対する復号演算結果Ｍを以下の式にて算出し、復号演算結果Ｍをビット抽出部４６５に出力する（ステップＳ２３５）。
Ｍ＝Ｌ（ｃs（ｍｏｄ  ｎ2））／Ｌ（ｇs（ｍｏｄ  ｎ2））（ｍｏｄ  ｎ2）
なお、Ｌ（ｘ）＝（ｘ−１）／ｎという関数である。この演算は従来と同じである。
【０１９４】
そして、ビット抽出部４６５は、入力部４６１から指定された集計単位ｗに対応するビットシフト量を表す定数ｅw及び集計単位ｗ＋１に対応するビットシフト量を表す定数ｅw+1を鍵格納部４６４から読み出して、復号演算結果Ｍのｅw+1−１ビットからｅwビットの値を、集計単位ｗの集計結果Ｍwとして復号演算結果Ｍから抽出し、第６データ格納部４６３に格納する（ステップＳ２３７）。本ステップが、従来とは異なるステップである。
【０１９５】
その後、出力部４６７は、第６データ格納部４６３に格納されている復号演算結果Ｍw（購入額合計値Ｍw又は合計人数Ｎw）を、後処理部２２２に出力する（ステップＳ２３９）。
【０１９６】
以上のような処理で、秘匿しつつ集計処理を実施して、その結果を復元できるようになる。
【０１９７】
［実施の形態４］
本実施の形態では、第２の実施の形態において購入履歴データの属性として商品セグメントをも取り扱うことができるようにすることを考える。例えば、４種類の商品セグメント（例えば、本、家電、ソフトウエア、食品）を導入して、これらについても分析を行うことができるようにするためには、これまでの集計単位１６種類×４種類＝６４の集計単位が設定されることになる。集計値の上限を３２ビット値に設定した場合、３２×６４＝２０４８ビットとなってしまう。ｎのビット長を増やすことで対応できるが、計算量が膨大となるので、代わりに暗号文の数を増加させることで、計算量の増加を抑えることとする。本実施の形態では、商品セグメント毎に暗号文を設けることにする。
【０１９８】
そうすると、図３１に示すように、商品セグメントをＡＥＳ暗号で暗号化する点を除けば、第２の実施の形態と同様の鍵を用意すればよい。
【０１９９】
従って、基本的な構成は第２の実施の形態と同じであるから、本実施の形態と異なる部分だけ説明する。なお、構成要素の参照符号については、「ｃ」を付加することで区別するものとする。
【０２００】
そこで、準同型暗号処理部２１５ｃの処理内容について図３２を用いて説明する。データ入力部４０１ｃは、集計単位が設定されている属性の属性値（商品セグメントの属性値も含む）及び購入額ｍi（ｉはレコード番号）を取得して、第３データ格納部４０３ｃに格納する（ステップＳ３０１）。また、データ入力部４０１ｃは、「商品セグメント」に応じた暗号文選択番号δ（例えば、本の場合δ＝１、家電の場合δ＝２、ソフトウエアの場合δ＝３、食品の場合δ＝４）を特定し、暗号文生成部４０６ｃに出力する（ステップＳ３０３）。
【０２０１】
また、暗号文生成部４０６ｃは、暗号文のカウンタｊをｊ＝１に初期化する（ステップＳ３０５）。その後、暗号文生成部４０６ｃは、購入額ｍiに応じて、乱数生成部４０７ｃに対して乱数ｒi,jを生成するように指示し、これに対して乱数生成部４０７ｃは、０＜ｒi,j＜ｎ−１を満たす乱数ｒi,jを生成し、暗号文生成部４０６ｃに出力する（ステップＳ３０７）。
【０２０２】
そして、暗号文生成部４０６ｃは、暗号文１としてｃi＝ｇr(i,j)（ｍｏｄ  ｎ）を生成し、第３データ格納部４０３ｃに格納する（ステップＳ３０９）。また、暗号文生成部４０６ｃは、ｊ＝δであるか判断する（ステップＳ３１１）。ｊ＝δでなければ、暗号文生成部４０６ｃは、暗号文２ｊとして、ｄi,j＝ｙr(i,j)（ｍｏｄ  ｎ）を生成し、第３データ格納部４０３ｃに格納する（ステップＳ３１７）。ｇa0＝１であるから、この部分が省略されている。そして処理はステップＳ３１９に移行する。
【０２０３】
一方、ｊ＝δであれば、元選択部４０５ｃは、購入額ｍiに対する集計単位が設定されている特定の属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応する元ｇa及びｇa+16を選択し、当該元ｇa及びｇa+16を暗号文生成部４０６ｃに出力する（ステップＳ３１３）。
【０２０４】
そして、暗号文生成部４０６ｃは、公開鍵に含まれる暗号化鍵ｙと法ｎと乱数ｒi,jと購入額ｍiと元ｇa及びｇa+16とから、暗号文２jであるｄi,j＝ｙr(i,j)ｇamiｇa+161（ｍｏｄ  ｎ）を生成し、第３データ格納部４０３ｃに格納する（ステップＳ３１５）。ｇa+161におけるべき数「１」は、集計単位ａについての属性値が１回出現したことを表す。すなわち、準同型加算を行うことでｇa+16のべき数に、出現回数の総計が現れるようになる。処理は、ステップＳ３１９に移行する。
【０２０５】
ステップＳ３１９では、暗号文生成部４０６ｃは、ｊを１インクリメントし（ステップＳ３１９）、ｊが４を超えたか判断する（ステップＳ３２１）。ｊが４以下であれば、ステップＳ３０７に戻る。一方、ｊが４を超えた場合には、出力部４０２ｃは、第３データ格納部４０３ｃに格納されている暗号文（ｃi,j，ｄi,j）（ｊは１乃至４）を、第２データ格納部２１６ｃに格納する（ステップＳ３２３）。
【０２０６】
以上のような処理を実施することで、商品セグメント毎に暗号文を分けた形で暗号文が生成されることになる。図３３に模式的に示すように、例えば食品セグメントの商品をα1円購入した場合には、１回の購入履歴データを、商品セグメント「本」の購入額０円、商品セグメント「家電」０円、商品セグメント「ソフトウエア」０円、商品セグメント「食品」α1円というデータに変換した上で、それぞれのセグメントについて暗号文を生成している。
【０２０７】
次に、図３４及び図３５を用いて、分析時の処理について説明する。入力部４２１ｃは、ユーザシステム２００ｃのユーザなどから集計すべき「購入年月」、商品セグメントφ及び集計単位ｗの入力を受け付ける（図３３：ステップＳ３３１）。これに対して、入力部４２１ｃは、入力された「購入年月」のデータを通信部４２２ｃに出力する。通信部４２２ｃは、ハッシュ生成部４２９ｃに「購入年月」と鍵格納部４２４ｃに格納されているＳａｌｔ値Ｓとからハッシュ値を生成させ、当該「購入年月」のハッシュ値を含むリクエストをクラウド３００ｃに送信する（ステップＳ３３３）。
【０２０８】
これに対してクラウド３００ｃの分析サーバ３１０ｃは、ユーザシステム２００ｃから「購入年月」のハッシュ値を含むリクエストを受信する（図３５：ステップＳ３５１）。そうすると、分析サーバ３１０ｃは、ＤＢ３２０ｃにおいて、「購入年月」の値がリクエストに含まれるハッシュ値に一致するレコードの購入額の暗号文（ｃi,j，ｄi,j）（ｉはレコードの識別子。ｉ＝１，２，．．．，ｔ。ｊ＝１，２，３，４）を抽出する（ステップＳ３５３）。そして、分析サーバ３１０ｃは、（Ｃj，Ｄj）＝１に初期化し（ステップＳ３５５）、ｊを１に初期化する（ステップＳ３５７）。さらに分析サーバ３１０ｃは、ｉを１に初期化する（ステップＳ３５９）。
【０２０９】
その後、分析サーバ３１０ｃは、（Ｃj，Ｄj）＝（Ｃj×ｃi,j（ｍｏｄ  ｎ），Ｄj×ｄi,j（ｍｏｄ  ｎ））を算出する（ステップＳ３６１）。さらに、分析サーバ３１０ｃは、ｉを１インクリメントし（ステップＳ３６３）、ｉがｔを超えたか判断する（ステップＳ３６５）。ｉがｔ以下であれば、処理はステップＳ３６１に戻る。
【０２１０】
ｉがｔを超えた場合には、分析サーバ３１０ｃは、ｊを１インクリメントし（ステップＳ３６７）、ｊが４を超えたか判断する（ステップＳ３６９）。ｊが４以下であれば処理はステップＳ３５９に戻る。一方、ｊが４を超えた場合には、分析サーバ３１０ｃは、暗号化演算結果（Ｃj，Ｄj）（ｊ＝１，２，３，４）を要求元のユーザシステム２００ｃに返信する（ステップＳ３７１）。
【０２１１】
これに対して、ユーザシステム２００ｃの通信部４２２ｃは、クラウド３００ｃから暗号化演算結果（Ｃj，Ｄj）を受信し、第４データ格納部４２３ｃに格納する（ステップＳ３３５）。そして、復号化処理部２２１ｃは、入力部４２１ｃから受け取った商品セグメントφに対応する暗号化演算結果（Ｃφ，Ｄφ）を、第４データ格納部４２３ｃから抽出する（ステップＳ３３７）。
【０２１２】
その後、復号化処理部２２１ｃは、暗号化演算結果（Ｃφ，Ｄφ）から、指定された集計単位ｗに対応する購入額合計値Ｍwを算出する（ステップＳ３３９）。さらに、復号化処理部２２１ｃは、暗号化演算結果（Ｃφ，Ｄφ）から、指定された集計単位ｗからｗ＝ｗ＋１６と設定して合計人数Ｎwを算出する（ステップＳ３４１）。そして、出力部４２８ｃは、第４データ格納部４２３ｃに格納されている購入額合計値Ｍw及び合計人数Ｎw（出現回数又は購入回数とも呼ぶ）を、後処理部２２２に出力する（ステップＳ３４３）。後処理部２２２は、購入額合計値Ｍw／合計人数Ｎwにより平均購入額を算出し、購入額合計値Ｍw及び合計人数Ｎwと共に出力部２２３に出力する（ステップＳ３４５）。そして、出力部２２３は、購入額合計値Ｍw、合計人数Ｎw及び平均購入額を出力装置などに出力する（ステップＳ３４７）。
【０２１３】
以上のような処理を実施することで、所望の商品セグメント且つ所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
【０２１４】
なお、ステップＳ３３９及びＳ３４１についてはほぼ同様の処理であり、図２２で説明したとおりの処理であり、ここでは説明を省略する。
【０２１５】
［実施の形態５］
本実施の形態は、第４の実施の形態と同様に、商品セグメントを導入するように第３の実施の形態を変形するものである。
【０２１６】
すなわち、４種類の商品セグメント（例えば、本、家電、ソフトウエア、食品）を導入して、これらについても分析を行うことができるようにするためには、これまでの集計単位１６種類×４種類＝６４の集計単位が設定されることになる。第４の実施の形態と同様に、第３の実施の形態をそのまま拡張するのでは計算量が膨大になってしまう。そこで、暗号文の数を増加させることで、計算量の増加を抑えることとする。本実施の形態でも、商品セグメント毎に暗号文を設けることにする。
【０２１７】
そうすると、図３６に示すように、商品セグメントをＳａｌｔ値Ｓと共にハッシュ関数でハッシュ値に変換する点を除けば、第３の実施の形態と同様の鍵を用意すればよい。
【０２１８】
従って、基本的な構成は第３の実施の形態と同じであるから、本実施の形態と異なる部分だけ説明する。なお、構成要素の参照符号については、「ｄ」を付加することで区別するものとする。
【０２１９】
次に、準同型暗号処理部２１５ｄの処理内容について図３７及び図３８を用いて説明する。まず、図３７を用いて購入額についての暗号文の生成処理について説明する。
【０２２０】
データ入力部４５１ｄは、集計単位が設定されている属性の属性値（商品セグメントの属性値も含む）及び購入額ｍi,1（ｉはレコード番号を表す。１は暗号文の識別子を示す）を取得して、第５データ格納部４５３ｄに格納する（ステップＳ４０１）。また、データ入力部４５１ｄは、「商品セグメント」に応じた暗号文選択番号δ（例えば、本の場合δ＝１、家電の場合δ＝２、ソフトウエアの場合δ＝３、食品の場合δ＝４）を特定し、暗号文生成部４５７ｄに出力する（ステップＳ４０２）。
【０２２１】
そうすると、暗号文生成部４５７ｄは、暗号文選択のためのカウンタｊを１に初期化する（ステップＳ４０３）。暗号文生成部４５７ｄは、この購入額ｍi,1に応じて、乱数生成部４５５ｄに対して乱数ｒi,j,1を生成するように指示し、これに対して乱数生成部４５５ｄは、０＜ｒi,j,1＜ｎ−１を満たす乱数ｒi,j,1を生成し、暗号文生成部４５７ｄに出力する（ステップＳ４０５）。
【０２２２】
そして、暗号文生成部４５７ｄは、ｊがδに一致するか判断する（ステップＳ４０７）。ｊがδに一致する場合には、暗号文生成部４５７ｄは、シフト処理部４５６ｄに対して購入額ｍi,1に対してシフト処理を実施するように要求すると、シフト処理部４５６ｄは、集計単位が設定されている属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応するビットシフト量の定数ｅaを公開鍵格納部４５４ｄから読み出して、第５データ格納部４５３ｄに格納されている購入額ｍi,1をｅaだけ左シフトさせる処理を実施し、処理結果を暗号文生成部４５７ｄに出力する（ステップＳ４０９）。なお、シフト処理後の平文をｍbi,1と表すものとする。
【０２２３】
そして、暗号文生成部４５７ｄは、公開鍵格納部４５４ｄから法ｎ2とｎとを読み出して、暗号文ｃi,j,1＝ｒi,j,1nｇmb(i,1)（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３ｄに格納する（ステップＳ４１１）。その後処理はステップＳ４１５に移行する。
【０２２４】
一方、ｊがδに一致しない場合には、暗号文生成部４５７ｄは、暗号文ｃi,j,1＝ｒi,j,1n（ｍｏｄ  ｎ2）を生成し、第３データ格納部４０３ｄに格納する（ステップＳ４１３）。ｇ0＝１であるから、この部分が省略されている。そして処理はステップＳ４１５に移行する。
【０２２５】
ステップＳ４１５では、暗号文生成部４５７ｄは、ｊを１インクリメントし（ステップＳ４１５）、ｊが４を超えたか判断する（ステップＳ４１７）。ｊが４以下であれば、処理はステップＳ４０５に戻る。
【０２２６】
一方、ｊが４を超えた場合には、出力部４５２ｄは、第５データ格納部４５３ｄに格納されている暗号文ｃi,j,1（ｊ＝１，２，３，４）を、第２データ格納部２１６ｄに格納する（ステップＳ４１９）。
【０２２７】
以上のような処理を実施することで、購入額ｍi,1についての暗号文ｃi,j,1が得られる。
【０２２８】
次に、図３８を用いて年齢及び人数についての暗号文の生成処理について説明する。
【０２２９】
データ入力部４５１ｄは、集計単位が設定されている属性の属性値及び年齢ｍi,2（ｉはレコード番号を表す。２は暗号文の識別子を示す）を取得して、第５データ格納部４５３ｄに格納する（ステップＳ４２１）。また、データ入力部４５１ｄは、「商品セグメント」に応じた暗号文選択番号δ（例えば、本の場合δ＝１、家電の場合δ＝２、ソフトウエアの場合δ＝３、食品の場合δ＝４）を特定し、暗号文生成部４５７ｄに出力する（ステップＳ４２２）。
【０２３０】
また、暗号文生成部４５７ｄは、暗号文のカウンタｊを１に初期化する（ステップＳ４２３）。そして、暗号文生成部４５７ｄは、この年齢ｍi,2に応じて、乱数生成部４５５ｄに対して乱数ｒi,j,2を生成するように指示し、これに対して乱数生成部４５５ｄは、０＜ｒi,j,2＜ｎ−１を満たす乱数ｒi,j,2を生成し、暗号文生成部４５７ｄに出力する（ステップＳ４２５）。
【０２３１】
その後、暗号文生成部４５７ｄは、ｊ＝δであるか判断する（ステップＳ４２７）。ｊ＝δであれば、暗号文生成部４５７ｄが、シフト処理部４５６ｄに対して年齢ｍi,2及び人数に対してシフト処理を実施するように要求すると、シフト処理部４５６ｄは、集計単位が設定されている属性の属性値に応じて集計単位ａを特定し、当該集計単位ａに対応するビットシフト量の定数ｅa及び年齢属性に対応するビットシフト量の定数ｅ17を公開鍵格納部４５４ｄから読み出す。そして、シフト処理部４５６ｄは、人数１をｅaだけ左シフトさせると共に、第５データ格納部４５３ｄに格納されている年齢ｍi,2をｅ17だけ左シフトさせる処理を実施し、２つのビット列を連結させた上で、処理結果ｍci,2を暗号文生成部４５７ｄに出力する（ステップＳ４２９）。そして、暗号文生成部４５７ｄは、公開鍵格納部４５４ｄから法ｎ2とｎとを読み出して、暗号文２としてｃi,2＝ｒi,2nｇmc(i,2)（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３ｄに格納する（ステップＳ４３１）。そして処理はステップＳ４３５に移行する。
【０２３２】
一方、ｊ＝δでない場合には、暗号文生成部４５７ｄは、暗号文ｃi,j,2＝ｒi,j,2n（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３ｄに格納する（ステップＳ４３３）。ｇ0＝１であるから、この部分が省略されている。そして処理はステップＳ４３５に移行する。
【０２３３】
ステップＳ４３５では、暗号文生成部４５７ｄは、ｊを１インクリメントし（ステップＳ４３５）、ｊが４を超えたか判断する（ステップＳ４３７）。ｊが４以下であれば、処理はステップＳ４２５に戻る。
【０２３４】
一方、ｊが４を超えた場合には、暗号文生成部４５７ｄは、公開鍵格納部４５４ｄから法ｎ2とｎとを読み出して、ｃi,j,2＝ｒi,j,2nｇmc(i,2)（ｍｏｄ  ｎ2）を生成し、第５データ格納部４５３ｄに格納する（ステップＳ４３９）。
【０２３５】
以上のような処理を実施することで、年齢ｍi,2及び人数についての暗号文ｃi,j,2が得られる。
【０２３６】
次に、図３９乃至図４０を用いて、分析時の処理について説明する。入力部４６１ｄは、ユーザシステム２００ｄのユーザなどから集計すべき「購入年月」、商品セグメントφ及び集計単位ｗの入力を受け付ける（図３９：ステップＳ４４１）。
【０２３７】
これに対して、入力部４６１ｄは、入力された「購入年月」及び商品セグメントφのデータを通信部４６２ｄに出力する。通信部４６２ｄは、ハッシュ生成部４６８ｄに「購入年月」及び商品セグメントφと鍵格納部４６４ｄに格納されているＳａｌｔ値Ｓとから２つのハッシュ値を生成させ、当該「購入年月」のハッシュ値及び商品セグメントφのハッシュ値を含むリクエストをクラウド３００ｄに送信する（ステップＳ４４３）。
【０２３８】
これに対してクラウド３００ｄの分析サーバ３１０ｄは、ユーザシステム２００ｄから「購入年月」のハッシュ値及び商品セグメントφのハッシュ値を含むリクエストを受信する（図４０：ステップＳ４６１）。そうすると、分析サーバ３１０ｄは、ＤＢ３２０ｄにおいて、「購入年月」の値がリクエストに含まれるハッシュ値に一致し且つ商品セグメントの値がリクエストに含まれるハッシュ値に一致するレコードの購入額及び人数（年齢も含む）の暗号文（ｃi,φ,1，ｃi,φ,2）（ｉはレコードの識別子。ｉ＝１，２，．．．，ｔ）を抽出する（ステップＳ４６３）。そして、分析サーバ３１０ｄは、（Ｃ1，Ｃ2）＝１に初期化し（ステップＳ４６５）、ｉを１に初期化する（ステップＳ４６７）。
【０２３９】
その後、分析サーバ３１０ｄは、Ｃ1＝Ｃ1×ｃi,φ,1（ｍｏｄ  ｎ2）及びＣ2＝Ｃ2×ｃi,φ,2（ｍｏｄ  ｎ2）を算出する（ステップＳ４６９）。さらに、分析サーバ３１０ｄは、ｉを１インクリメントし（ステップＳ４７１）、ｉがｔを超えたか判断する（ステップＳ４７３）。ｉがｔ以下であれば、処理はステップＳ４６９に戻る。
【０２４０】
ｉがｔを超えた場合には、分析サーバ３１０ｄは、暗号化演算結果Ｃ1及びＣ2を要求元のユーザシステム２００ｄに返信する（ステップＳ４７５）。
【０２４１】
これに対して、ユーザシステム２００ｄの通信部４６２ｄは、クラウド３００ｄから暗号化演算結果Ｃ1及びＣ2を受信し、第６データ格納部４６３ｄに格納する（ステップＳ４４５）。
【０２４２】
その後、復号演算部４６６ｄは、暗号化演算結果Ｃ1から、指定された集計単位ｗに対応する購入額合計値Ｍwを算出する（ステップＳ４４７）。さらに、復号演算部４６６ｄは、暗号化演算結果Ｃ2から、指定された集計単位ｗに対応する合計人数Ｎwを算出する（ステップＳ４４８）。そして、出力部４６７ｄは、第６データ格納部４６３ｄに格納されている購入額合計値Ｍw及び合計人数Ｎw（出現回数又は購入回数とも呼ぶ）を、後処理部２２２に出力する（ステップＳ４４９）。後処理部２２２は、購入額合計値Ｍw／合計人数Ｎwにより平均購入額を算出し、購入額合計値Ｍw及び合計人数Ｎwと共に出力部２２３に出力する（ステップＳ４５１）。そして、出力部２２３は、購入額合計値Ｍw、合計人数Ｎw及び平均購入額を出力装置などに出力する（ステップＳ４５３）。
【０２４３】
以上のような処理を実施することで、所望の集計単位について、秘匿性を保持しつつ、購入額合計値、合計人数及び平均購入額を得ることができるようになる。
【０２４４】
なお、ステップＳ４４７及び４４８についてはほぼ同様の処理であり、図３０で説明されているものと同様であるから説明を省略する。
【０２４５】
以上、本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、処理の対象は購買履歴データに限定されるわけではない。また、上で述べた装置の機能ブロック構成は一例であって、必ずしも実際のプログラムモジュール構成と一致しない場合もある。処理フローについても、処理結果が変わらない限り、ステップの順番を入れ替えたり、ステップを並列実行するようにしても良い。
【０２４６】
なお、上で述べた例では、第３及び第５の実施の形態では購入額と人数とを同一の元のべき数により集計する例は示されていないが、集計単位の数が少なかったり、上限値が小さいようであれば同一の元のべき数で集計するようにしても良い。
【０２４７】
さらに、性別と年齢とに集計単位が設定されている場合でも、例えば性別だけの集計を行う場合には、全ての年齢区分を指定した上で集計結果を合計することで、「男」のみ又は「女」のみの集計結果を得ることも可能である。また、性別及び年齢の組み合わせで集計単位を定義した上で、さらに性別だけで集計単位を設定するようにしても良い。
【０２４８】
なお、上で述べた各種装置は、コンピュータ装置であって、図４１に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０２４９】
以上述べた本実施の形態をまとめると、以下のようになる。
【０２５０】
本実施の形態に係る暗号処理方法は、（Ａ）複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されているデータについて、複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定するステップと、特定された集計単位に応じた準同型暗号処理を、上記データに含まれる複数の属性のうち第１の属性以外の第２の属性の属性値に対して実施し、暗号化された第２の属性の属性値を、データ格納部に格納するステップとを含む。
【０２５１】
このようにすれば、集計単位毎に異なる準同型暗号処理が行われるため、準同型暗号の加算処理においても集計単位毎に集計が行われるようになるため、秘匿性を保持しつつ集計単位毎に集計を実施できるようになる。
【０２５２】
なお、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて公開鍵に含まれる元を選択し、当該元を用いた準同型暗号処理を実施する処理である場合もある。このように元を集計単位毎に変更することで、同一集計単位の値は同一元のべき数に集積されるので、秘匿性を保持しつつ集計単位毎に集計を実施できるようになる。
【０２５３】
また、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じてビットシフト量を特定し、特定されたビットシフト量だけ第２の属性の属性値を左ビットシフトさせた上で準同型暗号処理を実施する処理である場合もある。このようにすれば集計単位毎に、加算処理によって変更されるビットの桁範囲が異なるので、秘匿性を保持しつつ集計単位毎に集計が実施できるようになる。
【０２５４】
なお、素数の法がｎであり、０＜ｓ＜ｎ−１を満たす第１の乱数を秘密鍵ｓとし、第２の属性の属性値がｍであり、法ｎ上の原始元がｇであり、暗号化鍵がｙ＝ｇs （ｍｏｄ  ｎ）であり、選択された元がｇaであるとすると、上で述べた準同型暗号処理が、（ｂ１）０＜ｒ＜ｎ−１を満たす第２の乱数ｒを生成し、（ｂ２）暗号文ｃ＝ｇr（ｍｏｄ  ｎ）を算出し、（ｂ３）暗号文ｄ＝ｙrｇam（ｍｏｄ  ｎ）を算出する処理を含むようにしても良い。このようにElgamalベースの方法を採用するようにしても良い。
【０２５５】
また、特定されたビットシフト量だけ左ビットシフトさせた第２の属性の属性値をｍとし、２つの素数の積がｎであり、元をｇとすると、上で述べた準同型暗号処理が、（ｂ１）０＜ｒ＜ｎ−１を満たす乱数ｒを生成し、（ｂ２）暗号文ｃ＝ｒnｇm（ｍｏｄ  ｎ2）を算出する処理を含むようにしても良い。このようにPaillerベースの方法を採用するようにしても良い。
【０２５６】
なお、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて、当該集計単位について第２の属性の属性値を集計するための第１の元及び当該集計単位の出現回数を計数するための第２の元を選択し、当該第１の元及び第２の元を用いた準同型暗号処理を実施する処理を含む場合もある。このようにすれば、集計単位毎に第２の属性の属性値を集計するだけではなく、集計単位の出現回数を計数できるようになるので、平均値を算出することもできるようになる。
【０２５７】
また、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて第１のビットシフト量を特定し、特定された第１のビットシフト量だけ第２の属性の属性値を左ビットシフトさせることで第１のビット列を生成し、集計単位に応じて当該集計単位の出現回数をカウントするために設定されている第２のビットシフト量を特定し、特定された第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、第１のビット列と第２のビット列とを結合させたビット列に対して準同型暗号処理を実施する処理を含むようにしても良い。このようにすれば、集計単位毎に第２の属性の属性値を集計するだけではなく、集計単位の出現回数を計数することもできるようになる。従って、購入金額の平均値といった計算もできるようになる。
【０２５８】
さらに、上で述べた集計単位に応じた準同型暗号処理が、集計単位に応じて当該集計単位の出現回数をカウントするための第２のビットシフト量を特定し、特定された第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、第２のビット列に対して準同型暗号処理をさらに実施する処理を含むようにしても良い。このように集計単位毎に集計する暗号文と、集計単位の出現回数を表す暗号文とを別に設けるようにしても良い。
【０２５９】
さらに、複数の属性のうち第１の属性及び第２の属性以外の第３の属性の属性値に応じて、第２の属性の属性値に対して用意されるべき複数の暗号文のうち特定の暗号文を選択し、複数の暗号文のうち特定の暗号文以外の暗号文を、０に対する準同型暗号処理を実施することで生成し、複数の暗号文のうち特定の暗号文を、特定された集計単位に応じた準同型暗号処理を第２の属性の属性値に対して実施することで生成するようにしても良い。このようにすれば、第３の属性の属性値と集計単位との組み合わせでも集計処理を実施することが可能となる。
【０２６０】
また、本実施の形態に係る復号処理方法は、（Ａ）平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、（Ｂ）データ格納部に格納されている暗号化演算結果に対して、特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、第２の属性の属性値の集計結果を抽出し、データ格納部に格納するステップとを含む。
【０２６１】
このようにすれば、秘匿化された集計結果である暗号化演算結果から、特定の集計単位についての集計結果を抽出できるようになる。
【０２６２】
例えば、特定の集計単位に応じた、準同型暗号の復号処理が、特定の集計単位に対応する元以外の元のべき乗部分が１になるように、暗号化演算結果に対して演算を実施する処理を含むようにしても良い。集計単位毎に元が用意されている場合には、このように特定の集計単位に対応する元以外の元のべき乗部分が１となるようにすれば、特定の集計単位に対応する元のべき乗部分のみが残るため、べき乗部分に集計結果が含まれる場合には当該集計結果を抽出することができる。
【０２６３】
また、特定の集計単位に応じた、準同型暗号の復号処理が、暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、平文のビット列から、特定の集計単位に対応するビット範囲を抽出する処理を含むようにしても良い。このように集計単位毎に使用するビット範囲を異なるようにすれば、集計単位毎に集計値を１つのビット列内で分けて算出できるようになる。
【０２６４】
さらに、素数の法がｎであり、各集計単位ａに対応する元ｇaについて、ｇapa（ｍｏｄ  ｎ）＝１を満たす素数ｐａが用意されており、暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、秘密鍵がｓであるとすると、特定の集計単位に応じた、準同型暗号の復号処理が、Ｕ＝Ｃs（ｍｏｄ  ｎ）及びＶ＝Ｄ×Ｕ-1（ｍｏｄ  ｎ）を算出し、特定の集計単位以外の各集計単位ｉに対応する素数ｐiについて、Ｚ＝Ｖpi（ｍｏｄ  ｎ）及びＶ＝Ｚ1/pi（ｍｏｄ  ｎ）の演算を特定の集計単位以外の各集計単位ｉについて繰り返し行うようにしても良い。このようにすれば、Elgamalベースの方法において、特定の集計単位に対応する元のべき乗部分を抽出できるようになる。
【０２６５】
さらに、２つの素数の積がｎであり、元がｇであり、暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、秘密鍵がｓであり、Ｌ（ｘ）は（ｘ−１）／ｎという関数であるとすると、特定の集計単位に応じた、準同型暗号の復号処理が、Ｍ＝Ｌ（Ｃs（ｍｏｄ  ｎ2））／Ｌ（ｇs（ｍｏｄ  ｎ2））（ｍｏｄ  ｎ2）を算出し、Ｍから、特定の集計単位に対応するビット範囲を抽出するようにしても良い。このようにすれば、Paillerベースの方法において、集計単位に対応するビット範囲に保持されている集計結果を抽出することができるようになる。
【０２６６】
さらに、特定の集計単位に応じた、準同型暗号の復号処理が、特定の集計単位に対応する、第２の属性の属性値を集計するための元以外の元のべき乗部分が１になるように、暗号化演算結果に対して演算を実施する処理と、特定の集計単位の出現回数を計数するための元以外の元のべき乗部分が１になるように、暗号化演算結果に対して演算を実施する処理とを含むようにしても良い。このようにすれば、集計値と出現回数とが得られるので、集計値の平均値を算出することもできるようになる。
【０２６７】
また、特定の集計単位に応じた、準同型暗号の復号処理が、暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、平文のビット列から、特定の集計単位に対応し且つ第２の属性の属性値の集計のために設定されているビット範囲を抽出する処理と、平文のビット列から、特定の集計単位に対応し且つ特定の集計単位の出現回数を計数するために設定されているビット範囲を抽出する処理とを含むようにしても良い。このように同一ビット列に、集計値及び出現回数が保持されている場合であっても、それらの値を適切に抽出できるようになる。
【０２６８】
また、上で述べた暗号化演算結果が、第２の属性の属性値の集計結果のための第１の暗号化演算結果と、集計単位の出現回数の計数結果のための第２の暗号化演算結果とを含む場合もある。この場合、特定の集計単位に応じた、準同型暗号の復号処理が、第１の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第１のビット列を生成し、平文の第１のビット列から、特定の集計単位に対応するビット範囲を抽出し、第２の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第２のビット列を生成し、平文の第２のビット列から、特定の集計単位に対応するビット範囲を抽出する処理を含むようにしても良い。このように暗号文を分ける場合においても、適切に集計値及び出現回数を抽出できるようになる。
【０２６９】
さらに、第１の属性及び第２の属性以外の第３の属性の属性値に応じて第２の属性の属性値に対する準同型暗号の暗号処理の結果を複数種類の暗号文のうち第１の種類の暗号文に割り当て且つ残余の種類の暗号文については０に対する準同型暗号の暗号処理の結果を割り当てることで得られる上記複数種類の暗号文の種類毎に準同型暗号の加算演算を実施した結果である複数の暗号化演算結果を、上で述べた暗号化演算結果が含む場合もある。この場合には、複数の暗号化演算結果のうち第３の属性の特定の属性値に対応する暗号化演算結果を特定し、特定された暗号化演算結果に対して準同型暗号の復号処理を実施するようにしても良い。例えば、集計単位と第３の属性の属性値との組み合わせで集計を行う場合には、第３の属性の属性値に応じて暗号文を分けることで、計算量を減らすことができるようになる。
【０２７０】
本実施の形態に係る暗号処理装置（図４２）は、複数の属性の各々について属性値を含むデータを格納するデータ格納部（図４２：３３００）に格納されているデータについて、複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定する特定部（図４２：３１００）と、特定された集計単位に応じた準同型暗号処理を、上記データに含まれる複数の属性のうち第１の属性以外の第２の属性の属性値に対して実施し、暗号化された第２の属性の属性値を、データ格納部に格納する処理部（図４２：３２００）とを有する。
【０２７１】
本実施の形態に係る復号処理装置（図４３）は、平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部（図４３：４３００）に格納する受信部（図４３：４１００）と、データ格納部に格納されている暗号化演算結果に対して、特定の集計単位に応じた、準同型暗号の復号化処理を実施し、特定の集計単位についての、第２の属性の属性値の集計結果を抽出し、データ格納部に格納する処理部（図４３：４２００）とを有する。
【０２７２】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。
【０２７３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２７４】
（付記１）
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定するステップと、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第１の属性以外の第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納するステップと、
を含み、コンピュータにより実行される暗号処理方法。
【０２７５】
（付記２）
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて公開鍵に含まれる元を選択し、当該元を用いた準同型暗号処理を実施する処理である
付記１記載の暗号処理方法。
【０２７６】
（付記３）
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じてビットシフト量を特定し、特定された前記ビットシフト量だけ前記第２の属性の属性値を左ビットシフトさせた上で準同型暗号処理を実施する処理である
付記１記載の暗号処理方法。
【０２７７】
（付記４）
素数の法がｎであり、
０＜ｓ＜ｎ−１を満たす第１の乱数を秘密鍵ｓとし、
前記第２の属性の属性値がｍであり、
法ｎ上の原始元がｇであり、
暗号化鍵がｙ＝ｇs （ｍｏｄ  ｎ）であり、
選択された前記元がｇaであるとすると、
前記準同型暗号処理が、
０＜ｒ＜ｎ−１を満たす第２の乱数ｒを生成し、
暗号文ｃ＝ｇr（ｍｏｄ  ｎ）を算出し、
暗号文ｄ＝ｙrｇam（ｍｏｄ  ｎ）を算出する
処理を含む
付記２記載の暗号処理方法。
【０２７８】
（付記５）
特定された前記ビットシフト量だけ左ビットシフトさせた前記第２の属性の属性値をｍとし、
２つの素数の積がｎであり、
元をｇとすると、
前記準同型暗号処理が、
０＜ｒ＜ｎ−１を満たす乱数ｒを生成し、
暗号文ｃ＝ｒnｇm（ｍｏｄ  ｎ2）を算出する
処理を含む
付記３記載の暗号処理方法。
【０２７９】
（付記６）
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて、当該集計単位について前記第２の属性の属性値を集計するための第１の元及び当該集計単位の出現回数を計数するための第２の元を選択し、当該第１の元及び第２の元を用いた準同型暗号処理を実施する処理を含む
付記１記載の暗号処理方法。
【０２８０】
（付記７）
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて第１のビットシフト量を特定し、特定された前記第１のビットシフト量だけ前記第２の属性の属性値を左ビットシフトさせることで第１のビット列を生成し、
前記集計単位に応じて当該集計単位の出現回数をカウントするために設定されている第２のビットシフト量を特定し、特定された前記第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、
前記第１のビット列と前記第２のビット列とを結合させたビット列に対して準同型暗号処理を実施する処理を含む
付記１記載の暗号処理方法。
【０２８１】
（付記８）
前記集計単位に応じた準同型暗号処理が、
前記集計単位に応じて当該集計単位の出現回数をカウントするための第２のビットシフト量を特定し、特定された前記第２のビットシフト量だけ１を左ビットシフトさせることで第２のビット列を生成し、前記第２のビット列に対して準同型暗号処理をさらに実施する処理を含む
付記３記載の暗号処理方法。
【０２８２】
（付記９）
前記複数の属性のうち前記第１の属性及び前記第２の属性以外の第３の属性の属性値に応じて、前記第２の属性の属性値に対して用意されるべき複数の暗号文のうち特定の暗号文を選択し、
前記複数の暗号文のうち前記特定の暗号文以外の暗号文を、０に対する前記準同型暗号処理を実施することで生成し、
前記複数の暗号文のうち前記特定の暗号文を、特定された前記集計単位に応じた準同型暗号処理を前記第２の属性の属性値に対して実施することで生成する
付記１記載の暗号処理方法。
【０２８３】
（付記１０）
平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を含み、コンピュータにより実行される復号処理方法。
【０２８４】
（付記１１）
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理
を含む付記１０記載の復号処理方法。
【０２８５】
（付記１２）
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応するビット範囲を抽出する処理
を含む付記１０記載の復号処理方法。
【０２８６】
（付記１３）
素数の法がｎであり、
各前記集計単位ａに対応する元ｇaについて、ｇapa（ｍｏｄ  ｎ）＝１を満たす素数ｐａが用意されており、
前記暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、
秘密鍵がｓであるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
Ｕ＝Ｃs（ｍｏｄ  ｎ）及びＶ＝Ｄ×Ｕ-1（ｍｏｄ  ｎ）を算出し、
前記特定の集計単位以外の各集計単位ｉに対応する素数ｐiについて、Ｚ＝Ｖpi（ｍｏｄ  ｎ）及びＶ＝Ｚ1/pi（ｍｏｄ  ｎ）の演算を前記特定の集計単位以外の各集計単位ｉについて繰り返し行う
処理を含む付記１０記載の復号処理方法。
【０２８７】
（付記１４）
２つの素数の積がｎであり、
元がｇであり、
前記暗号化演算結果が、第１の暗号化演算結果Ｃ及び第２の暗号化演算結果Ｄを含み、
秘密鍵がｓであり、
Ｌ（ｘ）は（ｘ−１）／ｎという関数であるとすると、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
Ｍ＝Ｌ（Ｃs（ｍｏｄ  ｎ2））／Ｌ（ｇs（ｍｏｄ  ｎ2））（ｍｏｄ  ｎ2）を算出し、
前記Ｍから、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む付記１０記載の復号処理方法。
【０２８８】
（付記１５）
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記特定の集計単位に対応する、前記第２の属性の属性値を集計するための元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理と、
前記特定の集計単位の出現回数を計数するための元以外の元のべき乗部分が１になるように、前記暗号化演算結果に対して演算を実施する処理と、
を含む付記１０記載の復号処理方法。
【０２８９】
（付記１６）
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文のビット列を生成し、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記第２の属性の属性値の集計のために設定されているビット範囲を抽出する処理と、
前記平文のビット列から、前記特定の集計単位に対応し且つ前記特定の集計単位の出現回数を計数するために設定されているビット範囲を抽出する処理と、
を含む付記１０記載の復号処理方法。
【０２９０】
（付記１７）
前記暗号化演算結果が、前記第２の属性の属性値の集計結果のための第１の暗号化演算結果と、前記集計単位の出現回数の計数結果のための第２の暗号化演算結果とを含み、
前記特定の集計単位に応じた、前記準同型暗号の復号処理が、
前記第１の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第１のビット列を生成し、
前記平文の第１のビット列から、前記特定の集計単位に対応するビット範囲を抽出し、
前記第２の暗号化演算結果に対して秘密鍵を用いて復号演算を実施することで平文の第２のビット列を生成し、
前記平文の第２のビット列から、前記特定の集計単位に対応するビット範囲を抽出する
処理を含む付記１０記載の復号処理方法。
【０２９１】
（付記１８）
前記第１の属性及び前記第２の属性以外の第３の属性の属性値に応じて前記第２の属性の属性値に対する前記準同型暗号の暗号処理の結果を複数種類の暗号文のうち第１の種類の暗号文に割り当て且つ残余の種類の暗号文については０に対する前記準同型暗号の暗号処理の結果を割り当てることで得られる前記複数種類の暗号文の種類毎に前記準同型暗号の加算演算を実施した結果である複数の暗号化演算結果を、前記暗号化演算結果が含み、
前記複数の暗号化演算結果のうち前記第３の属性の特定の属性値に対応する暗号化演算結果を特定し、
特定された前記暗号化演算結果に対して前記準同型暗号の復号処理を実施する
付記１０記載の復号処理方法。
【０２９２】
（付記１９）
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定するステップと、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第１の属性以外の第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納するステップと、
を、コンピュータに実行させるための暗号処理プログラム。
【０２９３】
（付記２０）
平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納するステップと、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納するステップと、
を、コンピュータに実行させるための復号処理プログラム。
【０２９４】
（付記２１）
複数の属性の各々について属性値を含むデータを格納するデータ格納部に格納されている前記データについて、前記複数の属性のうち集計単位が予め設定されている第１の属性の属性値に応じて、集計単位を特定する特定部と、
特定された前記集計単位に応じた準同型暗号処理を、前記データに含まれる前記複数の属性のうち前記第１の属性以外の第２の属性の属性値に対して実施し、暗号化された前記第２の属性の属性値を、前記データ格納部に格納する処理部と、
を有する暗号処理装置。
【０２９５】
（付記２２）
平文データに含まれる第１の属性の属性値によって特定される集計単位に応じて異なる準同型暗号の暗号化処理を第２の属性の属性値に対して実施することで得られる暗号文について前記準同型暗号の加算演算を実施した結果である暗号化演算結果を受信し、データ格納部に格納する受信部と、
前記データ格納部に格納されている前記暗号化演算結果に対して、特定の集計単位に応じた、前記準同型暗号の復号化処理を実施し、前記特定の集計単位についての、前記第２の属性の属性値の集計結果を抽出し、前記データ格納部に格納する処理部と、
を有する復号処理装置。
【符号の説明】
【０２９６】
１０１  データ入力部
１０２  送信部
１０３  データ格納部
１０４  公開鍵格納部
１０５  元選択部
１０６  暗号文生成部
１０７  乱数生成部
１２１  入力部
１２２  通信部
１２３  データ格納部
１２４  鍵格納部
１２５  素数選択部
１２６  復号演算部
１２７  ＢＳＧＳ処理部
【図１】
0005790471.tif 000008
【図２】
0005790471.tif 000009
【図３】
0005790471.tif 000010
【図４】
0005790471.tif 000011
【図５】
0005790471.tif 000012
【図６】
0005790471.tif 000013
【図７】
0005790471.tif 000014
【図８】
0005790471.tif 000015
【図９】
0005790471.tif 000016
【図１０】
0005790471.tif 000017
【図１１】
0005790471.tif 000018
【図１２】
0005790471.tif 000019
【図１３】
0005790471.tif 000020
【図１４】
0005790471.tif 000021
【図１５】
0005790471.tif 000022
【図１６】
0005790471.tif 000023
【図１７】
0005790471.tif 000024
【図１８】
0005790471.tif 000025
【図１９】
0005790471.tif 000026
【図２０】
0005790471.tif 000027
【図２１】
0005790471.tif 000028
【図２２】
0005790471.tif 000029
【図２３】
0005790471.tif 000030
【図２４】
0005790471.tif 000031
【図２５】
0005790471.tif 000032
【図２６Ａ】
0005790471.tif 000033
【図２６Ｂ】
0005790471.tif 000034
【図２７】
0005790471.tif 000035
【図２８】
0005790471.tif 000036
【図２９】
0005790471.tif 000037
【図３０】
0005790471.tif 000038
【図３１】
0005790471.tif 000039
【図３２】
0005790471.tif 000040
【図３３】
0005790471.tif 000041
【図３４】
0005790471.tif 000042
【図３５】
0005790471.tif 000043
【図３６】
0005790471.tif 000044
【図３７】
0005790471.tif 000045
【図３８】
0005790471.tif 000046
【図３９】
0005790471.tif 000047
【図４０】
0005790471.tif 000048
【図４１】
0005790471.tif 000049
【図４２】
0005790471.tif 000050
【図４３】
0005790471.tif 000051