【文献】
尾形 わかは,岡田 光司,黒澤 馨,“ネットワークシステムと暗号:電子化社会の危機管理 秘密分散共有法”,Computer Today,日本,株式会社サイエンス社,1998年 7月 1日,第15巻,第4号,p.18−23
【文献】
池野 信一、小山 謙二,“現代暗号理論”,日本,社団法人電子情報通信学会,1997年11月15日,初版第6刷,p.235−236
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0032】
本発明に係わるデータ原本性確保方法およびシステム、ならびにデータ原本性確保用プログラムの実施の形態について、添付図面を参照して説明する。
【0033】
(第1の実施の形態)
図1は、本発明の第1の実施の形態に係わるデータ原本性確保システム1の概略構成を示すブロック図である。
【0034】
図1に示すように、データ原本性確保システム1は、インターネット等の通信用ネットワークNに対して接続して通信できるクライアントコンピュータ(以下、単にクライアントとする)2と、ネットワークNに対して通信可能に接続されており、互いにハードウェア的に独立した複数(本実施の形態では4とする)のデータ保管用サーバコンピュータ(以下、単に保管サーバとする)3a1〜3a4とを備えている。
【0035】
クライアント2は、演算処理部であるCPU、このCPUに接続され該CPUおよびネットワークN間の通信を可能にするインタフェース、CPUに接続されたデータ入力用の入力部およびCPUに接続されたメモリ10をそれぞれ備えている。
【0036】
メモリ10には、原本性を確保して保管する対象となるデータ{例えば、M(Mは自然数)バイトのデジタルデータ;以下、元データとも呼ぶ}Bが格納されている。また、メモリ10には、クライアント2(そのCPU)が読み取り可能であり、後述する
図2および
図3に示す原本性確保処理(データ保管処理)をクライアント2(そのCPU)に実行させるためのデータ原本性確保用プログラムPが搭載されている。
【0037】
なお、このデータ原本性確保用プログラムPは、磁気メモリや半導体メモリ等の各種記録媒体に搭載され、必要に応じてその記録媒体からクライアント2に読み出されてメモリ10にロードされるように構成することも可能である。
【0038】
クライアント2は、データ原本性確保用プログラムPにより実現される機能として、メモリ10に格納された元データBから、その元データBをユニークに識別できる例えばハッシュ値を生成するハッシュ値生成部11と、元データBおよびハッシュ値Hを含むデータを秘密分散法を用いて分割して分割データD(1)〜D(4)(本実施形態では、分割数を4とする)を生成する分割データ生成部13と、分割データD(1)〜D(4)から元データBおよびハッシュ値Hを生成する元データ復元部15と、分割データD(1)〜D(4)をネットワークNを介して通信する通信部17とを備えている。
【0039】
各保管サーバ3a1〜3a4は、演算処理部であるCPU、このCPUに接続され該CPUおよびネットワークN間の通信を可能にするインタフェース、CPUに接続されたデータ入力用の入力部、CPUに接続されたメモリおよびハードディスク等の記憶装置をそれぞれ備えている。
【0040】
次に、本実施の形態に係わるデータ原本性確保システム1の全体処理について説明する。
【0041】
図2および
図3に示すように、クライアント2は、データ原本性確保用プログラムPに従って動作し、ハッシュ値生成部11の機能として、メモリ10に記憶された、原本性を確保して保管したい元データBをメモリ10から読み込み、読み込んだ元データBを、所定のハッシュ関数を用いてその元データBのハッシュ値Hを生成する(ステップS1)。
【0042】
このハッシュ値Hは、その元データBが1ビットでも変更されると全く異なる値を示す性質、すなわち、元データBをユニークに識別できる性質を有している。
【0043】
次いで、クライアント2は、分割データ生成部13の機能として、生成したハッシュ値Hを含む元データBを秘密分散法を用いて4つのデータ(分割データ)D(1)〜D(4)に分割する(ステップS2)。
【0044】
以下、ステップS2の秘密分散法に基づく分割データD(1)〜D(4)生成処理について詳細に説明する。
【0045】
例えば、2次多項式F(x)=ax2+bx+B(mod p;pで割った時の余りを表す)を基にしたShamirの秘密分散法{(k、n)閾値法;但し、分割数を表すnを4とし、復元できる数を表すkを3とする}で考える。ここでBは元データ、F(x)は分割データである。a、b、pは、元データBの分割に際して任意に決定される。但し、pは、a、b、Bよりも大きい素数とする。
【0046】
このとき、クライアント2の分割データ生成処理により、分割データF(1)〜F(4){上記分割データD(1)〜D(4)に対応}は、次式(1)〜(4)のように作成される。
【0047】
F(1)=a+b+B(mod p) ・・・(1)
F(2)=4a+2b+B(mod p) ・・・(2)
F(3)=9a+3b+B(mod p) ・・・(3)
F(4)=16a+4b+B(mod p) ・・・(4)
この分割データF(1)〜F(4)の内、k=3以上の分割データ{例えば、F(1)、F(2)、F(4)}が集まれば、この分割データ
F(1)=a+b+B(mod p) ・・・(1)
F(2)=4a+2b+B(mod p) ・・・(2)
F(4)=16a+4b+B(mod p) ・・・(4)
を連立して元データBを求めることができる。
【0048】
そして、k−1以下の分割データが集まっても、元データBを復元することはできない。
【0049】
なお、元データBが長いデータ列である場合には、クライアント2は、例えば元データBの先頭から1バイト毎にF(1)からF(4)を順次作成して分割データD(1)(F(1))〜D(4)(F(4))を作成する。
【0050】
そして、クライアント2は、通信部17の機能として、作成した分割データD(1)〜D(4)を保管サーバ3a1〜3a4にネットワークNを介してそれぞれ送信する(ステップS3)。
【0051】
各保管サーバ3a1〜3a4は、ネットワークNを介して送信されてきた分割データD(1)〜D(4)を、それぞれのハードディスク等の記憶装置に記憶する(ステップS5)。
【0052】
このようにして、元データBを、そのハッシュ値Hを含んで分割された分割データD(1)〜D(4)として保管サーバ3a1〜3a4に保管することができる。
【0053】
次に、保管サーバ3a1〜3a4に保管された分割データD(1)〜D(4)が改竄されているか否かを確認する場合、クライアント2は、分割データD(1)〜D(4)のダウンロード要求を保管サーバ3a1〜3a4にそれぞれ送信する(ステップS10)。
【0054】
各保管サーバ3a1〜3a4は、送信されてきたダウンロード要求に応じて、それぞれのハードディスク等の記憶装置に保管された各分割データD(1)〜D(4)を各記憶装置から読み出し、読み出した各分割データD(1)〜D(4)をネットワークNを介してクライアント2に送信する(ステップS11)。
【0055】
クライアント2は、データ原本性確保用プログラムPに従って動作し、元データ復元部15の機能として、ネットワークNを介して送信されてきた分割データD(1)〜D(4)を受信し、受信した分割データD(1)〜D(4)に基づいて秘密分散法により元データB1およびハッシュ値H1をそれぞれ復元する(ステップS12)。
【0056】
次いで、クライアント2は、元データ復元部15の機能として、復元した元データB1からハッシュ値H2を再生成し、再生成したハッシュ値H2と復元したハッシュ値H1とを比較して一致するか否かを確認する(ステップS13)。
【0057】
このステップS12およびS13の処理を具体的に説明する。
【0058】
例えば、上記分割データF(1)、F(2)、F(3)、F(4)の内、一部の分割データが改竄{例えば、F(2)〜F(4)がFa(2)〜Fa(4)に改竄}されたと仮定する。
【0059】
このとき、クライアント2は、下式
F(1) =a+b+B(mod p) ・・・(1)
Fa(2)=4a+2b+B(mod p) ・・・(2)
Fa(3)=9a+3b+B(mod p) ・・・(3)
Fa(4)=16a+4b+B(mod p)・・・(4)
の中から少なくとも3つの式を連立させてハッシュ値Hを含む元データBを復元することになる。
【0060】
しかしながら、分割データF(2)〜F(4)が分割データFa(2)〜Fa(4)に改竄されているため、この分割データFa(2)〜Fa(4)を連立しても、復元された元データB1は、原本性確保対象となる元データBとは異なるため、その元データB1から再生成されたハッシュ値H2も、復元されたハッシュ値H1とは異なる。この結果、保管サーバ3a1〜3a4に保管されている分割データD(1)〜D(4)の少なくとも一部が改竄されていることをクライアント2側において確認することができる。
【0061】
以上述べたように、本実施形態によれば、元データBを、秘密分散法を用いて複数の分割データD(1)〜D(4)に分割して保管サーバ3a1〜3a4にそれぞれ保管しているため、その分割データD(1)〜D(4)の内の少なくとも一部が改竄された場合でも、改竄データを含む分割データD(1)〜D(4)から、その分割データD(1)〜D(4)に対する改竄の有無を容易に確認することができる。
【0062】
この結果、例えば元データBを長期間に亘って保管する場合であっても、電子署名のように、電子証明書の再発行処理および電子署名付きデータ作成処理を繰り返し行うことなく、簡易に元データBを保管することができる。
【0063】
また、本実施形態によれば、元データBを分割データD(1)〜D(4)に分割して保管サーバ3a1〜3a4に保管しているため、例えば、分割データD(1)〜D(4)の内の1つの分割データが改竄された場合でも、残りの分割データを用いて元データBを復元することができる。
【0064】
この結果、元データBの原本性をより確実に確保することができる。
【0065】
(第2の実施の形態)
図4は、本発明の第2の実施の形態に係わるデータ原本性確保システムにおけるデータ原本性確保用プログラムに基づく原本性確保処理の一例を示す概略フローチャートである。なお、本実施の形態におけるデータ原本性確保システムの構成については、そのデータ原本性確保用プログラムの内容およびクライアントの処理が異なり、他の構成については、
図1に示す構成と略同等であるため、その説明は省略する。
【0066】
本実施の形態において、クライアント2は、分割データ生成部13の機能として、メモリ10に記憶された、原本性を確保して保管したい元データBをメモリ10から読み込み、読み込んだ元データBを秘密分散法を用いて4つのデータ(分割データ)D(1)〜D(4)に分割する(ステップS21)。
【0067】
なお、ステップS21の処理は、ステップS2の処理と略同等である。
【0068】
次いで、クライアント2は、通信部17の機能として、作成した分割データD(1)〜D(4)を保管サーバ3a1〜3a4にネットワークNを介してそれぞれ送信する(ステップS22)。
【0069】
各保管サーバ3a1〜3a4は、ネットワークNを介して送信されてきた分割データD(1)〜D(4)を、それぞれのハードディスク等の記憶装置に記憶する(ステップS23)。
【0070】
このようにして、元データBを、分割データD(1)〜D(4)として保管サーバ3a1〜3a4に保管することができる。
【0071】
次に、保管サーバ3a1〜3a4に保管された分割データD(1)〜D(4)が改竄されているか否かを確認する場合、クライアント2は、分割データD(1)〜D(4)のダウンロード要求を保管サーバ3a1〜3a4にそれぞれ送信する(ステップS30)。
【0072】
各保管サーバ3a1〜3a4は、送信されてきたダウンロード要求に応じて、それぞれのハードディスク等の記憶装置に保管された各分割データD(1)〜D(4)を、その記憶装置から読み出し、読み出した各分割データD(1)〜D(4)をネットワークNを介してクライアント2に送信する(ステップS31)。
【0073】
クライアント2は、元データ復元部15の機能として、ネットワークNを介して送信されてきた分割データD(1)〜D(4)を受信し、受信した分割データD(1)〜D(4)を秘密分散法により異なる組合せにより組み合わせて複数の元データB1〜Bm(本実施の形態では、m=2)を復元し、復元した元データB1〜B2が互いに一致するか否かを確認する(ステップS32)。
【0074】
このステップS32の処理を具体的に説明する。
【0075】
クライアント2は、上記分割データF(1)、F(2)、F(3)、F(4)の内、例えば、所定の組合せ、例えば分割データF(1)〜F(3)を用いて秘密分散法により元データB1を復元し、次いで、上記組合せとは異なる組合せ、例えば、分割データF(2)〜F(4)を用いて秘密分散法により元データB2を復元する。
【0076】
このとき、上記分割データF(1)〜F(4)の内の一部に改竄が発生した場合、上述したように、復元された元データB1およびB2は、原本性確保対象となる元データBとは異なり、かつ元データB1およびB2は分割データF(1)〜F(4)を互いに異なる組合せにより組み合わせているため、復元した元データB1およびB2は互いに異なる。
【0077】
したがって、クライアント2は、復元した元データB1および元データB2との不一致により、保管サーバ3a1〜3a4に保管されている分割データD(1)〜D(4)の少なくとも一部が改竄されていることをクライアント2側において確認することができる。
【0078】
なお、本実施の形態では、分割データF(1)〜F(4)の中から異なる組合せとして、分割データF(1)〜F(3)と分割データF(2)〜F(4)とをそれぞれ選択したが、本発明はこの組合せに限定されるものではなく、4つの分割データD(1)〜D(4)それぞれが少なくとも1回復元に使用される複数の組合せを選択すればよく、互いの組合せに基づいて復元された元データが一致しているか否かを確認することができる。
【0079】
(第3の実施の形態)
図5は、本発明の第3の実施の形態に係わるデータ原本性確保システム4の概略構成を示すブロック図である。
【0080】
図5に示すように、データ原本性確保システム4は、インターネット等の通信用ネットワークNに対して接続して通信できる端末5および分割装置6と、ネットワークNに対して通信可能に接続されており、互いにハードウェア的に独立した複数(本実施の形態では3とする)のデータ保管用サーバコンピュータ(以下、単に保管サーバとする)3a1〜3a3とを備えている。そして、上記システム構成により、分割装置6は、ネットワークNを介して端末5からのデータ保管要求に応じてデータを複数の分割データに分割し、この分割した複数の分割データをネットワークNを介して複数の保管サーバ3a1〜3a3に保管するようになっている。尚、端末5と分割装置6との間の通信、および分割装置6と各保管サーバ3a1〜3a3との間の通信は、通信内容の漏洩を防止するため、SSL(Secure Socket Layer)、IP−VPN(Virtual Private Network)などにより、通信データが暗号化されている。
【0081】
端末5および分割装置6は、演算処理部であるCPU、このCPUに接続され該CPUおよびネットワークN間の通信を可能にするインタフェース、CPUに接続されたデータ入力用の入力部およびCPUに接続されたメモリをそれぞれ備えている。
【0082】
端末5は、利用者が原本性を確保して保管するデータ{例えば、M(Mは自然数)バイトのデジタルデータ;以下、元データとも呼ぶ}Bを分割装置6に送信するとともに、保管したデータを分割装置6から受信するデータ送受信部31を備えている。
【0083】
分割装置6のメモリ10には、端末5から送信された元データBが格納される。また、メモリ10には、分割装置6(そのCPU)が読み取り可能であり、後述する
図6および
図7に示すデータ原本性確保処理を分割装置6(そのCPU)に実行させるためのデータ原本性確保用プログラムP3が搭載されている。
【0084】
なお、このデータ原本性確保用プログラムP3は、磁気メモリや半導体メモリ等の各種記録媒体に搭載され、必要に応じてその記録媒体から分割装置6に読み出されてメモリにロードされるように構成することも可能である。
【0085】
分割装置6は、データ原本性確保用プログラムP3により実現される機能として、メモリ10に格納された元データBから、その元データBをユニークに識別できる例えばハッシュ値Hを生成するとともに、後述するハッシュ値h1〜h3を生成するハッシュ値生成部32と、元データBおよびハッシュ値Hを含むデータを後述する秘密分散法(第1および第2の実施の形態とは異なる秘密分散法)Sを用いて分割して分割データ(以下、分割データ本体ともよぶ)D(1)〜D(3)(本実施形態では、分割数を3とする)を生成するとともに、該分割データ本体D(1)〜D(3)、ヘッダ情報、および分割データ本体とヘッダ情報の内容全体から生成されたハッシュ値h1〜h3から構成された分割データ(以下、送信分割データともよぶ)DD(1)〜DD(3)を生成する分割データ生成部33と、分割データ本体D(1)〜D(3)を生成する際に用いられる乱数データを発生させる乱数発生部34と、保管サーバ3a1〜3a3から取得した分割データ本体D(1)〜D(3)およびそのヘッダ情報からハッシュ値h1〜h3を再生成するとともに、復元された元データBからハッシュ値Hを再生成し、データの真正性を確認するハッシュ値確認部35と、分割データ本体D(1)〜D(3)から元データBおよびハッシュ値Hを秘密分散法Sを用いて生成する元データ復元部36と、元データBおよび送信分割データDD(1)〜DD(3)をネットワークNを介して送受信するデータ送受信部37とを備えている。
【0086】
各保管サーバ3a1〜3a3は、演算処理部であるCPU、このCPUに接続され該CPUおよびネットワークN間の通信を可能にするインタフェース、CPUに接続されたデータ入力用の入力部およびCPUに接続されたメモリおよびハードディスク等の記憶装置をそれぞれ備えている。
【0087】
次に、本実施の形態に係わるデータ原本性確保システム4の全体処理を
図6および
図7を用いて説明する。ここで、
図6は、本実施の形態におけるデータ原本性確保用プログラムP3に基づくデータ原本性確保処理を示すフローチャートであり、
図7は、
図6に示すデータ原本性確保処理のデータシーケンスである。
【0088】
図6および
図7に示すように、利用者が保管したい元データBを指定し、端末5から分割装置6に該元データBを送信すると、分割装置6は、データ原本性確保用プログラムP3に従って動作し、ハッシュ値生成部32の機能として、メモリ10に記憶された、原本性を確保して保管したい元データBをメモリ10から読み込み、読み込んだ元データBを、所定のハッシュ関数を用いてその元データBのハッシュ値Hを生成する(ステップS101,S102)。
【0089】
このハッシュ値Hは、その元データBが1ビットでも変更されると全く異なる値を示す性質、すなわち、元データBをユニークに識別できる性質を有している。
【0090】
次いで、分割装置6は、分割データ生成部33の機能として、生成したハッシュ値Hを含む元データBを秘密分散法Sを用いて3つのデータ(分割データ)D(1)〜D(3)に分割する(ステップS103)。そして、各分割データD(i)(i=1,2,3)について、
図8に示す形式のデータ、即ち、ハッシュ値hi(i=1,2,3)、データ分割に関する管理情報を含むヘッダ情報Ai(i=1,2,3)、および分割データD(i)(i=1,2,3)から構成される送信分割データDD(i)を生成する(ステップS104,S105)。
【0091】
ここで、ハッシュ値hiは、ハッシュ値生成部32の機能として、ヘッダ情報Aiおよび分割データD(i)を合わせた内容全体から、所定のハッシュ関数を用いて生成されるものである。尚、ヘッダ情報Aiのデータ識別子Ai1には、本実施の形態の秘密分散法Sにより分割されたデータであることを示す情報、バージョン情報Ai2には、データフォーマットのバージョンを識別する情報、およびヘッダサイズAi3には、元データサイズから分割データサイズまでの領域の合計データの長さを示す情報が格納されるようになっている。また、元データサイズAi4は、元データ(ハッシュ値Hを含む元データB)の長さを示す情報、分割数Ai5には、データの分割数(本実施の形態においては3)を示す情報、および処理単位ビット長Ai6には、秘密分散法Sによる分割処理において用いられる後述する処理単位ビット長を示す情報が格納されるようになっている。また、乱数データサイズAi7には、秘密分散法Sによる分割処理において用いられる乱数データの長さを示す情報、分割データタイプAi8には、いくつ目の分割データであるかを示す情報(例えば、3分割の場合は、分割データがD(1),D(2),D(3)のいずれかであるかを示す情報)、および分割データサイズAi9には、分割データD(i)の長さを示す情報が格納されるようになっている。
【0092】
そして、分割装置6は、データ送受信部37の機能として、作成した送信分割データDD(1)〜DD(3)を保管サーバ3a1〜3a3にネットワークNを介してそれぞれ送信する(ステップS106)。
【0093】
各保管サーバ3a1〜3a3は、ネットワークNを介して送信されてきた送信分割データDD(1)〜DD(3)を、それぞれのハードディスク等の記憶装置に記憶する(ステップS107)。
【0094】
このようにして、元データBをそのハッシュ値Hを含んで分割した分割データD(1)〜D(3)、ヘッダ情報A1〜A3、およびハッシュ値h1〜h3から構成される送信分割データDD(1)〜DD(3)をそれぞれ保管サーバ3a1〜3a3に保管することができる。
【0095】
次に、保管サーバ3a1〜3a3に保管された送信分割データDD(1)〜DD(3)を取り出す場合には、利用者が取り出したい元データBを指定し、端末5から分割装置6に取り出し指示を送信すると、分割装置6は、送信分割データDD(1)〜DD(3)のダウンロード要求を保管サーバ3a1〜3a3にそれぞれ送信する(ステップS108,S109)。
【0096】
各保管サーバ3a1〜3a3は、送信されてきたダウンロード要求に応じて、それぞれのハードディスク等の記憶装置に保管された各送信分割データDD(1)〜DD(3)を各記憶装置から読み出し、読み出した各送信分割データDD(1)〜DD(3)をネットワークNを介して分割装置6に送信する(ステップS110)。
【0097】
分割装置6は、データ原本性確保用プログラムP3に従って動作し、ハッシュ値確認部35の機能として、ネットワークNを介して送信されてきた送信分割データDD(1)〜DD(3)を受信し、受信した送信分割データDD(1)〜DD(3)の分割データ本体D(1)〜D(3)およびヘッダ情報A1〜A3からハッシュ値h1’〜h3’を再生成する(ステップS111)。そして、再生成されたハッシュ値h1’〜h3’と受信した送信分割データDD(1)〜DD(3)のハッシュ値h1〜h3とを比較して一致するか否かを確認する(ステップS112)。これにより、各保管サーバ3a1〜3a3から取得したデータの内容が欠落したり、改竄されていないことを確認することができる。
【0098】
次に、ステップS112でハッシュ値が一致する送信分割データDD(1)〜DD(3)が少なくとも2以上ある場合には、元データ復元部36の機能として、分割データD(1)〜D(3)およびヘッダ情報A1〜A3に基づいて秘密分散法Sにより元データB1およびハッシュ値H1をそれぞれ復元する(ステップS113)。これは、保管サーバ3a1〜3a3から分割データを取得できない場合やハッシュ値の一致が確認できない場合があっても、データが取得でき、ハッシュ値の一致が確認できたものがデータの復元に必要な個数以上(本実施の形態においては、後述するように2つ以上)あった場合には、後続処理(データ復元処理)を行うものである。
【0099】
次いで、分割装置6は、ハッシュ値確認部35の機能として、復元した元データB1からハッシュ値H2を再生成し、再生成したハッシュ値H2と復元したハッシュ値H1とを比較して一致するか否かを確認する(ステップS114,S115)。これにより、復元された元データBおよびハッシュ値Hの内容が欠落したり、改竄されていないことを確認することができる。また、ヘッダ情報A1〜A3および分割データ本体D(1)〜D(3)の内容を改竄した後、改竄した内容に合わせてハッシュ値h1〜h3を算出し、書き換えた場合においても(この場合、ステップS112においてハッシュ値は一致してしまう)、改竄を検出をすることが可能となる。
【0100】
そして、分割装置6は、復元された元データBをネットワークNを介して端末5に送信し、これにより、端末5は元データBを取得する(ステップS116,S117)。
【0101】
ここで、本実施の形態における秘密分散法Sについて詳しく説明する。尚、以後の説明における元データとは、データ分割の対象となる元データ、即ち、本実施の形態においては、ハッシュ値生成部33で生成されたハッシュ値Hを含む元データBをいう。
【0102】
本実施形態における元データの分割および復元では、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より1少ない数ずつ生成するので、元データのビット長が処理単位ビット長の(分割数-1)倍の整数倍に一致しない場合は、元データの末尾の部分に0を埋めるなどして元データのビット長を処理単位ビット長の(分割数-1)倍の整数倍に合わせることにより本実施形態を適用することができる。
【0103】
また、上述した乱数も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして乱数発生部34から生成される。すなわち、乱数は処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして生成される。更に、元データは処理単位ビット長に基づいて所望の分割数の分割データに分割されるが、この分割データの各々も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。すなわち、分割データの各々は、処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。
【0104】
なお、以下の説明では、上述した元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれB,R,D,nおよびbで表すとともに、また複数のデータや乱数などのうちの1つを表わす変数としてi(=1〜n)およびj(=1〜n-1)を用い、(分割数n-1)個の元部分データ、(分割数n-1)個の乱数部分データ、および分割数n個の分割データDのそれぞれのうちの1つをそれぞれB (j),R(j)およびD(i)で表記し、更に各分割データD(i)を構成する複数(n-1)の分割部分データをD(i,j)で表記するものとする。すなわち、B (j)は、元データBの先頭から処理単位ビット長毎に区分けして1番から順に採番した時のj番目の元部分データを表すものである。
【0105】
この表記を用いると、元データ、乱数データ、分割データとこれらをそれぞれ構成する元部分データ、乱数部分データ、分割部分データは、次のように表記される。
【0106】
元データB=(n-1)個の元部分データB(j)
=B(1),B(2),…,B(n-1)
乱数R=(n-1)個の乱数部分データR(j)
=R(1),R(2),…,R(n-1)
n個の分割データD(i)=D(1),D(2),…,D(n)
各分割部分データD(i,j)
=D(1,1),D(1,2),…,D(1,n-1)
D(2,1),D(2,2),…,D(2,n-1)
… … …
D(n,1),D(n,2),…,D(n,n-1)
(i=1〜n), (j=1〜n-1)
本実施形態は、上述したように処理単位ビット長毎に区分けされる複数の部分データに対して元部分データと乱数部分データの排他的論理和演算(XOR)を行って、詳しくは、元部分データと乱数部分データの排他的論理和演算(XOR)からなる定義式を用いて、元データの分割を行うことを特徴とするものであり、上述したデータ分割処理に多項式や剰余演算を用いる方法(第1および第2の実施の形態における方法)に比較して、コンピュータ処理に適したビット演算である排他的論理和(XOR)演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
【0107】
なお、本実施形態で使用する排他的論理和演算(XOR)は、以下の説明では、「*」なる演算記号で表すことにするが、この排他的論理和演算のビット毎の演算規則での各演算結果は下記のとおりである。
【0108】
0 * 0 の演算結果は 0
0 * 1 の演算結果は 1
1 * 0 の演算結果は 1
1 * 1 の演算結果は 0
また、XOR演算は交換法則、結合法則が成り立つ。すなわち、
a*b=b*a
(a*b)*c=a*(b*c)が成り立つことが数学的に証明される。
【0109】
また、a*a=0,a*0=0*a=aが成り立つ。
【0110】
ここでa,b,cは同じ長さのビット列を表し、0はこれらと同じ長さですべて「0」からなるビット列を表す。
【0111】
次に、フローチャートなどの図面も参照して、本実施の形態における秘密分散法Sの作用について説明するが、この説明の前に
図9乃至12のフローチャートに示す記号の定義について説明する。
【0112】
(1)Πi=1nA(i)は、A(1)*A(2)*…A(n)を意味するものとする。
【0113】
(2)c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×(P[n-1,n-1])^(j-1)のi行k列の値と定義する。
【0114】
このときQ(j,i,k)を下記のように定義する。
【0115】
c(j,i,k)=1 のとき Q(j,i,k)=R((n-1)×m+k)
c(j,i,k)=0 のとき Q(j,i,k)=0
(3)U[n,n]とは、n×n行列であって、i行j列の値をu(i,j)で表すと、
i+j<=n+1 のとき u(i,j)=1
i+j>n+1 のとき u(i,j)=0
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
【0116】
【数1】
(4)P[n,n]とは、n×n行列であって、i行j列の値をp(i,j)で表すと、
j=i+1 のとき p(i,j)=1
i=n,j=1 のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列を意味するものとし、「回転行列」ということとする。具体的には下記のような行列であり、他の行列の右側からかけると当該他の行列の1列目を2列目へ、2列目を3列目へ、…,n-1列目をn列目へ、n列目を1列目へ移動させる作用がある。つまり、行列Pを他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
【0117】
【数2】
(5)A,Bをn×n行列とすると、A×Bとは行列AとBの積を意味するものとする。行列の成分同士の計算規則は通常の数学で用いるものと同じである。
【0118】
(6)Aをn×n行列とし、iを整数とすると、A^iとは行列Aのi個の積を意味するものとする。また、A^0とは単位行列Eを意味するものとする。
【0119】
(7)単位行列E[n,n]とは、n×n行列であって、i行j列の値をe(i,j)で表すと、
i=j のとき e(i,j)=1
上記以外のとき e(i,j)=0
である行列を意味するものとする。具体的には下記のような行列である。Aを任意のn×n行列とすると
A×E=E×A=A
となる性質がある。
【0120】
【数3】
次に、
図9に示すフローチャートおよび
図10および
図11に示す具体的データなどを参照して、まず元データBの分割処理について説明する。
【0121】
まず、元データBを分割装置6に供給する(
図9のステップS201)。なお、本例では、元データBは、16ビットの「10110010 00110111」とする。
【0122】
次に、利用者は端末5から分割数nとして3を分割装置6に指示する(ステップS203)。この分割数nは分割装置6において予め定められた値を用いてもよい。なお、この分割数n=3に従って分割装置6で生成される3個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ16ビット長のデータである。
【0123】
それから、元データBを分割するために使用される処理単位ビット長bを8ビットと決定し、また元データと同じビット長である16ビットの乱数Rを乱数発生部34から取得して生成する(ステップS205)。この処理単位ビット長bは、利用者が端末5から分割装置6に対して指定してもよいし、または分割装置6において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよいが、ここでは元データBを割り切れることができる8ビットとしている。従って、上記16ビットの「10110010 00110111」の元データBは、8ビットの処理単位ビット長で区分けされた場合の2個の元分割データB(1)およびB(2)は、それぞれ「10110010」および「00110111」となる。
【0124】
次のステップS207では、元データBのビット長が8×2の整数倍であるか否かを判定し、整数倍でない場合には、元データBの末尾を0で埋めて、8×2の整数倍に合わせる。なお、本例のように処理単位ビット長bが8ビットおよび分割数nが3に設定された場合における分割処理は、元データBのビット長として16ビットに限られるものでなく、処理単位ビット長b×(分割数n-1)=8×2の整数倍の元データBに対して有効なものである。
【0125】
次に、ステップS209では、変数m、すなわち上述した整数倍を意味する変数mを0に設定する。本例のように、元データBが処理単位ビット長b×(分割数n-1)=8×2=16ビットである場合には、変数mは0であるが、2倍の32ビットの場合には、変数mは1となり、3倍の48ビットの場合には、変数mは2となる。
【0126】
次に、元データBの8×2×m+1ビット目から8×2ビット分のデータが存在するか否かが判定される(ステップS211)。これは、このステップS211以降に示す分割処理を元データBの変数mで特定される処理単位ビット長b×(分割数n-1)=8×2=16ビットに対して行った後、元データBとして次の16ビットがあるか否かを判定しているものである。本例のように元データBが16ビットである場合には、16ビットの元データBに対してステップS211以降の分割処理を1回行うと、後述するステップS219で変数mが+1されるが、本例の元データBでは変数mがm+1の場合に相当する17ビット以降のデータは存在しないので、ステップS211からステップS221に進むことになるが、今の場合は、変数mは0であるので、元データBの8×2×m+1ビット目は、8×2×0+1=1となり、元データBの16ビットの1ビット目から8×2ビット分にデータが存在するため、ステップS213に進む。
【0127】
ステップS213では、変数jを1から2(=分割数n-1)まで変えて、元データBの8×(2×m+j-1)+1ビット目から8ビット分(=処理単位ビット長)のデータを元部分データB(2×m+j)に設定し、これにより元データBを処理単位ビット長で区分けした2(分割数n-1)個の元部分データB(1),B(2)を次のように生成する。
【0128】
元データB=B(1),B(2)
第1の元部分データB(1)=「10110010」
第2の元部分データB(2)=「00110111」
次に、変数jを1から2(=分割数n-1)まで変えて、乱数部分データR(2×m+j)に乱数発生部34から発生する8ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした2(分割数n-1)個の乱数部分データR(1),R(2)を次のように生成する(ステップS215)。
【0129】
乱数R=R(1),R(2)
第1の乱数部分データR(1)=「10110001」
第2の乱数部分データR(2)=「00110101」
次に、ステップS217において、変数iを1から3(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを1から2(=分割数n-1)まで変えながら、ステップS217に示す分割データを生成するための元部分データと乱数部分データの排他的論理和からなる定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,2×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0130】
分割データD
=3個の分割データD(i)=D(1),D(2),D(3)
第1の分割データD(1)
=2個の分割部分データD(1,j)=D(1,1),D(1,2)
=「00110110」,「10110011」
第2の分割データD(2)
=2個の分割部分データD(2,j)=D(2,1),D(2,2)
=「00000011」,「00000010」
第3の分割データD(3)
=2個の分割部分データD(3,j)=D(3,1),D(3,2)
=「10110001」,「00110101」
なお、各分割部分データ(i,j)を生成するためのステップS217に示す定義式は、本例のように分割数n=3の場合には、具体的には
図11に示す表に記載されているものとなる。
図11に示す表から、分割部分データD(1,1)を生成するための定義式はB(1)*R(1)*R(2)であり、D(1,2)の定義式はB(2)*R(1)*R(2)であり、D(2,1)の定義式はB(1)*R(1)であり、D(2,2)の定義式はB(2)*R(2)であり、D(3,1)の定義式はR(1)であり、D(3,2)の定義式はR(2)である。また、
図11に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【0131】
このように整数倍を意味する変数m=0の場合について分割データDを生成した後、次に変数mを1増やし(ステップS219)、ステップS211に戻り、変数m+1に該当する元データBの17ビット以降について同様の分割処理を行おうとするが、本例の元データBは16ビットであり、17ビット以降のデータは存在しないので、ステップS211からステップS221に進み、上述したように生成した分割データD(1),D(2),D(3)を分割装置6のメモリ10に一時保存して、分割処理を終了する。なお、このように保管された分割データD(1),D(2),D(3)はそれぞれ単独では元データが推測できない。
【0132】
ここで、上述した
図9のフローチャートのステップS217における定義式による分割データの生成処理、具体的には分割数n=3の場合の分割データの生成処理について詳しく説明する。
【0133】
まず、整数倍を意味する変数m=0の場合には、ステップS217に示す定義式から各分割データD(i)=D(1)〜D(3)の各々を構成する各分割部分データD(i,2×m+j)=D(i,j)(i=1〜3,j=1〜2)は、次のようになる。
【0134】
D(1,1)=B(1)*Q(1,1,1)*Q(1,1,2)
D(1,2)=B(2)*Q(2,1,1)*Q(2,1,2)
D(2,1)=B(1)*Q(1,2,1)*Q(1,2,2)
D(2,2)=B(2)*Q(2,2,1)*Q(2,2,2)
D(3,1)=R(1)
D(3,2)=R(2)
上記の6つの式のうち上から4つの式に含まれるQ(j,i,k)を具体的に求める。
これはc(j,i,k)を2×2行列であるU[2,2]×(P[2,2])^(j-1)のi行k列の値としたとき下記のように定義される。
【0135】
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
ここで、
j=1のときは
【0137】
【数5】
これを用いると、各分割部分データD(i,j)は次のような定義式により生成される。
【0138】
D(1,1)=B(1)*Q(1,1,1)*Q(1,1,2)=B(1)*R(1)*R(2)
D(1,2)=B(2)*Q(2,1,1)*Q(2,1,2)=B(2)*R(1)*R(2)
D(2,1)=B(1)*Q(1,2,1)*Q(1,2,2)=B(1)*R(1)*0=B(1)*R(1)
D(2,2)=B(2)*Q(2,2,1)*Q(2,2,2)=B(2)*0*R(2)=B(2)*R(2)
上述した各分割部分データD(i,j)を生成するための定義式は、
図10にも図示されている。
【0139】
図10は、上述したように16ビットの元データBを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【0140】
ここで、上述した定義式により分割データD(1),D(2),D(3)および各分割部分データD(1,1),D(1,2),D(2,1),D(2,2),D(3,1),D(3,2)を生成する過程と定義式の一般形について説明する。
【0141】
まず、第1の分割データD(1)に対しては、第1の分割部分データD(1,1)は、上述した定義式B(1)*R(1)*R(2)で定義され、第2の分割部分データD(1,2)は定義式B(2)*R(1)*R(2)で定義される。なお、この定義式の一般形は、D(1,j)に対してはB(j)*R(j)*R(j+1)であり、D(1,j+1)に対してB(j+1)*R(j)*R(j+1)である(jは奇数とする)。定義式に従って計算すると、D(1,1)は00110110, D(1,2)は10110011となるので、D(1)は00110110 10110011である。なお、定義式の一般形は、
図11にまとめて示されている。
【0142】
また、第2の分割データD(2)に対しては、D(2,1)はB(1)*R(1)で定義され、D(2,2)はB(2)*R(2)で定義される。この定義式の一般形は、D(2,j)に対してはB(j)*R(j)であり、D(2,j+1)に対してはB(j+1)*R(j+1)である(jは奇数とする)。定義式に従って計算すると、D(2,1)は00000011, D(2,2)は00000010となるので、D(2)は00000011 00000010である。
【0143】
更に第3の分割データD(3)に対しては、D(3,1)はR(1)で定義され、D(3,2)はR(2)で定義される。この定義式の一般形は、D(3,j)に対してはR(j)であり、D(3,j+1)に対してはR(3,j+1)である(jは奇数とする)。定義式に従って計算すると、D(3,1)は10110001, D(3,2)は00110101となるので、D(3)は10110001 00110101である。
【0144】
上記説明は、B,R,D(1),D(2),D(3)の長さを16ビットとしたが、データの先頭から上記分割処理を繰り返すことにより、どのような長さの元データBからでも分割データD(1),D(2),D(3)を生成することができる。また、処理単位ビット長bは任意にとることができ、元データBの先頭から順にb×2の長さ毎に上記分割処理を繰り返すことにより任意の長さの元データ、具体的には処理単位ビット長b×2の整数倍の長さの元データに対して適用することができる。なお、元データBの長さが処理単位ビット長b×2の整数倍でない場合は、例えば、データ末尾の部分を0で埋めるなどして元データBの長さを処理単位ビット長b×2の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
【0145】
次に、
図10の右側に示す表を参照して、分割データから元データを復元する処理について説明する。
【0146】
まず、分割装置6に元データBの復元を要求する。分割装置6は、この元データBの復元要求を受け取ると、この元データBに対応する分割データD(1),D(2),D(3)が保管サーバ3a1,3a2,3a3に保管されていることを記憶しているので、ネットワークNを介して保管サーバ3a1,3a2,3a3から分割データD(1),D(2),D(3)を取得し、この取得した分割データD(1),D(2),D(3)から次に示すように元データBを復元する。
【0147】
まず、分割部分データD(2,1),D(3,1)から第1の元部分データB(1)を次のように生成することができる。
【0148】
D(2,1)*D(3,1)=(B(1)*R(1))*R(1)
=B(1)*(R(1)*R(1))
=B(1)*0
=B(1)
具体的に計算すると、D(2,1)は00000011, D(3,1)は10110001なので、B(1)は10110010となる。
【0149】
また、別の分割部分データから次のように第2の元部分データB(2)を生成することができる。
【0150】
D(2,2)*D(3,2)=(B(2)*R(2))*R(2)
=B(2)*(R(2)*R(2))
=B(2)*0
=B(2)
具体的に計算すると、D(2,2)は00000010, D(3,2)は00110101なので、B(2)は00110111となる。
【0151】
一般に、jを奇数として、
D(2,j)*D(3,j)=(B(j)*R(j))*R(j)
=B(j)*(R(j)*R(j))
=B(j)*0
=B(j)
であるから、D(2,j)*D(3,j)を計算すれば、B(j)が求まる。
【0152】
また、一般に、jを奇数として、
D(2,j+1)*D(3,j+1)=(B(j+1)*R(j+1))*R(j+1)
=B(j+1)*(R(j+1)*R(j+1))
=B(j+1)*0
=B(j+1)
であるから、D(2,j+1)*D(3,j+1)を計算すれば、B(j+1)が求まる。
【0153】
次に、D(1),D(3)を取得してBを復元する場合には、次のようになる。
D(1,1)*D(3,1)*D(3,2)=(B(1)*R(1)*R(2))*R(1)*R(2) =B(1)*(R(1)*R(1))*(R(2)*R(2))
=B(1)*0*0
=B(1)
であるから、D(1,1)*D(3,1)*D(3,2)を計算すれば、B(1)が求まる。具体的に計算すると、D(1,1)は00110110, D(3,1)は10110001, D(3,2)は00110101なので、B(1)は10110010となる。
【0154】
また同様に、
D(1,2)*D(3,1)*D(3,2)=(B(2)*R(1)*R(2))*R(1)*R(2)
=B(2)*(R(1)*R(1))*(R(2)*R(2))
=B(2)*0*0
=B(2)
であるから、D(1,2)*D(3,1)*D(3,2)を計算すれば、B(2)が求まる。具体的に計算すると、D(1,2)は10110011, D(3,1)は10110001, D(3,2)は00110101なので、B(2)は00110111となる。
【0155】
一般に、jを奇数として、
D(1,j)*D(3,j)*D(3,j+1)=(B(j)*R(j)*R(j+1))*R(j)*R(j+1)
=B(j)*(R(j)*R(j))*(R(j+1)*R(j+1))
=B(j)*0*0
=B(j)
であるから、D(1,j)*D(3,j)*D(3,j+1)を計算すれば、B(j)が求まる。
【0156】
また、一般に、jを奇数として、
D(1,j+1)*D(3,j)*D(3,j+1)=(B(j+1)*R(j)*R(j+1))*R(j)*R(j+1)
=B(j+1)*(R(j)*R(j))*(R(j+1)*R(j+1))
=B(j+1)*0*0
=B(j+1)
であるから、D(1,j+1)*D(3,j)*D(3,j+1)を計算すれば、B(j+1)が求まる。
【0157】
次に、D(1),D(2)を取得してBを復元する場合には、次のようになる。
【0158】
D(1,1)*D(2,1)=(B(1)*R(1)*R(2))*(B(1)*R(1))
=(B(1)*B(1))*(R(1)*R(1))*R(2)
=0*0*R(2)
=R(2)
であるから、D(1,1)*D(2,1)を計算すれば、R(2)が求まる。具体的に計算すると、D(1,1)は00110110, D(2,1)は00000011なので、R(2)は00110101となる。
【0159】
また同様に、
D(1,2)*D(2,2)=(B(2)*R(1)*R(2))*(B(2)*R(2))
=(B(2)*B(2))*R(1)*(R(2)*R(2))
=0*R(1)*0
=R(1)
であるから、D(1,2)*D(2,2)を計算すれば、R(1)が求まる。具体的に計算すると、D(1,2)は10110011, D(2,2)は00000010なので、R(1)は10110001となる。
【0160】
このR(1),R(2)を使用してB(1),B(2)を求める。
【0161】
D(2,1)*R(1)=(B(1)*R(1))*R(1)
=B(1)*(R(1)*R(1))
=B(1)*0
=B(1)
であるから、D(2,1)*R(1)を計算すれば、B(1)が求まる。具体的に計算すると、D(2,1)は00000011, R(1)は10110001なので、B(1)は10110010となる。
【0162】
また同様に、
D(2,2)*R(2)=(B(2)*R(2))*R(2)
=B(2)*(R(2)*R(2))
=B(2)*0
=B(2)
であるからD(2,2)*R(2)を計算すればB(2)が求まる。具体的に計算するとD(2,2)は00000010, R(2)は00110101なので、B(2)は00110111となる。
【0163】
一般に、jを奇数として、
D(1,j)*D(2,j)=(B(j)*R(j)*R(j+1))*(B(j)*R(j))
=(B(j)*B(j))*(R(j)*R(j))*R(j+1)
=0*0*R(j+1)
=R(j+1)
であるからD(1,j)*D(2,j)を計算すればR(j+1)が求まる。
【0164】
また同様に、
D(1,j+1)*D(2,j+1)=(B(j+1)*R(j)*R(j+1))*(B(j+1)*R(j+1))
=(B(j+1)*B(j+1))*R(j)*(R(j+1)*R(j+1))
=0*R(j)*0
=R(j)
であるからD(1,j+1)*D(2,j+1)を計算すればR(j)が求まる。
【0165】
このR(j),R(j+1)を使用してB(j),B(j+1)を求める。
【0166】
D(2,j)*R(j)=(B(j)*R(j))*R(j)
=B(j)*(R(j)*R(j))
=B(j)*0
=B(j)
であるからD(2,j)*R(j)を計算すればB(j)が求まる。
【0167】
また同様に、
D(2,j+1)*R(j+1)=(B(j+1)*R(j+1))*R(j+1)
=B(j+1)*(R(j+1)*R(j+1))
=B(j+1)*0
=B(j+1)
であるからD(2,j+1)*R(j+1)を計算すればB(j+1)が求まる。
【0168】
上述したように、元データの先頭から処理単位ビット長bに基づいて分割処理を繰り返し行って、分割データを生成した場合には、3つの分割データD(1),D(2),D(3)のすべてを用いなくても、3つの分割データのうち、2つの分割データを用いて上述したように元データを復元することができる。
【0169】
本発明の他の方法として、乱数Rのビット長を元データBのビット長よりも短いものを使用して、元データの分割処理を行うことができる。
【0170】
すなわち、上述した乱数RはB,D(1),D(2),D(3)と同じビット長のデータとしたが、乱数Rを元データBのビット長より短いものとし、分割データD(1),D(2),D(3)の生成にこの短いビット長の乱数Rを繰り返し用いるものである。
【0171】
なお、分割データD(3)は乱数Rのみから生成されるので、分割データD(3)は乱数Rを繰り返して保管しておく必要はない。例えば、元データBのビット長を1600ビット(200バイト)としたとき、乱数Rは任意にとった160ビット(20バイト)のデータの繰り返しとする。つまり、R(1)〜R(20)はランダムに生成し、R(21)〜R(200)はR(21)=R(1),R(22)=R(2),…,R(40)=R(20),R(41)=R(1),R(42)=R(2),…,R(60)=R(20),R(61)=R(1),R(62)=R(2),…,R(80)=R(20),………,R(181)=R(1),R(182)=R(2),…,R(200)=R(20)とする。
【0172】
先の説明では、分割部分データD(3,j)を乱数部分データR(j)と定義してD(3)を生成しているが、D(3,20)まで保管すれば十分である。つまり、D(3)の長さはD(1),D(2)の10分の1となる。従って、保管すべきデータの総量は先の実施形態では元データBの3倍であるが、この実施形態では2.1倍とすることができる。
【0173】
乱数Rにおける繰り返し部分のデータの長さは、短すぎると、D(1)またはD(2)のみからRが解読されてしまうことも考えられるため、適切な長さを選択することが望ましい。
【0174】
次に、
図12に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
【0175】
まず、元データBを分割装置6に供給する(ステップS401)。また、利用者は端末5から分割数n(n≧3である任意の整数)を分割装置6に指示する(ステップS403)。この分割数nは分割装置6において予め定められた値を用いてもよい。処理単位ビット長bを決定する(ステップS405)。なお、bは0より大きい任意の整数である。次に、元データBのビット長がb×(n-1)の整数倍であるか否かを判定し、整数倍でない場合には、元データBの末尾を0で埋める(ステップS407)。また、整数倍を意味する変数mを0に設定する(ステップS409)。
【0176】
次に、元データBのb×(n-1)×m+1ビット目からb×(n-1)ビット分のデータが存在するか否かが判定される(ステップS411)。この判定の結果、データが存在しない場合は、ステップS421に進むことになるが、今の場合は、ステップS409で変数mは0に設定された場合であるので、データが存在するため、ステップS413に進む。
【0177】
ステップS413では、変数jを1からn-1まで変えて、元データBのb×(n-1)×m+j-1)+1ビット目からbビット分のデータを元部分データB((n-1)×m+j)に設定する処理を繰り返し、これにより元データBを処理単位ビット長bで区分けした(n-1)個の元部分データB(1),B(2),…B(n-1)が生成される。
【0178】
次に、変数jを1からn-1まで変えて、乱数部分データR((n-1)×m+j)に乱数発生部34から発生する処理単位ビット長bの乱数を設定し、これにより乱数Rを処理単位ビット長bで区分けしたn-1個の乱数部分データR(1),R(2),…R(n-1)が生成される(ステップS415)。
【0179】
次に、ステップS417において、変数iを1からnまで変えるとともに、更に各変数iにおいて変数jを1からn-1まで変えながら、ステップS417に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,(n-1)×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0180】
分割データD
=n個の分割データD(i)=D(1),D(2),…D(n)
第1の分割データD(1)
=n-1個の分割部分データD(1,j)=D(1,1),D(1,2),…D(1,n-1)
第2の分割データD(2)
=n-1個の分割部分データD(2,j)=D(2,1),D(2,2),…D(2,n-1)
… … …
… … …
第nの分割データD(n)
=n-1個の分割部分データD(n,j)=D(n,1),D(n,2),…D(n,n-1)
このように変数m=0の場合について分割データDを生成した後、次に変数mを1増やし(ステップS419)、ステップS411に戻り、変数m=1に該当する元データBのb×(n-1)ビット以降について同様の分割処理を行う。最後にステップS411の判定の結果、元データBにデータがなくなった場合、ステップS411からステップS421に進み、上述したように生成した分割データD(1), …,D(n)を分割装置6のメモリ10に一時保存して、分割処理を終了する。
【0181】
以上述べたように、本実施形態によれば、元データBを、元データBのハッシュ値Hを含めて秘密分散法Sにより複数の分割データD(1)〜D(3)に分割し、また、分割データD(1)〜D(3)、ヘッダ情報A1〜A3、並びに分割データD(1)〜D(3)およびヘッダ情報A1〜A3から算出されたハッシュ値h1〜h3から構成される送信分割データDD(1)〜DD(3)を生成し、該送信分割データDD(1)〜DD(3)を保管サーバ3a1〜3a3にそれぞれ保管しているため、その送信分割データDD(1)〜DD(3)の内の少なくとも一部が改竄された場合でも、改竄データを含む送信分割データDD(1)〜DD(3)から、その送信分割データDD(1)〜DD(3)に対する改竄の有無を容易に確認することができる。
【0182】
この結果、例えば元データBを長期間に亘って保管する場合であっても、電子署名のように、電子証明書の再発行処理および電子署名付きデータ作成処理を繰り返し行うことなく、簡易に元データBを保管することができる。
【0183】
また、本実施形態によれば、元データBを送信分割データDD(1)〜DD(3)に分割して保管サーバ3a1〜3a3に保管しているため、例えば、送信分割データDD(1)〜DD(3)の内の1つの分割データが改竄された場合でも、残りの分割データを用いて元データBを復元することができる。
【0184】
この結果、元データBの原本性をより確実に確保することができる
また、第1および第2の実施の形態における秘密分散法は、公開鍵暗号方式の秘密鍵の分割管理などで利用されており、比較的データ容量の小さいデータに対して実用的な方法であるが、本実施の形態における秘密分散法Sは、多項式演算・剰余演算などを含む多倍長整数の演算処理を必要としないので、大容量データを多数処理する場合においても簡単かつ迅速にデータの分割および復元を行うことができるという効果を得ることができる。
【0185】
なお、第1および第2の実施の形態では、元データBを分割した分割データD(1)〜D(4)を、クライアント2に対してネットワークNを介して接続された保管サーバ3a1〜3a4に保管し、第3の実施の形態では、元データBを分割した送信分割データDD(1)〜DD(3)を、分割装置6に対してネットワークNを介して接続された保管サーバ3a1〜3a3に保管するように構成したが、本発明はこの構成に限定されるものではない。
【0186】
例えば、データ原本性確保システム1の変形例を
図13に示す。
【0187】
図13に示すように、変形例に係わるデータ原本性確保システム1Aは、クライアント側単独でのクライアントシステム25として構成されており、このクライアントシステム25は、クライアント2と、このクライアント2に対してLAN等を介して接続された互いにハードウェア的に独立した複数の保管用記憶装置20a1〜20a4とを備えている。
【0188】
図13に示すようにデータ原本性確保システム1Aを構成しても、元データBを分割データD(1)〜D(4)として複数の保管用記憶装置20a1〜20a4に保管することができ、元データBの原本性を簡易かつ確実に確保しながら保管することができる。
【0189】
また、同様に、データ原本性確保システム4の変形例として、端末5、分割装置6、および保管サーバ3a1〜3a3をクライアント側単独でのクライアントシステムとして構成してもよいものである。
【0190】
さらに、上記実施の形態で説明した各システム構成は、あくまでも好適な一具体例を示したものであり、機能的に同一であるのならば、他のシステム構成、例えば、データ原本性確保システム1のシステム構成をデータ原本性確保システム4に示すようなシステム構成としてもよい。これは、データ原本性確保システム1のクライアント2の機能を端末5と分割装置6に機能分散したシステム構成とするものである。同様にして、例えば、データ原本性確保システム4のシステム構成をデータ原本性確保システム1に示すようなシステム構成としてもよい。これは、データ原本性確保システム4の端末5と分割装置6の機能を集約してクライアント2の機能とするものである。
【0191】
また、上記実施の形態、ならびにその変形例によれば、秘密分散法としてShamirの秘密分散法{(k、n)閾値法;但し、分割数を表すnを4とし、復元できる数を表すkを3とする}、および秘密分散法Sを用いたが、本発明はこの構成に限定されるものではなく、上記実施の形態で述べた秘密分散法以外の他の秘密分散法を用いることも可能である。
【0192】
さらに、上記実施の形態、ならびにその変形例によれば、元データのユニークに識別できる識別データとしてハッシュ値を用いたが、ハッシュ値以外の識別データ、例えばパリティ、チェックサム(元データをブロックに分割し、分割されたブロックを数値とみなして全てのブロックを合計した値)等であってもよい。