(57)【特許請求の範囲】
【請求項１】
第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成ステップと、
前記記憶装置に格納されている前記第１のマスクと前記第２のマスクとを、前記第１のデータに対して重ねて適用するマスク処理を実施し、前記第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスクステップと、
を含み、コンピュータに実行される情報処理方法。
【請求項２】
前記第２のデータ長は、前記権限レベルが高いほど短くなる
請求項１記載の情報処理方法。
【請求項３】
前記マスク処理が、前記第１のデータに対する前記第１のマスク及び前記第２のマスクの加算、減算、乗算、除算又は排他的論理和である
請求項１又は２記載の情報処理方法。
【請求項４】
前記マスク生成ステップが、
前記第１のデータ長以上の乱数を発生させることで前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記第２のデータ長の乱数を発生させることで前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含む請求項１乃至３のいずれか１つ記載の情報処理方法。
【請求項５】
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップを、前記レコード毎に実施する
請求項１乃至４のいずれか１つ記載の情報処理方法。
【請求項６】
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップを、所定数のレコード毎に実施する
請求項１乃至４のいずれか１つ記載の情報処理方法。
【請求項７】
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップが、
鍵データ格納部に格納されている、前記第１のマスクのための第１の鍵と前記レコードの識別子とに対して所定の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記鍵データ格納部に格納されている、前記第２のマスクのための第２の鍵と前記レコードの識別子とに対して前記所定の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含む請求項１乃至４のいずれか１つ記載の情報処理方法。
【請求項８】
前記マスク生成ステップが、
前記第１のデータ格納部に格納されている前記第１のデータを前記権限レベル毎の開示範囲に応じて決められるデータ長で分割して複数のデータ部分を生成し、前記記憶装置に格納するステップと、
前記複数のデータ部分のうち最上位のデータ部分と、鍵データ格納部に格納されている、前記最上位のデータ部分のための第１の鍵とに対して第１の一方向関数を適用して、第１の一方向関数値を生成し、前記記憶装置に格納するステップと、
前記複数のデータ部分のうち第２位以降の各データ部分と、前記鍵データ格納部に格納されており且つ当該データ部分のための第２の鍵とに対して前記第１の一方向関数を適用して、第２の一方向関数値を生成し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記第１の一方向関数値と前記第１の鍵とに対して第２の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記第２の一方向関数値と当該第２の一方向関数値を生成する際に用いられた対応する第２の鍵とに対して前記第２の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含み、
前記マスクステップが、
前記第２のデータ格納部に格納されている前記第２のデータに前記第１の一方向関数値と前記第２の一方向関数値とを連結したデータを生成し、第３のデータ格納部に格納するステップ
を含む請求項１記載の情報処理方法。
【請求項９】
ある権限レベルが指定されると、当該ある権限レベルに対応付けられている、前記第１のデータ内における１又は複数のデータ部分についての前記第２の一方向関数値で前記第１のデータを含むレコードに対して分類処理を実施し、分類結果を出力するステップ
をさらに含む請求項８記載の情報処理方法。
【請求項１０】
マスクデータを取得し、記憶装置に格納するマスク取得ステップと、
第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、前記記憶装置に格納されている前記マスクデータに含まれる、前記マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理ステップと、
を含み、コンピュータに実行される情報処理方法。
【請求項１１】
前記マスク化データがデータベースにおけるレコードの少なくとも一部のデータであり、
鍵データを取得し、鍵データ格納部に格納するステップ
をさらに含み、
前記マスク取得ステップが、
前記鍵データ格納部に格納されている前記鍵データに含まれる、前記第１のマスクのための第１の鍵と前記レコードの識別子とに対して所定の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記鍵データ格納部に格納されている前記鍵データに前記第２のマスクのための第２の鍵が含まれている場合には、当該第２の鍵と前記レコードの識別子とに対して前記所定の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含み、
前記逆マスク処理ステップを、前記レコード毎に当該レコードのマスクを用いて実施する
請求項１０記載の情報処理方法。
【請求項１２】
前記マスク処理が、前記第１のデータに対する前記第１のマスク及び前記第２のマスクの加算であり、
前記逆マスク処理が、前記マスク化データから、前記マスクデータに含まれる当該マスク化データのための全てのマスクを減算する処理であり、
前記逆マスク化データがデータベースにおけるレコードに含まれる数値データであり、
前記レコードに含まれる他のデータに基づき前記レコードを分類し、前記逆マスク化データで表される数値を加算し、加算結果から前記最もデータ長が短いマスクの平均値から算出される誤差を引くことによって集計結果を算出するステップ
をさらに含む請求項１０記載の情報処理方法。
【請求項１３】
第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成部と、
前記記憶装置に格納されている前記第１のマスクと前記第２のマスクとを、前記第１のデータに対して重ねて適用するマスク処理を実施し、前記第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスク処理部と、
を有する情報処理装置。
【請求項１４】
マスクデータを取得し、記憶装置に格納するデータ取得部と、
第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、前記記憶装置に格納されている前記マスクデータに含まれる、前記マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、データベースにおけるデータの秘匿化技術に関する。
【背景技術】
【０００２】
データマイニング技術とは、データベースに格納された大量のデータに含まれるデータ間の相関関係を、コンピュータを用いて発見する技術である。この技術によれば、人間では処理不可能な大量のデータに対しても、データ間の相関関係を発見することができる。データマイニング技術の利用方法の代表例が、消費者が購入する商品の組み合わせの発見であり、データマイニング技術を用いることで、例えば紙おむつを購入する消費者は、一緒にビールを購入する頻度が高いといった相関関係を発見することができ、相関関係の高いこれらの商品を互いに近くに陳列することで、売上高を伸ばすことができる。
【０００３】
従来、データマイニングを行う場合には、自社のコンピュータを用いてデータ収集及び分析を行っていた。しかし、今後クラウドコンピューティングの普及に伴い、データ収集及び分析を外部のクラウドコンピューティング環境で実施することで、システムの維持コストを低く抑えつつ分析効果を高める手法が用いられると予想される。データ収集及び分析を外部のクラウドコンピューティング環境に任せることでコストが低くなる反面、プライバシが低下するという問題が知られている。すなわち、従来ではデータマイニングを自社の閉じた計算機環境で実施しており、機密情報の漏洩が発生しにくかったのに対し、クラウドコンピューティングを利用してデータマイニングを実施する場合には、オープンな計算機環境を複数のユーザが共用するため、機密情報の漏洩リスクが高まると予想されている。
【０００４】
クラウドコンピューティングのようなオープンな環境下でも、安全な分析を実現するための従来技術としては、プライバシ保護データマイニング（Privacy Preserving Data Mining。以下ＰＰＤＭと呼ぶ）が知られている（[非特許文献１を参照のこと）。
【０００５】
ＰＰＤＭにはいくつかの実現方式が知られているが、乱数加算法と呼ばれる方法が代表的である。
【０００６】
乱数加算法では、データ分析に用いられるデータベースのテーブルに対して、オリジナル値をそのままデータベースに保持するのではなく、オリジナル値に対し乱数を加算したデータをデータベースに保持する。図１の例では、氏名、住所及び年齢のカラムにおける各値に乱数を加算した上でデータベースに保持する。このように乱数を用いてデータをマスクすることで、データベース上の個々のレコードから機密情報の漏洩を防止することができる。
【０００７】
なお、マスクされる前のデータ値を「オリジナル値」と呼び、マスクに用いられるデータ値を「マスク値」と呼び、マスク値によってマスクされた値を「マスク化値」と呼ぶことにする。
【０００８】
このような乱数加算法の特徴は、以下のようなものである。すなわち、乱数加算法によって生成されたマスク化値から、オリジナル値を用いたデータマイニング処理を行うためには、「再構築」と呼ばれる、オリジナル値の情報を復元する処理が行われる。乱数加算法における再構築は、反復ベイズ法を用いることで、マスク化値の統計分布からオリジナル値の統計分布を復元することで行われる。図２（ａ）に模式的に示すように、乱数を加算することで、出現頻度の分布が広がってしまっているかもしれないが、反復ベイズ法によって、比較的特定の値に集中して出現するようなオリジナル値の出現頻度の分布を復元する。
【０００９】
乱数加算法では、再構築にマスク値を用いないため、オリジナル値の統計情報を復元することはできるが、オリジナル値そのものを復元することはできない。さらに、乱数加算法では、マスク値の値域がオリジナル値の値域より小さい、という制約が存在する。この制約は、オリジナル値の統計情報を再構築するためのものであり、マスク値の値域はオリジナル値の値域より狭い範囲が設定される。例えば、「年齢」という属性に対して、マスク値として＋１０乃至−１０の範囲の乱数を加算する場合、このマスク値の値域がオリジナル値の値域（例えば０乃至１２０）と比較して狭いため、オリジナル値の統計分布を再構築できる。しかし、＋１０００乃至−１０００といった範囲の乱数を加算する場合、マスク値の値域がオリジナル値の値域より大きいため、オリジナル値の統計分布の再構築は困難となる。すなわち、「年齢」という属性に対するマスク値は、前者の「＋１０乃至−１０」の方が適切である。
【００１０】
乱数加算法は、オリジナル値を秘匿化する優れた方法であるが、同時に以下のような欠点も有する。
（１）分析結果に対するプライバシ保護を実現できない。
乱数加算法を用いることで、分析対象のオリジナルデータを秘匿化し、プライバシを実現することができる。ただし、分析対象のデータに対するプライバシを実現できても、分析結果に対するプライバシを実現することはできない。この結果、クラウド環境のデータが漏洩した場合、データ値を保護することはできても、データ値から得られる知見を保護することができないという欠点を有する。
【００１１】
例えば、クラウド上のデータベース（ＤＢ）に、乱数加算法でマスクされたデータ（Ａ社及びＢ社のデータ）が格納されているものとする。このクラウド上のＤＢから、Ａ社又はＢ社のデータが悪意のある攻撃者に漏れた場合、データ値そのものはマスク化されているため知られることがない。しかし、このようなデータを分析した結果の知見を得ることは、攻撃者にも可能である。すなわち、乱数加算法における再構築は、鍵に相当するデータがないため、公知の各種分析アルゴリズムを用いた分析処理を攻撃者自身が実施することで、漏洩データから分析結果を得ることが可能である。
【００１２】
例えば、このような漏洩データを分析することで、Ａ社、Ｂ社で取り扱っている商品のうち、売れ行きの高い商品同士の相関関係を知ることができる。このような分析結果データは、クラウドを利用する企業にとってのビジネス上の重要なノウハウであるため、分析対象のデータのみならず、分析結果の秘匿も考慮すべき事項である。
【００１３】
（２）オリジナル値を再現することができない
乱数加算法では、オリジナル値の統計情報を再構築することはできるが、オリジナル値そのものを再現することはできない。よって、データマイニング以外の目的で、ＤＢ上の個別のデータ値の正確なオリジナル値を参照したい場合でも、乱数加算法を用いてマスクされていればオリジナル値を再現することはできない。
【００１４】
（３）多様なユーザに応じたプライバシを実現することができない。
クラウドコンピューティングにおいては、多様なユーザが同一の計算機環境を共有するが、それぞれのユーザに応じた役割とプライバシ制御が求められる。すなわち、重要な役割を持つユーザには、高いレベルのプライバシ情報へのアクセスを許すが、一般的な役割を有するユーザに対しては、低いレベルのプライバシ情報のみへのアクセスを許すシステムが必要となる。
【００１５】
感染症の情報をクラウド上で管理する事例を用いて、ユーザ権限に応じたプライバシ情報管理を行う場合の問題について説明する。
【００１６】
感染症情報の管理システムは、感染症の発生地域分布の状況を管理するデータベースを含む。このシステムには、以下に示すユーザが参加し、それぞれ下記に示す役割を果たすことが想定される。すなわち、研究者及び地域保健所は、感染症の拡大防止が役割となる。また、医者は、感染の予防・治療が役割となる。さらに、一般人は、感染症への自己防衛のために最小限の情報を入手する。
【００１７】
研究者及び地域保健所は、感染症の拡大防止が役割となる。感染症拡大防止のためには、感染症発生状況の非常に詳細な情報が用いられる。この役割を果たすためには、図３に示すように、番地レベルの詳細な住所単位の感染者数を把握して対策を行うことになる。すなわち、最もレベルが高いプライバシ情報へのアクセスが許される。
【００１８】
また、医者は、感染症の予防と治療が役割となる。予防と治療に限定するならば、番地レベルの詳細な住所単位の感染者数の情報を用いることはないが、予防情報の管理のために、図３に示すように、区町単位で感染者数の情報を用いることがある。すなわち、中レベルのプライバシ情報へのアクセスが許される。
【００１９】
一方、一般人は、自己防衛のために最低限の情報が入手可能ならば良いため、図３に示すように、市レベルの感染者数のアクセスが許される。すなわち、低レベルのプライバシ情報へのアクセスが許される。
【００２０】
このようなシステムにおいては、ユーザの役割に応じて、アクセス可能なプライバシ情報のレベルが異なる。このように、ユーザの役割に応じたプライバシ情報の管理を、同一のデータベースを利用しつつ実現するシステムがクラウドコンピューティング環境では望まれる。しかし、乱数加算法ではこのようなユーザ権限に応じた柔軟なプライバシ情報の管理を実現することはできない。
【００２１】
一方、３番目の問題に対する解決策として、出力フィルタリングと呼ばれる方法が知られている。これは、分析を要求するユーザの権限に応じて、プライバシ情報のレベルを制御する方法である。例えば、感染症を管理するシステムの場合、データ分析を要求するユーザが研究者又は地域保健所の場合、番地レベルの詳細な住所単位の分析情報をそのまま出力する。ユーザが医者である場合、通常の分析を行い、番地レベルの詳細な住所単位の分析結果を分析サーバ内部で得た後に、分析結果の情報フィルタリングを行い、区町単位の情報に変換した後に分析結果を出力する。ユーザが一般人である場合、通常の分析を行い、番地レベルの詳細な住所単位の分析結果を分析サーバ内部で得た後に、分析結果の情報フィルタリングを行い、市レベルの情報に変換した後に分析結果を出力する。このような方法を用いれば、ユーザの権限に応じた柔軟なプライバシ情報の出力制御を行うことができる。しかし、これだけでは、他の問題を解決できるわけではない。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】米国特許第６６８７６９１号
【非特許文献】
【００２３】
【非特許文献１】Agrawal R. and Srikant R. “Privacy-Preserving Data Mining” Proceedings of the ACM SIGMOD Conference, 2000
【発明の概要】
【発明が解決しようとする課題】
【００２４】
従って、本技術の目的は、一側面として、オープンな環境においてデータベース内のデータを利用に適した形で適切に秘匿するための技術を提供することである。
【課題を解決するための手段】
【００２５】
第１の態様に係る情報処理方法は、（Ａ）第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための第１のデータ長以上の長さを有する第１のマスクと、第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成ステップと、（Ｂ）記憶装置に格納されている第１のマスクと第２のマスクとを、第１のデータに対して重ねて適用するマスク処理を実施し、第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスクステップとを含む。
【００２６】
第２の態様に係る情報処理方法は、（Ａ）マスクデータを取得し、記憶装置に格納するマスク取得ステップと、（Ｂ）第１のデータ長を有する第１のデータをマスクするための第１のデータ長以上の長さを有する第１のマスクと、第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、記憶装置に格納されているマスクデータに含まれる、マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理ステップとを含む。
【発明の効果】
【００２７】
オープンな環境においてデータベース内のデータを利用に適した形で適切に秘匿できるようになる。
【図面の簡単な説明】
【００２８】
【図１】図１は、従来の乱数加算法を説明するための図である。
【図２】図２（ａ）及び（ｂ）は、従来の乱数加算法を説明するための図である。
【図３】図３は、従来技術の問題を説明するための図である。
【図４】図４は、第１の実施の形態におけるマスク処理について説明するための図である。
【図５】図５は、第１の実施の形態におけるアンマスク化処理について説明するための図である。
【図６】図６は、システム全体の概要図である。
【図７Ａ】図７Ａは、ユーザ端末の機能ブロック図である。
【図７Ｂ】図７Ｂは、管理者装置の機能ブロック図である。
【図８】図８は、処理サーバの機能ブロック図である。
【図９】図９は、前処理の処理フローを示す図である。
【図１０】図１０は、マスク化処理の処理フローを示す図である。
【図１１】図１１は、マスク値生成処理の処理フローの第１の例を示す図である。
【図１２】図１２は、マスク値生成処理の処理フローの第２の例を示す図である。
【図１３】図１３は、マスク値生成処理の処理フローの第３の例を示す図である。
【図１４】図１４は、マスク値適用処理の処理フローを示す図である。
【図１５】図１５は、マスク値適用処理の演算を模式的に示す図である。
【図１６】図１６は、データベース利用時の処理フローを示す図である。
【図１７】図１７は、アンマスク処理の処理フローを示す図である。
【図１８】図１８は、集計処理の処理フローを示す図である。
【図１９】図１９は、ユーザ権限を説明するための図である。
【図２０】図２０は、データベースに格納されるデータの一例を示す図である。
【図２１】図２１（ａ）乃至（ｃ）は、第２の実施の形態の事例を説明するための図である。
【図２２】図２２は、第３の実施の形態におけるデータベースの一例を示す図である。
【図２３】図２３（ａ）乃至（ｃ）は、第３の実施の形態の事例を説明するための図である。
【図２４】図２４は、第３の実施の形態に係る集計処理の処理フローを示す図である。
【図２５】図２５は、第４の実施の形態に係るマスク値生成処理の処理フローの第１の例を示す図である。
【図２６】図２６は、第４の実施の形態に係るマスク値生成処理の処理フローの第２の例を示す図である。
【図２７】図２７は、第４の実施の形態に係るアンマスク処理の処理フローを示す図である。
【図２８】図２８は、第４の実施の形態に係るデータベースに格納されているデータの一例を示す図である。
【図２９】図２９（ａ）乃至（ｃ）は、第４の実施の形態の事例を説明するための図である。
【図３０】図３０（ａ）乃至（ｃ）は、第５の実施の形態の事例を説明するための図である。
【図３１】図３１は、第５の実施の形態に係るマスク値生成処理の処理フローを示す図である。
【図３２】図３２は、第５の実施の形態に係るマスク値適用処理の処理フローを示す図である。
【図３３】図３３は、アンマスク処理の処理フローを示す図である。
【図３４】図３４は、第６の実施の形態を説明するための図である。
【図３５】図３５は、第６の実施の形態を説明するための図である。
【図３６】図３６は、第６の実施の形態を説明するための図である。
【図３７】図３７は、第６の実施の形態を説明するための図である。
【図３８】図３８は、第６の実施の形態を説明するための図である。
【図３９】図３９は、第６の実施の形態を説明するための図である。
【図４０】図４０は、第６の実施の形態を説明するための図である。
【図４１】図４１は、マスク化処理の処理フローを示す図である。
【図４２】図４２は、第６の実施の形態の処理フローを示す図である。
【図４３】図４３は、アンマスク処理の処理フローを示す図である。
【図４４】図４４は、アンマスク処理の処理フローを示す図である。
【図４５】図４５は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００２９】
［実施の形態１］
本実施の形態におけるマスク処理について図４を用いて説明する。本実施の形態においては、オリジナル値をマスクするマスク値ｒallと、設定すべきユーザ権限がｋ＋１段階である場合にはｋ個のマスク値ｒ1、ｒ2、...ｒkとを用意する。また、ユーザ権限は、１段階目が最も権限が低く、段階が増えるほど高い権限を有し、ｋ＋１段階目が最も権限が高いものとする。さらに、ユーザ権限が高くなるほど、マスク値のビット長が短くなる。すなわち、オリジナル値よりもビット長は短いがｒ1のビット長が最も長く、ｒ2のビット長が次に長く、ｒkのビット長が最も短くなっている。また、ｒallについてはオリジナル値のビット長以上の長さを有する。このマスク値のビット長は、例えば乱数の取り得る値の個数にも相当し、本実施の形態ではエントロピーとも呼ぶことにする。例えば、０から９の範囲をとる乱数は１０のエントロピーを有し、７から９の範囲をとる乱数は３のエントロピーを有し、−５から＋５の範囲をとる乱数は１１のエントロピーを有するということにする。
【００３０】
各ユーザには、そのユーザのユーザ権限に応じたマスク値が配布される。すなわち、第１段階目のユーザ権限を有するユーザにはマスク値ｒallが配布される。ｒ1乃至ｒkについては配布されない。次に、第２段階目のユーザ権限を有するユーザには、マスク値ｒall及びｒ1が配布される。第３段階目のユーザ権限を有するユーザには、マスク値ｒall並びにｒ1及びｒ2が配布される。第Ｌ段階目のユーザ権限を有するユーザには、マスク値ｒall並びにｒ1乃至ｒL-1が配布される。第ｋ＋１段階目のユーザ権限を有するユーザには、マスク値ｒall並びにｒ1乃至ｒkが配布される。
【００３１】
図４の例ではｋ＝４であり、マスク値ｒ1、ｒ2及びｒ3と、マスク値ｒallが用意される。そして、３２ビットのオリジナル値Ｄａｔａに対して、マスク化第１段階として例えば４ビットのマスク値ｒ3を加算する。そうすると、Ｄａｔａ＋ｒ3が生成される。次に、Ｄａｔａ＋ｒ3に対して、マスク化第２段階として例えば８ビットのマスク値ｒ2を加算する。そうすると、Ｄａｔａ＋ｒ2＋ｒ3が生成される。さらに、Ｄａｔａ＋ｒ2＋ｒ3に対して、マスク化第３段階として例えば１６ビットのマスク値ｒ1を加算する。そうすると、Ｄａｔａ＋ｒ1＋ｒ2＋ｒ3が生成される。そして、Ｄａｔａ＋ｒ1＋ｒ2＋ｒ3に対して、最終マスク化段階として例えば３２ビットのマスク値ｒallを加算する。そうすると、Ｄａｔａ＋ｒ1＋ｒ2＋ｒ3＋ｒallが生成される。この最終的な値がマスク化値としてクラウドのデータベースに登録される。
【００３２】
このように、エントロピーを段階的に増加させたマスク値をオリジナル値に加算することで、ユーザ権限に応じてアクセス可能なデータが段階的なエントロピーを有するシステムを実現する。すなわち、高いユーザ権限を有するユーザほど低いエントロピーのデータ値、すなわちオリジナル値に近いデータ値を知ることができるため、ユーザ権限に応じたプライバシを実現できる。最も高い権限を有するユーザは、全てのマスク値を有するので、オリジナル値そのものを得ることができる。一方、低いユーザ権限を有するユーザは、高いエントロピーのデータ値、すなわちオリジナル値の一部のみしか知ることができない。
【００３３】
また、最終マスク化処理においては、例えば「年齢」を表現するオリジナル値に対してマスク化を行う場合、オリジナル値は一般的には０から１２０、すなわち７ビットあれば十分であるため、２7以上のエントロピーを有するマスク値を加算する。一般的に、ｂビットのデータ値に対して、２b以上のエントロピーを有するマスク値を加算することで最終マスク化処理を実施すれば、オリジナル値を特定することは困難になる。
【００３４】
よって、データベースからマスク化値が漏洩したとしても、オリジナル値に対してアクセス権を持たない不正なユーザは、オリジナル値に関する特徴の分析を行うことができない。すなわち、分析結果さえも秘匿される。
【００３５】
また、オリジナル値を表現するデータのビット長ｂを知らなくとも最終マスク化処理は実施可能である。例えば、計算機上でデータ値を表現するには「ワード」と呼ばれる単位でデータが取り扱われ、例えば８ビット、１６ビット又は３２ビット等を１つの単位としてデータが表現される。よって、ワードのビット長ｗに対し、２wのエントロピーを有する２wビットのマスク値であれば、２w以上のエントロピーを有する。例えば、８ビットワードが用いられている場合、２8のエントロピーを有する８ビットマスク値が用いられ、１６ビットワードが用いられている場合、２16のエントロピーを有する１６ビットのマスク値が用いられ、３２ビットワードが用いられている場合２32のエントロピーを有する３２ビットマスク値が用いられる。この場合、マスク化された結果のランダム値は真性乱数と同等のエントロピーを有するため、マスク値なしではオリジナル値を再現することは不可能となる。
【００３６】
このように、オリジナル値に対してアクセス権を有するユーザに限定してマスク値ｒallを配布する。このマスク値ｒallなしではオリジナル値を再現することも、オリジナル値に関する特徴を抽出して分析を実施することも困難となる。すなわち、オリジナル値に対してアクセス権を有しない不正なユーザは、ランダム化されたデータベースの値を得ることに成功したとしても、その値は真性乱数と同じエントロピーを有するため、オリジナル値を得ることができず、またオリジナル値に関する特徴の分析を行うこともできない。
【００３７】
次に、図５を用いてマスク化値からオリジナル値を復元する際のアンマスク処理について説明する。なお、図５は、図４とは異なり、ユーザ権限は３段階しか規定していない場合を示している。具体的には、マスク化値は、Ｄａｔａ＋ｒall＋ｒ1＋ｒ2となっている。上でも述べたように、最もユーザ権限の低い一般ユーザは、マスク値ｒallのみが配布されており、２番目のユーザ権限を有する高権限ユーザには、マスク値ｒall及びｒ1が配布されており、最も高いユーザ権限を有する最高権限ユーザには、マスク値ｒall並びにｒ1及びｒ2が配布されている。本実施の形態では、例えば、ｒallは３２ビットであり、ｒ1は１６ビットであり、ｒ2は８ビットであるものとする。
【００３８】
このような場合、一般ユーザに対しては、当該一般ユーザが有するマスク値ｒallを用いてマスク化値「Ｄａｔａ＋ｒall＋ｒ1＋ｒ2」に対してアンマスク処理（逆マスク処理、マスク解除処理とも呼ぶ）を実施すれば、Ｄａｔａ＋ｒ1＋ｒ2が得られる。このようなデータを一般ユーザに出力することで、一般ユーザは例えば上位１６ビットを把握することができる。すなわち、アンマスク処理の結果のエントロピーは２16である。
【００３９】
また、２番目のユーザ権限を有する高権限ユーザに対しては、当該高権限ユーザが有するマスク値ｒall及びｒ1を用いてマスク解除処理を実施する。具体的には、Ｄａｔａ＋ｒall＋ｒ1＋ｒ2から、ｒallを減算するマスク解除処理を実施し、Ｄａｔａ＋ｒ1＋ｒ2を得る。さらに、Ｄａｔａ＋ｒ1＋ｒ2から、ｒ1を減算するマスク解除処理を実施し、Ｄａｔａ＋ｒ2を得る。Ｄａｔａ＋ｒ2を高権限ユーザに出力することで、高権限ユーザは例えば上位２４ビットを把握することができる。すなわち、マスク解除処理の結果のエントロピーは、２8である。
【００４０】
さらに、最高ユーザ権限を有する最高権限ユーザに対しては、当該最高権限ユーザが有するマスク値ｒall並びにｒ1及びｒ2を用いてマスク解除処理を実施する。具体的には、Ｄａｔａ＋ｒall＋ｒ1＋ｒ2から、ｒallを減算するマスク解除処理を実施し、Ｄａｔａ＋ｒ1＋ｒ2を得る。さらに、Ｄａｔａ＋ｒ1＋ｒ2から、ｒ1を減算するマスク解除処理を実施し、Ｄａｔａ＋ｒ2を得る。また、Ｄａｔａ＋ｒ2から、ｒ2を減算するマスク解除処理を実施し、オリジナル値Ｄａｔａを得る。オリジナル値Ｄａｔａを最高権限ユーザに出力することで、最高権限ユーザは例えば３２ビットのオリジナル値そのものを把握することができるようになる。すなわち、マスク解除処理の結果のエントロピーは１である。
【００４１】
以上のように、段階的なエントロピーを有するマスク値によるマスク化、マスク解除処理（アンマスク化とも呼ぶ）を行うことで、同一のデータベースをユーザ間で共有しつつ、ユーザ権限に応じたプライバシの柔軟な調整が可能となる。
【００４２】
なお、マスク処理で行われる演算は、上で述べた加算の他、減算、乗算、除算、排他的論理和のいずれかであってもよい。マスク解除処理で行われる演算は、マスク処理で加算を実施した場合には減算、マスク処理で減算を実施した場合には加算、マスク処理で乗算を実施した場合には除算、マスク処理で除算を実施した場合には乗算、マスク処理で排他的論理和を実施した場合には排他的論理和を実施する。
【００４３】
［実施の形態２］
図６に、本実施の形態に係るシステムの構成例を示す。インターネット等のネットワーク１には、クラウドシステム３と、クラウドシステム３の管理者の指示により動作する管理者装置５と、ユーザ権限Ａが設定されているユーザＡが操作するユーザ端末７と、ユーザ権限Ｂが設定されているユーザＢが操作するユーザ端末９とが接続されている。クラウドシステム３には、データベース（ＤＢ）３３と、処理サーバ３１とが含まれる。なお、図６では、２台のみユーザ端末を示しているが、ユーザ端末の数には制限はない。また、ユーザ権限の段階（権限レベルとも呼ぶ。）も第１の実施の形態と同じであり、ｋ＋１段階であるものとする。
【００４４】
図７Ａに、本実施の形態に係るユーザ端末７の機能ブロック図を示す。ユーザ端末７は、要求送信部７１と、マスク解除処理部７３と、データ受信部７４と、データ格納部７５と、マスク値格納部７６と、出力部７７とを有する。要求送信部７１は、ユーザからの指示に応じて、例えばクラウドシステム３の処理サーバ３１に対する要求を送信する。マスク値格納部７６は、ユーザ端末７のユーザのユーザ権限に応じたマスク値等のデータを格納しており、要求送信部７１及びマスク解除処理部７３に用いられる。また、データ受信部７４は、例えばクラウドシステム３の処理サーバ３１から処理結果を受信し、データ格納部７５に格納する。マスク解除処理部７３は、マスク値格納部７６に格納されているマスク値とデータ格納部７５に格納されているマスク化値とを用いてアンマスク処理を実施し、処理結果をデータ格納部７５に格納する。出力部７７は、データ格納部７５に格納されているデータを、出力装置（例えば印刷装置又は表示装置など）に出力する。
【００４５】
図７Ｂに、本実施の形態に係る管理者装置５の機能ブロック図を示す。管理者装置５は、マスク値生成部５１と、マスク値格納部５２と、マスク値適用処理部５３と、オリジナル値格納部５４と、マスク化値格納部５５と、データベース登録部５６と、データ格納部５７と、マスク値配布部５８とを有する。マスク値生成部５１は、乱数などによってマスク値を生成する処理を行い、生成したマスク値をマスク値格納部５２に格納する。場合によっては、マスク値生成部５１は、データ格納部５７に格納されている鍵データ等を用いる場合もある。また、マスク値適用処理部５３は、マスク値格納部５２に格納されているマスク値を、オリジナル値格納部５４に格納されているデータに対して適用してマスク化値を生成し、マスク化値格納部５５に格納する。場合によっては、マスク値適用処理部５３は、データ格納部５７に格納されているデータを処理に用い、処理途中のデータをデータ格納部５７に格納する場合もある。さらに、データベース登録部５６は、マスク化値格納部５５に格納されているマスク化値を、クラウドシステム３のデータベース３３に登録する処理を実施する。さらに、マスク値配布部５８は、データ格納部５７に格納されている、各ユーザのユーザ権限のデータに基づき、マスク値格納部５２に格納されているマスク値をユーザ宛に送信する処理を行う。
【００４６】
図８に、処理サーバ３１の機能ブロック図を示す。処理サーバ３１は、要求受信部３１１と、マスク値格納部３１２と、マスク化値取得部３１３と、第１マスク化値格納部３１４と、マスク解除処理部３１５と、マスク解除データ格納部３１６と、集計処理部３１７と、集計結果格納部３１９と、出力部３２０と、オリジナル値格納部３２１と、マスク値生成部３２２と、マスク値適用処理部３２３と、第２マスク化値格納部３２４と、データベース登録部３２５と、データ格納部３２６と、マスク値配布部３２７とを有する。要求受信部３１１は、ユーザ端末７等からの要求を受信し、要求にマスク値等が含まれればマスク値格納部３１２に格納する。また、要求受信部３１１は、受信した要求に応じてマスク化値取得部３１３にマスク化値をデータベース３３から取得するように指示する。マスク化値取得部３１３は、取得したマスク化値を第１マスク化値格納部３１４に格納する。マスク解除処理部３１５は、マスク値格納部３１２に格納されているマスク値を第１マスク化値格納部３１４に格納されているマスク化値に対して適用するマスク解除処理を実施し、処理結果をマスク解除データ格納部３１６に格納する。集計処理部３１７は、マスク解除データ格納部３１６又は第１マスク化値格納部３１４に格納されているデータについて所定の集計処理を実施し、集計結果を集計結果格納部３１９に格納する。集計処理部３１７は、マスク値格納部３１２に格納されているデータを用いて処理を実施する場合もある。出力部３２０は、第１マスク化値格納部３１４に格納されているデータ又は集計結果格納部３１９に格納されているデータを、要求送信元のユーザ端末７等に送信する。
【００４７】
また、処理サーバ３１は、管理者装置５に代ってマスク化値を生成する場合もある。また、データの所有者であるユーザからデータの更新を指示された場合等に、処理サーバ３１がマスク化値を生成する場合もある。このため、要求受信部３１１が、データの所有者から例えば暗号化されたオリジナル値を受信すると、復号化してオリジナル値をオリジナル値格納部３２１に格納する。そして、マスク値適用処理部３２３は、オリジナル値格納部３２１に格納されているオリジナル値に対してマスク値格納部３１２に格納されているマスク値を適用するマスク値適用処理を実施してマスク化値を生成し、第２マスク化値格納部３２４に格納する。データベース登録部３２５は、第２マスク化値格納部３２４に格納されているマスク化値をデータベース３３に登録する処理を実施する。さらに、マスク値配布部３２７は、データ格納部３２６に格納されている、各ユーザのユーザ権限のデータに基づき、マスク値格納部３１２に格納されているマスク値をユーザ宛に送信する処理を行う。なお、マスク値生成部３２２が、マスク値を生成してマスク値格納部３１２に格納する場合もある。その際には、マスク値生成部３２２は、データ格納部３２６又はマスク値格納部３１２に格納されているデータ（例えば鍵データ）を用いてマスク値を生成する場合もある。さらに、マスク値生成部３２２は、オリジナル値格納部３２１に格納されているデータを用いてマスク値を生成することもある。また、マスク値適用処理部３２３は、処理途中のデータなどをデータ格納部３２６に格納する場合もある。
【００４８】
なお、このような装置構成は以下で述べる他の実施の形態で使用される機能をも併せて示している。従って、本実施の形態内のみでは使用されない構成要素も含まれている。
【００４９】
次に、図９乃至図２１を用いて具体的な処理について説明する。まず、図９乃至図１５を用いて前処理について説明する。例えば、管理者装置５によりデータベース３３にマスク化値を登録するための処理等を実施する。まず、管理者装置５は、マスク化処理を実施する（ステップＳ１）。この処理については、図１０乃至図１５を用いて説明する。
【００５０】
まず、マスク値生成部５１は、マスク値生成処理を実施し、処理結果であるマスク値をマスク値格納部５２に格納する（図１０：ステップＳ１１）。次に、マスク値適用処理部５３は、マスク値格納部５２に格納されているマスク値をオリジナル値格納部５４に格納されているオリジナル値に適用するマスク値適用処理を実施し、処理結果であるマスク化値をマスク化値格納部５５に格納する（ステップＳ１３）。
【００５１】
マスク値生成処理については、図１１乃至図１３を用いて説明する。前提として、マスク値ｒallのビット長ｂallと、マスク値ｒi（ｉは、１以上ｋ以下の整数。但し、ユーザ権限の段階はｋ＋１である。）のビット長ｂi（マスク長、データ長とも呼ぶ）は、既に決定されており、例えばデータ格納部５７に格納されているものとする。なお、本実施の形態では、ｂall＞ｂ1＞ｂ2＞ｂ3＞・・・＞ｂkという関係を有しているものとする。また、ｂallについては、上でも述べたように、オリジナル値のビット長以上とする。
【００５２】
また、オリジナル値格納部５４には、各々複数のカラムを含む複数のレコードを含むデータが格納されており、予めマスク値適用処理を実施すべきカラムが決定されているものとする。
【００５３】
さらに、図１１の処理においては、オリジナル値格納部５４に格納されているデータの全てのレコードに対して同一のマスク値を適用するものとする。
【００５４】
マスク値生成部５１は、マスク値ｒi（ｉは１以上ｋ以下の整数。）を、マスク長ｂiの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ２１）。具体的には、ｒ1は、ｂ1ビットの乱数であり、ｒ2は、ｂ2ビットの乱数であり、ｒkは、ｂkビットの乱数である。
【００５５】
また、マスク値生成部５１は、マスク値ｒallを、ビット長ｂallの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ２３）。そして元の処理に戻る。
【００５６】
このようにオリジナル値格納部５４に格納されているデータの全てのレコードに対して同一のマスク値を適用する場合には、ｒ1乃至ｒk及びｒallを１セット用意すればよい。
【００５７】
但し、オリジナル値格納部５４に格納されているデータの各レコードに異なるマスク値を適用するようにしても良い。このような場合には、図１２に示すような処理を実施する。
【００５８】
マスク値生成部５１は、カウンタｊを初期値「１」にセットする（ステップＳ３１）。そして、マスク値生成部５１は、ｊ番目のレコードのための、ｉ番目（ｉは、１以上ｋ以下の整数）のマスク値ｒi,jを、マスク長ｂiの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ３３）。具体的には、ｒ1,jは、ｂ1ビットの乱数であり、ｒ2,jは、ｂ2ビットの乱数であり、ｒk,jは、ｂkビットの乱数である。
【００５９】
また、マスク値生成部５１は、ｊ番目のレコードのためのマスク値ｒallを、ビット長ｂall,jの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ３５）。
【００６０】
そして、マスク値生成部５１は、ｊを１インクリメントし（ステップＳ３７）、ｊがオリジナル値格納部５４におけるレコード数を超えたか判断する（ステップＳ３９）。オリジナル値格納部５４のレコード数については、予めデータ格納部５７に設定しておくか、オリジナル値格納部５４を参照することで特定する。ｊがレコード数以下であればステップＳ３３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【００６１】
このような処理を行うことによって、オリジナル値格納部５４の各レコードに対して異なるマスク値を適用することができるようになる。なお、（ｋ＋１）個（ｒallを含む）のマスク値をレコード数セット分用意することになる。
【００６２】
マスク値の数を減らすためには、例えば図１３に示すようなマスク値生成処理を実施するようにしても良い。
【００６３】
マスク値生成部５１は、カウンタｊを初期値「１」にセットする（ステップＳ４１）。そして、マスク値生成部５１は、ｊ番目乃至（ｊ＋ｕ−１）番目のレコードのための、ｉ番目（ｉは、１以上ｋ以下の整数）のマスク値ｒi,jを、ビット長ｂiの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ４３）。ｕは同じマスク値を利用するレコードの数であり、例えばデータ格納部５７に格納されている値を用いる。ステップＳ４３では、具体的には、ｒ1,jは、ｂ1ビットの乱数であり、ｒ2,jは、ｂ2ビットの乱数であり、ｒk,jは、ｂkビットの乱数である。
【００６４】
また、マスク値生成部５１は、ｊ番目乃至（ｊ＋ｕ−１）番目のレコードのためのマスク値ｒall,jを、マスク長ｂallの乱数を発生させることによって生成し、マスク値格納部５２に格納する（ステップＳ４５）。
【００６５】
そして、マスク値生成部５１は、ｊにｕを加算し（ステップＳ４７）、ｊがオリジナル値格納部５４におけるレコード数を超えたか判断する（ステップＳ４９）。オリジナル値格納部５４のレコード数については、予めデータ格納部５７に設定しておくか、オリジナル値格納部５４を参照することで特定する。ｊがレコード数以下であればステップＳ４３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【００６６】
このようにすれば、マスク値のデータ量を削減することができる。
【００６７】
次に、図１４を用いて、マスク値適用処理について説明する。マスク値適用処理部５３は、カウンタｊを初期値「１」に設定する（ステップＳ５１）。そして、マスク値適用処理部５３は、ｊ番目のレコードにおけるマスク化すべきオリジナル値Ｄａｔａjに対して、マスク値ｒi,j又はｒiを適用してマスク化値MaskedDatajを生成し、マスク化値格納部５５に格納する（ステップＳ５３）。
【００６８】
図１１のようなマスク値生成処理を実施した場合には、以下のような演算を実施する。
MaskedDataj＝Ｄａｔａj＋ｒ1＋ｒ2＋ｒ3＋・・・＋ｒk＋ｒall
【００６９】
図１２のようなマスク値生成処理を実施した場合には、以下のような演算を実施する。
MaskedDataj＝Ｄａｔａj＋ｒ1,j＋ｒ2,j＋ｒ3,j＋・・・＋ｒk,j＋ｒall,j
【００７０】
図１３のようなマスク値生成処理を実施した場合には、基本的には図１２の場合と同様の演算が実施される。但し、マスク値の切替はｕ毎に行われるので、ｊ＝１からｊ＝ｕ−１まではｊ＝１のマスク値が用いられ、ｊ＝ｕからｊ＝２ｕ−１まではｊ＝ｕのマスク値が用いられ、ｊ＝２ｕからｊ＝３ｕ−１まではｊ＝２ｕのマスク値が用いられ、以下同様である。
【００７１】
また、図１５に上で示した演算を模式的に示す。ここでは、１０ビットのオリジナル値Ｄａｔａ＝ＡＡＡＢＢＢＣＣＣＣとする。そうすると、例えば４ビットのマスク値ｒ2を加算すると、オリジナル値Ｄａｔａの下位４ビットがマスクされるので、Ｄａｔａ＋ｒ2＝ＡＡＡＢＢＢ＊＊＊＊（＊は乱数値）となる。さらに、７ビットのマスク値ｒ2を加算すると、オリジナル値Ｄａｔａの下位７ビットがマスクされることになるので、Ｄａｔａ＋ｒ2＋ｒ1＝ＡＡＡ＊＊＊＊＊＊＊となる。最後に、１０ビットのマスク値ｒallを加算すると、オリジナル値Ｄａｔａの全てのビットがマスクされることになるので、マスク化値MaskedData＝＊＊＊＊＊＊＊＊＊＊が得られたことになる。
【００７２】
なお、上で述べたように、単純な加算ではなく排他的論理和であっても良い。
【００７３】
そして、マスク値適用処理部５３は、ｊを１インクリメントし（ステップＳ５５）、ｊがレコード数を超えたか判断する（ステップＳ５７）。ｊがレコード数以下であればステップＳ５３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【００７４】
このようにすれば、適切にマスク化処理が行われたことになる。
【００７５】
図９の処理の説明に戻って、データベース登録部５６は、マスク化値格納部５５に格納されているマスク化値を、クラウドシステム３内のデータベース３３に登録する（ステップＳ３）。
【００７６】
さらに、マスク値配布部５８は、マスク値格納部５２に格納されているマスク値を、例えばデータ格納部５７に格納されているユーザのデータに基づいて、ユーザ毎に適切なマスク値を配布する処理を実施する（ステップＳ５）。例えば、データ格納部５７に、ユーザＩＤ等に対応付けて当該ユーザのユーザ権限の段階を登録しておき、各ユーザ宛にそのユーザ権限に応じたマスク値を配布する。最下位のユーザ権限を有するユーザには、マスク値ｒall又はｒall,j（ｊは１からレコード数。但しｕ毎の場合もある）を配布する。下位から２段階目のユーザ権限を有するユーザには、マスク値ｒall及びｒ1又はｒall,j及びｒ1,j（ｊについては上と同じ）を配布する。下位から３段階目のユーザ権限を有するユーザには、マスク値ｒall、ｒ1及びｒ2又はｒall,j、ｒ1,j及びｒ2,j（ｊについては上と同じ）を配布する。ｋ＋１段階目、すなわち最上位のユーザ権限を有するユーザには、マスク値ｒall、ｒ1、ｒ2．．．及びｒk又はｒall,j、ｒ1,j、ｒ2,j．．．及びｒk,j（ｊについては上と同じ）を配布する。配布については、例えば、暗号化した上で送信するようにしても良いし、アクセスに応じてＳＳＬ（Secure Socket Layer）などを介して送信するようにしてもよい。また、自動的な配布ではなく、オフラインでの配布であっても良い。
【００７７】
また、管理者装置５によって上で述べたようなマスク化処理を実施するのではなく、クラウドシステム３の処理サーバ３１において同様の処理を行うようにしても良い。
【００７８】
次に、図１６乃至図１８を用いて、クラウドシステム３のデータベース３３のデータを利用する際の処理について説明する。例えばユーザがユーザ端末７を操作して、クラウドシステム３のデータベース３３における所定のデータ群について集計処理を実施するように指示する。ユーザ端末７の要求送信部７１は、ユーザからの指示に応じて、マスク値格納部７６に格納されており且つ当該ユーザに配布されたマスク値を読み出し、当該マスク値及び集計処理の対象データ群を指定するデータを含む集計処理要求を、クラウドシステム３の処理サーバ３１に送信する（図１６：ステップＳ６１）。
【００７９】
クラウドシステム３の処理サーバ３１における要求受信部３１１は、ユーザ端末７から、マスク値及び集計処理の対象データ群を指定するデータを含む集計処理要求を受信し（ステップＳ６３）、集計処理要求に含まれるマスク値をマスク値格納部３１２に格納すると共に、マスク化値取得部３１３に、集計処理の対象データ群を指定するデータを出力する。そうすると、マスク化値取得部３１３は、データベース３３から集計処理の対象データ群を取得し、第１マスク化値格納部３１４に格納する（ステップＳ６４）。
【００８０】
そして、マスク解除処理部３１５は、マスク値格納部３１２に格納されているマスク値を用いて、第１マスク化値格納部３１４に格納されているマスク化値に対してアンマスク処理を実施する（ステップＳ６５）。アンマスク処理について図１７を用いて説明する。
【００８１】
マスク解除処理部３１５は、カウンタｊを初期値「１」に設定する（ステップＳ８１）。そして、マスク解除処理部３１５は、ｊ番目のレコードにおけるマスク化値MaskedDatajを、第１マスク化値格納部３１４から読み出し、このマスク化値MaskedDatajに対して、マスク値格納部３１２に格納されているマスク値を用いてアンマスク化値UnmaskedDatajを生成し、レコードｊの他のデータと共にマスク解除データ格納部３１６に格納する（ステップＳ８３）。
【００８２】
図１１のようなマスク値生成処理を実施している場合には、アンマスク化値は以下のように演算される。
UnmaskedDataj＝MaskedDataj−ｒall−Σiｒi
【００８３】
すなわち、マスク化値MaskedDatajから、ユーザから取得した全てのマスク値を減算することで、アンマスク化値UnmaskedDatajを生成する。マスク値については要求送信元のユーザのユーザ権限によって個数が異なるが、取得した全てのマスク値を減算する。
【００８４】
図１２のようなマスク値生成処理を実施している場合には、アンマスク化値は以下のように演算される。
UnmaskedDataj＝MaskedDataj−ｒall,j−Σiｒi,j
【００８５】
すなわち、マスク化値MaskedDatajから、レコードｊについてユーザから取得した全てのマスク値を減算することで、アンマスク化値UnmaskedDatajを生成する。マスク値については要求送信元のユーザのユーザ権限によって個数が異なるが、取得した全てのマスク値を減算する。
【００８６】
図１３のようなマスク値生成処理を実施している場合には、マスク化値ｒi,j及びｒall,jについては、マスク値の切替はｕ毎に行われるので、ｊ＝１からｊ＝ｕ−１まではｊ＝１のマスク値が用いられ、ｊ＝ｕからｊ＝２ｕ−１まではｊ＝ｕのマスク値が用いられ、ｊ＝２ｕからｊ＝３ｕ−１まではｊ＝２ｕのマスク値が用いられ、以下同様である。
【００８７】
なお、マスク値適用処理で排他的論理和が採用されている場合には、アンマスク処理でも排他的論理和が採用される。
【００８８】
そして、マスク解除処理部３１５は、ｊを１インクリメントし（ステップＳ８５）、ｊがレコード数を超えたか判断する（ステップＳ８７）。ｊがレコード数以下である場合にはステップＳ８３に戻る。一方、ｊがレコード数を超えている場合には、元の処理に戻る。
【００８９】
このようにすれば、集計処理の対象データ群の各レコードにおいてマスク化されているデータについて、集計要求の送信元ユーザのユーザ権限に応じたアンマスク処理が行われる。すなわち、最上位のユーザ権限を有するユーザであれば、オリジナル値を得ることができ、それ以外のユーザ権限を有するユーザであれば、少なくとも一部がマスクされたアンマスク化値が得られるようになる。
【００９０】
なお、この段階でマスク解除処理部３１５は、マスク値格納部３１２に格納されているマスク値を破棄する処理を実施する。マスク値の漏洩を防止するためである。
【００９１】
図１６の処理の説明に戻って、集計処理部３１７は、マスク解除データ格納部３１６に格納されているデータについて集計処理を実施する（ステップＳ６７）。この集計処理については、図１８を用いて説明する。
【００９２】
集計処理部３１７は、アンマスク化値でレコードを分類する（ステップＳ９１）。例えば、ＡＡＡＢＢＢＣＣＣＣというオリジナル値に対してアンマスク化値がＡＡＡＢＢＢ＊＊＊＊となっている場合には、上位６ビットが共通するレコード毎に分類を行う。場合によっては、アンマスク化値がＡＡＡ＊＊＊＊＊＊＊となっている場合には、上位３ビットが共通するレコード毎に分類を行う。
【００９３】
そして、集計処理部３１７は、分類毎に集計対象値（例えばユーザ指定のカラム値）の集計を行い、集計結果を集計結果格納部３１９に格納する（ステップＳ９３）。例えば、各レコードの件数の値を合計する処理を実施し、分類のデータに対応付けて合計件数を集計結果格納部３１９に格納する。そして元の処理に戻る。
【００９４】
なお、最上位のユーザ権限を有するユーザの場合には、オリジナル値が得られるので、上でも述べたような処理を行わずにオリジナル値を集計結果として出力しても良いし、例えばユーザの指示に応じた単位で集計処理を行って、その集計処理の結果を出力するようにしても良い。他の分析を行うようにしても良い。
【００９５】
このような処理を実施することで、ユーザ権限に応じてアクセスできる内容について集計結果を得ることができる。なお、この集計結果をさらに用いて他の分析処理を実施することも可能であるが、ここでは説明を省略する。
【００９６】
図１６の処理の説明に戻って、出力部３２０は、要求受信部３１１から集計要求の送信元ユーザ端末７のアドレス等を受け取って、集計結果格納部３１９に格納されている集計結果を、ユーザ端末７へ送信する（ステップＳ６９）。
【００９７】
ユーザ端末７のデータ受信部７４は、処理サーバ３１から集計結果を受信し、データ格納部７５に格納する。そして、出力部７７は、データ格納部７５に格納されている集計結果を、表示装置等の出力装置に出力する（ステップＳ７１）。これによって、ユーザは、自身のユーザ権限に応じた処理結果を得ることができるようになる。
【００９８】
例えば、ユーザ権限の段階が３であり、マスクすべきオリジナル値（プライバシ情報とも呼ぶ）が住所であるものとする。そして、例えば図１９に示すように、研究者及び地域保健所については、ユーザ権限は第三段階（すなわち最上位）であり、アクセス可能なプライバシ情報は、番地単位の感染者数であるとする。また、医者については、ユーザ権限は第二段階であり、アクセス可能なプライバシ情報は、区及び町単位の感染者数であるものとする。さらに、一般人については、ユーザ権限は第一段階（すなわち最下位）であり、アクセス可能なプライバシ情報は、市単位の感染者数であるものとする。
【００９９】
また、データ構造としては、図２０に示すようなものであるものとする。すなわち、「レコード番号」、「住所」、「感染者数」の３つのカラムを有する。なお、感染者が発生しない地域のデータは記録されていない。そして、住所を３２ビットワードで表現する場合、図２１（ａ）に示すように、上位１０ビットが市、次の８ビットが区町、下位の１４ビットが番地を表すものとする。なお、３２ビットワードは一例であり、不足する場合には６４ビットワードを採用するようにしても良い。
【０１００】
このような住所をマスク化するためには、ｒ1、ｒ2及びｒallの３種類のマスク値を用いる。ｒ2は番地をマスク化するために用いられる１４ビット乱数であり、ｒ1は番地と区町をマスク化するために用いられる２２ビット乱数であり、ｒallは住所全体をマスク化するために用いられる３２ビット乱数である。「研究者及び地域保健所」は全てのマスク値を保有し、次に高い権限（第二段階）を有する「医者」はｒall及びｒ1を保有し、最も低い権限（第一段階）である「一般人」はｒallのみを保有する。このようなマスク値については上で述べたような形で生成される。
【０１０１】
マスク値適用処理を実行する場合には、図２１（ｂ）に示されるように、住所に対して、ｒ2、ｒ1及びｒallを加算することで、住所３２ビット全てをマスク化する。図２１（ｂ）ではｒ2、ｒ1及びｒallの順に加算されているが、加算は順序を問わない演算であるため、この順番で加算しなくとも正しいマスク化値を得ることができる。
【０１０２】
データを分析又は参照するためにアンマスク化を行う際は、「研究者及び地域保健所」はマスク値ｒ1、ｒ2及びｒallを処理サーバ３１に送信して、アンマスク処理を実施する。例えば図２１（ｃ）に示すように、マスク化値（Ｄａｔａ＋ｒ1＋ｒ2＋ｒall）から、提供されるマスク値ｒ1、ｒ2及びｒallを差し引くことで、オリジナル値Ｄａｔａである住所全体のデータが得られる。
【０１０３】
「医者」はマスク値ｒ1及びｒallを処理サーバ３１に送信して、アンマスク処理を実施する。例えば図２１（ｃ）に示すように、マスク化値（Ｄａｔａ＋ｒ1＋ｒ2＋ｒall）から、提供されるマスク値ｒ1及びｒallを差し引くことで、アンマスク化値（Ｄａｔａ＋ｒ2）である下位１４ビットが乱数化されたデータが得られる。すなわち、区町を識別することはできるが、番地は不明となる。このような場合、区町の単位で分類すれば、区町単位での感染者数を得ることができる。
【０１０４】
さらに、「一般人」はｒallを処理サーバ３１に送信して、アンマスク処理を実施する。例えば図２１（ｃ）に示すように、マスク化値（Ｄａｔａ＋ｒ1＋ｒ2＋ｒall）から、提供されるマスク値ｒallを差し引くことで、アンマスク化値（Ｄａｔａ＋ｒ1＋ｒ2）である下位２２ビットが乱数化されたデータが得られる。すなわち、市を識別することはできるが、区町及び番地は不明となる。このような場合、市単位で分類すれば、市単位で感染者数を得ることができる。
【０１０５】
［実施の形態３］
第２の実施の形態では、住所をマスク化対象データとしており、集計処理で合計される数値（例えば感染者数）はマスク化されないので、マスク化は集計処理に影響を与えない。しかしながら、集計処理で合計される数値をマスク化する場合には、最上位のユーザ権限を有するユーザ以外は、乱数が加算されている数値しか得ることができない。このような場合には、以下に示すような取り扱い及び処理を行う。
【０１０６】
第１の実施の形態の具体例と同様に、図２２に示すようなデータ構造のデータがオリジナル値として与えられるものとする。すなわち、「レコード番号」「住所」及び「感染者数」のカラムが設けられている。また、ユーザ権限は３段階設定されているものとする。さらに、住所を３２ビットワードで表現する場合、上位１０ビットが市、次の８ビットが区町、下位の１４ビットが番地を表すものとする。
【０１０７】
但し、本実施の形態では「住所」についてはマスクしないで「感染者数」をマスクする。なお、「住所」がデータベース内で重複しない場合には、「レコード番号」を省略して「住所」で代用することも可能である。また、図２２に示すように、感染者の有無に拘わらず、全ての番地について感染者数を登録するものとする。
【０１０８】
上でも述べたように、最上位のユーザ権限を有するユーザ以外は、個々の住所（すなわち番地）に対しては、アンマスク処理後もランダム化された感染者数しか知ることができない。
【０１０９】
そこで、２番目のユーザ権限を有する医者の場合、感染者数を区町単位で合計し、以下で説明する定数を減じた結果を、区町単位の感染者数として出力する。
【０１１０】
一般人の場合、感染者数を市単位で合計し、以下で説明する定数を減じた結果を、市単位の感染者数として出力する。
【０１１１】
このように定数を減ずることで、ランダム化の影響が、区町単位や市単位で無効化される。この仕組みは、「中心極限定理」と呼ばれる公知の定理を利用している。この中心極限定理は以下のようなものである。
【０１１２】
期待値μ、分散σ2に従う確率変数Ｘ1、Ｘ2，．．．Ｘnに対し、その合計は以下のように表される。
【０１１３】
【数１】
0005516284.tif 000002
【０１１４】
この合計Ｓnから生成される以下の式（１）は、平均０、分散１の正規分布に分布収束する。
【０１１５】
【数２】
0005516284.tif 000003
【０１１６】
【数３】
0005516284.tif 000004
【０１１７】
この定理のポイントは、多くの乱数を加算するほど、加算した結果の平均値は、真の平均値に近づくという性質である。真の平均値とは、ｖビット乱数の場合２v-1である。また、この定理は、ｎ個の乱数を加算した場合、１／ｎ0.5に比例して真の平均値に近づくことも示している。「「真の平均値」に近づく」とは、「真の平均値」との誤差が少なくなることである。
【０１１８】
例えば、１０個の２０ビット乱数を加算した場合の平均値から真の平均値（＝２20-1）を引いた誤差と、４０個の乱数を加算した場合の平均値から真の平均値（＝２20-1）を引いた誤差を比較した場合、後者の誤差の方が前者の誤差の１／２（＝｛１／４０0.5｝／｛１／１０0.5｝）となる性質が知られている。すなわち、ｎ個の住所の感染者数を集計することで、ランダム化による誤差が１／ｎ0.5に減少されるため、正確な値となる。真の平均値が２v-1である乱数が加算された感染者数をｎ個合計して平均値を取ると、誤差は２v-1／ｎ0.5に比例して小さくなる。ｎは集計対象レコードの数であり、医者の場合、１４ビットで表現される番地単位の感染者数を集計するのでｎ＝２14であり、一般人の場合１４ビットで表現される番地と８ビットで表現される区町の感染者数を集計するのでｎ＝２22である。ｖは、ｎの半分のビット長、すなわちｎの平方根のビット長であるとすると、医者と一般人でそれぞれｖ＝７及びｖ＝１１となる。これらのｖ及びｎを用いると、集計の平均値の誤差２v-1／ｎ0.5はそれぞれ以下のようになる。
医者：２7-1／２7＝２-1
一般人：２11-1／２11＝２-1
【０１１９】
このように医者と一般人で同一の誤差、すなわち精度が等しくなる。
【０１２０】
このような誤差は、集計処理によって算出されたｅ１＝（ｎ個の誤差付き感染者数の合計）と、ｅ２＝｛（正しいｎ個のデータ値の合計）＋（マスク値の真の平均値）×ｎ｝との差分による誤差であり、この誤差はマスク値のパラメータを適切に設定することで無視できるほど小さくなる。
【０１２１】
上記の例では、医者、一般人共に平均誤差＝０．５である。よって、ｅ１から、ｅ２における（正しいｎ個のデータ値の合計）を得るためには、ｅ１から、（マスク値の真の平均値）×ｎを減じればよい。マスク値の真の平均値は２v-1であり、ｎはｖの２倍のビット長、すなわちｎ＝２2*vであることを考慮すると、減じる値は以下のようになる。
（マスク値の真の平均値）×ｎ＝２v-1×22*v＝２3*v-1  （２）
【０１２２】
但し、ｖは、アンマスク化された感染者数に加えられている乱数のビット長であり、（ｋ＋１）段階中ｈ段階目のユーザの場合、ｖ＝ｂh-1である。ｂhは、マスク値ｒhのビット長を表す。なお、最上位（（ｋ＋１）段階中（ｋ＋１）段階目）のユーザ権限を有するユーザは、オリジナル値を得ることができるため、補正は不要である。
【０１２３】
よって、区町単位又は番地単位で集計した感染者数から、（２）式で示す定数を減ずることで、真の値に非常に近い値を得ることができる。
【０１２４】
一方、（ｋ＋１）段階中ｈ段階目のユーザに対して、ｇh個のデータを集計しなければ真の値が得られないようにするためには、以下のように設定する。
ｂ1＝（ｌｏｇ2ｇ1）／２
ｂ2＝（ｌｏｇ2ｇ2）／２
：
：
ｂk＝（ｌｏｇ2ｇk）／２
【０１２５】
下位から１段階目のユーザは２14+8個のレコードを集計し、下位から２段階目のユーザは２14個のレコードを集計することになるので、ｂ1＝１１、ｂ2＝７となる。高いユーザ権限を有するユーザほど、少ないレコード数での集計により真の値を得られるため、ｇ1＞ｇ2＞・・・＞ｇkが満たされるようにする。ｂallは、第１の実施の形態と同様に、データ値を表現するワードのビット長ｗをそのまま与えるものとする。
【０１２６】
このようにｂ1乃至ｂkは第１の実施の形態とは異なるが、マスク化処理及びアンマスク処理における演算の方式自体は同じである。また、ユーザ端末７と処理サーバ３１とのやりとりの処理フロー（図１６）も同じである。
【０１２７】
マスク化処理及びアンマスク処理について概略を図２３（ａ）及び（ｂ）に示す。図２３（ａ）に示すように、３２ビットのオリジナル値（Ｄは１ビットを表す。但し、上位１６ビットは省略表示を含む。）に、７ビット乱数であるｒ2を加算することで、下位７ビットがマスクされたデータを得る。さらに、１１ビット乱数であるｒ1を加算することで、下位１１ビットがマスクされたデータを得る。最後に、３２ビット乱数であるｒallを加算することで、全ビットマスクされたマスク化値を得る。
【０１２８】
また、図２３（ｂ）に示すように、研究者及び地域保健所は、マスク値ｒ1、ｒ2及びｒallを処理サーバ３１に送信し、処理サーバ３１において３２ビットのマスク化値からマスク値ｒ1、ｒ2及びｒallを引くことによって、オリジナル値を生成する。また、医者は、マスク値ｒ1及びｒallを処理サーバ３１に送信し、処理サーバ３１において３２ビットのマスク化値からマスク値ｒ1及びｒallを引くことによって、下位７ビットがランダム化されたデータが得られる。さらに、一般人は、マスク値ｒallを処理サーバ３１に送信し、処理サーバ３１において３２ビットのマスク化値からマスク値ｒallを引くことによって、下位１１ビットがランダム化されたデータが得られる。
【０１２９】
そして、第２の実施の形態と異なる部分は、集計処理である。従って、本実施の形態に係る集計処理について図２４を用いて説明する。
【０１３０】
集計処理部３１７は、マスク解除データ格納部３１６に格納されているデータがオリジナル値であるか確認する（ステップＳ１０１）。例えば、マスク解除処理部３１５が、ユーザ権限の段階数と同じ数のマスク値を用いてアンマスク処理を実施した場合に、フラグをマスク解除データ格納部３１６に格納して、当該フラグを確認するようにしても良い。さらに、マスク値格納部３１２に格納されており且つ同一のレコードに適用するマスク値の種類が、ユーザ権限の段階数と同数であるかを確認するようにしても良い。
【０１３１】
オリジナル値がマスク解除データ格納部３１６に格納されている場合には、集計処理部３１７は、指示された集計処理を実施し、集計処理結果を集計結果格納部３１９に格納する（ステップＳ１０９）。オリジナル値については何もせずにそのまま出力して良いし、指示された単位で分類した上で、感染者数等の値を合計するようにしても良い。他の分析処理を実施するようにしても良い。そして元の処理に戻る。
【０１３２】
一方、オリジナル値がマスク解除データ格納部３１６に格納されているわけではない場合には、集計処理部３１７は、最短マスク値のビット長ｂhから、レコード数ｇhを算出し、例えばメインメモリなどの記憶装置に格納する（ステップＳ１０２）。上で述べた式を変形すれば、ｇh＝２＾２ｂhで得られる。
【０１３３】
そして、集計処理部３１７は、アンマスク化値以外のデータ（例えば住所）についてユーザ権限に応じた単位でレコードを分類する（ステップＳ１０３）。例えば、上で述べた例では上位（３２−２ｂh）ビットで表される住所の単位毎にレコードの分類を行う。具体的には、医者であれば区町単位で分類が行われ、一般人であれば市番号単位で分類される。
【０１３４】
さらに、集計処理部３１７は、各分類について各レコードのアンマスク化値を合計し、当該合計値から誤差（＝ｇh×２＾（ｂh−１））を減ずることによって集計結果を算出し、分類に対応付けて集計結果格納部３１９に格納する（ステップＳ１０７）。
【０１３５】
以上のような処理を実施することによって、集計対象の数値をマスクする場合についても対処することができるようになる。なお、上で述べた誤差を差し引くため、マスク値適用処理における演算は加算を行うことになる。
【０１３６】
［実施の形態４］
上で述べた実施の形態では、レコードに共通のマスク値を用意するか、レコード毎に異なるマスク値を用意するか、所定数レコード毎に異なるマスク値を用意するといった例を示した。レコード毎に異なるマスク値を用意する場合には、レコード数が多くなるとマスク値のデータ量も多くなってしまう。従って、少ないデータ量でレコード毎に異なるマスク値を生成することを考える。
【０１３７】
すなわち、図２５に示すような処理をマスク値生成処理として実施する。なお、予めマスク値ｒiのための鍵ｓi（ユーザ権限の段階数がｋ＋１であれば、ｉは、１以上ｋ以下の整数）と、マスク値ｒallのための鍵ｓallとを予め用意しておく。また、マスク長ｂi及びｂallについても、第１乃至第３の実施の形態と同様に予め決めておく。しかし、アンマスク処理のために、鍵とマスク長とは対応付けて保持しておくか、鍵の名称などからマスク長を特定する仕組みを用意しておく。
【０１３８】
ここでは、処理サーバ３１においてマスク値が生成される場面を説明する。
【０１３９】
マスク値生成部３２２は、レコード番号ｊを「１」に初期化する（ステップＳ３０１）。なお、「１」ではなく、実際にデータベース３３に登録する際のレコード番号の最小値を用いてもよい。そして、マスク値生成部３２２は、ｊ番目のレコードのｉ番目（ｉは、１以上ｋ以下の整数）のマスク値ｒi,j（マスク長ｂiビット）を、ｉ番目の鍵ｓiを用いて生成し、マスク値格納部３１２に格納する（ステップＳ３０３）。
【０１４０】
図２５の例では、一方向関数の例としてＡＥＳ（Advanced Encryption Standard）規格の暗号を用いることにする。ＡＥＳ（Ｐ，Ｋ）は、ＡＥＳのアルゴリズムで平文Ｐを鍵Ｋで暗号化する関数であるとする。ステップＳ３０３では、ｒi,j＝ＡＥＳ（ｊ，ｓi）の下位ｂiビットとする。より具体的には、以下のようになる。
ｒ1,j＝ＡＥＳ（ｊ，ｓ1）の下位ｂ1ビット
ｒ2,j＝ＡＥＳ（ｊ，ｓ2）の下位ｂ2ビット
ｒ3,j＝ＡＥＳ（ｊ，ｓ3）の下位ｂ3ビット
：
：
ｒk,j＝ＡＥＳ（ｊ，ｓk）の下位ｂkビット
【０１４１】
また、マスク値生成部３２２は、ｊ番目のレコードのマスク値ｒall,jを、鍵ｓallを用いて生成し、マスク値格納部３１２に格納する（ステップＳ３０５）。具体的には、以下のように生成する。
ｒall,j＝ＡＥＳ（ｊ，ｓall）の下位ｂallビット
ｂallは、オリジナル値のビット長以上の値である。
【０１４２】
そして、マスク値生成部３２２は、ｊを１インクリメントする（ステップＳ３０７）。なお、１インクリメントするのではなく、実際にデータベース３３に登録する際の次のレコード番号を用いても良い。次のレコード番号がない場合、すなわち既に最大レコード番号に達している場合には、ｊを１インクリメントする。
【０１４３】
その後、マスク値生成部３２２は、ｊがレコード数を超えたか判断する（ステップＳ３０９）。場合によっては、実際にデータベース３３に登録する際の最後のレコード番号より大きい値であるか確認する。ｊがレコード数以下であればステップＳ３０３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【０１４４】
鍵ｓi及びｓallを適切に配布することで、第１乃至第３の実施の形態と同様の結果を得ることができる。なお、上で述べたような処理を行えばデータベース３３に登録されたマスク化値から鍵を解読することは困難であるから、データベース３３のデータから鍵が漏洩することはない。
【０１４５】
具体的には、最下位のユーザ権限を有するユーザには、ｓallを配布する。また、２段階目のユーザ権限を有するユーザには、ｓ1及びｓallを配布する。３番目のユーザ権限を有するユーザには、ｓ1、ｓ2及びｓallを配布する。ｈ番目のユーザ権限を有するユーザには、ｓ1、ｓ2、．．．ｓh-1及びｓallを配布する。最上位のユーザ権限を有するユーザには、全ての鍵を配布する。
【０１４６】
なお、上ではＡＥＳを用いる例を示したが、他の暗号方式（例えばtriple-DES）を採用するようにしても良い。
【０１４７】
さらに、一方向関数としてハッシュ関数を用いても良い。ここではＳＨＡ２５６という関数を用いる例を図２６に示す。但し、ＳＨＡ３８４やＳＨＡ５１２等を代わりのハッシュ関数として用いても良い。また、鍵については、ＡＥＳと同様に、別途用意する。
【０１４８】
マスク値生成部３２２は、レコード番号ｊを「１」に初期化する（図２６：ステップＳ１１１）。なお、「１」ではなく、実際にデータベース３３に登録する際のレコード番号の最小値を用いてもよい。そして、マスク値生成部３２２は、ｊ番目のレコードのｉ番目（ｉは、１以上ｋ以下の整数）のマスク値ｒi,j（マスク長ｂiビット）を、ｉ番目の鍵ｓiを用いて生成し、マスク値格納部３１２に格納する（ステップＳ１１３）。
【０１４９】
図２６の例では、ＳＨＡ２５６（Ｄ）は、データＤのハッシュ値を算出する関数であるとする。ステップＳ１１３では、ｒi,j＝ＳＨＡ２５６（ｊ｜ｓi）の下位ｂiビットとする。「Ａ｜Ｂ」はＡとＢのビット結合を表す。より具体的には、以下のようになる。
ｒ1,j＝ＳＨＡ２５６（ｊ｜ｓ1）の下位ｂ1ビット
ｒ2,j＝ＳＨＡ２５６（ｊ｜ｓ2）の下位ｂ2ビット
ｒ3,j＝ＳＨＡ２５６（ｊ｜ｓ3）の下位ｂ3ビット
：
：
ｒk,j＝ＳＨＡ２５６（ｊ｜ｓk）の下位ｂkビット
【０１５０】
また、マスク値生成部３２２は、ｊ番目のレコードのマスク値ｒall,jを、鍵ｓallを用いて生成し、マスク値格納部３１２に格納する（ステップＳ１１５）。具体的には、以下のように生成する。
ｒall,j＝ＳＨＡ２５６（ｊ｜ｓall）の下位ｂallビット
ｂallは、オリジナル値のビット長以上の値である。
【０１５１】
そして、マスク値生成部３２２は、ｊを１インクリメントする（ステップＳ１１７）。なお、１インクリメントするのではなく、実際にデータベース３３に登録する際の次のレコード番号を用いても良い。次のレコード番号がない場合、すなわち既に最大レコード番号に達している場合には、ｊを１インクリメントする。
【０１５２】
その後、マスク値生成部３２２は、ｊがレコード数を超えたか判断する（ステップＳ１１９）。場合によっては、実際にデータベース３３に登録する際の最後のレコード番号より大きい値であるか確認する。ｊがレコード数以下であればステップＳ１１３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【０１５３】
鍵ｓi及びｓallを適切に配布することで、第１乃至第３の実施の形態と同様の結果を得ることができる。なお、上で述べたような処理を行えばデータベース３３に登録されたマスク化値から鍵を解読することは困難であるから、データベース３３に格納されているデータから鍵が漏洩することはない。
【０１５４】
一方、上で述べたような鍵を用いる場合には、集計要求はマスク値ではなく鍵（場合によっては加えて鍵に対応するマスク長のデータ）を含む。そして、鍵のデータも例えばマスク値格納部３１２に格納される。アンマスク処理においてマスク値を生成することになる。なお、レコード番号の範囲等、レコード番号を特定するためのデータを集計要求に含む場合もある。そして、本実施の形態におけるアンマスク処理は、図２７に示すような処理である。
【０１５５】
マスク解除処理部３１５は、カウンタｊを初期値「１」に設定する（図２７：ステップＳ１２１）。１ではなく、レコード番号の初期値に設定する場合もある。そして、マスク解除処理部３１５は、取得した鍵ｓを用いて、ｊ番目のレコードのためのマスク値ｒを生成し、マスク値格納部３１２に格納する（ステップＳ１２３）。この処理については、マスク値生成部３２２に処理を行わせるようにしても良い。また、ステップＳ１２１より前に全てのレコードｊについてまとめて行うようにしても良い。
【０１５６】
ステップＳ１２３では、ｓall以外の鍵を取得した場合には、ｒi,j＝ＡＥＳ（ｊ，ｓi）の下位ｂiビットでｒi,jを生成する。また、ｒall,j＝ＡＥＳ（ｊ，ｓall）の下位ｂallビットを生成する。ＡＥＳではなくＳＨＡ２５６を用いる場合には、ｓall以外の鍵を取得すれば、ｒi,j＝ＳＨＡ２５６（ｊ｜ｓi）の下位ｂiビットでｒi,jを生成する。また、ｒall,j＝ＳＨＡ２５６（ｊ｜ｓall）の下位ｂallビットを生成する。
【０１５７】
マスク長のデータについては、例えばマスク値格納部３１２にユーザ権限の段階に対応付けて格納しておく。
【０１５８】
そして、マスク解除処理部３１５は、ｊ番目のレコードにおけるマスク化値MaskedDatajを、第１マスク化値格納部３１４から読み出し、このマスク化値MaskedDatajに対して、マスク値格納部３１２に格納されているマスク値を用いてアンマスク化値UnmaskedDatajを生成し、レコードｊの他のデータと共にマスク解除データ格納部３１６に格納する（ステップＳ１２５）。
【０１５９】
アンマスク化値は以下のように演算される。
UnmaskedDataj＝MaskedDataj−ｒall,j−Σiｒi,j
【０１６０】
すなわち、マスク化値MaskedDatajから、レコードｊについて生成された全てのマスク値を減算することで、アンマスク化値UnmaskedDatajを生成する。マスク値については要求送信元のユーザのユーザ権限によって個数が異なるが、生成した全てのマスク値を減算する。
【０１６１】
そして、マスク解除処理部３１５は、ｊを１インクリメントし（ステップＳ１２７）、ｊがレコード数を超えたか判断する（ステップＳ１２９）。ｊがレコード数以下である場合にはステップＳ１２３に戻る。一方、ｊがレコード数を超えている場合には、元の処理に戻る。なお、ステップＳ１２７では、次のレコード番号をｊに設定し、ステップＳ１２９ではレコード番号の最大値を超えたかを判断する場合もある。
【０１６２】
このようにすれば、鍵ｓを用いる場合においても、第１の実施の形態で述べたような効果を得ることができるようになる。
【０１６３】
より具体的なシステムとして、チェーン店売り上げ管理のためのクラウドシステム３を構築するケースを考える。ここではユーザ権限は２段階で、各店舗の品目別の売上データをデータベース３３に登録する。そして、本部は最上位のユーザ権限を有しており、全支店の品目別の売上データを参照及び更新でき、支店は地域毎の品目別売上データを参照できるようにする。
【０１６４】
データベース３３に格納されるデータの一例を図２８に示す。図２８の例では、レコード番号と、支店コードと、品目と、個数と、金額とが登録されるようになっている。本実施の形態では、支店コードをマスク化対象データとする。
【０１６５】
ここでは全支店のデータを同一のデータベース３３に登録する。「支店コード」はマスク化されるが、プライバシ保護のためには、レコード番号から支店コードが推測されないようにする。例えば、レコード番号１乃至1000000が支店Ａに割り当てられ、レコード番号1000001乃至2000000が支店Ｂといったような、大きな単位の連番による割り当てを行わないようにする。レコード番号に対する支店コードの割り当てを不規則又はランダムとすることで、レコード番号と支店コードの対応を容易に推測されるのを防ぐ。各支店は、自店舗についてのレコードのレコード番号をローカルに保持しておき、他店舗についてのレコードのレコード番号についての情報は保持しない。自店舗についてのレコードのレコード番号を保持することで自店舗のデータについては全てのデータの分析及び参照が可能となる。すなわち、データベース３３の検索条件として、レコード番号を指定すればよい。この際得られるレコードにおいて「支店コード」はマスク化されたままであるが、他のカラムのデータはオリジナル値のままであるから、その点については問題ない。
【０１６６】
このような検索要求をユーザ端末７の要求送信部７１から処理サーバ３１に送信した場合には、要求受信部３１１が検索条件であるレコード番号をマスク化値取得部３１３に出力し、マスク化値取得部３１３はデータベース３３をレコード番号で検索して、該当レコードのデータをデータベース３３から読み出して、第１マスク化値格納部３１４に格納する。そして、出力部３２０は、要求受信部３１１からの要求送信元のアドレス等及び出力指示に従って、第１マスク化値格納部３１４から取得レコードのデータを読み出して、ユーザ端末７に送信する。その前に集計処理を実施しても良い。ユーザ端末７のデータ受信部７４は、データを受信すると、データ格納部７５に格納し、出力部７７は、データ格納部７５に格納されている受信データを、表示装置等の出力装置に出力する。
【０１６７】
また、「支店コード」をマスク化するためには、ｒ1及びｒallの２種類のマスク値を用いる。支店コードの体系を図２９（ａ）に示す。支店コードは１４ビットであり、上位６ビットが支店の地域情報に相当する都道府県番号を表し、下位８ビットが対象地域における個別の支店を区別するための支店番号を表す。支店コードは１６ビットワードで表現される。
【０１６８】
この場合、マスク値ｒ1は個別の店舗情報をマスク化するために用いられる８ビット乱数であり、ｒallは支店コード全体をマスク化するために用いられる１６ビット乱数である。
【０１６９】
本実施の形態では、「本店」は全マスク値を生成するための全ての鍵ｓ1及びｓallを保有し、「支店」は鍵ｓallのみを保有する。そして、実際のマスク値については上で述べた処理を行うことで生成される。このようにすれば、ユーザ権限に応じて与えられる鍵とレコード番号からマスク値が生成されるので、マスク値はユーザ権限を有する正当なユーザに対してのみ生成することができる値である。
【０１７０】
鍵からマスク値を生成できれば、図２９（ｂ）に示すように、オリジナル値に対してｒ1及びｒallを加算し、マスク化値を生成できる。また、図２９（ｃ）に示すように、本店は、鍵ｓ1及びｓallを提供して、マスク値ｒ1,j及びｒall,jを生成すれば、全支店の個別売上データを取得することができるようになる。一方、支店は、鍵ｓallのみを提供して、マスク値ｒall,jを生成すれば、地域（例えば都道府県）単位の売上データを取得することができるようになる。
【０１７１】
［実施の形態５］
上で述べた実施の形態ではマスク化処理ではオリジナル値に対してマスク値を加算する例を主に述べたが、マスク値の乗算も可能である。第２の実施の形態と同様の例で、説明する。
【０１７２】
ここでは、図３０（ａ）に示すように、住所番号は、市番号３桁、区町番号３桁及び番地番号５桁で表されるものとする。このような場合、マスク値ｒ1には、小数点以下１１桁中下位８桁が乱数となっている１．０００＊＊＊＊＊＊＊＊（＊は乱数値を表す）を用いる。また、マスク値ｒ2には、小数点以下１１桁中下位５桁が乱数となっている１．００００００＊＊＊＊＊を用いる。さらに、マスク値ｒallは、１の位と小数点以下１１桁中１１桁の全てが乱数となっている＊．＊＊＊＊＊＊＊＊＊＊＊を用いる。そして、図３０（ｂ）に示すように、オリジナル値ＡＡＡＢＢＢＣＣＣＣＣに対して、マスク値ｒ2を乗ずると下位５桁が乱数でマスク化された値ＡＡＡＢＢＢ＊＊＊＊＊が得られる。さらにマスク値ｒ1を乗ずると、下位８桁が乱数でマスク化された値ＡＡＡ＊＊＊＊＊＊＊＊が得られる。最後に、マスク値ｒallを乗ずるとマスク化値＊＊＊＊＊＊＊＊＊＊＊が得られる。
【０１７３】
一方、アンマスク処理を実施する場合、研究者及び保健所はマスク値ｒ1、ｒ2及びｒallを有しているので、これらのマスク値をユーザ端末７から処理サーバ３１に送信して、処理サーバ３１は、＊＊＊＊＊＊＊＊＊＊＊／ｒ1／ｒ2／ｒallを計算すれば、オリジナル値である住所全体を得ることができる。一方、医者はマスク値ｒ1及びｒallを有しているので、これらのマスク値をユーザ端末７から処理サーバ３１に送信して、処理サーバ３１は、＊＊＊＊＊＊＊＊＊＊＊／ｒ1／ｒallを計算すれば、アンマスク化値ＡＡＡＢＢＢ＊＊＊＊＊といった区町単位の住所コードを得ることができる。さらに、一般人はマスク値ｒallを有しているので、このマスク値をユーザ端末７から処理サーバ３１に送信して、処理サーバ３１は、＊＊＊＊＊＊＊＊＊＊＊／ｒallを計算すれば、アンマスク化値ＡＡＡ＊＊＊＊＊＊＊＊といった市単位の住所コードを得ることができる。
【０１７４】
上で述べたようなマスク値を生成するためのマスク値生成処理を、図３１を用いて説明する。
【０１７５】
マスク値生成部５１は、レコード番号のカウンタｊを１に初期化する（図３１：ステップＳ１３１）。そして、マスク値生成部５１は、ｊ番目のレコードのためのｉ番目のマスク値ｒi,j（ｉは、１以上ｋ以下の整数。但し、ユーザ権限の段階数をｋ＋１とする。）を、マスク長ｂiの乱数を用いて生成し、マスク値格納部５２に格納する（ステップＳ１３３）。具体的には、Ｈを基数（Ｈ進法）とすると、１＋Ｈ＾（−ｂall）×（ｂi桁乱数）で算出する。より具体的には以下のように表される。
ｒ1,j＝１＋Ｈ＾（−ｂall）×（ｂ1桁乱数）
ｒ2,j＝１＋Ｈ＾（−ｂall）×（ｂ2桁乱数）
ｒ3,j＝１＋Ｈ＾（−ｂall）×（ｂ3桁乱数）
：
：
ｒk,j＝１＋Ｈ＾（−ｂall）×（ｂk桁乱数）
【０１７６】
さらに、マスク値生成部５１は、ｊ番目のレコードのためのマスク値ｒall,jを、マスク長ｂallの乱数を用いて生成し、マスク値格納部５２に格納する（ステップＳ１３５）。具体的には、Ｈを基数（Ｈ進法）とすると、（１桁乱数）＋Ｈ＾（−ｂall）×（ｂall桁乱数）で算出する。  
【０１７７】
そして、マスク値生成部５１は、ｊを１インクリメントし（ステップＳ１３７）、ｊがレコード数を超えたかを判断する（ステップＳ１３９）。ｊがレコード数以下であればステップＳ１３３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【０１７８】
以上のようにマスク値を生成すれば、図３０で模式的に示した乗算及び除算によるマスクの処理が可能となる。
【０１７９】
なお、加算の場合と同様で、レコード毎に異なるマスク値を生成せず、レコード共通のマスク値を生成するようにしても良い。さらに、ｕ個のレコード毎にマスク値を変更するようにしても良い。
【０１８０】
次に、図３２を用いて、乗算を利用したマスク値適用処理について説明する。
【０１８１】
マスク値適用処理部５３は、カウンタｊを初期値「１」に設定する（ステップＳ１４１）。そして、マスク値適用処理部５３は、ｊ番目のレコードにおけるマスク化すべきオリジナル値Ｄａｔａjに対して、マスク値ｒall,j又はｒallを適用してマスク化値MaskedDatajを生成し、マスク化値格納部５５に格納する（ステップＳ１４３）。
【０１８２】
レコード共通のマスク値を生成した場合には、以下のような演算を実施する。
MaskedDataj＝Ｄａｔａj＊ｒall＊Πiｒi
【０１８３】
レコード毎にマスク値を生成した場合には、以下のような演算を実施する。
MaskedDataj＝Ｄａｔａj＊ｒall,j＊Πiｒi,j
【０１８４】
ｕ個のレコード毎にマスク値を生成した場合には、基本的にはレコード毎にマスク値を生成した場合と同様の演算が実施される。但し、マスク値の切替はｕ毎に行われるので、ｊ＝１からｊ＝ｕ−１まではｊ＝１のマスク値が用いられ、ｊ＝ｕからｊ＝２ｕ−１まではｊ＝ｕのマスク値が用いられ、ｊ＝２ｕからｊ＝３ｕ−１まではｊ＝２ｕのマスク値が用いられ、以下同様である。
【０１８５】
そして、マスク値適用処理部５３は、ｊを１インクリメントし（ステップＳ１４５）、ｊがレコード数を超えたか判断する（ステップＳ１４７）。ｊがレコード数以下であればステップＳ１４３に戻る。一方、ｊがレコード数を超えた場合には、元の処理に戻る。
【０１８６】
次に、図３３を用いて、図３２のマスク値適用処理を実施した場合に実施されるアンマスク処理について説明する。
【０１８７】
マスク解除処理部３１５は、カウンタｊを初期値「１」に設定する（図３４：ステップＳ１５１）。そして、マスク解除処理部３１５は、ｊ番目のレコードにおけるマスク化値MaskedDatajを、第１マスク化値格納部３１４から読み出し、このマスク化値MaskedDatajに対して、マスク値格納部３１２に格納されているマスク値を用いてアンマスク化値UnmaskedDatajを生成し、レコードｊの他のデータと共にマスク解除データ格納部３１６に格納する（ステップＳ１５３）。
【０１８８】
レコードに共通のマスク値を生成した場合には、アンマスク化値は以下のように演算される。
UnmaskedDataj＝MaskedDataj／ｒall／Πiｒi
【０１８９】
すなわち、マスク化値MaskedDatajから、ユーザから取得した全てのマスク値を除算することで、アンマスク化値UnmaskedDatajを生成する。マスク値については要求送信元のユーザのユーザ権限によって個数が異なるが、取得した全てのマスク値を除算する。Πiｒiは、ｒiが無ければ「１」になる。
【０１９０】
レコード毎にマスク値を生成した場合には、アンマスク化値は以下のように演算される。
UnmaskedDataj＝MaskedDataj／ｒall,j／Πiｒi,j
【０１９１】
すなわち、マスク化値MaskedDatajから、レコードｊについてユーザから取得した全てのマスク値を除算することで、アンマスク化値UnmaskedDatajを生成する。マスク値については要求送信元のユーザのユーザ権限によって個数が異なるが、取得した全てのマスク値を除算する。Πiｒiは、ｒiが無ければ「１」になる。
【０１９２】
また、ｕ個毎にマスク値を生成した場合には、マスク化値ｒi,j及びｒall,jについては、マスク値の切替はｕ毎に行われるので、ｊ＝１からｊ＝ｕ−１まではｊ＝１のマスク値が用いられ、ｊ＝ｕからｊ＝２ｕ−１まではｊ＝ｕのマスク値が用いられ、ｊ＝２ｕからｊ＝３ｕ−１まではｊ＝２ｕのマスク値が用いられ、以下同様である。
【０１９３】
そして、マスク解除処理部３１５は、ｊを１インクリメントし（ステップＳ１５５）、ｊがレコード数を超えたか判断する（ステップＳ１５７）。ｊがレコード数以下である場合にはステップＳ１５３に戻る。一方、ｊがレコード数を超えている場合には、元の処理に戻る。
【０１９４】
以上のように乗算と除算の組み合わせによっても、第１の実施の形態で述べた効果を得ることができるようになる。
【０１９５】
［実施の形態６］
第２乃至第５の実施の形態では、ユーザ端末７からマスク値又は鍵をクラウドシステム３の処理サーバ３１に送信して処理サーバ３１でアンマスク処理を実施することになっていた。マスク値又は鍵をネットワーク１を介して送信する場合には、漏洩の危険性がある。
【０１９６】
従って、例えばデータベース３３から処理すべきデータを受信してユーザ端末７のマスク解除処理部７３でアンマスク処理を実施した上で集計処理を実施するようにしても良い。但し、大量のデータをネットワーク１を介して要求元のユーザ端末７に送信することになる場合もあるので、このような処理が現実的な時間内で実施できない場合もある。
【０１９７】
そこで、以下で述べるような処理を行うことで、鍵又はマスク値を処理サーバ３１に送信することなく、集計処理結果をユーザ端末７で得ることができるようにする。
【０１９８】
まず、同一のオリジナル値については同一のマスク化値が生成されるようにして、処理サーバ３１がアンマスク処理をせずとも、ユーザ権限に応じた範囲で分類を行うことができるようにする。例えば図３４に示すような住所のデータをマスク対象のオリジナル値とする。市名、区名、番地名は、何度も異なるレコードに出現する。これを、例えば図３５に示すようなマスク値に変換する。例えば、「川崎市」であれば「Ｘ1市」に変換し、「横浜市」であれば「Ｘ2市」に変換し、「高津区」であれば「Ｙ1区」に変換する。また、「中原区」であれば「Ｙ2区」に変換し、「中央区」であれば「Ｙ3区」に変換し、「南区」であれば「Ｙ4区」に変換する。さらに、「１１１番地」であれば「Ｚ1番地」に変換し、「１１２番地」であれば「Ｚ2番地」に変換し、「２００番地」であれば「Ｚ3番地」に変換し、「３００番地」であれば「Ｚ4番地」に変換し、「４００番地」であれば「Ｚ5番地」に変換し、「５００番地」であれば「Ｚ6番地」に変換する。
【０１９９】
そして、研究者及び地域保健所に対して、住所全体を参照できるようにするための鍵を配布しておき、図３５のようなマスク化値を処理サーバ３１から研究者及び地域保健所に集計結果として送信する。ユーザ端末７では、以下で述べるようなアンマスク処理を実施すれば、図３４に示すようなオリジナル値を得ることができる。
【０２００】
これに対して、医者に対して、市及び区町を参照できるようにするための鍵を配布しておき、処理サーバ３１において区町単位で感染者数を集計して、当該集計結果をユーザ端末７に送信する。例えば図３５のようなマスク化値を、区町単位で集計すると、図３６に示すような集計結果が得られる。図３６に示すように「Ｘ1市Ｙ1区」については「１６」人、「Ｘ1市Ｙ2区」については「４」人、「Ｘ2市Ｙ3区」については「１７」人といったように集計される。ユーザ端末７では、配布されている鍵を用いてアンマスク処理を実施すれば、図３７に示すように市及び区町については平文になって感染者数を区町単位で理解できるようになる。
【０２０１】
さらに、一般人に対して、市を参照できるようにするための鍵を配布しておき、処理サーバ３１において市単位で感染者数を集計して、当該集計結果をユーザ端末７に送信する。例えば図３５に示すようなマスク化値を、市単位で集計すると、図３８に示すような集計結果が得られる。図３８に示すように、「Ｘ1市」については「２０」人、「Ｘ2市」については「３１」人といったように集計される。ユーザ端末７では、配布されている鍵を用いてアンマスク処理を実施すれば、図３９に示すように市については平文になって感染者数を市単位で理解できるようになる。
【０２０２】
また、本実施の形態では、住所をマスク化対象のデータとするが、住所コードを用いるのではなく、住所を表現する文字列を、そのまま１文字２バイトの文字コードに置き換えた形式で処理する。例えば「川崎市」という文字列は、３×２バイト＝６バイトの文字コードで表現される。これによって上で述べた住所コードを用いる方法より、情報量が大きくなるが、市コードや町区コードと市名や町名を対応付けるデータベースが不要となるので、システムの実装が簡略化できる。
【０２０３】
図４０（ａ）に示すように、市名は最大７文字で１４バイト、町区名は最大５文字で１０バイト、番地名は最大６文字で１２バイトで、合計３６バイトで表現することとする。
【０２０４】
このため、一般人がアンマスク処理で用いることができるマスク値ｒallは、３６バイト乱数となる。また、医者がアンマスク処理で用いることができるマスク値ｒ1は、２２（＝１０＋１２）バイト乱数となる。さらに、研究者及び地域保健所がアンマスク処理で用いることができるマスク値ｒ2は、１２バイト乱数となる。
【０２０５】
従って、図４０（ｂ）に示すようなマスク化処理が行われる。本実施の形態では、排他的論理和が用いられる。すなわち、オリジナル値に対して、マスク値ｒ1、ｒ2及びｒallを用いて排他的論理和演算を行う。
【０２０６】
一方、図４０（ｃ）に示すようなアンマスク処理では、研究者及び地域保健所については、配布されている鍵から生成されるマスク値ｒ1、ｒ2及びｒallを用いて、マスク化値に対して排他的論理和演算を行う。また、医者については、配布されている鍵から生成されるマスク値ｒ1及びｒallを用いて排他的論理和演算を行う。さらに、一般人については、配布されている鍵から生成されるマスク値ｒallを用いて排他的論理和演算を行う。図４０（ｃ）の演算については、ユーザ端末７側で行うので、鍵を処理サーバ３１に送信せずとも、アクセスが許可されている範囲においてオリジナル値の部分を参照できるようになる。
【０２０７】
以下、図４１乃至図４４を用いて、詳細な処理について説明する。まず、本実施の形態に係るマスク化処理を図４１を用いて説明する。ここでは、処理サーバ３１においてマスク化処理を実施する場合を説明する。また、鍵ｓ1、ｓ2及びｓallについては、予め用意しておき、マスク値格納部３１２に格納しておくものとする。但し、最上位のユーザ権限を有するユーザには、鍵ｓall、ｓ1及びｓ2を配布し、２番目のユーザ権限を有するユーザには、鍵ｓall及びｓ1を配布し、最下位のユーザ権限を有するユーザには、鍵ｓallを配布するものとする。
【０２０８】
マスク値生成部３２２は、レコード番号を表すカウンタｊを１に初期化する（ステップＳ１７１）。そして、マスク値生成部３２２は、ｊ番目のレコードにおけるマスク対象のオリジナル値Ｄａｔａjを所定単位毎に分割してデータ部分Ｃ、Ｄ及びＢを生成し、例えばメインメモリなどの記憶装置に格納する（ステップＳ１７３）。Ｃ、Ｄ及びＢは、上で述べた例では市、区町及び番地に相当する。但し、分割個数や各データ部分のデータ長は任意である。
【０２０９】
その後、マスク値生成部３２２は、データ部分Ｃと鍵ｓallとのハッシュｃHと、データ部分Ｄと鍵ｓ1とのハッシュｄHと、データ部分Ｂと鍵ｓ2とのハッシュｂHとを生成し、例えばメインメモリなどの記憶装置に格納する（ステップＳ１７５）。
【０２１０】
例えばＳＨＡ２５６を用いてハッシュ値を算出する。具体的には以下のとおりである。
ｃH＝ＳＨＡ２５６（Ｃ｜ｓall）
ｄH＝ＳＨＡ２５６（Ｄ｜ｓ1）
ｂH＝ＳＨＡ２５６（Ｂ｜ｓ2）
【０２１１】
ｃH、ｄH及びｂHについては、一方向関数を用いており、さらに鍵ｓall、ｓ1及びｓ2がなければオリジナル値を得ることはできないので、安全である。
【０２１２】
但し、上で述べたようなハッシュ関数ＳＨＡ２５６であれば２５６ビットの出力となり、以下で述べるように連結して用いることになるので、マスク化値の長さが長すぎることになる場合もある。従って、下位Ｌビット（例えば６４ビット）のみを採用するようにしてもよい。
【０２１３】
さらに、マスク値生成部３２２は、ハッシュ値ｃHと鍵ｓallとのハッシュ値からｒall,jを生成し、ハッシュ値ｄHと鍵ｓ1とのハッシュ値からｒ1,jを生成し、ハッシュ値ｂHと鍵ｓ2とのハッシュ値からｒ2,jを生成し、マスク値格納部３１２に格納する（ステップＳ１７７）。
【０２１４】
例えばＳＨＡ２５６を用いてハッシュ値を算出する。具体的には以下のとおりである。
ｒall,j＝ＳＨＡ２５６（ｃH｜ｓall）
ｒ1,j＝ＳＨＡ２５６（ｄH｜ｓ1）
ｒ2,j＝ＳＨＡ２５６（ｂH｜ｓ2）
【０２１５】
なお、ｒall,jについては、オリジナル値Ｄａｔａjのデータ長以上でなければならないので、長すぎる場合には下位Ｌビットを採用する。一方、短すぎる場合には、ＳＨＡ２５６（ｃH｜ｓall｜０）｜ＳＨＡ２５６（ｃH｜ｓall｜１）｜・・・といったように、カウンタを連結した値をハッシュ関数に入れた結果を連結してゆくことによってオリジナル値Ｄａｔａjのデータ長以上にする。
【０２１６】
同様に、ｒ1,jについては、ＳＨＡ２５６（ｄH｜ｓ1）のうちデータ部分Ｄ及びＢのデータ長分だけ採用する。短すぎる場合には、ｒall,jと同様の方式を採用して長くする。
【０２１７】
さらに、ｒ2,jについては、ＳＨＡ２５６（ｂH｜ｓ2）のうちデータ部分Ｂのデータ長分だけ採用する。短すぎる場合には、ｒall,jと同様の方式を採用して長くする。
【０２１８】
そして、マスク値適用処理部３２３は、オリジナル値Ｄａｔａjとｒall,jとｒ1,jとｒ2,jとの排他的論理和を算出し、さらに、排他的論理和の結果とｃHとｄHとｂHとのビット結合を行い、マスク化値MaskedDatajとしてマスク値格納部３１２に格納する（ステップＳ１７９）。
【０２１９】
すなわち、以下のように表現される。
MaskedDataj＝ｃH|ｄH|ｂH|（Ｄａｔａj＋ｒ1,j＋ｒ2,j＋ｒall,j）
なお、上記の式の「＋」は排他的論理和を表すものとする。
【０２２０】
その後、マスク値生成部３２２は、ｊを１インクリメントし（ステップＳ１８１）、ｊがレコード数を超えているか判断する（ステップＳ１８３）。ｊがレコード数を超えていない場合にはステップＳ１７３に戻る。一方、ｊがレコード数を超えた場合には元の処理に戻る。
【０２２１】
ｃH|ｄH|ｂHについては、アンマスク処理において鍵と併せてマスク値を生成するために、排他的論理和の結果に連結する。上でも述べたように、ｃH|ｄH|ｂHだけでは、オリジナル値を復元できないので、データ漏洩の恐れはない。
【０２２２】
さらに、上で述べたｃH|ｄH|ｂH部分は、市であればｃHと１対１対応しており、区町であればｄHと１対１対応しており、番地であればｂHと１対１対応している。従って、この部分を用いてアンマスク処理を行わずに分類を行うことができる。
【０２２３】
次に、ユーザが集計結果を取得する際の処理について、図４２乃至図４４を用いて説明する。
【０２２４】
ユーザ端末７の要求送信部７１は、ユーザからの指示に応じて、当該ユーザのユーザ権限の段階を表すデータ及び集計処理の対象データ群を指定するデータを含む集計要求を、クラウドシステム３の処理サーバ３１に送信する（ステップＳ２０１）。上でも述べたように鍵又はマスク値については送信しない。
【０２２５】
処理サーバ３１の要求受信部３１１は、ユーザ端末７から、ユーザ権限の段階を表すデータ及び集計処理の対象データ群を指定するデータを含む集計要求を受信し（ステップＳ２０３）、マスク化値取得部３１３にデータベース３３から集計処理の対象データ群を指定するデータを取得させ、第１マスク化値格納部３１４に格納させる。さらに、要求受信部３１１は、集計処理部３１７に処理を指示する。
【０２２６】
集計処理部３１７は、第１マスク化値格納部３１４に格納されているデータについて、ユーザ権限の段階に応じたデータ区分でレコードを分類し、分類毎にレコード内の集計対象数値（例えば集計要求で指定）を合計する集計処理を実施し、集計結果格納部３１９に格納する（ステップＳ２０５）。上で述べた例で一般人であれば市単位「ｃH」でレコードを分類し、集計対象数値である感染者数を合計する。また、医者であれば区町単位「ｃH｜ｄH」でレコードを分類し、集計対象数値である感染者数を合計する。研究者及び地域保健所であれば、番地単位「ｃH｜ｄH｜ｂH」でレコードを分類し、集計対象数値である感染者数を合計する。
【０２２７】
そして、出力部３２０は、集計結果格納部３１９に格納されている集計結果のデータを、要求受信部３１１から受け取ったアドレス等を用いてユーザ端末７に送信する（ステップＳ２０７）。これに対して、ユーザ端末７のデータ受信部７４は、処理サーバ３１から集計結果のデータを受信し、データ格納部７５に格納する（ステップＳ２０９）。図３５、図３６又は図３８に示すようなデータがデータ格納部７５に格納される。
【０２２８】
そして、ユーザ端末７のマスク解除処理部７３は、データ格納部７５に格納されている集計結果に含まれるマスク化値に対して、マスク値格納部７６に格納されている鍵を用いてアンマスク処理を実施する（ステップＳ２１１）。アンマスク処理の処理結果についてはデータ格納部７５に格納される。アンマスク処理については、図４３及び図４４を用いて説明する。
【０２２９】
マスク解除処理部７３は、レコードのカウンタｋを１に初期化する（ステップＳ２２１）。そして、マスク解除処理部７３は、ｋ番目のレコードにおけるマスク化値から、当該マスク化値に連結されているハッシュ値ｃHとｄHとｂHとを抽出し、例えばメインメモリなどの記憶装置に格納する（ステップＳ２２３）。
【０２３０】
そして、マスク解除処理部７３は、データ格納部７５に格納されている鍵の個数等からユーザが最上位のユーザ権限を有しているか確認する（ステップＳ２２５）。ユーザ権限の段階を表すデータをデータ格納部７５に格納しておくようにしても良い。
【０２３１】
ユーザが最上位のユーザ権限を有する場合には、鍵ｓallとｃHとのハッシュ値をｒall,kとして生成し、鍵ｓ1とｄHとのハッシュ値をｒ1,kとして生成し、鍵ｓ2とｂHとのハッシュ値をｒ2,kとして生成し、データ格納部７５に格納する（ステップＳ２２７）。本ステップは実質的にステップＳ１７７と同じであり、各マスク値のマスク長をそれぞれの鍵に対応付けて例えばマスク値格納部７６に格納しておき、算出されたハッシュ値からマスク長の値を抽出する。
【０２３２】
そして、マスク解除処理部７３は、ｋ番目のレコードにおけるマスク化値からハッシュ値以外の部分XorDataを抽出し、当該XorDataとマスク値ｒall,kとｒ1,kとｒ2,kとの排他的論理和を算出することでアンマスク化値を生成し、データ格納部７５に格納する（ステップＳ２２９）。このようにすれば、オリジナル値が復元される。処理は端子Ａを介して図４４のステップＳ２４１に移行する。
【０２３３】
一方、ユーザ権限が最上位ではない場合には、マスク解除処理部７３は、ユーザ権限の上から２段階目であるか判断する（ステップＳ２３１）。ユーザ権限が上から２段階目でない場合には、端子Ｂを介して図４４の処理に移行する。一方、ユーザ権限が上から２段階目である場合には、マスク解除処理部７３は、鍵ｓallとハッシュ値ｃHとのハッシュ値をマスク値ｒall,kとして生成し、鍵ｓ1とハッシュ値ｄHとのハッシュ値をマスク値ｒ1,kとして生成し、データ格納部７５に格納する（ステップＳ２３３）。このステップについてもステップＳ１１７とほぼ同じであるが、鍵ｓ2はないので、その分演算を行わない点が異なる。
【０２３４】
そして、マスク解除処理部７３は、ｋ番目のレコードにおけるマスク化値からハッシュ値以外の部分XorDataを抽出し、当該XorDataとマスク値ｒall,kとｒ1,kとの排他的論理和を算出することでアンマスク化値を生成し、データ格納部７５に格納する（ステップＳ２３５）。これによって、上で述べた例では市及び区町についてのデータについてはアンマスク化されて、図３７に示すようなデータが得られるようになる。処理は端子Ａを介して図４４のステップＳ２４１に移行する。
【０２３５】
図４４の処理の説明に移行して、端子Ｂの後に、マスク解除処理部７３は、鍵ｓallとハッシュ値ｃHとのハッシュ値をマスク値ｒall,kとして生成し、データ格納部７５に格納する（ステップＳ２３７）。このステップについてもステップＳ１１７とほぼ同じであるが、鍵ｓ1及びｓ2はないので、その分演算を行わない点が異なる。
【０２３６】
そして、マスク解除処理部７３は、ｋ番目のレコードにおけるマスク化値からハッシュ値以外の部分XorDataを抽出し、当該XorDataとマスク値ｒall,kとの排他的論理和を算出することでアンマスク化値を生成し、データ格納部７５に格納する（ステップＳ２３９）。これによって、上で述べた例では市についてのデータについてはアンマスク化されて、図３９に示すようなデータが得られるようになる。
【０２３７】
そして、マスク解除処理部７３は、ｋを１インクリメントし（ステップＳ２４１）、ｋが受信レコード数を超えたか判断する（ステップＳ２４３）。ｋが受信レコード数を超えていない場合には端子Ｃを介してステップＳ２２３に戻る。一方、ｋが受信レコード数を超えた場合には、元の処理に戻る。
【０２３８】
このようすればユーザ権限に応じたデータをアンマスク化することができる。
【０２３９】
図４２の処理の説明に戻って、出力部７７は、データ格納部７５に格納されており且つアンマスク化されたデータを、表示装置等の出力装置に出力する（ステップＳ２１３）。上でも述べたように、図３４、図３７又は図３９のようなデータが出力されるようになる。
【０２４０】
このように、鍵又はマスク値をネットワーク１を介して処理サーバ３１に送らなくても、集計結果をユーザ端末７において生成できるようになる。
【０２４１】
なお、市の名称、区町の名称、番地の付与の仕方などが変更されれば、ハッシュ値が変化するため、マスク値も変化する。従って、市の名称、区町の名称、番地の付与の仕方が変更された場合には、それに同期してマスク化処理を行うものとする。
【０２４２】
［実施の形態７］
第６の実施の形態によれば、クラウドシステム３の処理サーバ３１に鍵を送信することなく、ユーザ権限に応じた集計処理（すなわち分析）が可能となる。このメリットを応用すると、クラウドシステム３の処理サーバ３１に鍵を送信することなく、複数の組織間での協業が可能となる。様々な組織が同一のクラウド環境を利用することで、複数の企業が互いのデータを持ち寄り、協業するといった利用法が可能になる。このような利用形態においては、以下の２つの要件が考えられる。
・協業関係にない企業（及び個別ユーザ）には情報閲覧を許可しない
・協業関係にある企業間では、企業内のユーザ権限に応じた情報閲覧を許可する
【０２４３】
これらの問題は、データベース３３にＡ社とＢ社の両社のデータを蓄積しておき、Ａ社とＢ社とで鍵を一部共有することで解決される。
【０２４４】
具体的には、自社の鍵を用いて自社のデータをマスク化して、クラウドシステム３のデータベース３３に登録する。なお、マスク化については管理者装置５を各社に設けて行うようにしてもよいし、ユーザ端末に管理者装置５の機能を持たせるようにしても良い。
【０２４５】
より具体的には、Ａ社のデータはＡ社の鍵でマスク化されクラウドシステム３のデータベース３３に登録され、Ｂ社のデータはＢ社の鍵でマスク化されクラウドシステム３のデータベース３３に登録される。Ａ社及びＢ社のそれぞれは、データの参照や分析（集計処理）に用いられる鍵を共有する。鍵の共有には、ＳＳＬ（Secure Socket Layer）やＩＰｓｅｃといった一般的な暗号化通信を、両社の装置間で直接行うことで、クラウドシステム３に鍵を送信せずに行うことができる。鍵が共有されれば、Ａ社はＢ社が登録したデータを参照したり分析したりすることができ、Ｂ社はＡ社が登録したデータを参照したり分析したりすることができる。すなわち、Ａ社のデータであればＡ社の鍵を用いて、ローカルにアンマスクすることで所望の結果を得ることができ、Ｂ社のデータであればＢ社の鍵を用いて、ローカルにアンマスクすることで所望の結果を得ることができる。
【０２４６】
このシステムにおいて、Ａ社及びＢ社のデータを参照したり分析したりするためには、Ａ社及びＢ社の鍵を取得することになるが、この鍵はＡ社及びＢ社以外知ることができない値であるので、協業に無関係な企業やユーザに対する情報漏洩を防止することができる。さらに、Ａ社及びＢ社それぞれが鍵を共有するプロセスにおいても、ユーザ権限に応じて適切なレベルの鍵のみを渡すことで、企業内のユーザ権限に応じた柔軟なプライバシ制御が可能である。例えば、Ａ社及びＢ社は、協業するために情報を共有するが、完全なオリジナル値はお互いに見せないようにしながら、協業における業務分析に用いられるデータのみを提示できるようになる。具体的には、ｋ段階目のユーザ権限を制御する鍵ｒall、ｒ1、ｒ2、．．．ｒk-1のうち、一部の鍵を相手の企業に渡すことで、協業相手の企業に見せたい情報と見せたくない情報を容易に制御することができる。さらにこれらの鍵の数を、協業相手の企業のユーザの役職に応じて切り替えることで、重要な役職には多くの情報を、一般的な役職には一般的な情報を参照する、といった役職に応じた機密情報の制御を容易に実現することができる。
【０２４７】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。すなわち、上で述べた機能ブロック図については一例であって、必ずしも実際のプログラムモジュール構成とは一致しない場合もある。また、処理フローについても処理結果が変わらない限り、処理順番を入れ替えたり、並列して実行してもよい。
【０２４８】
さらに、上で述べた技術は様々に変形可能であるから、各機能についてはネットワーク上の様々な位置に配置されることになる。すなわち、様々な装置間で協働して上で述べたような機能を実現する。
【０２４９】
なお、上で述べたユーザ端末７及び９、管理者装置５並びに処理サーバ３１等は、コンピュータ装置であって、図４５に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０２５０】
以上述べた本実施の形態をまとめると、以下のようになる。
【０２５１】
本実施の形態の第１の態様に係る情報処理方法は、（Ａ）第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための第１のデータ長以上の長さを有する第１のマスクと、第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成ステップと、（Ｂ）記憶装置に格納されている第１のマスクと第２のマスクとを、第１のデータに対して重ねて適用するマスク処理を実施し、第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスクステップとを含む。
【０２５２】
このように第１のマスクで第１のデータをマスクすることによって第１のデータ全体の秘匿が可能になる。また、第２のデータを分析しても正しい分析は行われない。さらに、第１のデータに複数のマスクを重ねて適用しておくことで、マスクの配布先を権限レベルに応じて適切に制御することによって、第１のデータの開示度合いをも権限レベルに応じて適切に調整できるようになる。すなわち、オープンな環境においてデータベース内のデータを利用に適した形で適切に秘匿することができるようになる。
【０２５３】
また、上で述べた第２のデータ長は、権限レベルが高いほど短くなるように設定しても良い。逆に、権限レベルが高いほど、マスクされるデータ長が短くなるので、第１のデータの開示度合いも高くなる。
【０２５４】
また、上で述べたマスク処理が、第１のデータに対する第１のマスク及び第２のマスクの加算、減算、乗算、除算又は排他的論理和であるようにしてもよい。これらの演算については逆演算を用意できるためである。
【０２５５】
さらに、上で述べたマスク生成ステップが、第１のデータ長以上の乱数を発生させることで第１のマスクを生成し、記憶装置に格納するステップと、第２のデータ長の乱数を発生させることで第２のマスクを生成し、記憶装置に格納するステップとを含むようにしてもよい。第１のデータを秘匿するためのデータであれば乱数でなくとも良い。
【０２５６】
また、上で述べた第１のデータがデータベースにおけるレコードの少なくとも一部のデータであることもある。そのような場合、上で述べたマスク生成ステップを、レコード毎に実施するようにしてもよい。また、上で述べたマスク生成ステップを、所定数のレコード毎に実施するようにしてもよい。ある範囲のレコード全てについて同一のマスクを使用するようにしても良い。
【０２５７】
また、上で述べた第１のデータがデータベースにおけるレコードの少なくとも一部のデータであることもある。そのような場合、上で述べたマスク生成ステップが、鍵データ格納部に格納されている、第１のマスクのための第１の鍵とレコードの識別子とに対して所定の一方向関数を適用して第１のマスクを生成し、記憶装置に格納するステップと、鍵データ格納部に格納されている、第２のマスクのための第２の鍵とレコードの識別子とに対して所定の一方向関数を適用して第２のマスクを生成し、記憶装置に格納するステップとを含むようにしてもよい。このように一方向関数（例えばハッシュ関数や暗号化アルゴリズム）を使用することで、乱数と同じようなマスクに適したデータを生成できるようになる。なお、レコードの識別子を用いることで、ユーザは鍵を有しているだけで各レコードのマスクを生成できるようになる。すなわち、ユーザが保持するデータ量を減らすことができる。
【０２５８】
さらに、上で述べたマスク生成ステップが、（ａ１）第１のデータ格納部に格納されている第１のデータを権限レベル毎の開示範囲に応じて決められるデータ長で分割して複数のデータ部分を生成し、記憶装置に格納するステップと、（ａ２）複数のデータ部分のうち最上位のデータ部分と、鍵データ格納部に格納されている、最上位のデータ部分のための第１の鍵とに対して第１の一方向関数を適用して、第１の一方向関数値を生成し、記憶装置に格納するステップと、（ａ３）複数のデータ部分のうち第２位以降の各データ部分と、鍵データ格納部に格納されており且つ当該データ部分のための第２の鍵とに対して第１の一方向関数を適用して、第２の一方向関数値を生成し、記憶装置に格納するステップと、（ａ４）記憶装置に格納された第１の一方向関数値と第１の鍵とに対して第２の一方向関数を適用して第１のマスクを生成し、記憶装置に格納するステップと、（ａ５）記憶装置に格納された第２の一方向関数値と当該第２の一方向関数値を生成する際に用いられた対応する第２の鍵とに対して第２の一方向関数を適用して第２のマスクを生成し、記憶装置に格納するステップとを含むようにしてもよい。その場合、上で述べたマスクステップが、第２のデータ格納部に格納されている第２のデータに第１の一方向関数値と第２の一方向関数値とを連結したデータを生成し、第３のデータ格納部に格納するステップを含むようにしてもよい。
【０２５９】
第１の一方向関数値と第２の一方向関数値とを連結したことによって、アンマスク処理を実施する前にこれらの値を用いてマスク化されたデータを分類できるようになる。すなわち、それらの値についてはマスク化されたデータであっても、オリジナル値との対応付けが１対１になる。よって、データ部分の単位でマスク化されたデータを分類しても、マスク化前のデータの分類と一致するようになる。
【０２６０】
さらに、（ａ１）乃至（ａ５）ステップを含む第１の形態に係る情報処理方法は、ある権限レベルが指定されると、当該ある権限レベルに対応付けられている、第１のデータ内における１又は複数のデータ部分についての第２の一方向関数値で第１のデータを含むレコードに対して分類処理を実施し、分類結果を出力するステップをさらに含むようにしても良い。上で述べたような処理によって一方向関数値を含むマスク後のデータを生成する場合には、一方向関数値で分類処理を行っても、オリジナル値で分類するのと同じ結果を得ることができる。
【０２６１】
本実施の形態の第２の態様に係る情報処理方法は、（Ｃ）マスクデータを取得し、記憶装置に格納するマスク取得ステップと、（Ｄ）第１のデータ長を有する第１のデータをマスクするための第１のデータ長以上の長さを有する第１のマスクと、第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、記憶装置に格納されているマスクデータに含まれる、マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理ステップとを含む。
【０２６２】
これによって、取得されたマスクデータに含まれているマスクに応じた逆マスク処理（マスク解除処理、アンマスク処理とも呼ぶ）を行うことで、権限レベルに応じた範囲でマスク化前のデータをユーザに提示することができるようになる。
【０２６３】
また、上で述べた第２のデータ長は、権限レベルが高いほど短くなるようにしてもよい。
【０２６４】
さらに、上で述べたマスク処理が、第１のデータに対する第１のマスク及び第２のマスクの加算、減算、乗算、除算又は排他的論理和である場合もある。そして、上で述べた逆マスク処理が、マスク処理で加算が採用されていれば減算、マスク処理で減算が採用されていれば加算、マスク処理で乗算が採用されていれば除算、マスク処理で除算が採用されていれば乗算、マスク処理で排他的論理和が採用されていれば排他的論理和である場合もある。適切にマスク解除を行うことができるようになる。
【０２６５】
さらに、上で述べたマスク化データがデータベースにおけるレコードの少なくとも一部のデータであることもある。その場合、上で述べたマスクデータが、レコード毎にマスクを含む場合もある。そして、上で述べた逆マスク処理ステップを、レコード毎に当該レコードのマスクを用いて実施するようにしてもよい。一方、上で述べたマスクデータが、所定数のレコード毎にマスクを含む場合もある。その場合、逆マスク処理ステップを、所定数のレコード毎に当該所定数のレコードのためのマスクを用いて実施するようにしてもよい。さらに、レコードに共通のマスクが用意されている場合もある。
【０２６６】
さらに、上で述べたマスク化データがデータベースにおけるレコードの少なくとも一部のデータである場合もある。そして、上で述べた第２の態様に係る情報処理方法は、鍵データを取得し、鍵データ格納部に格納するステップをさらに含むようにしてもよい。その場合、上で述べたマスク取得ステップが、鍵データ格納部に格納されている鍵データに含まれる、第１のマスクのための第１の鍵とレコードの識別子とに対して所定の一方向関数を適用して第１のマスクを生成し、記憶装置に格納するステップと、鍵データ格納部に格納されている鍵データに第２のマスクのための第２の鍵が含まれている場合には、当該第２の鍵とレコードの識別子とに対して所定の一方向関数を適用して第２のマスクを生成し、記憶装置に格納するステップとを含むようにしてもよい。さらに、逆マスク処理ステップを、レコード毎に当該レコードのマスクを用いて実施するようにしてもよい。このようにすれば、鍵データを保持していればマスクを保持していなくても、マスクを生成できる。
【０２６７】
また、逆マスク化データがデータベースにおけるレコードの少なくとも一部のデータである場合もある。そのような場合、第２の態様に係る情報処理方法は、逆マスク化データに基づきレコードを分類し、各分類に分類されたレコードに含まれる他の値に対して集計処理を実施するステップをさらに含むようにしてもよい。例えば住所がマスク化されていれば、逆マスク処理によって現れた住所の一部分に基づき分類を行うようにしても良い。
【０２６８】
さらに、上で述べたマスク処理が、第１のデータに対する第１のマスク及び第２のマスクの加算である場合もある。その場合、逆マスク処理が、マスク化データから、マスクデータに含まれる当該マスク化データのための全てのマスクを減算する処理である。そして、逆マスク化データがデータベースにおけるレコードに含まれる数値データである場合もある。そのような場合には、第２の態様に係る情報処理方法は、レコードに含まれる他のデータに基づきレコードを分類し、逆マスク化データで表される数値を加算し、加算結果から上記最もデータ長が短いマスクの平均値から算出される誤差を引くことによって集計結果を算出するステップをさらに含むようにしてもよい。このように、数値データをマスク化する場合には、統計的に誤差を修正することによって、逆マスク処理で一部がマスクされたままでも、確からしい値を出力することができるようになる。
【０２６９】
また、第２の態様に係る情報処理方法は、マスク化データと、第１のデータを権限レベル毎の開示範囲に応じて決められるデータ長で分割することによって得られる複数のデータ部分の各々と対応する鍵との一方向関数値とを含む秘匿化データを取得し、第１データ格納部に格納するステップをさらに含むようにしてもよい。そのような場合、上で述べたマスク取得ステップが、鍵データ格納部に格納されている鍵データに含まれる第２の鍵（すなわちユーザが保持している鍵）と上記秘匿化データに含まれ且つ第１データ格納部に格納された対応する一方向関数値とに対して第２の一方向関数を適用してマスクデータを生成し、記憶装置に格納するステップを含むようにしても良い。
【０２７０】
このような構成であれば、逆マスク処理を行う際に、第２の鍵を、秘匿化データを蓄積しているデータベース側の他のコンピュータに送信せずとも、ローカルに逆マスク処理を実施することができるようになる。すなわち、鍵の漏洩リスクを減らすことができるようになる。なお、秘匿化データに含まれる一方向関数値と、その元となるデータ部分とは１対１関係にあり、秘匿化データも、一方向関数値を用いればデータ部分の単位で分類することができる。
【０２７１】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【０２７２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２７３】
（付記１）
第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成ステップと、
前記記憶装置に格納されている前記第１のマスクと前記第２のマスクとを、前記第１のデータに対して重ねて適用するマスク処理を実施し、前記第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスクステップと、
を含み、コンピュータに実行される情報処理方法。
【０２７４】
（付記２）
前記第２のデータ長は、前記権限レベルが高いほど短くなる
付記１記載の情報処理方法。
【０２７５】
（付記３）
前記マスク処理が、前記第１のデータに対する前記第１のマスク及び前記第２のマスクの加算、減算、乗算、除算又は排他的論理和である
付記１又は２記載の情報処理方法。
【０２７６】
（付記４）
前記マスク生成ステップが、
前記第１のデータ長以上の乱数を発生させることで前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記第２のデータ長の乱数を発生させることで前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含む付記１乃至３のいずれか１つ記載の情報処理方法。
【０２７７】
（付記５）
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップを、前記レコード毎に実施する
付記１乃至４のいずれか１つ記載の情報処理方法。
【０２７８】
（付記６）
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップを、所定数のレコード毎に実施する
付記１乃至４のいずれか１つ記載の情報処理方法。
【０２７９】
（付記７）
前記第１のデータがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスク生成ステップが、
鍵データ格納部に格納されている、前記第１のマスクのための第１の鍵と前記レコードの識別子とに対して所定の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記鍵データ格納部に格納されている、前記第２のマスクのための第２の鍵と前記レコードの識別子とに対して前記所定の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含む付記１乃至４のいずれか１つ記載の情報処理方法。
【０２８０】
（付記８）
前記マスク生成ステップが、
前記第１のデータ格納部に格納されている前記第１のデータを前記権限レベル毎の開示範囲に応じて決められるデータ長で分割して複数のデータ部分を生成し、前記記憶装置に格納するステップと、
前記複数のデータ部分のうち最上位のデータ部分と、鍵データ格納部に格納されている、前記最上位のデータ部分のための第１の鍵とに対して第１の一方向関数を適用して、第１の一方向関数値を生成し、前記記憶装置に格納するステップと、
前記複数のデータ部分のうち第２位以降の各データ部分と、前記鍵データ格納部に格納されており且つ当該データ部分のための第２の鍵とに対して前記第１の一方向関数を適用して、第２の一方向関数値を生成し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記第１の一方向関数値と前記第１の鍵とに対して第２の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記記憶装置に格納された前記第２の一方向関数値と当該第２の一方向関数値を生成する際に用いられた対応する第２の鍵とに対して前記第２の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含み、
前記マスクステップが、
前記第２のデータ格納部に格納されている前記第２のデータに前記第１の一方向関数値と前記第２の一方向関数値とを連結したデータを生成し、第３のデータ格納部に格納するステップ
を含む付記１記載の情報処理方法。
【０２８１】
（付記９）
ある権限レベルが指定されると、当該ある権限レベルに対応付けられている、前記第１のデータ内における１又は複数のデータ部分についての前記第２の一方向関数値で前記第１のデータを含むレコードに対して分類処理を実施し、分類結果を出力するステップ
をさらに含む付記８記載の情報処理方法。
【０２８２】
（付記１０）
マスクデータを取得し、記憶装置に格納するマスク取得ステップと、
第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、前記記憶装置に格納されている前記マスクデータに含まれる、前記マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理ステップと、
を含み、コンピュータに実行される情報処理方法。
【０２８３】
（付記１１）
前記第２のデータ長は、前記権限レベルが高いほど短くなる
付記１０記載の情報処理方法。
【０２８４】
（付記１２）
前記マスク処理が、前記第１のデータに対する前記第１のマスク及び前記第２のマスクの加算、減算、乗算、除算又は排他的論理和であり、
前記逆マスク処理が、前記マスク処理で加算が採用されていれば減算、前記マスク処理で減算が採用されていれば加算、前記マスク処理で乗算が採用されていれば除算、前記マスク処理で除算が採用されていれば乗算、前記マスク処理で排他的論理和が採用されていれば排他的論理和である
付記１０又は１１記載の情報処理方法。
【０２８５】
（付記１３）
前記マスク化データがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスクデータが、前記レコード毎にマスクを含み、
前記逆マスク処理ステップを、前記レコード毎に当該レコードのマスクを用いて実施する
付記１０乃至１２のいずれか１つ記載の情報処理方法。
【０２８６】
（付記１４）
前記マスク化データがデータベースにおけるレコードの少なくとも一部のデータであり、
前記マスクデータが、前記所定数のレコード毎にマスクを含み、
前記逆マスク処理ステップを、前記所定数のレコード毎に当該所定数のレコードのためのマスクを用いて実施する
付記１０乃至１２のいずれか１つ記載の情報処理方法。
【０２８７】
（付記１５）
前記マスク化データがデータベースにおけるレコードの少なくとも一部のデータであり、
鍵データを取得し、鍵データ格納部に格納するステップ
をさらに含み、
前記マスク取得ステップが、
前記鍵データ格納部に格納されている前記鍵データに含まれる、前記第１のマスクのための第１の鍵と前記レコードの識別子とに対して所定の一方向関数を適用して前記第１のマスクを生成し、前記記憶装置に格納するステップと、
前記鍵データ格納部に格納されている前記鍵データに前記第２のマスクのための第２の鍵が含まれている場合には、当該第２の鍵と前記レコードの識別子とに対して前記所定の一方向関数を適用して前記第２のマスクを生成し、前記記憶装置に格納するステップと、
を含み、
前記逆マスク処理ステップを、前記レコード毎に当該レコードのマスクを用いて実施する
付記１０乃至１３のいずれか１つ記載の情報処理方法。
【０２８８】
（付記１６）
前記逆マスク化データがデータベースにおけるレコードの少なくとも一部のデータであり、
前記逆マスク化データに基づきレコードを分類し、各分類に分類されたレコードに含まれる他の値に対して集計処理を実施するステップ
をさらに含む付記１０乃至１５のいずれか１つ記載の情報処理方法。
【０２８９】
（付記１７）
前記マスク処理が、前記第１のデータに対する前記第１のマスク及び前記第２のマスクの加算であり、
前記逆マスク処理が、前記マスク化データから、前記マスクデータに含まれる当該マスク化データのための全てのマスクを減算する処理であり、
前記逆マスク化データがデータベースにおけるレコードに含まれる数値データであり、
前記レコードに含まれる他のデータに基づき前記レコードを分類し、前記逆マスク化データで表される数値を加算し、加算結果から前記最もデータ長が短いマスクの平均値から算出される誤差を引くことによって集計結果を算出するステップ
をさらに含む付記１０又は１１のいずれか１つ記載の情報処理方法。
【０２９０】
（付記１８）
前記マスク化データと、前記第１のデータを前記権限レベル毎の開示範囲に応じて決められるデータ長で分割することによって得られる複数のデータ部分の各々と対応する鍵との一方向関数値とを含む秘匿化データを取得し、前記第１データ格納部に格納するステップ
をさらに含み、
前記マスク取得ステップが、
鍵データ格納部に格納されている鍵データに含まれる第２の鍵と前記秘匿化データに含まれ且つ前記第１データ格納部に格納された対応する前記一方向関数値とに対して第２の一方向関数を適用して前記マスクデータを生成し、前記記憶装置に格納するステップ
を含む付記１０記載の情報処理方法。
【０２９１】
（付記１９）
第１のデータ格納部に格納されており且つ第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを生成し、記憶装置に格納するマスク生成部と、
前記記憶装置に格納されている前記第１のマスクと前記第２のマスクとを、前記第１のデータに対して重ねて適用するマスク処理を実施し、前記第１のデータに対して当該マスク処理を実施した後のデータである第２のデータを、第２のデータ格納部に格納するマスク処理部と、
を有する情報処理装置。
【０２９２】
（付記２０）
マスクデータを取得し、記憶装置に格納するデータ取得部と、
第１のデータ長を有する第１のデータをマスクするための前記第１のデータ長以上の長さを有する第１のマスクと、前記第１のデータ長より短く且つ権限レベルに応じた第２のデータ長を有する、前記権限レベルの数に応じた個数の第２のマスクとを重ねて適用するマスク処理が実施されており且つ第１データ格納部に格納されているマスク化データに対して、前記記憶装置に格納されている前記マスクデータに含まれる、前記マスク化データのための全てのマスクを重ねて適用する逆マスク処理を実施し、当該逆マスク処理の結果である逆マスク化データを、第２データ格納部に格納する逆マスク処理部と、
を有する情報処理装置。
【符号の説明】
【０２９３】
３      クラウドシステム
７      ユーザ端末
７１      要求送信部
７３      マスク解除処理部
７４      データ受信部
７５      データ格納部
７６      マスク値格納部
７７      出力部
５      管理者装置
５１      マスク値生成部
５２      マスク値格納部
５３      マスク値適用処理部
５４      オリジナル値格納部
５５      マスク化値格納部
５６      データベース登録部
５７      データ格納部
５８      マスク値配布部
３１      処理サーバ
３１１      要求受信部
３１２      マスク値格納部
３１３      マスク化値取得部
３１５      マスク解除処理部
３１４      第１マスク化値格納部
３１６      マスク解除データ格納部
３１７      集計処理部
３１９      集計結果格納部
３２０      出力部
３２１      オリジナル値格納部
３２２      マスク値生成部
３２３      マスク値適用処理部
３２４      第２マスク化値格納部
３２５      データベース登録部
３２６      データ格納部
３２７      マスク値配布部
【図１】
0005516284.tif 000005
【図２】
0005516284.tif 000006
【図３】
0005516284.tif 000007
【図４】
0005516284.tif 000008
【図５】
0005516284.tif 000009
【図６】
0005516284.tif 000010
【図７Ａ】
0005516284.tif 000011
【図７Ｂ】
0005516284.tif 000012
【図８】
0005516284.tif 000013
【図９】
0005516284.tif 000014
【図１０】
0005516284.tif 000015
【図１１】
0005516284.tif 000016
【図１２】
0005516284.tif 000017
【図１３】
0005516284.tif 000018
【図１４】
0005516284.tif 000019
【図１５】
0005516284.tif 000020
【図１６】
0005516284.tif 000021
【図１７】
0005516284.tif 000022
【図１８】
0005516284.tif 000023
【図１９】
0005516284.tif 000024
【図２０】
0005516284.tif 000025
【図２１】
0005516284.tif 000026
【図２２】
0005516284.tif 000027
【図２３】
0005516284.tif 000028
【図２４】
0005516284.tif 000029
【図２５】
0005516284.tif 000030
【図２６】
0005516284.tif 000031
【図２７】
0005516284.tif 000032
【図２８】
0005516284.tif 000033
【図２９】
0005516284.tif 000034
【図３０】
0005516284.tif 000035
【図３１】
0005516284.tif 000036
【図３２】
0005516284.tif 000037
【図３３】
0005516284.tif 000038
【図３４】
0005516284.tif 000039
【図３５】
0005516284.tif 000040
【図３６】
0005516284.tif 000041
【図３７】
0005516284.tif 000042
【図３８】
0005516284.tif 000043
【図３９】
0005516284.tif 000044
【図４０】
0005516284.tif 000045
【図４１】
0005516284.tif 000046
【図４２】
0005516284.tif 000047
【図４３】
0005516284.tif 000048
【図４４】
0005516284.tif 000049
【図４５】
0005516284.tif 000050