以下、図面を用いて本発明の実施の形態について説明する。なお、これにより本発明が限定されるものではない。
本実施例では、特定のIDから特定のIDへと変換を可能とするID管理システムの例を説明する。
図1は、本実施例におけるID管理システムの構成例を示す図である。ID管理システムは、クライアント装置101と接続された分散管理装置102が、ネットワーク103を介して、複数のデータ管理装置104_1乃至104_nのそれぞれと相互に通信可能に構成されている。ユーザは、クライアント装置101を介してID管理システムの機能を利用する。クライアント装置101と分散管理装置102は1個に限定されず、実施形態によって複数の場合もある。また、クライアント装置101と分散管理装置102は直接接続されている必要はなく、実施形態によってはネットワーク、あるいはゲートウェイ装置などを介して接続される場合もある。ネットワーク103は、例えば、一般的に公開されない閉じたイントラネットワークである。
図2は、本実施例におけるクライアント装置101の構成図の例である。クライアント装置101は、制御部201と、入出力部205と、送受信部206を有する。制御部201は、ID登録要求部202、ID変換要求部203、ID削除要求部204から構成されている。ID登録要求部202は、入出力部205を介してユーザからID登録要求を受け付け、送受信部206を介して分散管理装置102にID登録要求メッセージを送信し、また、送受信部206を介して分散管理装置102からID登録応答メッセージを受信し、入出力部205を介してユーザにID登録結果を通知する処理部である。ID変換要求部203は、入出力部205を介してユーザからID変換要求を受け付け、送受信部206を介して分散管理装置102にID変換要求メッセージを送信し、また、送受信部206を介して分散管理装置102からID変換応答メッセージを受信し、入出力部205を介してユーザにID変換結果を通知する処理部である。ID削除要求部204は、入出力部205を介してユーザからID削除要求を受け付け、送受信部206を介して分散管理装置101にID削除要求メッセージを送信し、また、送受信部206を介して分散管理装置102からID削除応答メッセージを受信し、入出力部205を介してユーザにID削除結果を通知する処理部である。入出力部205は、キーボード等のインタフェースを介してユーザからの入力を制御し、モニタ等のインタフェースを介してユーザへの出力を制御する。送受信部206は、ネットワーク103を介して情報の送受信を行う。 図3は、本実施例における分散管理装置102の構成図の例である。分散管理装置102は、制御部301と、記憶部315と、送受信部318を有する。制御部301は、データ管理装置情報管理部302、ID登録処理部303、ID変換処理部304、ID削除処理部305、難読化部306、可読化部307、秘密分散化部308、秘密分散復元部309、ハッシュ値生成部310、データ管理装置決定部311、データ追加要求部312、データ参照要求部313、データ更新要求部315、データ削除要求部316から構成されている。
データ管理装置情報管理部302は、送受信部318を介してデータ管理装置104_1乃至104_nと相互通信し、データ管理装置情報記憶領域316に格納されているデータ管理装置104_1乃至104_nの接続情報(ノードID、IPアドレス、ポート番号等)の同期をとる処理部である。ノードIDはデータ管理装置104_1乃至104_nに割り当てられた唯一無二の番号であり、その形式は限定しない。ID登録処理部303は、送受信部318を介してクライアント装置101からID登録要求メッセージを受信し、ID登録処理を行い、送受信部318を介してクライアント装置101にID登録応答メッセージを送信する処理部である。ID変換処理部304は、送受信部318を介してクライアント装置101からID変換要求メッセージを受信し、ID変換処理を行い、送受信部318を介してクライアント装置101にID変換応答メッセージを送信する処理部である。ID削除処理部305は、送受信部318を介してクライアント装置101からID削除要求メッセージを受信し、ID削除処理を行い、送受信部318を介してクライアント装置101にID削除応答メッセージを送信する処理部である。難読化部306は、制御部301内の他処理部から主キー、あるいはデータを受け付け、その主キー、あるいはデータから難読化中間値を生成し、これを返す処理部である。なお、主キーとは、データ記憶領域から、ある一組のデータセット(レコード)を一意に識別するための情報である。可読化部307は、制御部301内の他処理部から難読化中間値を受け付け、その難読化中間値から主キー、あるいはデータへ可読化し、これを返す処理部である。秘密分散化部308は、制御部301内の他処理部から難読化中間値を受け付け、その難読化中間値から秘密分散主キー、あるいは秘密分散データを生成し、これを返す処理部である。秘密分散復元部309は、制御部301内の他処理部から秘密分散主キー、あるいは秘密分散データを受け付け、その秘密分散主キー、あるいは秘密分散データから難読化中間値を復元し、これを返す処理部である。ハッシュ値生成部310は、制御部301内の他処理部からデータを受け付け、そのデータから複数のハッシュ値を計算し、これを返す処理部である。データ管理装置決定部311は、制御部301内の他処理部からハッシュ値を受け付け、そのハッシュ値から、データ管理装置104_1乃至104_nのうちデータ処理を行うデータ管理装置を決定し、データ管理装置情報記憶領域316を参照することで、決定したデータ管理装置の接続情報を返す処理部である。データ追加要求部312は、制御部301内の他処理部から秘密分散データとハッシュ値を受け付け、送受信部318を介してデータ管理装置決定部311により決定されたデータ管理装置へデータ追加要求メッセージを送信し、また、送受信部318を介して、決定されたデータ管理装置からデータ追加応答メッセージを受信し、データ追加結果を返す処理部である。データ参照要求部313は、制御部301内の他処理部から秘密分散データとハッシュ値を受け付け、送受信部318を介してデータ管理装置決定部311により決定されたデータ管理装置へデータ参照要求メッセージを送信し、また、送受信部318を介して、決定されたデータ管理装置からデータ参照応答メッセージを受信し、データ参照結果を返す処理部である。データ削除要求部314は、制御部301内の他処理部から秘密分散データとハッシュ値を受け付け、送受信部318を介してデータ管理装置決定部311により決定されたデータ管理装置へデータ削除要求メッセージを送信し、また、送受信部318を介して、決定されたデータ管理装置からデータ削除応答メッセージを受信し、データ削除結果を返す処理部である。
記憶部315は、データ管理装置情報記憶領域316、ハッシュ関数記憶領域317から構成されている。データ管理装置情報記憶領域316は、データ管理装置104_1乃至104_nの接続情報を記憶する領域である。接続情報はデータ管理装置情報管理部302により同期をとることで、データ管理装置104_1乃至104_nと同じ値が共有される。ハッシュ関数記憶領域317は、ハッシュ値生成部310で利用する複数のハッシュ関数を記憶する領域である。ハッシュ関数は不可逆性が保証された関数であれば良く、ハッシュ関数の数は秘密分散化部308で行う分割数と一致する。また、分割数(即ち、ハッシュ関数の数)は2以上の整数であれば良い。このハッシュ関数には項目番号が割り振られているとする。
送受信部318は、ネットワーク103を介して情報の送受信を行う。
図4は、本実施例におけるデータ管理装置104_1乃至104_nの構成図の例である。データ管理装置104_1乃至104_nは、制御部401と、記憶部413と、送受信部418を有する。制御部401は、データ管理装置情報管理部402、データ追加処理部403、データ参照処理部404、データ削除処理部405、インデックス生成部406、空アドレス取得部407、メタ情報生成部408、先頭アドレス格納処理部409、先頭アドレス取得処理部410、データ格納処理部411、データ取得処理部412から構成されている。
データ管理装置情報管理部402は、送受信部418を介して分散管理装置102と相互通信し、データ管理装置情報記憶領域414に格納されているデータ管理装置104_1乃至104_nの接続情報の同期をとる処理部である。データ追加処理部403は、送受信部418を介して分散管理装置102からデータ追加要求メッセージを受信し、データ追加処理を行い、送受信部418を介して分散管理装置102にデータ追加応答メッセージを送信する処理部である。データ参照処理部404は、送受信部418を介して分散管理装置102からデータ参照要求メッセージを受信し、データ参照処理を行い、送受信部418を介して分散管理装置102にデータ参照応答メッセージを送信する処理部である。データ削除処理部405は、送受信部418を介して分散管理装置102からデータ削除要求メッセージを受信し、データ削除処理を行い、送受信部418を介して分散管理装置102にデータ削除応答メッセージを送信する処理部である。インデックス生成部406は、制御部401内の他処理部からハッシュ値を受け付け、そのハッシュ値からインデックスを生成し、インデックスを返す処理部である。空アドレス取得部407は、データ管理情報記憶領域415を参照し、データ記憶領域417内の空き領域のアドレスを返す処理部である。メタ情報生成部408は、制御部401内の他処理部から秘密分散データ、ハッシュ値を受け付け、その秘密分散データ、ハッシュ値からメタ情報を生成し、これを返す処理部である。先頭アドレス格納処理部411は、制御部401内の他処理部からインデックス、アドレスを受け付け、先頭アドレス記憶領域416内の該当インデックス位置に受け付けたアドレスを書き込む処理部である。先頭アドレス取得処理部410は、制御部401内の他処理部からインデックスを受け付け、先頭アドレス記憶領域416内の該当インデックス位置からアドレスを読み込む処理部である。データ格納処理部411は、アドレス、メタ情報、秘密分散情報を受け付け、データ記憶領域417内の該当アドレスに受け付けたメタ情報、および秘密分散情報を書き込む処理部である。データ取得処理部412は、アドレスを受け付け、データ記憶領域417内の該当アドレスのメタ情報、および秘密分散情報を読み込み、読み込んだメタ情報、および秘密分散情報を返す処理部である。
記憶部413は、データ管理装置情報記憶領域414、データ管理情報記憶領域415、先頭アドレス記憶領域416、データ記憶領域417から構成されている。データ管理装置情報記憶領域414は、データ管理装置104_1乃至104_nの接続情報を記憶する領域である。接続情報はデータ管理装置情報管理部402により同期をとることで、分散管理装置102と同じ値が共有される。データ管理情報記憶領域415は、データ記憶領域417内の、空き領域情報を記憶する領域である。先頭アドレス記憶領域416は、アドレスを記憶する領域である。先頭アドレス記憶領域416はインデックス配列構造を有しており、インデックスが定める位置にアドレスが格納される。データ記憶領域417は、メタ情報と秘密分散データを記憶する領域である。データ記憶領域417は指定されたアドレスにデータを格納する。
送受信部418は、ネットワーク103を介して情報の送受信を行う。
図5は、本実施例におけるクライアント装置101、分散管理装置102、データ管理装置104_1乃至104_nのハードウェア構成図の例である。各装置は一般的なコンピュータ501により実現でき、図5に示すように、CPU502、メモリ503、外部記憶装置504、送受信装置505、入力装置506、出力装置507を有する。これらは、BUS(バス)により接続されている。上述した各装置の処理部はプログラムにより実現され、外部記憶装置504に記憶されている。CPU502は、外部記憶装置504から必要なプログラムをメモリ503にロードし実行する。また、分散管理装置102、データ管理装置104_1乃至104_nの記憶部315、413は、メモリ503や外部記憶装置504により実現される。各装置の送受信部206、318、418は、送受信装置505により実現される。クライアント装置101の入出力部205は、入力装置506、出力装置507により実現される。
図6から図13を用いて、ID登録処理を行う際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理を説明する。ここでは、ID”123456789”からID”ABCDEHGHI”への変換を可能とするため、ID”123456789”を主キーとし、ID”ABCDEHGHI”をデータとしてID管理システムに登録する例を示す。逆方向への変換を可能とするためには、本処理のID”123456789”とID”ABCDEHGHI”を入れ替えた処理を行えば良い。
図6は、本実施例におけるID登録処理のシーケンス図の例である。最初にクライアント装置101は、分散管理装置102にID登録要求メッセージ601を送信する。
図7は、本実施例におけるID登録処理の中で送受信されるメッセージの例である。図7に示すように、ID登録要求メッセージ601は主キー701、データ702の2つのパラメータを含む。図6の例では、ID”123456789”が主キー701、ID”ABCDEHGHI”がデータ702である。
図6に戻って説明を続ける。次に分散管理装置102は、主キー701、およびデータ702それぞれに対して難読化602、および秘密分散化603を行う。主キー701を難読化602、および秘密分散化603したものが秘密分散主キー704に、データ702を難読化602、および秘密分散化603したものが秘密分散データ705になる。
図8は、本実施例における難読化と秘密分散化の例である。難読化602では、まず乱数生成器により事前に規定された長さの乱数801を生成し、対象となるデータ(主キー701、あるいはデータ702)と乱数801の排他的論理和を計算し、この計算結果と乱数801を結合し、難読化中間値802を生成する。図8の例では、主キー701“123456789”と乱数801“2or203ru2”との排他的論理和を取ることで、“xo389j238”を生成し、これを乱数801“2or203ru2”と結合することで難読化中間値802“xo389j2382or203ru2”を生成している。秘密分散化603では、分割数の数だけ難読化中間値802を分割することで、秘密分散したデータ(秘密分散主キー704、あるいは秘密分散データ705)を生成する。図8の例では、難読化中間値802“xo389j2382or203ru2”を6分割することで、秘密分散主キー704“xo3 704_1”、“89j 704_2”、“238 704_3”、“2or 704_4”、“203704_5”、“ru2 704_6”を生成している。同様に、本実施例では、ID”ABCDEHGHI”を難読化602、および秘密分散化603することで、秘密分散データ705_1“r68”、 705_2“02w”、705_3“m2z”、705_4“lwq”、705_5“mnv”、705_6“cdr”を得る。秘密分散化603における分割数はシステムの設計者が要件にあわせて設計し、事前に定めておく数である。本実施例では、分割数を6としているが、分割数は6に限定されず、2以上の整数であれば任意の値で良い。また、難読化602を実施せず、主キー701、およびデータ702を平文のまま分割し、秘密分散化しても良いが、例えば、秘密分散主キー704_1、および秘密分散データ705_1から主キー701、およびデータ702の一部分を読み取られる危険性がある。難読化602は部分的に主キー701、およびデータ702を読み取られる危険を防ぐ効果がある。
図6に戻って説明を続ける。次に分散管理装置102はハッシュ値生成604を行う。図9は、本実施例におけるハッシュ値生成604の例である。ハッシュ値生成604では、分散管理装置102はまずハッシュ関数記憶領域317から6個のハッシュ関数902を取得し、主キー901から6個のハッシュ関数902を用いて、6個のハッシュ値703_1、703_2、・・・、703_6を生成する。図9の例では、主キー701“123456789”からハッシュ値703_1“1584”などが生成されている。ハッシュ関数902の数は秘密分散化603における分割数と一致する。本実施例では、秘密分散化603の分割数が6であるため、ハッシュ関数902の数は6個となっている。
図10は、本実施例における分散管理装置102の記憶部315のデータ管理装置情報記憶領域316とハッシュ関数記憶領域317の構成例である。ハッシュ関数記憶領域317には、ハッシュ関数902_1、902_2、・・・、906_6のそれぞれが項番と対応付けられて格納されている。ハッシュ関数は一方向性を有する関数のため、ハッシュ値703_1、703_2、・・・、703_6のいずれのハッシュ値からも主キー701を推定することは出来ない。
図6に戻って説明を続ける。分散管理装置102は、6個の秘密分散主キー704_1、704_2、・・・、704_6と6個の秘密分散データ705_1、705_2、・・・、705_6を分割した先頭から順に選択し、さらにハッシュ関数の項番順にハッシュ値703_1、703_2、・・・、703_6を選択することで、秘密分散主キーとハッシュ値と秘密分散データとをそれぞれ対応付けて6個の組に分ける。そして、分散管理装置102は、各組に対して、以降のデータ管理装置決定605からデータ追加応答メッセージ612まで行う。本実施例では、分割数を6としているため、6個の組に分けられ、データ管理装置決定605からデータ追加応答メッセージ612までが6回繰り返されることとなる。
分散管理装置102は、データ管理装置決定605を行う。
図11は、本実施例におけるデータ管理装置104_1、104_2、・・・、104_nの中からデータ追加を行うデータ管理装置を決定する処理を説明する図である。データ管理装置決定605では、データ管理装置情報記憶領域316からノードID1001_1、1002_2、・・・と接続情報1002_1、1002_2、・・・を取得し、ノードIDがハッシュ値以上で最も小さいデータ管理装置を担当者と決定する。ハッシュ値がどのノードIDよりも大きい場合は、最も小さいノードIDを持つデータ管理装置を担当者と決定する。図11の例では、 ハッシュ値703_1“1584”はノードID1001_1“1152”以上ノードID1001_2“2084”未満なので、データ管理装置104_1が担当者に決定されている。
図6に戻って説明を続ける。次に分散管理装置102は担当者として決定したデータ管理装置104_1にデータ追加要求メッセージ606を送信する。データ追加要求メッセージ606の例は図7に示す。データ追加要求メッセージ606は、図7に示すように、ハッシュ値703_1、秘密分散主キー704_1、秘密分散データ705_1の3つのパラメータを含む。
次にデータ管理装置104_1はインデックス生成607を行う。インデックスとは、先頭アドレス記憶領域に配列構造で記憶される先頭アドレスの配列の添え字を意味する。先頭アドレスの意味は後述する。インデックス生成607では、ハッシュ値をインデックスの最大値で割った余りを計算し、その余りをインデックスとする。本実施例では、インデックスの最大値を“100”とし、ハッシュ値703_1“1584”からはインデックス“84”が生成される。インデックスの最大値はシステム稼働前に決定される定数である。
次にデータ管理装置104_1は空アドレス取得608を行う。空アドレス取得608では、データ管理情報記憶領域415を参照し、空き領域である追記アドレス1301を取得する。追記アドレスとは、データ記憶領域において新規にレコードを追記する場所を意味する。データ管理情報記憶領域415の例は図13に示す。図13は、本実施例におけるID登録前のデータ管理装置104_1の記憶部413の例である。図13の例では、アドレス “133289”から始まる領域9023byte分の空き領域があるため、“133289”を追記アドレス1301_1としている。
図6に戻って説明を続ける。次にデータ管理装置104_1はメタ情報生成609を行う。メタ情報とは、データ管理装置104_1に記憶するハッシュ値、秘密分散主キー、秘密分散データに関連する情報のことであり、データ管理装置104_1が内部の処理において利用する中間的な情報である。
図12は、本実施例におけるメタ情報1201の例である。メタ情報生成609では、秘密分散主キーと秘密分散データのデータサイズをそれぞれ秘密分散主キー長1203、秘密分散データ長1204とし、“null”アドレスを次アドレス1202として、ハッシュ値703_1、次アドレス1202、秘密分散主キー長1203、秘密分散データ長1204を1つのデータ列として結合することでメタ情報1201を生成する。図12の例では、“1584”、“null”、“3” (“xo3”の文字列長)、“3” (“r68”の文字列長)がメタ情報1201となる。次アドレス1202については後述する。
図6に戻って説明を続ける。次にデータ管理装置104_1は先頭アドレス格納610を行う。先頭アドレス格納610では、先頭アドレス記憶領域416のインデックス位置おけるアドレスの有無により条件分岐し、2通りの処理を行う。アドレスが存在しない場合、該インデックス位置に追記アドレス1301_1を先頭アドレスとして書き込む。既にアドレスが存在する場合、インデックス位置に存在する先頭アドレスを読み込む。先頭アドレス記憶領域416の例を図13に示す。図13の例では、インデックス“84”に既に先頭アドレスが存在するため、該インデックス位置から先頭アドレス1302“90238”を読み込んでいる。
図6に戻って説明を続ける。次にデータ管理装置104_1はデータ格納611を行う。本実施例では、データ記憶領域417にメタ情報1201と秘密分散主キー704_1、秘密分散データ705_1を1つのレコードとして記憶する。データ記憶領域417の例を図13に示す。データ記憶領域417では、インデックス生成607により同値のインデックスを持つレコードをリンク構造で記憶する。よって、先頭アドレスとは、該リンク構造の先頭となるレコードのアドレスを意味し、次アドレスは該リンク構造において次のレコードのアドレスを意味する。データ格納611では、該リンク構造を実現する為、第一にデータ記憶領域417の追記アドレス1301_1にメタ情報1201(ハッシュ値703_1、次アドレス1202、秘密分散主キー長1203、秘密分散データ長1204)と秘密分散主キー704_1、秘密分散データ705_1を1レコードとして書き込む。第二に、先頭アドレス格納610において、先頭アドレスを書き込んだ場合はデータ格納611を終了し、以降の第三、第四の処理は行わない。第三に、先頭アドレス1302に該当するレコードを読み込み、レコードのリンク構造を辿って末端のレコードを探索する。末端のレコードの探索としては、先頭アドレスから順にレコード内の次アドレス1202が指すレコードを参照していき、次アドレス1202が“null”となっているものがリンク構造の末端のレコードとなる。第四に、末端のレコードの次アドレス1202に追記アドレス1301_1を書き込む。図13の例では、追記アドレス1301_1“133289”にメタ情報(“1584”、“null”、“3”、“3”)と秘密分散主キー704_1(“xo3”)、秘密分散データ705_1(“r68”)を書き込み、先頭アドレス1302“90238”のメタ情報内の次アドレス1303が“null”なので、 “133289”に書き換えている。このようなリンク構造を取ることで、インデックスが衝突した場合に対応することが可能となる。本実施例では、インデックスの最大値を”100”としたため、ハッシュ値”1584”と”3584”は同じインデックスをとる。そのため、リンク構造を取り、メタ情報1202内にハッシュ値を有しておけば、ハッシュ値に対して一意にレコードを特定することが可能となる。また、秘密分散主キーをレコード内に有しているのは、ハッシュ値の衝突に対応するためである。その詳細について、ID変換処理の例の説明において、詳細に記述する。
図6に戻って説明を続ける。次にデータ管理装置104_1は分散管理装置102にデータ追加応答メッセージ612を送信する。データ追加応答メッセージ612の例は図7に示す。データ追加応答メッセージ612はデータ登録結果707のパラメータから構成されている。
図6に戻って説明を続ける。次に分散管理装置102はクライアント装置101にID登録応答メッセージ613を送信する。ID登録応答メッセージ613の例は図7に示す。ID登録応答メッセージ613はID登録結果706のパラメータから構成されている。
このような方法でデータを記憶することにより、1レコードに格納される情報がハッシュ値と秘密分散主キー、秘密分散データと関連するメタ情報のみとなり、レコード内の情報から対応する他の秘密分散主キー、秘密分散データが格納されたレコード特定することは不可能となる。前述したように、ハッシュ関数は一方向性のある関数のため、ハッシュ値から主キーを特定することも不可能である。よって、本構造により、主キーが既知の場合のみ、主キーからハッシュ値を計算し、対応する秘密分散データが格納されたレコードを特定することが可能となる。
以上が、ID登録処理を行う際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理である。本実施例では、IDからIDへの変換を例としたが、IDにドメイン情報を付加したものとIDにドメイン情報を付加したものの変換としても良い。
図14から図17を用いて、ID変換処理を行う際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理の例について説明する。ここでは、ID”123456789”を主キーとして、対応するデータをID管理システムから取得する例を示す。
図14は、本実施例におけるID変換処理のシーケンス図の例である。最初にクライアント装置101は分散管理装置102にID変換要求メッセージ1401を送信する。ID変換要求メッセージ1401の例は図15に示す。図15は、本実施例におけるID変換処理の中で送受信されるメッセージの例である。ID変換要求メッセージ1401は主キー1501のパラメータを含む。
図14に戻って説明を続ける。次に分散管理装置102はハッシュ値生成1402を行う。本処理は前記ID登録処理時のハッシュ値生成604と同様であり、本実施例では、主キー1501“123456789”からハッシュ値1502“1584”などを取得される。分散管理装置102は、各ハッシュ値に対して、以降のデータ管理装置決定1403からデータ参照応答メッセージ1408まで行う。本実施例では、分割数を6としているため、データ管理装置決定1403からデータ参照応答メッセージ1408までが6回繰り返されることとなる。次に分散管理装置102はデータ管理装置決定1403を行う。本処理は前記ID登録処理時のデータ管理装置決定605と同様である。次に分散管理装置102は、決定したデータ管理装置104_1にデータ参照要求メッセージ1404を送信する。データ参照要求メッセージ1404の例は図15に示す。データ参照要求メッセージ1404はハッシュ値1502のパラメータを含む。
次にデータ管理装置104_1はインデックス生成1405を行う。本処理は前記ID登録処理時のインデックス生成607と同様である。本実施例では、ハッシュ値1502”1584”からインデックス”84”が生成される。次にデータ管理装置104_1は先頭アドレス取得1406を行う。先頭アドレス取得1406では、先頭アドレス記憶領域416のインデックス位置の先頭アドレス1601を読み込む。先頭アドレス取得1406の例は図16に示す。図16は、本実施例におけるID変換時のデータ管理装置104_1の記憶部413の例である。図16の例では、先頭アドレス記憶領域416のインデックス“84”から先頭アドレス1601“90238”を読み込んでいる。
図14に戻って説明を続ける。次にデータ管理装置104_1はデータ取得1407を行う。データ取得1407では、データ管理装置104_1はデータ記憶領域417の先頭アドレス1601が指すレコードから順にリンク構造を辿り、与えられたハッシュ値1502とレコード中のハッシュ値1602_1、1602_2、・・・が一致するレコードを探索し、同レコードの秘密分散主キーと秘密分散データを取得する。ハッシュ値は衝突する可能性があるため、与えられたハッシュ値1502と一致するハッシュ値を持つレコードが複数存在する可能性があるが、ここでは一致するものは全て取得する。データ取得1407の例を図16に示す。図16の例では、先頭アドレス1601“90238”から始め、次アドレス1603_1“133289”、次アドレス1603_2“209384”と順にリンク構造を辿ってレコードを参照し、ハッシュ値が “1584”と一致するレコードから(秘密分散主キー長、秘密分散データ長)=(“xo3”,“r68”)(“9ji”,“q30”)を取得する。
図14に戻って説明を続ける。次にデータ管理装置104_1は分散管理装置102にデータ参照応答メッセージ1408を送信する。データ参照応答メッセージ1408の例を図15に示す。データ参照応答メッセージ1408はデータ参照結果1505と秘密分散主キー1506_1、1506_2、・・・と秘密分散データ1507_1、1507_2、・・・のパラメータを含む。
図14に戻って説明を続ける。次に分散管理装置102は受け取ったデータ参照応答メッセージ1408から秘密分散主キーを1つずつ選択し、全ての組み合わせに対して秘密分散復元1409と可読化1410を行う。そして、分散管理装置102は、復元した主キーが最初に与えられた主キー1501と一致する組み合わせを正しい組み合わせと判断する。本実施例では、分散管理装置102は6個のデータ参照応答メッセージ1408から秘密分散主キーとして(“xo3”or“9ji”)、(“89j”)、(“238”)、(“2or”)、(“203”)、(“ru2”)を受け取り、(“xo3”“89j”“238”“2or”“203”“ru2”)と(“9ji”“89j”“238”“2or”“203”“ru2”)の2個の組み合わせに対して、秘密分散復元1409と可読化1410を行い、復元した主キーがID変換要求メッセージ1401に含まれる主キーと一致することから前者の組み合わせが正しいと判断する。
具体的には、まず秘密分散復元1409では、分散管理装置102は、取得した秘密分散主キーをハッシュ関数の項目番号順に並べ、結合する。秘密分散復元1409の例を図17に示す。図17は本実施例における秘密分散復元1409と可読化1410の例である。図17の例では、分散管理装置102は、取得した秘密分散主キー1701_1“xo3”、1701_2“89j”、1701_3“238”、1701_4“2or”、1701_5“203”、1701_6“ru2”を結合し、難読化中間値1702“xo389j2382or203ru2”を生成する。
図14に戻って説明を続ける。可読化1410では、分散管理装置102は難読化中間値1702の末尾から乱数1703を取得し、難読化中間値1702の乱数以外の部分と乱数1703の排他的論理和を計算することで復元主キー1704を生成する。図17の例では、難読化中間値1702“xo389j2382or203ru2”から乱数1703“2or203ru2”を取得し、“xo389j238”と乱数1703“2or203ru2”の排他的論理和を計算することで、復元主キー1704“123456789”を生成している。
次に分散管理装置102は、ID変換要求メッセージ1401に含まれる主キーと一致する組み合わせが存在する場合、該組み合わせに従って、秘密分散データを選択し、秘密分散復元1409と可読化14101507を行い、データ1504を取得する。ID変換要求メッセージ1401に含まれる主キーと一致する組み合わせが存在しない場合、分散管理装置102はID変換結果1503を“False”とする。
次に分散管理装置102はクライアント装置101にID変換応答メッセージ1411を送信する。ID変換応答メッセージ1411の例を図15に示す。ID変換応答メッセージ1411はID変換結果1503とデータ1504のパラメータを含む。
以上が、ID変換処理する際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理である。秘密分散復元1409から可読化1410にかけて、秘密分散主キーの全組み合わせに対して処理を行うのは、ハッシュ値の衝突問題を解決するためである。一般的に、ハッシュ関数は、ごく低確率ではあるが異なる値から同一のハッシュ値を得ることがある。そのため、ハッシュ値の衝突問題に対応しなかった場合、主キーから無関係のレコードを取得してしまう恐れがある。本実施例では、レコード中に秘密分散主キーを格納し、参照時に秘密分散主キーを復元してみることで、主キーに対応するレコードを一意に特定し、ハッシュ値の衝突問題を解決している。この処理は一見非効率的に見えるが、ハッシュ関数は本来、衝突が十分に小さくなるように設計するものであり、適切な設計がなされていれば、秘密分散主キー1506の組み合わせが生まれることは稀であり、計算効率として問題にならない。
図18から図20を用いて、ID削除処理を行う際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理の例について説明する。ここでは、ID”123456789”を主キーとし、ID”ABCDEHGHI”をデータとするレコードを削除する例を示す。
図18は、本実施例におけるID削除処理のシーケンス図の例である。最初にクライアント装置101は分散管理装置102にID削除要求メッセージ1801を送信する。ID削除要求メッセージ1801の例を図19に示す。図19は、本実施例におけるID削除処理の中で送受信されるメッセージの例である。ID削除要求メッセージ1801は主キー1901、データ1902のパラメータから構成されている。
図18に戻って説明を続ける。次に分散管理装置102は主キー1901を用いて、IDの変換処理を行う。そのため、ハッシュ値生成1802から可読化1810までは、ID変換処理に必要な工程であり、ID変換処理時のハッシュ値生成1402から可読化1410と同様である。この処理により、分散管理装置102はハッシュ値1903を生成し、図15のデータ参照応答メッセージに示すように、秘密分散主キーおよび秘密分散データが格納されているレコードのアドレス1904を取得する。本実施例では、ハッシュ値1903”1584”などが生成され、アドレス1904”133289”を取得する。
次に分散管理装置102はデータ管理装置104_1にデータ削除要求メッセージ1811を送信する。データ削除要求メッセージ1811の例を図19に示す。データ削除要求メッセージ1811はハッシュ値1903、アドレス1904のパラメータから構成されている。
図18に戻って説明を続ける。次にデータ管理装置104_1はインデックス生成1812を行う。本処理は前記ID登録処理時のインデックス生成607と同様である。次にデータ管理装置104_1は先頭アドレス取得1813を行う。本処理は前記ID変換処理時の先頭アドレス取得1406と同様である。次にデータ管理装置104_1はデータ削除1814を行う。データ削除1814の例を図20に示す。図20は、本実施例におけるID削除時のデータ管理装置104_1の記憶部413の例である。データ削除1812では、第一に、データ記憶領域417のアドレス1904が指すレコードを参照し、次アドレス2003_2を取得し、同レコードを削除する。第二に、データ記憶領域417の先頭アドレス2001が指すレコードから順にリンク構造を辿り、与えられたアドレス1904とレコード中の次アドレス2003_2が一致するレコードを探索し、次アドレス2003_1を次アドレス2003_2に置き換える。第三に、与えられたアドレス1904が先頭アドレス2001と一致した場合、先頭アドレス記憶領域416の先頭アドレス2001を次アドレス2003_2に置き換える。図18の例では、アドレス1904”133289”が与えられるため、次アドレス2003_2”209384”を取得して、当該レコードを削除する。第二に、リンク構造を先頭アドレス2001”90238”から辿り、次アドレス2003_1が”133289”となるレコードを探索し、同レコードの次アドレス2003_1を次アドレス2003_2”209384”に置き換える。第三の処理は、先頭アドレス2001”90238”は与えられたアドレス1904”133289”と一致しないため、行わない。
図18に戻って説明を続ける。次にデータ管理装置104_1は分散管理装置102にデータ削除応答メッセージ1815を送信する。データ削除応答メッセージ1815の例を図19に示す。データ削除応答メッセージ1815はデータ削除結果1906のパラメータを含む。
図18に戻って説明を続ける。次に分散管理装置102はクライアント装置101にID削除応答メッセージ1816を送信する。ID削除応答メッセージ1816の例を図19に示す。ID削除応答メッセージ1816はID削除結果1905のパラメータを含む。
以上が、ID削除処理を行う際に、クライアント装置101、分散管理装置102、データ管理装置104_1が実行する一連の処理である。
以上本発明の一実施例について説明した。上記実施例によれば、第三者による分散情報格納部への不正アクセスがあっても、主キーを取得することができないため、分散データから元のデータへの復元を困難にすることができる。したがって、主キーを知っている利用者だけがデータを参照可能となる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現しても良い。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現しても良い。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えても良い。