以下に、本願の開示する秘匿化装置、秘匿化プログラムおよび秘匿化方法の各実施例を図面に基づいて詳細に説明する。なお、各実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
実施例1に係る秘匿化装置について説明する。図1は、実施例1に係る秘匿化装置を含むシステムの構成の一例を示す図である。図1の例に示すシステム1は、秘匿化装置10、装置11a,11b、装置12a,12b,12cを有する。また、システム1は、装置11a,11bと同様の機能を有する図示しない装置を有する。装置11a,11bおよび上述した図示しない装置と、秘匿化装置10とは、ネットワーク13を介して接続されている。また、秘匿化装置10と、装置12a,12b,12cとは、ネットワーク14を介して接続されている。すなわち、装置11a,11bと、秘匿化装置10とは、通信可能である。また、秘匿化装置10と、装置12a,12b,12cとは、通信可能である。
装置11a,11bは、動物などのペットを販売するペットショップにおけるペットの購入者の購入履歴を示すデータが登録されたDB15a,15bを有する。図2は、DBのデータ構造の一例を示す図である。図2の例に示すDB15a,15bには、データの種別ごとにテーブルが登録される。図2の例に示すテーブルのレコードには、「名前」、「年齢」、「店名」、「品目」の各項目が含まれる。「名前」の項目には、ペットの購入者の名前が登録される。なお、ペットの購入者の名前は、個人を特定することが可能なデータである。「年齢」の項目には、購入者の年齢が登録される。「店名」の項目には、購入者がペットを購入した店の店名が登録される。「品目」の項目には、購入したペットの種類が登録される。また、図2の例に示すテーブルには、DBに登録されたデータの種別を識別するためのIDである種別IDが登録される「種別ID」の項目を有する。ここで、上述したように、図2の例に示すDB15a、15bのテーブルには、ペットの購入者の購入履歴を示すデータが登録されている。このため、図2の例のDB15a、15bのテーブルの「種別ID」の項目には、ペットの購入者の購入履歴を示すデータを識別するための種別ID「1」が登録されている。
装置11a,11bは、DB15a,15bのテーブルから1レコードまたは複数のレコードのデータを取得し、取得したデータを秘匿化する。例えば、装置11a,11bは、所定のキーを用いて、所定のハッシュ関数により、取得したレコードの各項目のデータのハッシュ値を算出し、取得したレコードの各項目のデータを算出したハッシュ値のデータに置換して、取得したデータを秘匿化する。そして、装置11a,11bは、秘匿化したデータに、DB15a,15bのテーブルの「種別ID」の項目に登録された種別IDを付加する。続いて、装置11a,11bは、種別IDが付加されたデータを秘匿化装置10へ送信する。なお、システム1には、上述したように、装置11a,11b以外にも、同様の方法で様々な種別のデータを秘匿化して秘匿化装置10へ送信する図示しない装置が含まれているものとする。
秘匿化装置10は、入力部16、通信部17、記憶部18、制御部19を有する。
入力部16は、各種の情報を制御部19へ入力する。例えば、入力部16は、ユーザからの指示を受け付けて、受け付けた指示を制御部19へ入力する。入力部16のデバイスの一例としては、マウスやキーボードなどのユーザの操作を受け付けるデバイスが挙げられる。
通信部17は、装置間の通信を行うためのインターフェースである。例えば、通信部17は、装置11a,11bからネットワーク13を介して秘匿化されたデータを受信すると、受信したデータを制御部19へ送信する。また、通信部17は、後述する送信制御部19dから、人物を特定することができる一部分のデータが秘匿化されたデータを受信すると、ネットワーク14を介して、受信したデータを装置12a〜12cのうち、指示された装置へ送信する。また、通信部17は、装置12a,12b,12cから、ネットワーク14を介して、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示を受信した場合には、次のような処理を行う。すなわち、通信部17は、受信した指示を制御部19へ送信する。
記憶部18は、各種の情報を記憶する。例えば、記憶部18は、DB18a、テーブル18bを記憶する。
DB18aには、複数のデータ種別のそれぞれに対応するテーブルが登録される。図3は、秘匿化装置が有するDBに登録されたテーブルのデータ構造の一例を示す図である。図3の例は、複数のテーブル18a_1,18a_2,・・・を示す。複数のテーブル18a_1,18a_2,・・・のそれぞれは、登録されるデータのデータ種別を示す種別IDが登録される項目「種別ID」を有する。例えば、図3の例では、テーブル18a_1は、種別ID「1」が示す種別のデータ、すなわち、ペットの購入者の購入履歴を示すデータのハッシュ値が登録されるテーブルであることを示す。
DB18aに登録されたテーブルには、後述の登録部19bにより、装置11a,11bや、図示しない装置から送信された秘匿化されたデータが登録される。例えば、先の図2の例に示すテーブルに登録されたデータが秘匿化されて、装置11a,11bから秘匿化装置10に送信された場合には、テーブル18a_1に、図3の例に示すように、秘匿化されたデータが登録される。
テーブル18bは、ハッシュ値を生成する際に用いられるキーと、アプリケーションを識別するためのIDであるアプリケーションIDとが対応付けられて登録されたテーブルである。テーブル18bには、複数のアプリケーションのそれぞれに対して、異なるキーが対応付けられて登録される。図4は、秘匿化装置が有するテーブルのデータ構造の一例を示す図である。図4の例では、テーブル18bは、アプリケーションIDが登録される項目「アプリケーション」と、ハッシュ値を生成する際に用いられるキーが登録される項目「キー」とを有する。図4は、例えば、アプリケーションID「A」と、キー「00001」とが対応付けられてテーブル18bに登録された場合を示す。
記憶部18は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部18は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部19は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部19は、受付部19aと、登録部19bと、秘匿化部19cと、送信制御部19dとを有する。
受付部19aは、各種の情報を受け付ける。例えば、受付部19aは、秘匿化されたデータが通信部17から制御部19へ送信された場合には、送信されたデータを受信する。また、受付部19aは、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示が通信部17から制御部19へ送信された場合には、次のような処理を行う。すなわち、受付部19aは、送信された指示を受信する。
登録部19bは、各種の情報を登録する。例えば、登録部19bは、受付部19aにより、種別IDが付加されたデータが受信された場合には、受信したデータに付加された種別IDを取得する。続いて、登録部19bは、取得した種別IDに対応するテーブルが存在するかDB18aを検索する。取得した種別IDに対応するテーブルが存在する場合には、登録部19bは、DB18aに登録された複数のテーブルのうち、取得した種別IDに対応するテーブルに、受信したデータを登録する。例えば、装置11aから種別ID「1」が付加されたデータを受信した場合には、秘匿化装置10は、図3の例に示す複数のテーブル18a_1,18a_2,・・・のうち、種別ID「1」に対応するテーブル18a_1に、受信したデータを登録する。これにより、種別ID「1」に対応するテーブル18a_1には、秘匿化されたペットの購入者の購入履歴を示す、秘匿化されたデータが登録される。
一方、取得した種別IDに対応するテーブルが存在しない場合には、登録部19bは、新たなテーブルを生成し、生成したテーブルの「種別ID」の項目に、取得した種別IDを登録する。また、登録部19bは、受付部19aにより受信されたデータのレコード数分のレコードを、生成したテーブルに追加し、追加されたレコードに、受付部19aにより受信されたデータを登録する。
登録部19bは、受付部19aにより、種別IDが付加されたデータが受信されるたびに、上述した処理を行って、DB18aのテーブルに秘匿化されたデータを登録する。
秘匿化部19cは、受付部19aにより、上述のデータ送信を行う旨の指示が受信された場合には、次のような処理を行う。すなわち、秘匿化部19cは、かかる指示に含まれる種別IDが示すデータ種別に対応するテーブルに登録された秘匿化されたデータを取得する。そして、秘匿化部19cは、指示を行った後述のアプリケーションの種別ごとに秘匿結果が異なるように、取得したデータに含まれる秘匿化された名前のデータを更に秘匿化する。
具体例を挙げて説明する。例えば、秘匿化部19cは、装置12a,12b,12cから、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示を受信した場合には、次のような処理を行う。すなわち、秘匿化部19cは、指示に含まれる種別IDを取得する。また、秘匿化部19cは、指示に含まれるアプリケーションIDを取得する。また、秘匿化部19cは、指示に含まれる分析対象の項目を取得する。
そして、秘匿化部19cは、取得したアプリケーションIDに対応するキーが存在するかテーブル18bを検索する。検索の結果、キーが存在する場合には、秘匿化部19cは、取得したアプリケーションIDに対応するキーをテーブル18bから取得する。例えば、取得したアプリケーションIDが「A」である場合には、秘匿化部19cは、図4の例に示すテーブル18bからキー「00001」を取得する。一方、検索の結果、キーが存在しない場合には、秘匿化部19cは、テーブル18bに既に登録されたキーと同一のキーとならないように、新たなキーを生成する。そして、秘匿化部19cは、取得したアプリケーションIDと、生成したキーとを対応付けてテーブル18bに登録する。
続いて、秘匿化部19cは、取得した種別IDが示すデータ種別に対応するテーブルが存在するかDB18aを検索する。検索の結果、テーブルが存在する場合には、秘匿化部19cは、取得した種別IDが示すデータ種別に対応するテーブルの全てのレコードのデータを取得する。例えば、取得した種別IDが「1」である場合には、秘匿化部19cは、図3の例に示すDB18aに登録された複数のテーブルの中から、種別ID「1」に対応するテーブル18a_1に登録された全てのレコードのデータを取得する。
そして、秘匿化部19cは、取得または生成したキーを用いて、所定のハッシュ関数により、取得した全てのレコードのデータのうち、人物を特定することが可能な一部分のデータのハッシュ値を生成する。例えば、秘匿化部19cは、秘匿化された名前のデータに対して更にハッシュ値を生成する。なお、人物を特定することが可能なデータの一例として、名前のデータを挙げたが、人物を特定することが可能なデータはこれに限られない。秘匿化部19cは、人物の住所やIDなど、人物を特定することが可能なデータのハッシュ値であれば、同様の方法で、さらにハッシュ値を生成することができる。
例えば、取得または生成したキーが「00001」である場合には、秘匿化部19cは、キー「00001」を用いて、所定のハッシュ関数により、秘匿化された名前のデータ「azeid11」のハッシュ値「AAAAA」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「A12345」のハッシュ値「BBBBB」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「kdDsDD」のハッシュ値「CCCCC」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「Kl3lls3Q」のハッシュ値「DDDDD」を生成する。
また、例えば、取得または生成したキーが「00002」である場合には、秘匿化部19cは、キー「00002」を用いて、所定のハッシュ関数により、秘匿化された名前のデータ「azeid11」のハッシュ値「EEEEE」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「A12345」のハッシュ値「FFFFF」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「kdDsDD」のハッシュ値「GGGGG」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「Kl3lls3Q」のハッシュ値「HHHHH」を生成する。
また、例えば、取得または生成したキーが「00003」である場合には、秘匿化部19cは、キー「00003」を用いて、所定のハッシュ関数により、秘匿化された名前のデータ「azeid11」のハッシュ値「IIIII」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「A12345」のハッシュ値「JJJJJ」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「kdDsDD」のハッシュ値「KKKKK」を生成する。また、秘匿化部19cは、秘匿化された名前のデータ「Kl3lls3Q」のハッシュ値「LLLLL」を生成する。
続いて、秘匿化部19cは、取得した全てのレコードのデータのうち、秘匿化された人物を特定することが可能な一部分のデータを、生成したハッシュ値で置換する。これにより、人物を特定することが可能な一部分のデータは、再び秘匿化される。例えば、上述の取得または生成したキーが「00001」である場合の例では、秘匿化部19cは、名前のデータ「azeid11」をハッシュ値「AAAAA」で置換する。また、秘匿化部19cは、名前のデータ「A12345」をハッシュ値「BBBBB」で置換する。また、秘匿化部19cは、名前のデータ「kdDsDD」をハッシュ値「CCCCC」で置換する。また、秘匿化部19cは、名前のデータ「Kl3lls3Q」をハッシュ値「DDDDD」で置換する。このように、秘匿化部19cは、装置12a,12b,12cで実行されたアプリケーションの種別ごとに異なるキーを用いて、秘匿化された人物を特定することが可能なデータのハッシュ値を生成し、かかるデータをハッシュ値で置換する。そのため、秘匿化部19cによれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに異なる秘匿結果となるように、秘匿化された人物を特定することが可能なデータを更に秘匿化することができる。それゆえ、秘匿化部19cによれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに、秘匿結果が異なるため、複数のアプリケーションのデータに共通するような、かかるデータの生成を抑制することができる。したがって、秘匿化部19cによれば、秘匿化されたデータの解読を困難にすることができる。
そして、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについて、受信した指示に含まれる分析対象の項目のデータの秘匿化を解除する。例えば、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについて、次のような処理を行う。すなわち、秘匿化部19cは、分析対象の項目のハッシュ値を、装置11a,11bや図示しない装置により秘匿化された際に用いられたキーと同一のキーを用いて、秘匿化された際に用いられたハッシュ関数と同一のハッシュ関数により、元のデータに戻す。
例えば、秘匿化部19cは、装置12aから、分析の対象となるデータの種別ID「1」、アプリケーションID「A」、および、分析対象の項目「品目」を含む、データ送信を行う旨の指示が受付部19aにより受信された場合には、次のような処理を行う。すなわち、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータのうち、分析対象の項目「品目」のハッシュ値を、元のデータに戻す。図5は、秘匿化装置により分析対象の項目「品目」のハッシュ値が元のデータに戻された場合のデータの一例を示す図である。例えば、種別ID「1」に対応するテーブル18a_1に登録された全てのレコードのハッシュ値のデータを取得した場合には、図5の例に示すように、秘匿化部19cは、分析対象の項目「品目」のハッシュ値「A01」を、元のデータ「鳥」に戻す。また、秘匿化部19cは、分析対象の項目「品目」のハッシュ値「B02」を、元のデータ「犬」に戻す。また、秘匿化部19cは、分析対象の項目「品目」のハッシュ値「C03」を、元のデータ「カメ」に戻す。また、秘匿化部19cは、分析対象の項目「品目」のハッシュ値「D04」を、元のデータ「猫」に戻す。
また、秘匿化部19cは、装置12bから、分析の対象となるデータの種別ID「1」、アプリケーションID「B」、および、分析対象の項目「店名」を含む、データ送信を行う旨の指示が受付部19aにより受信された場合には、次のような処理を行う。すなわち、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータのうち、分析対象の項目「店名」のハッシュ値を、元のデータに戻す。図6は、秘匿化装置により分析対象の項目「店名」のハッシュ値が元のデータに戻された場合のデータの一例を示す図である。例えば、種別ID「1」に対応するテーブル18a_1に登録された全てのレコードのハッシュ値のデータを取得した場合には、図6の例に示すように、秘匿化部19cは、分析対象の項目「店名」のハッシュ値「○○」を、元のデータ「A店」に戻す。また、秘匿化部19cは、分析対象の項目「店名」のハッシュ値「××」を、元のデータ「B店」に戻す。また、秘匿化部19cは、分析対象の項目「店名」のハッシュ値「△△△」を、元のデータ「D店」に戻す。
また、秘匿化部19cは、装置12cから、分析の対象となるデータの種別ID「1」、アプリケーションID「C」、および、分析対象の項目「年齢」を含む、データ送信を行う旨の指示が受付部19aにより受信された場合には、次のような処理を行う。すなわち、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータのうち、分析対象の項目「年齢」のハッシュ値を、元のデータに戻す。図7は、秘匿化装置により分析対象の項目「年齢」のハッシュ値が元のデータに戻された場合のデータの一例を示す図である。例えば、種別ID「1」に対応するテーブル18a_1に登録された全てのレコードのハッシュ値のデータを取得した場合には、図7の例に示すように、秘匿化部19cは、分析対象の項目「年齢」のハッシュ値「12」を、元のデータ「22」に戻す。また、秘匿化部19cは、分析対象の項目「年齢」のハッシュ値「1」を、元のデータ「32」に戻す。また、秘匿化部19cは、分析対象の項目「年齢」のハッシュ値「24」を、元のデータ「44」に戻す。また、秘匿化部19cは、分析対象の項目「年齢」のハッシュ値「33」を、元のデータ「52」に戻す。
送信制御部19dは、秘匿化部19cにより人物を特定することが可能な一部分のデータが再秘匿化されたデータを、データを送信する指示を行ったアプリケーションを実行する装置に送信するように制御する。すなわち、送信制御部19dは、分析対象の項目のデータの秘匿化が解除されたデータを、指示を送信した装置へ送信するように、かかるデータを通信部17へ送信する。例えば、送信制御部19dは、分析対象の項目「品目」のハッシュ値が、元のデータに戻された図5に示すデータを装置12aへ送信するように、かかるデータを通信部17へ送信する。また、送信制御部19dは、分析対象の項目「店名」のハッシュ値が、元のデータに戻された図6に示すデータを装置12bへ送信するように、かかるデータを通信部17へ送信する。また、送信制御部19dは、分析対象の項目「年齢」のハッシュ値が、元のデータに戻された図7に示すデータを装置12cへ送信するように、かかるデータを通信部17へ送信する。
制御部19は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
装置12a,12b,12cは、各種の分析を行う装置である。例えば、装置12aは、ペットの購入者の購入履歴を示すデータを用いて、購入されたペットの品目ごとの数を集計するためのアプリケーションを実行する。装置12aは、かかるアプリケーションを実行することにより、分析の対象となるデータの種別ID「1」、アプリケーションID「A」、および、分析対象の項目「品目」を含む、データ送信を行う旨の指示を秘匿化装置10へ送信する。また、装置12aは、秘匿化装置10から送信された、分析対象の項目「品目」のハッシュ値が、元のデータに戻されたデータを受信した場合には、購入されたペットの品目ごとの数を集計する。
また、装置12bは、ペットの購入者の購入履歴を示すデータを用いて、ペットショップごとの購入されたペットの数を集計するためのアプリケーションを実行する。装置12bは、かかるアプリケーションを実行することにより、分析の対象となるデータの種別ID「1」、アプリケーションID「B」、および、分析対象の項目「店名」を含む、データ送信を行う旨の指示を秘匿化装置10へ送信する。また、装置12bは、秘匿化装置10から送信された、分析対象の項目「店名」のハッシュ値が、元のデータに戻されたデータを受信した場合には、ペットショップごとの購入されたペットの数を集計する。
また、装置12cは、ペットの購入者の購入履歴を示すデータを用いて、購入者の年齢ごとの購入されたペットの数を集計するためのアプリケーションを実行する。装置12cは、かかるアプリケーションを実行することにより、分析の対象となるデータの種別ID「1」、アプリケーションID「C」、および、分析対象の項目「年齢」を含む、データ送信を行う旨の指示を秘匿化装置10へ送信する。また、装置12cは、秘匿化装置10から送信された、分析対象の項目「年齢」のハッシュ値が、元のデータに戻されたデータを受信した場合には、ペットの購入者の年齢ごとの購入されたペットの数を集計する。
次に、本実施例に係る秘匿化装置10が実行する処理の流れを説明する。図8は、秘匿化処理の手順を示すフローチャートである。この秘匿化処理は、例えば、装置12a〜12cから、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示を受信したタイミングで実行される。
図8に示すように、秘匿化部19cは、指示に含まれる種別IDを取得する(S101)。そして、秘匿化部19cは、指示に含まれるアプリケーションIDを取得する(S102)。また、秘匿化部19cは、指示に含まれる分析対象の項目を取得する(S103)。
そして、秘匿化部19cは、取得したアプリケーションIDに対応するキーが存在するかテーブル18bを検索する(S104)。続いて、秘匿化部19cは、検索の結果、キーが存在するか否かを判定する(S105)。キーが存在する場合(S105肯定)には、秘匿化部19cは、取得したアプリケーションIDに対応するキーをテーブル18bから取得する(S108)。一方、キーが存在しない場合(S105否定)には、秘匿化部19cは、テーブル18bに既に登録されたキーと同一のキーとならないように、新たなキーを生成する(S106)。そして、秘匿化部19cは、取得したアプリケーションIDと、生成したキーとを対応付けてテーブル18bに登録する(S107)。
その後、秘匿化部19cは、取得した種別IDが示すデータ種別に対応するテーブルが存在するかDB18aを検索する(S109)。そして、秘匿化部19cは、検索の結果、テーブルが存在するか否かを判定する(S110)。テーブルが存在しない場合(S110否定)には、処理を終了する。一方、テーブルが存在する場合(S110肯定)には、秘匿化部19cは、取得した種別IDが示すデータ種別に対応するテーブルの全てのレコードのデータを取得する(S111)。
そして、秘匿化部19cは、取得または生成したキーを用いて、所定のハッシュ関数により、取得した全てのレコードのデータのうち、秘匿化された人物を特定することが可能な一部分のデータ、例えば、名前のデータのハッシュ値を生成する(S112)。
続いて、秘匿化部19cは、取得した全てのレコードのデータのうち、秘匿化された人物を特定することが可能な一部分のデータを、生成したハッシュ値で置換する(S113)。そして、秘匿化部19cは、人物を特定することが可能な一部分のデータがハッシュ値で再び秘匿化されたデータについて、受信した指示に含まれる分析対象の項目のデータの秘匿化を解除する(S114)。
その後、送信制御部19dは、分析対象の項目のデータの秘匿化が解除されたデータを、指示を送信した装置へ送信するように、かかるデータを通信部17へ送信し(S115)、処理を終了する。
上述してきたように、本実施例に係る秘匿化装置10は、装置12a,12b,12cで実行されたアプリケーションの種別ごとに異なるキーを用いて、秘匿化された人物を特定することが可能なデータのハッシュ値を生成し、秘匿化された人物を特定することが可能なデータをハッシュ値で置換する。そのため、秘匿化装置10によれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに異なる秘匿結果となるように、秘匿化された人物を特定することが可能なデータを秘匿化することができる。それゆえ、秘匿化装置10によれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに、秘匿結果が異なるため、複数のアプリケーションのデータに共通してしまうような、秘匿化された人物を特定することが可能なデータの生成を抑制することができる。したがって、秘匿化装置10によれば、秘匿化されたデータの解読を困難にすることができる。
なお、秘匿化装置10により、秘匿化された人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについては、次のような方法で、元のデータに戻すことが可能である。すなわち、かかるデータについては、テーブル18bに登録された対応するキー、および、装置11a,11bや図示しない装置により秘匿化された際に用いられたキーと同一のキーを用いて、元のデータに戻すことが可能である。
実施例2について説明する。実施例2では、DB18aから取得した全てのレコードの中に含まれる秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在する場合に、秘匿結果が異なるように、複数の同一のデータのそれぞれを秘匿化する場合について説明する。
図9は、実施例2に係る秘匿化装置を含むシステムの構成の一例を示す図である。図9に示すように、システム2は、実施例1の装置11a,11b、秘匿化装置10、装置12a,12b,12cに代えて、装置21a,21b、秘匿化装置20、装置22a,22b,22cを有する点が実施例1のシステム1と異なる。なお、以下では、上記の実施例1と同様の機能を果たす各部については図1などと同様の符号を付し、その説明は省略する。
装置21a,21bは、動物などのペットを販売するペットショップにおけるペットの購入者の購入履歴を示すデータが登録されたDB23a,23bを有する。図10は、DBのデータ構造の一例を示す図である。図10の例に示すDB23a,23bには、データの種別ごとにテーブルが登録される。図10の例に示すテーブルのレコードには、「名前」、「日付」、「店名」、「売上」の各項目が含まれる。「日付」の項目には、ペットを購入者が購入した日付が登録される。「売上」の項目には、購入者がペットを購入した際に支払った金額が登録される。また、図10の例に示すテーブルには、DBに登録されたデータの種別を識別するためのIDである種別IDが登録される「種別ID」の項目を有する。ここで、上述したように、図10の例に示すDB23a、23bのテーブルには、ペットの購入者の購入履歴を示すデータが登録されている。また、かかるデータは、「名前」、「日付」、「店名」、「売上」の各項目を有する。このため、図10の例のDB23a、23bのテーブルの「種別ID」の項目には、「名前」、「日付」、「店名」、「売上」の各項目を有する、ペットの購入者の購入履歴を示すデータを識別するための種別ID「11」が登録されている。
装置21a,21bは、DB23a,23bのテーブルから1レコードまたは複数のレコードのデータを取得し、取得したデータを秘匿化する。例えば、装置21a,21bは、所定のキーを用いて、所定のハッシュ関数により、取得したレコードの各項目のデータのハッシュ値を算出し、取得したレコードの各項目のデータを算出したハッシュ値のデータに置換して、取得したデータを秘匿化する。そして、装置21a,21bは、秘匿化したデータに、DB23a,23bのテーブルの「種別ID」の項目に登録された種別IDを付加する。続いて、装置21a,21bは、種別IDが付加されたデータを秘匿化装置10へ送信する。なお、システム2には、装置21a,21b以外にも、同様の方法で様々な種別のデータを秘匿化して秘匿化装置20へ送信する図示しない装置が含まれているものとする。
実施例2に係るDB18aについて説明する。図11は、秘匿化装置が有するDBに登録されたテーブルのデータ構造の一例を示す図である。図11の例は、複数のテーブル18a_3,18a_4,・・・を示す。複数のテーブル18a_3,18a_4,・・・のそれぞれは、登録されるデータのデータ種別を示す種別IDが登録される項目「種別ID」を有する。例えば、図11の例では、テーブル18a_3は、種別ID「11」が示す種別のデータ、すなわち、上述した項目を有する、ペットの購入者の購入履歴を示すデータのハッシュ値が登録されるテーブルであることを示す。
DB18aに登録されたテーブルには、登録部19bにより、装置21a,21bや、図示しない装置から送信された秘匿化されたデータが登録される。例えば、先の図10の例に示すテーブルに登録されたデータが秘匿化されて、装置21a,21bから秘匿化装置20に送信された場合には、テーブル18a_3に、図11の例に示すように、秘匿化されたデータが登録される。
制御部24は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図9に示すように、制御部24は、受付部19aと、登録部19bと、秘匿化部24aと、送信制御部19dとを有する。
秘匿化部24aは、受付部19aにより、上述のデータ送信を行う旨の指示が受信された場合には、次のような処理を行う。すなわち、秘匿化部24aは、かかる指示に含まれる種別IDが示すデータ種別に対応するテーブルに登録された秘匿化されたデータを取得する。そして、秘匿化部24aは、指示を行った後述のアプリケーションの種別ごとに秘匿結果が異なるように、取得したデータに含まれる秘匿化された名前のデータを更に秘匿化する。
具体例を挙げて説明する。例えば、秘匿化部24aは、装置22a,22b,22cから、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示を受信した場合には、次のような処理を行う。すなわち、秘匿化部24aは、指示に含まれる種別IDを取得する。また、秘匿化部24aは、指示に含まれるアプリケーションIDを取得する。また、秘匿化部24aは、指示に含まれる分析対象の項目を取得する。
そして、秘匿化部24aは、取得したアプリケーションIDに対応するキーが存在するかテーブル18bを検索する。検索の結果、キーが存在する場合には、秘匿化部24aは、取得したアプリケーションIDに対応するキーをテーブル18bから取得する。例えば、取得したアプリケーションIDが「A」である場合には、秘匿化部24aは、図4の例に示すテーブル18bからキー「00001」を取得する。一方、検索の結果、キーが存在しない場合には、秘匿化部24aは、テーブル18bに既に登録されたキーと同一のキーとならないように、新たなキーを生成する。そして、秘匿化部24aは、取得したアプリケーションIDと、生成したキーとを対応付けてテーブル18bに登録する。
続いて、秘匿化部24aは、取得した種別IDが示すデータ種別に対応するテーブルが存在するかDB18aを検索する。検索の結果、テーブルが存在する場合には、秘匿化部24aは、取得した種別IDが示すデータ種別に対応するテーブルの全てのレコードのデータを取得する。例えば、取得した種別IDが「11」である場合には、秘匿化部24aは、図11の例に示すDB18aに登録された複数のテーブルの中から、種別ID「11」に対応するテーブル18a_3に登録された全てのレコードのデータを取得する。
その後、秘匿化部24aは、取得した全てのレコードのデータの中に含まれる秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在するか否かを判定する。例えば、テーブル18_3に登録された全てのレコードのデータを取得した場合には、秘匿化部24aは、秘匿化された人物を特定することが可能なデータの中に、同一のデータ「A12345」が複数存在すると判定する。同一のデータが複数存在する場合には、秘匿化部24aは、次のような処理を行う。すなわち、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、秘匿化された人物を特定することが可能なデータのうち、かかる同一のデータ以外のデータのハッシュ値を生成する。例えば、同一のデータ「A12345」が複数存在すると判定した場合には、秘匿化部24aは、秘匿化された人物を特定することが可能なデータ「azeid11」のハッシュ値「j2a9f2e」を算出する。これに加えて、秘匿化部24aは、秘匿化された人物を特定することが可能なデータ「kdDsDD」のハッシュ値「13kksow」を算出する。
続いて、秘匿化部24aは、複数存在すると判定された同一のデータが登録された複数のレコードのうち、未選択のレコードを1つ選択する。例えば、同一のデータ「A12345」が複数存在すると判定した場合には、秘匿化部24aは、全レコードの中から「A12345」が登録された2番目のレコードと4番目のレコードのうち、未選択の2番目のレコードを選択する。そして、秘匿化部24aは、取得した全レコードに対する選択したレコードの位置を示すオフセットを特定する。かかるオフセットの一例としては、選択したレコードが何番目であるかを示す値が挙げられる。例えば、2番目のレコードを選択した場合には、秘匿化部24aは、オフセット「2」を特定する。そして、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、選択したレコードの上記の同一のデータに対して更にハッシュ値を生成する。例えば、2番目のレコードを選択した場合には、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、選択したレコードの同一のデータ「A12345」に対して更にハッシュ値「a12345」を生成する。
そして、秘匿化部24aは、複数存在すると判定された同一のデータが登録された複数のレコードのうち、未選択のレコードがあるか否かを判定する。未選択のレコードがある場合には、秘匿化部24aは、未選択のレコードを1つ選択する。例えば、同一のデータ「A12345」が複数存在すると判定した場合には、秘匿化部24aは、全レコードの中から「A12345」が登録された2番目のレコードと4番目のレコードのうち、未選択の4番目のレコードを選択する。そして、秘匿化部24aは、取得した全レコードに対する選択したレコードの位置を示すオフセットを特定する。例えば、4番目のレコードを選択した場合には、秘匿化部24aは、オフセット「4」を特定する。続いて、秘匿化部24aは、テーブル18bに既に登録されたキー、および、既に生成したキーがある場合には生成したキーと同一のキーとならないように、新たなキーを生成する。そして、秘匿化部24aは、新たに生成したキーを用いて、所定のハッシュ関数により、選択したレコードの上記の同一のデータに対して更にハッシュ値を生成する。例えば、4番目のレコードを選択した場合には、秘匿化部24aは、新たに生成したキーを用いて、所定のハッシュ関数により、次のような処理を行う。すなわち、秘匿化部24aは、選択したレコードの同一のデータ「A12345」に対して更にハッシュ値「c94ersy」を生成する。このような処理を、秘匿化部24aは、未選択のレコードがないと判定するまで、繰り返し行う。これにより、秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在する場合に、秘匿結果が異なるように、複数の同一のデータのそれぞれを秘匿化することができる。
そして、未選択のレコードがないと判定した場合には、秘匿化部24aは、グループIDを生成し、グループIDおよび特定されたオフセットを含むグループデータを生成する。図12は、グループデータのデータ構造の一例を示す図である。図12の例が示すグループデータには、グループID「AA」およびオフセット「2,4」が含まれる。
また、取得した全てのレコードのデータの中に含まれる秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在しないと判定した場合、および、グループデータを生成した場合には、秘匿化部24aは、次のような処理を行う。すなわち、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、取得した全てのレコードのデータのうち、人物を特定することが可能な一部分のデータのハッシュ値、例えば、秘匿化された名前のデータに対して更にハッシュ値を生成する。なお、人物を特定することが可能なデータの一例として、名前のデータを挙げたが、人物を特定することが可能なデータはこれに限られない。秘匿化部24aは、人物の住所やIDなど、人物を特定することが可能なデータのハッシュ値であれば、同様の方法で、さらにハッシュ値を生成することができる。
続いて、秘匿化部24aは、取得した全てのレコードのデータのうち、秘匿化された人物を特定することが可能な一部分のデータを、生成したハッシュ値で置換する。これにより、人物を特定することが可能な一部分のデータは、再び秘匿化される。このように、秘匿化部24aは、装置22a,22b,22cで実行されたアプリケーションの種別ごとに異なるキーを用いて、秘匿化された人物を特定することが可能なデータのハッシュ値を生成し、かかるデータをハッシュ値で置換する。そのため、秘匿化部24aによれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに異なる秘匿結果となるように、秘匿化された人物を特定することが可能なデータを更に秘匿化することができる。それゆえ、秘匿化部24aによれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに、秘匿結果が異なるため、複数のアプリケーションのデータに共通するような、かかるデータの生成を抑制することができる。したがって、秘匿化部24aによれば、秘匿化されたデータの解読を困難にすることができる。
そして、秘匿化部24aは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについて、受信した指示に含まれる分析対象の項目のデータの秘匿化を解除する。例えば、秘匿化部24aは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについて、次のような処理を行う。すなわち、秘匿化部24aは、分析対象の項目のハッシュ値を、装置21a,21bや図示しない装置により秘匿化された際に用いられたキーと同一のキーを用いて、秘匿化された際に用いられたハッシュ関数と同一のハッシュ関数により、元のデータに戻す。
例えば、秘匿化部24aは、装置22aから、分析の対象となるデータの種別ID「11」、アプリケーションID「A」、および、分析対象の項目「売上」を含む、データ送信を行う旨の指示が受付部19aにより受信された場合には、次のような処理を行う。すなわち、秘匿化部24aは、人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータのうち、分析対象の項目「売上」のハッシュ値を、元のデータに戻す。図13は、秘匿化装置により異なるキーが用いられて名前のデータのハッシュ値が生成され、分析対象の項目「売上」のハッシュ値が元のデータに戻された場合のデータの一例を示す図である。例えば、種別ID「11」に対応するテーブル18a_3に登録された全てのレコードのハッシュ値のデータを取得した場合には、図13の例に示すように、秘匿化部24aは、分析対象の項目「売上」のハッシュ値「A01」を、元のデータ「200」に戻す。また、秘匿化部24aは、分析対象の項目「売上」のハッシュ値「B02」を、元のデータ「100」に戻す。また、秘匿化部24aは、分析対象の項目「売上」のハッシュ値「C03」を、元のデータ「300」に戻す。また、秘匿化部24aは、分析対象の項目「売上」のハッシュ値「D04」を、元のデータ「500」に戻す。
送信制御部19dは、秘匿化部24aにより人物を特定することが可能な一部分のデータが再秘匿化されたデータを、データを送信する指示を行ったアプリケーションを実行する装置に送信するように制御する。すなわち、送信制御部19dは、分析対象の項目のデータの秘匿化が解除されたデータを、指示を送信した装置へ送信するように、かかるデータを通信部17へ送信する。例えば、送信制御部19dは、分析対象の項目「売上」のハッシュ値が、元のデータに戻された図13に示すデータを装置22aへ送信するように、かかるデータを通信部17へ送信する。また、送信制御部19dは、秘匿化部24dによりグループデータが生成された場合には、生成されたグループデータについても、指示を送信した装置へ送信するように、かかるグループデータを通信部17へ送信する。
制御部24は、ASICやFPGAなどの集積回路またはCPUやMPUなどの電子回路である。
装置22a,22b,22cは、各種の分析を行う装置である。例えば、装置22aは、ペットの購入者の購入履歴を示すデータを用いて、購入者ごとの売上を集計するためのアプリケーションを実行する。装置22aは、かかるアプリケーションを実行することにより、分析の対象となるデータの種別ID「11」、アプリケーションID「A」、および、分析対象の項目「売上」を含む、データ送信を行う旨の指示を秘匿化装置20へ送信する。また、装置22aは、秘匿化装置20から送信された、分析対象の項目「売上」のハッシュ値が、元のデータに戻されたデータを受信した場合には、購入者ごとの売上を集計する。これに加えて、装置22aは、秘匿化装置20からグループデータが送信された場合には、グループデータに含まれるオフセットの位置が示すレコードが示す売上について、同一人物の売上として集計する。これにより、同一人物であっても、再秘匿された結果、異なるハッシュ値が生成された場合であっても、同一人物の分析を行うことができる。例えば、図12の例に示すグループデータおよび図13の例に示すデータを装置22が受信した場合には、装置22は、オフセット「2,4」が示す、図13の例に示すデータの2番目のレコードの売上「100」と4番目のレコードの売上「500」とが同一人物「a12345」の売上として集計する。図14は、分析結果の一例を示す図である。図14の例では、人物「a12345」の売上の分析結果として売上「600」を算出した場合が示されている。
次に、本実施例に係る秘匿化装置20が実行する処理の流れを説明する。図15は、秘匿化処理の手順を示すフローチャートである。この秘匿化処理は、例えば、装置22a〜22cから、分析の対象となるデータの種別ID、アプリケーションID、および、分析対象の項目を含む、データ送信を行う旨の指示を受信したタイミングで実行される。
図15に示すように、S111の次に、秘匿化部24aは、取得した全てのレコードのデータの中に含まれる秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在するか否かを判定する(S201)。同一のデータが複数存在する場合(S201肯定)には、秘匿化部24aは、次のような処理を行う。すなわち、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、秘匿化された人物を特定することが可能なデータのうち、かかる同一のデータ以外のデータのハッシュ値を生成する(S202)。
続いて、秘匿化部24aは、複数存在すると判定された同一のデータが登録された複数のレコードのうち、未選択のレコードを1つ選択する(S203)。そして、秘匿化部24aは、取得した全レコードに対する選択したレコードの位置を示すオフセットを特定する(S204)。そして、秘匿化部24aは、取得または生成したキーを用いて、所定のハッシュ関数により、選択したレコードの上記の同一のデータに対して更にハッシュ値を生成する(S205)。
そして、秘匿化部24aは、複数存在すると判定された同一のデータが登録された複数のレコードのうち、未選択のレコードがあるか否かを判定する(S206)。未選択のレコードがある場合(S206肯定)には、秘匿化部24aは、未選択のレコードを1つ選択する(S207)。そして、秘匿化部24aは、取得した全レコードに対する選択したレコードの位置を示すオフセットを特定する(S208)。続いて、秘匿化部24aは、テーブル18bに既に登録されたキー、および、既に生成したキーがある場合には生成したキーと同一のキーとならないように、新たなキーを生成する(S209)。そして、秘匿化部24aは、新たに生成したキーを用いて、所定のハッシュ関数により、選択したレコードの上記の同一のデータに対して更にハッシュ値を生成し(S210)、S206に戻る。
一方、未選択のレコードがないと判定した場合(S206否定)には、秘匿化部24aは、グループIDを生成する(S211)。続いて、秘匿化部24aは、グループIDおよび特定されたオフセットを含むグループデータを生成し(S212)、S113へ進む。
上述してきたように、本実施例に係る秘匿化装置20は、装置22a,22b,22cで実行されたアプリケーションの種別ごとに異なるキーを用いて、秘匿化された人物を特定することが可能なデータのハッシュ値を生成し、秘匿化された人物を特定することが可能なデータをハッシュ値で置換する。そのため、秘匿化装置20によれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに異なる秘匿結果となるように、秘匿化された人物を特定することが可能なデータを秘匿化することができる。それゆえ、秘匿化装置20によれば、秘匿化された人物を特定することが可能なデータが同一であっても、アプリケーションごとに、秘匿結果が異なるため、複数のアプリケーションのデータに共通してしまうような、秘匿化された人物を特定することが可能なデータの生成を抑制することができる。したがって、秘匿化装置20によれば、秘匿化されたデータの解読を困難にすることができる。
また、秘匿化装置20は、秘匿化された人物を特定することが可能なデータの中に、同一のデータが複数存在する場合に、秘匿結果が異なるように、複数の同一のデータのそれぞれを秘匿化することができる。これにより、秘匿化されたデータの解読をより困難にすることができる。
なお、秘匿化装置20により、秘匿化された人物を特定することが可能な一部分のデータがハッシュ値で置換されたデータについては、次のような方法で、元のデータに戻すことが可能である。すなわち、かかるデータについては、テーブル18bに登録された対応するキー、および、装置21a,21bや図示しない装置により秘匿化された際に用いられたキーと同一のキーを用いて、元のデータに戻すことが可能である。
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
例えば、秘匿化装置10,20が物理サーバである場合について例示したが、開示の装置はこれに限定されない。例えば、物理サーバがVMを稼働させ、VMが秘匿化装置10,20が実行する処理と同様の処理を行うようにしてもよい。
また、実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、本実施例において説明した各処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
[秘匿化プログラム]
また、上記の実施例で説明した秘匿化装置10,20の各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することもできる。そこで、以下では、図16を用いて、上記の各実施例で説明した秘匿化装置または管理サーバと同様の機能を有する秘匿化プログラムを実行するコンピュータの一例を説明する。図16は、秘匿化プログラムを実行するコンピュータを示す図である。
図16に示すように、コンピュータ300は、CPU(Central Processing Unit)310、ROM(Read Only Memory)320、HDD(Hard Disk Drive)330、RAM(Random Access Memory)340を有する。また、コンピュータ300は、入力装置360、通信装置370を有する。これら310、320、330、340、360、370の各符号が示す各機器は、バス350を介して接続される。
ROM320には、OSなどの基本プログラムが記憶されている。また、HDD330には、上記の各実施例で示す受付部、登録部、秘匿化部および送信制御部と同様の機能を発揮する秘匿化プログラム330aが予め記憶される。なお、秘匿化プログラムについては、適宜分離しても良い。また、HDD330には、DB、テーブルが設けられる。これらDB、テーブルは、上述したDB18a、テーブル18bに対応する。
そして、CPU310が、秘匿化プログラム330aをHDD330から読み出して実行する。
そして、CPU310は、DB、テーブルを読み出してRAM340に格納する。さらに、CPU310は、RAM340に格納されたDB、テーブルを用いて、秘匿化プログラム330aを実行する。なお、RAM340に格納される各データは、常に全てのデータがRAM330に格納されなくともよい。処理に用いられるデータがRAM340に格納されれば良い。
なお、上記した秘匿化プログラム330aについては、必ずしも最初からHDD330に記憶させておく必要はない。
例えば、コンピュータ300に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。
さらには、公衆回線、インターネット、LAN、WANなどを介してコンピュータ300に接続される「他のコンピュータ(またはサーバ)」などにプログラムを記憶させておく。そして、コンピュータ300がこれらからプログラムを読み出して実行するようにしてもよい。