以下、図面を用いて本発明の実施の形態について説明する。
<第1の実施形態>
図1は、本発明の第1の実施形態に係るデータ秘匿システムの構成図である。本実施形態のデータ秘匿システムは、秘匿装置1(データ秘匿装置)と、端末5、保管サーバ7とを備える。
秘匿装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データSの秘匿要求に応じて、元データSの秘匿データを生成する。また、秘匿装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データ復元要求に応じて、秘匿データから元データSを復元し、ネットワーク3を介して端末5に送信する。本実施形態の秘匿装置1は、秘匿データ生成手段11と、元データ復元手段13と、乱数発生手段15と、データ送受信手段17と、秘匿データ記憶手段19と、を備える。
秘匿データ生成手段11(元部分データ生成手段、乱数部分データ生成手段、秘匿部分データ生成手段、復元ID付与手段、取得手段、閲覧制御秘匿データ生成手段)は、元データSから秘匿データを生成する。具体的には、秘匿データ生成手段11は、元データSを所定の処理単位に区切って、元部分データを生成するとともに、元データSと同じ長さまたは元データSより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成する。そして、秘匿データ生成手段11は、元部分データと乱数部分データとを、所定数ずつ順番に取り出し、取り出した元部分データと乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成し、生成した秘匿部分データに復元IDを付与し、秘匿データ記憶手段19に格納する。
元データ復元手段13は、秘匿データから元データを復元する。具体的には、元データ復元手段13は、端末5から復元IDを受け付けて、当該復元IDに対応付けられた秘匿部分データを秘匿データ記憶手段19から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元する。
乱数発生手段15は、元データSから秘匿データを生成するために使用される乱数を発生する。データ送受信手段17は、乱数発生手段15が発生した乱数をネットワーク3を介して保管サーバ7に送信するとともに、また保管サーバ7からの乱数をネットワーク3を介して受信する。秘匿データ記憶手段19には、元データSから生成される秘匿データが格納される。本実施形態では、秘匿データ記憶手段19には、元データSを部分的に復元できるように、秘匿データを構成する複数の秘匿部分データが格納される。
なお、以下に説明する本実施形態では、元データSと同じ長さの乱数を用いることとするが、元データSの長さよりも短い乱数を使用して、元データSを秘匿することとしてもよい。すなわち、乱数を元データSの長さより短いものとし、この短い長さの乱数を繰り返し用いることとしてもよい。
なお、上記説明した秘匿装置1および端末5には、例えば、CPUと、メモリと、ハードディスク等の外部記憶装置と、入力装置と、出力装置とを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPUがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、秘匿装置1および端末5の各機能は、秘匿装置1用のプログラムの場合は秘匿装置1のCPUが、そして、端末5用のプログラムの場合は端末5のCPUがそれぞれ実行することにより実現される。また、秘匿装置1用のプログラムおよび端末5用のプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD−ROMなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
次に、本実施形態の処理について説明する。
[秘匿データの生成処理]
図2は、本実施形態の秘匿装置1の秘匿データ生成処理を説明するための説明図である。
本実施形態の秘匿装置1の利用者は、端末5からネットワーク3を介して秘匿装置1にアクセスし、秘匿装置1に元データSを送信する。秘匿装置1のデータ送受信手段17は、端末5からの元データSを受信する。そして、秘匿データ生成手段11は、元データSを秘匿するために使用される処理単位ビット長bを決定する。この処理単位ビット長bは、利用者が端末5から秘匿装置1に対して指定してもよいし、または秘匿装置1において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよい。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、元データSの末尾を0で埋めて、処理単位ビット長bの整数倍の長さにする。そして、秘匿データ生成手段11は、元データSを処理単位ビット長bに区切って分割し、複数の元部分データS1〜Snを生成する(S11)。
また、秘匿データ生成手段11は、乱数発生手段15が生成した元データSと同じビット長の乱数Rを取得し、当該乱数Rを処理単位ビット長bに区切って分割し、複数の乱数部分データR1〜Rnを生成する(S12)。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、処理単位ビット長bの整数倍の長さの乱数Rを生成する。
そして、秘匿データ生成手段11は、元部分データと乱数部分データとを、先頭から所定数ずつ順番に取り出す(S13)。図示する例では、元部分データS1〜S3と乱数部分データR1〜R3とを3つずつ取り出すものとする。
そして、秘匿データ生成手段11は、取り出した各元部分データと、対応する各乱数部分データとの排他的論理和演算(XOR)をそれぞれ行うことにより、所定数の秘匿部分データを生成する(S14)。図示する例では、元部分データS1と対応する乱数部分データR1との排他論理和演算を行うことで秘匿部分データSR1を生成し、元部分データS2と対応する乱数部分データR2との排他論理和演算を行うことで秘匿部分データSR2を生成し、元部分データS3と対応する乱数部分データR3との排他論理和演算を行うことで秘匿部分データSR3を生成する。
そして、秘匿データ生成手段11は、生成した所定数の秘匿部分データに復元IDを付加して保管する(S15)。本実施形態では、秘匿データ生成手段11は、復元IDを付加した秘匿部分データを秘匿データ記憶部19に格納する。図示する例では、所定数の秘匿部分データSR1、SR2、SR3に復元IDとして「001」を付加するものとする。復元IDは、データの順序がわかるものが好ましく、ここでは「001」、「002」、「003」、・・・のように+1ずつ加算した値を復元IDとして用いるものとする。
なお、本実施形態では、秘匿データ生成部11は、復元IDの他にビット位置情報も付加して秘匿部分データを秘匿データ記憶手段19に保管するものとする。ビット位置情報は、元データSの先頭からのビット位置を示すものである。これにより、復元IDを指定して元データSの所望の部分を復元すること、または、ビット位置情報を指定して元データSの所望の部分を復元することもできる。
また、秘匿データ生成手段11は、所定数の秘匿部分データの鍵となる乱数部分データに、S15で付加した復元IDと同じ復元IDを付加して、秘匿部分データの格納場所とは異なる場所に保管する(S16)。本実施形態では、秘匿データ生成手段11は、データ送受信手段17を用いて、復元IDを付加した乱数部分データを保管サーバ7に送信し、格納する。図示する例では、所定数の乱数部分データR1、R2、R3に復元IDとして「001」を付加し、さらにビット位置情報も付加して格納するものとする。
全ての元部分データに対して、S13からS16の処理を行うことで全ての元部分データに対応する秘匿部分データが生成される。ここで、秘匿データは、全ての秘匿部分データから構成され、元データS全体の秘匿データを意味する。
なお、図2に示す本実施形態では、元データおよび乱数を区切る所定の処理単位として、秘匿データの生成処理を高速化するために、所定の長さの処理単位ビット長を用いることとしたが、処理単位ビット長以外の処理単位で、元データおよび乱数を区切ることとしてもよい。
例えば、処理単位として、元データのデータ特徴単位を用い、当該データ特徴単位に生成される各秘匿部分データに対してそれぞれ復元IDを付与することが考えられる。データ特徴単位は、例えば、個人情報の各項目(氏名、住所、電話番号など)であって、各項目毎に生成される秘匿部分データに、各復元IDを付与することが考えられる。また、データ特徴単位は、元データが動画の場合、映像のフレーム単位であって、フレーム単位に生成される秘匿部分データに、各復元IDを付与することが考えられる。
また、図1および図2に示す実施形態では、秘匿装置1の秘匿データ記憶手段19に秘匿部分データを格納し、保管サーバ7に乱数部分データを格納することとしたが、秘匿データ記憶手段19に乱数部分データを格納し、保管サーバ7に秘匿部分データを格納することとしてもよい。
以上説明した秘匿データの生成処理を事前準備として、その後、元データSの部分的な復元処理が行われる。
[元データの復元処理]
以下に、元データの一部を復元する処理について説明する。
まず、秘匿装置1が、端末5からの要求を受け付けて、元データの一部を復元する処理について説明する。秘匿装置1の元データ復元手段13は、端末5から復元IDを受け付けて、当該復元IDに対応付けられた秘匿部分データを秘匿データ記憶手段19から読み出す。また、元データ復元手段13は、受け付けた復元IDに対応付けられた乱数部分データを保管サーバ7から取得する。そして、元データ復元手段13は、読み出した秘匿部分データと、取得した乱数部分データとの排他論理和演算を行うことで、受け付けた復元IDに対応する部分の元データ(元部分データ)を復元し、要求元の端末5に送信する。
次に、図3を用いて、あるユーザが、他のユーザに元データの一部を閲覧させる処理について説明する。図3では、元データの復元処理は、秘匿装置1ではなく、端末で行われる。
元データの部分閲覧を許可する許可者(例えば、上司)は、元データの中で復元させる部分を自身の端末51に入力し、指定する(S21)。許可者は、例えば、復元させる部分が元データの何ビット目にあたるかを示すビット位置情報を入力することで、元データの中で復元する部分を指定することが考えられる。
また、図4に示すように、元データが画像データの場合、端末5のディスプレイ上に元データを表示し、許可者が元データの一部を範囲指定(図4の斜線部分)することで、元データの中で復元する部分を指定することとしてもよい。この場合、端末51は、許可者がディスプレイ上で指定した範囲が、元データの何ビット目にあたるかのビット位置情報を取得する。通常、映像ファイル、画像ファイルにおいては、利用者が認識する情報の範囲とデータのビット列とが対応していない。そのため、例えば端末51に実装されたアプリケーションを用いて任意の解像度を選択し、ピクセル単位に秘匿する表示場所を指定することにより、元のファイル(元データ)のビット列を取得することを可能とする。
また、元データが動画データの場合、時間(例えば、再生開始から5分〜6分)で範囲指定すること、あるいは、元データのデータカラムのセル(データ項目)で範囲指定することとしてもよい。
そして、端末51は、許可者が指定した範囲のビット位置情報を秘匿装置1に送信し、当該ビット位置情報に対応する復元IDを要求する(S22)。
秘匿装置1の元データ復元手段13は、データ送受信手段17を用いてビット位置情報を受信し、秘匿データ記憶手段19を参照して、当該ビット位置情報に対応する復元IDを特定する。秘匿データ記憶手段19には、図2で説明したように、復元IDと、ビット位置情報と、秘匿部分データとが、対応付けて記憶されている。そして、元データ復元手段13は、特定した復元IDを、データ送受信手段17を用いて端末51に送信する(S23)。
端末51は、秘匿装置1から受信した復元IDに対応する乱数部分データを、保管サーバ7から取得する(S24)。そして、端末51は、S23で取得した復元IDと、S24で取得した乱数部分データ(鍵)とを、元データの一部を閲覧させる閲覧者(例えば、部下)の端末52に送信する(S25)。
閲覧者の端末52は、復元IDおよび乱数部分データを受信すると、当該復元IDに対応する秘匿部分データを秘匿装置1に要求する(S26)。
秘匿装置1の元データ復元手段13は、データ送受信手段17を用いて復元IDを受信し、秘匿データ記憶手段19を参照して、当該復元IDに対応する秘匿部分データを特定し、データ送受信手段17を用いて閲覧者の端末52に送信する(S27)。
閲覧者の端末52は、秘匿装置1から送信された秘匿部分データと、S25で許可者の端末51から送信された乱数部分データとを排他論理和演算することで、元データの一部を復元する(S28)。
このように、本実施形態では、元データを部分的に復元することが可能になり、データ全体を復元するのに比べてセキュリティも高く、より高速に復元することができる。すなわち、必要な部分(閲覧させたい部分)だけを復元することで、データ漏洩のリスクを低減しつつ、短時間で復元することができる。
[複数ユーザによる閲覧制限]
次に、本実施形態を用いた、複数ユーザによる閲覧制限について説明する。
図5は、複数ユーザによる閲覧制限を行う場合のシステム構成例である。図5に示す例では、Aさん、Bさん、Cさんの3人の各ユーザが、元データSの所望の部分に各ユーザ固有の乱数Rで排他論理和演算を行うことで、元データSの閲覧制限を行うものである。
図5では、Aさんが使用する端末61、Bさんが使用する端末62、およびCさんが使用する端末63は、ネットワーク3を介して秘匿装置1に接続される。また、元データSを秘匿する際に、各端末61〜63および秘匿装置1は、元データSが格納されている保管サーバ71に、ネットワーク3を介してアクセスし、元データSを取得できるものとする。また、各端末61〜63(各ユーザ)は、それぞれ個別の乱数R1、R2、R3を保持している。なお、各乱数R1、R2、R3は、元データSと同じビット長または元データSより短いビット長である。
図6は、複数ユーザによる閲覧制限の仕組みを説明する説明図である。
S31において、各端末61〜63は、ユーザの指示を受け付けて、保管サーバ71にアクセスし、部分的に閲覧制限をかけるために元データSを取得する。そして、各端末61〜63は、元データSに対して閲覧制限(鍵)をかけたい部分に、各ユーザが保持する乱数を排他論理和演算して、ユーザ秘匿データを生成する。図示する例では、Aさんの端末61は、Aさんの指示を受け付けて、元データSのAさんの所望の部分に、当該部分に対応する部分の乱数R1を排他論理和演算して、ユーザ秘匿データSR1を生成する。また、Bさんの端末62は、Bさんの指示を受け付けて、元データSのBさんの所望の部分に、当該部分に対応する部分の乱数R2を排他論理和演算して、ユーザ秘匿データSR2を生成する。また、Cさんの端末63は、Cさんの指示を受け付けて、元データSのCさんの所望の部分に、当該部分に対応する部分の乱数R3を排他論理和演算して、ユーザ秘匿データSR3を生成する。
なお、各ユーザが元データSの閲覧制限をかけたい部分に排他論理和演算する乱数は、前述のとおり元データSの当該部分に対応する部分(位置)の乱数であってあってもよく、あるいは、乱数の先頭から当該部分に相当する長さの乱数を順番に取り出して使用することとしてもよい。また、元データSの閲覧制限をかけない部分に相当する部分を「0」に置換し、元データSの閲覧制限をかけたい部分に相当する部分を乱数のままとしたデータを生成し、当該データを元データSに排他論理和演算することでユーザ秘匿データを生成することとしてもよい。乱数のどの部分を使用してユーザ秘匿データを生成したかについては、各端末61〜63は、図示しない記憶部に記憶しておくものとする。
S32において、各端末61〜63は、ユーザの指示を受け付けて、生成したユーザ秘匿データSR1〜SR3を秘匿装置1に送信(アップロード)する。
S33において、秘匿装置1の秘匿データ生成手段11は、各端末61〜63から送信されたユーザ秘匿データSR1〜SR3を受信し、受信した全てのユーザ秘匿データSR1〜SR3を排他論理和演算する。これにより、各ユーザがそれぞれ閲覧制限をかけたいところに閲覧制限をかけた閲覧制限秘匿データSR(=SR1×SR2×SR3)が生成される。なお、「×」は、排他論理和演算(XOR)を示す。また、排他論理和演算する順番は問わず、どのような順番であってもよい。そして、秘匿データ生成手段11は、生成した閲覧制限秘匿データSRを秘匿データ記憶手段19に格納する。
例えば、Aさん、Bさん、Cさんの全てのユーザが、自身の各乱数を排他論理和演算した部分のユーザ秘匿データSRは、「S×R1×S×R2×S×R3」であるため、結果として「S×R1×R2×R3」となる。また、AさんとBさんの2人のユーザが、自身の各乱数を排他論理和演算した部分のユーザ秘匿データSRは、「S×R1×S×R2×S」であるため、結果として「S×R1×R2」となる。
なお、排他論理和演算するユーザ秘匿データSRnの数(ユーザの数)が偶数の場合、秘匿データ生成手段11は、保管サーバ71にアクセスして元データSを取得し、各端末で生成されたユーザ秘匿データSRnの排他論理和演算に、さらに元データSを排他論理和演算して閲覧制限秘匿データSRを生成する。
S31からS33の処理により、複数ユーザによる閲覧制限が掛けられた閲覧制限秘匿データSRが生成され、秘匿装置1の秘匿データ記憶手段19に格納される。
S34において、各端末61〜63は、ユーザの指示を受け付けて、秘匿装置1にアクセスして閲覧制限秘匿データSRを取得し、当該閲覧制限秘匿データSRに入手した乱数(自身の乱数および/または他ユーザから入手した乱数)を排他論理和演算することで、所望の部分の元データSを復元する。すなわち、入手した乱数が排他論理和演算された部分の元データSのみが復元可能であり、入手できない他の乱数が排他論理和演算されている部分の元データSについては復元することができない。換言すると、複数のユーザが閲覧制限を掛けた部分の元データSは、閲覧制御秘匿データSRに当該複数のユーザ固有の乱数を排他論理和演算することで復元される。
図7は、図6で説明した閲覧制限秘匿データSRを部分的に復元する場合に必要となる乱数を示す説明図である。BさんおよびCさんが自身の端末62、63に格納された乱数R2、R3でそれぞれ排他論理和演算した部分81の閲覧制限秘匿データSRは、「S×R2×R3」である。したがって、当該部分81を復元するには、鍵としてBさんおよびCさんが保持する乱数R2、R3を入手する必要がある。すなわち、BさんおよびCさんの閲覧許可が必要となる。例えば、Aさんが当該部分81を復元および閲覧するには、BさんおよびCさんの許可を得て、各端末62、63に格納された乱数R2、R3を取得し、自身の端末61を用いて、閲覧制限秘匿データSR(=S×R2×R3)に入手した乱数データR2、R3を排他論理和演算することで、所望の部分81の元データSを復元する。なお、復元の際においても、排他論理和演算する順番は問わない。
同様に、Bさんが自身の端末62に格納された乱数R2のみで排他論理和演算した部分82、89の閲覧制限秘匿データSRは、「S×R2」である。したがって、当該部分82、89を復元するには、鍵としてBさんが保持する乱数R2を入手する必要がある。
なお、図6では、各端末61〜63が、各ユーザの乱数を用いてユーザ秘匿データを生成することとしたが、各端末61〜63は各ユーザが指定した元データの秘匿箇所を受け付けて、当該秘匿箇所を秘匿装置1に送信し、秘匿装置1側で各ユーザの乱数を用いてユーザ秘匿データを生成することとしてもよい。この場合、秘匿装置1は、各ユーザの乱数R1〜R3を、全て保持しているものとする。
また、図6では、各端末61〜63が、必要な乱数データを入手し、元データSの部分的な復元を行うこととしたが、秘匿装置1の元データ復元手段13が、各ユーザのアクセス権限を管理し、アクセス権限を用いて各ユーザが要求した部分の復元可否を判断し、復元可能であると判断した場合は、閲覧制限秘匿データSRに必要な乱数を排他論理和演算して要求された部分の元データSを復元し、要求元の端末に送信することとしてもよい。この場合、秘匿装置1は、ユーザの端末61〜63に保持された乱数R1〜R3を、全て保持しているものとする。
以上説明した複数ユーザによる閲覧制限は、例えば以下のようない利用シーンにおいて適用することができる。
利用シーン1:社内でサービスオーダーなどを流す際に、組織毎に閲覧できる範囲に制限をかけたい場合。
・サービス部では、システム構成を見せたくない。
・営業部では、お客様内部に関する情報を見せたくない。
・設備部では、インフラ情報を見せたくない。
利用シーン2:持ち株会社などで、グループ会社に文書などを配布する際に、部分的かつ各グループ会社に応じた閲覧制限を設けたい場合。
利用シーン3:当初、広告、冒頭部分などの一部のみの閲覧が可能な閲覧制限を設けたデータを、ネットワーク経由フリー提供、DVDメディアなどで提供し、将来的に課金モデルとして提供したい場合。
<第2の実施形態>
次に、第2の実施形態について説明する。第2の実施形態では、第1の実施形態で説明した元データの部分的な復元を、秘密分散に適用した実施形態である。以下に述べる本実施形態では、元データを3つの分割データ(秘匿データ)に分割する場合の秘密分散を例として説明するが、本発明は、分割数が3の場合の秘密分散に限定されるものではない。なお、分割数が3の秘密分散の場合、3つの分割データのうち、いずれか2つの分割データを用いて元データを復元することができる。
図8は、第2の実施形態に係るデータ秘匿システムの構成図である。本実施形態のデータ秘匿システムは、秘匿装置1(データ秘匿装置)と、端末5、複数の保管サーバ7a、7b、7cとを備える。
秘匿装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データSの分割要求に応じて元データSを複数の分割データD(1),D(2),D(3)に分割し、この分割した複数の分割データをネットワーク3を介して複数の保管サーバ7a,7b,7cに保管する。
また、秘匿装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データ復元要求に応じて、複数の分割データD(1),D(2),D(3)をネットワーク3を介して各保管サーバ7から取得し、この取得した複数の分割データD(1),D(2),D(3)から元データSを復元し、ネットワーク3を介して端末5に送信する。
本実施形態の秘匿装置1は、秘匿データ生成手段11と、元データ復元手段13と、乱数発生手段15と、データ送受信手段17と、記憶手段19と、を備える。
秘匿データ生成手段11(元部分データ生成手段、乱数部分データ生成手段、秘匿部分データ生成手段、復元ID付与手段)は、元データSから複数の分割データを生成する。具体的には、秘匿データ生成手段11は、元データSを所定の処理単位に区切って、元部分データを生成するとともに、元データSと同じ長さまたは元データSより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成する。そして、秘匿データ生成手段11は、元部分データと乱数部分データとを、所定数ずつ順番に取り出し、取り出した元部分データと乱数部分データとを用いて排他論理和演算を行うことで、複数の分割部分データを生成し、生成した複数の分割部分データに復元IDを付与し、複数の保管サーバ7a,7b,7cに保管する。
元データ復元手段13は、複数の分割データから元データSを復元する。具体的には、元データ復元手段13は、端末5から復元IDを受け付けて、当該復元IDに対応付けられた複数の分割部分データを保管サーバ7a,7b,7cから読み出し、読み出した分割部分データを用いて対応する元部分データを復元する。
乱数発生手段15は、元データSから複数の分割データを生成するために使用される乱数を発生する。データ送受信手段17は、秘匿データ生成手段11で生成した複数の分割データをネットワーク3を介して複数の保管サーバ7a,7b,7cに送信するとともに、また複数の保管サーバ7a,7b,7cからの複数の分割データをネットワーク3を介して受信する。記憶手段19には、復元IDと、ビット位置情報とが、対応付けて記憶されている。
なお、以下に説明する本実施形態では、元データSと同じ長さの乱数を用いることとするが、元データSの長さよりも短い乱数を使用して、元データSを秘匿することとしてもよい。すなわち、乱数を元データSの長さより短いものとし、この短い長さの乱数を繰り返し用いることとしてもよい。
また、上記説明した秘匿装置1および端末5には、例えば、CPUと、メモリと、ハードディスク等の外部記憶装置と、入力装置と、出力装置とを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、CPUがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、秘匿装置1および端末5の各機能は、秘匿装置1用のプログラムの場合は秘匿装置1のCPUが、そして、端末5用のプログラムの場合は端末5のCPUがそれぞれ実行することにより実現される。また、秘匿装置1用のプログラムおよび端末5用のプログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD−ROMなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
次に、本実施形態の処理について説明する。
[分割データの生成処理]
図9は、本実施形態の秘匿装置1の分割データ生成処理を説明するための説明図である。図9では、元データSを秘密分散することにより、3つの分割データD(1)、D(2)、D(3)を生成するものとする。
本実施形態の秘匿装置1の利用者は、端末5からネットワーク3を介して秘匿装置1にアクセスし、秘匿装置1に元データSを送信する。秘匿装置1のデータ送受信手段17は、端末5からの元データSを受信する。そして、秘匿データ生成手段11は、元データSを秘密分散するために使用される処理単位ビット長bを決定する。この処理単位ビット長bは、利用者が端末5から秘匿装置1に対して指定してもよいし、または秘匿装置1において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよい。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、元データSの末尾を0で埋めて、処理単位ビット長bの整数倍の長さにする。そして、秘匿データ生成手段11は、元データSを処理単位ビット長bに区切って分割し、複数の元部分データS1〜Snを生成する(S41)。
また、秘匿データ生成手段11は、乱数発生手段15が生成した元データSと同じビット長の乱数Rを取得し、当該乱数Rを処理単位ビット長bに区切って分割し、複数の乱数部分データR1〜Rnを生成する(S42)。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、処理単位ビット長bの整数倍の長さの乱数Rを生成する。
そして、秘匿データ生成手段11は、元部分データと乱数部分データとを、先頭から所定数ずつ順番に取り出す(S43)。図示する例では、元部分データS1〜S3と乱数部分データR1〜R3とを3つずつ取り出すものとする。
そして、秘匿データ生成手段11は、取り出した各元部分データと、対応する各乱数部分データとを、秘密分散の論理式に従って排他論理和演算(XOR)をそれぞれ行うことにより、3つの分割部分データを生成する(S44)。秘密分散の論理式は、各分割部分データのみからは対応する元部分データは復元できないが、分割数より少ない所定の個数の分割部分データから対応する元部分データが復元可能であるように設定されたものである。この秘密分散の論理式については、後述する。
図示する例では、元部分データS1と対応する乱数部分データR1とを論理式を用いて排他論理和演算を行うことで、3つの分割部分データD(1,1)、D(2,1)、D(3,1)を生成する。また、元部分データS2と対応する乱数部分データR2とを論理式を用いて排他論理和演算を行うことで、3つの分割部分データD(1,2)、D(2,2)、D(3,2)を生成する。また、元部分データS3と対応する乱数部分データR3とを論理式を用いて排他論理和演算を行うことで、3つの分割部分データD(1,3)、D(2,3)、D(3,3)を生成する。
そして、秘匿データ生成手段11は、生成した各分割部分データに復元IDを付加して、各保管サーバに保存する(S45)。本実施形態では、秘匿データ生成部11は、データ送受信手段17を用いて、復元IDを付加した分割部分データD(1,1)、D(1,2)、D(1,3)を保管サーバ7aに送信して保管する。また、秘匿データ生成部11は、同じ復元IDを付加した分割部分データD(2,1)、D(2,2)、D(2,3)を保管サーバ7bに送信して保管し、同じ復元IDを付加した分割部分データD(3,1)、D(3,2)、D(3,3)を保管サーバ7cに送信して保管する。図9では、各分割部分データに復元IDとして「001」を付加するものとする。復元IDは、データの順序がわかるものが好ましく、ここでは「001」、「002」、「003」、・・・のように+1ずつ加算した値を復元IDとして用いるものとする。
なお、本実施形態では、秘匿データ生成部11は、復元IDの他にビット位置情報も付加して各分割部分データを各保管サーバに保管するものとする。ビット位置情報は、元データSの先頭からのビット位置を示すものである。これにより、復元IDを指定して元データSの所望の部分を復元すること、または、ビット位置情報を指定して元データSの所望の部分を復元することもできる。
また、秘匿データ生成部11は、生成した各分割部分データに付与した復元IDと、ビット位置情報とを対応付けて記憶手段19に記憶する。
全ての元部分データに対して、S43からS45の処理を行うことで全ての元部分データに対応する各分割部分データが生成される。
なお、図9に示す本実施形態では、元データおよび乱数を区切る所定の処理単位として、分割データの生成処理を高速化するために、所定の長さの処理単位ビット長を用いることとしたが、処理単位ビット長以外の処理単位で、元データおよび乱数を区切ることとしてもよい。
例えば、処理単位として、元データのデータ特徴単位を用い、当該データ特徴単位に生成される各秘匿部分データに対してそれぞれ復元IDを付与することが考えられる。データ特徴単位は、例えば、個人情報の各項目(氏名、住所、電話番号など)であって、各項目毎に生成される秘匿部分データに、各復元IDを付与することが考えられる。また、データ特徴単位は、元データが動画の場合、映像のフレーム単位であって、フレーム単位に生成される秘匿部分データに、各復元IDを付与することが考えられる。
以上説明した分割データの生成処理を事前準備として、その後、元データSの部分的な復元処理が行われる。
[元データの一部の復元処理]
次に、元データの一部を復元する処理について説明する。
まず、秘匿装置1が、端末5からの要求を受け付けて、元データの一部を復元する処理について説明する。秘匿装置1の元データ復元手段13は、端末5から復元IDを受け付けて、当該復元IDに対応付けられたいずれか2つの分割部分データを保管サーバから読み出す。そして、元データ復元手段13は、読み出した2つの分割部分データを所定の秘密分散法の論理式に従って排他論理和演算を行うことで、受け付けた復元IDに対応する部分の元データ(元部分データ)を復元し、要求元の端末5に送信する。この秘密分散の論理式については後述する。
次に、図10を用いて、あるユーザが、他のユーザに元データの一部を閲覧させる処理について説明する。図10では、元データの復元処理は、秘匿装置1ではなく、端末で行われる。
元データの部分閲覧を許可する許可者(例えば、上司)は、元データの中で復元させる部分を自身の端末51に入力し、指定する(S51)。許可者は、例えば、復元させる部分が元データの何ビット目にあたるかを示すビット位置情報を入力することで、元データの中で復元する部分を指定することが考えられる。
また、図11に示すように、元データが画像データの場合、端末5のディスプレイ上に元データを表示し、許可者が元データの一部を範囲指定(図11の斜線部分)することで、元データの中で復元する部分を指定することとしてもよい。この場合、端末51は、許可者がディスプレイ上で指定した範囲が、元データの何ビット目にあたるかのビット位置情報を取得する。通常、映像ファイル、画像ファイルにおいては、利用者が認識する情報の範囲とデータのビット列とが対応していない。そのため、例えば端末51に実装されたアプリケーションを用いて任意の解像度を選択し、ピクセル単位に秘匿する表示場所を指定することにより、元のファイル(元データ)のビット列を取得することを可能とする。
また、元データが動画データの場合、時間(例えば、再生開始から5分〜6分)で範囲指定すること、あるいは元データのデータカラムのセル(データ項目)で範囲指定することとしてもよい。
そして、端末51は、許可者が指定した範囲のビット位置情報を秘匿装置1に送信し、当該ビット位置情報に対応する復元IDを要求する(S52)。
秘匿装置1の元データ復元手段13は、データ送受信手段17を用いてビット位置情報を受信し、記憶手段19を参照して、当該ビット位置情報に対応する復元IDを特定する。記憶手段19には、復元IDと、ビット位置情報とが、対応付けて記憶されている。そして、元データ復元手段13は、特定した復元IDを、データ送受信手段17を用いて端末51に送信する(S53)。
端末51は、秘匿装置1から取得した復元IDに対応する分割部分データを、いずれか1つの保管サーバから取得する(S54)。図示する例では、端末51は、保管サーバ7aから分割データD(1)の復元IDに対応する分割部分データを取得する。
そして、端末51は、S53で秘匿装置から送信された復元IDと、S54で取得した分割データD(1)の復元IDに対応する分割部分データと、他のいずれかの分割データの格納場所(例えばURLなどアドレス情報)とを、元データの一部を閲覧させる閲覧者(例えば、部下)の端末52に送信する(S55)。図示する例では、端末51は、保管サーバ7cの分割データD(3)が格納されている格納場所を閲覧者の端末52に送信する。
閲覧者の端末52は、復元ID、分割部分データおよび格納場所を受信し、受信した格納場所を用いて保管サーバ7cにアクセスし、受信した復元IDに対応する分割データD(3)の分割部分データを取得する(S56)。
そして、閲覧者の端末52は、許可者の端末51から送信された分割データD(1)の分割部分データと、S56で保管サーバ7cから取得した分割データD(3)の分割部分データとを、後述する秘密分散の論理式に従って排他論理和演算を行うことで、元データの一部を復元する(S57)。
このように、本実施形態では、元データを部分的に復元することが可能になり、データ全体を復元するのに比べてセキュリティも高く、より高速に復元することができる。すなわち、必要な部分(閲覧させたい部分)だけを復元することで、データ漏洩のリスクを低減しつつ、短時間で復元することができる。
[秘密分散法]
以下に本実施形態で用いる秘密分散法について、具体的に説明する。
ここでは、元データの分割および復元において、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より1少ない数ずつ生成するので、元データのビット長が処理単位ビット長の(分割数-1)倍の整数倍に一致しない場合は、元データの末尾の部分に0を埋めるなどして元データのビット長を処理単位ビット長の(分割数-1)倍の整数倍に合わせることにより本実施形態を適用することができる。
また、上述した乱数も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして乱数発生手段15から生成される。すなわち、乱数は処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして生成される。更に、元データは処理単位ビット長に基づいて所望の分割数の分割データに分割されるが、この分割データの各々も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。すなわち、分割データの各々は、処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。
なお、以下の説明では、上述した元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、また複数のデータや乱数などのうちの1つを表わす変数としてi(=1〜n)およびj(=1〜n-1)を用い、(分割数n-1)個の元部分データ、(分割数n-1)個の乱数部分データ、および分割数n個の分割データDのそれぞれのうちの1つをそれぞれS(j),R(j)およびD(i)で表記し、更に各分割データD(i)を構成する複数(n-1)の分割部分データをD(i,j)で表記するものとする。すなわち、S(j)は、元データSの先頭から処理単位ビット長毎に区分けして1番から順に採番した時のj番目の元部分データを表すものである。
この表記を用いると、元データ、乱数データ、分割データとこれらをそれぞれ構成する元部分データ、乱数部分データ、分割部分データは、次のように表記される。
元データS=(n-1)個の元部分データS(j)
=S(1),S(2),…,S(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)からなる定義式を用いて、元データの分割を行うことを特徴とするものであり、上述したデータ分割処理に多項式や剰余演算を用いる従来の方法に比較して、コンピュータ処理に適したビット演算である排他的論理和(XOR)演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
なお、排他的論理和演算(XOR)は、以下の説明では、「*」なる演算記号で表すことにするが、この排他的論理和演算のビット毎の演算規則での各演算結果は下記のとおりである。
0 * 0 の演算結果は 0
0 * 1 の演算結果は 1
1 * 0 の演算結果は 1
1 * 1 の演算結果は 0
また、XOR演算は交換法則、結合法則が成り立つ。すなわち、
a*b=b*a
(a*b)*c=a*(b*c)
が成り立つことが数学的に証明される。
また、a*a=0,a*0=0*a=aが成り立つ。
ここでa,b,cは同じ長さのビット列を表し、0はこれらと同じ長さですべて「0」からなるビット列を表す。
次に、フローチャートなどの図面も参照して、秘密分散の作用について説明するが、この説明の前に図12、図15、図18、図19のフローチャートに示す記号の定義について説明する。
は、A(1)*A(2)*…A(n)を意味するものとする。
(2)c(j,i,k)を、(n-1)×(n-1)行列であるU[n-1,n-1]×(P[n-1,n-1])^(j-1)のi行k列の値と定義する。
このときQ(j,i,k)を下記のように定義する。
c(j,i,k)=1 のとき Q(j,i,k)=R((n-1)×m+k)
c(j,i,k)=0 のとき Q(j,i,k)=0
ただし、mはm≧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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
(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を他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
(5)A,Bをn×n行列とすると、A×Bとは行列AとBの積を意味するものとする。行列の成分同士の計算規則は通常の数学で用いるものと同じである。
(6)Aをn×n行列とし、iを整数とすると、A^iとは行列Aのi個の積を意味するものとする。また、A^0とは単位行列Eを意味するものとする。
(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
となる性質がある。
次に、図12に示すフローチャートおよび図13、図14に示す具体的データなどを参照して、上記実施形態の作用として、まず元データSの分割処理について説明する。
本実施形態の秘匿装置1の利用者は、端末5からネットワーク3を介して秘匿装置1にアクセスし、秘匿装置1に元データSを送信し、秘匿装置1ではデータ送受信手段17が端末5からの元データSを受信し、秘匿装置1に供給する(図12のステップS201)。なお、本例では、元データSは、16ビットの「10110010 00110111」とする。
次に、利用者は端末5から分割数nとして3を秘匿装置1に指示する(ステップS203)。この分割数nは秘匿装置1において予め定められた値を用いてもよい。なお、この分割数n=3に従って秘匿装置1で生成される3個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ16ビット長のデータである。
それから、元データSを分割するために使用される処理単位ビット長bを8ビットと決定し、また元データと同じビット長である16ビットの乱数Rを乱数発生手段15から取得して生成する(ステップS205)。この処理単位ビット長bは、利用者が端末5から秘匿装置1に対して指定してもよいし、または秘匿装置1において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよいが、ここでは元データSを割り切れることができる8ビットとしている。従って、上記16ビットの「10110010 00110111」の元データSは、8ビットの処理単位ビット長で区分けされた場合の2個の元分割データS(1)およびS(2)は、それぞれ「10110010」および「00110111」となる。
次のステップS207では、元データSのビット長が8×2の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋めて、8×2の整数倍に合わせる。なお、本例のように処理単位ビット長bが8ビットおよび分割数nが3に設定された場合における分割処理は、元データSのビット長として16ビットに限られるものでなく、処理単位ビット長b×(分割数n-1)=8×2の整数倍の元データSに対して有効なものである。
次に、ステップS209では、変数m、すなわち上述した整数倍を意味する変数mを0に設定する。本例のように、元データSが処理単位ビット長b×(分割数n-1)=8×2=16ビットである場合には、変数mは0であるが、2倍の32ビットの場合には、変数mは1となり、3倍の48ビットの場合には、変数mは2となる。
次に、元データSの8×2×m+1ビット目から8×2ビット分のデータが存在するか否かが判定される(ステップS211)。これは、このステップS211以降に示す分割処理を元データSの変数mで特定される処理単位ビット長b×(分割数n-1)=8×2=16ビットに対して行った後、元データSとして次の16ビットがあるか否かを判定しているものである。本例のように元データSが16ビットである場合には、16ビットの元データSに対してステップS211以降の分割処理を1回行うと、後述するステップS219で変数mが+1されるが、本例の元データSでは変数mがm+1の場合に相当する17ビット以降のデータは存在しないので、ステップS211からステップS221に進むことになるが、今の場合は、変数mは0であるので、元データSの8×2×m+1ビット目は、8×2×0+1=1となり、元データSの16ビットの1ビット目から8×2ビット分にデータが存在するため、ステップS213に進む。
ステップS213では、変数jを1から2(=分割数n-1)まで変えて、元データSの8×(2×m+j-1)+1ビット目から8ビット分(=処理単位ビット長)のデータを元部分データS(2×m+j)に設定し、これにより元データSを処理単位ビット長で区分けした2(分割数n-1)個の元部分データS(1),S(2)を次のように生成する。
元データS=S(1),S(2)
第1の元部分データS(1)=「10110010」
第2の元部分データS(2)=「00110111」
次に、変数jを1から2(=分割数n-1)まで変えて、乱数部分データR(2×m+j)に乱数発生手段15から発生する8ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした2(分割数n-1)個の乱数部分データR(1),R(2)を次のように生成する(ステップS215)。
乱数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が生成される。
分割データ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」
なお、各分割部分データD(i,j)を生成するためのステップS217に示す定義式は、本例のように分割数n=3の場合には、具体的には図14に示す表に記載されているものとなる。図14に示す表から、分割部分データD(1,1)を生成するための定義式はS(1)*R(1)*R(2)であり、D(1,2)の定義式はS(2)*R(1)*R(2)であり、D(2,1)の定義式はS(1)*R(1)であり、D(2,2)の定義式はS(2)*R(2)であり、D(3,1)の定義式はR(1)であり、D(3,2)の定義式はR(2)である。また、図14に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
このように整数倍を意味する変数m=0の場合について分割データDを生成した後、次に変数mを1増やし(ステップS219)、ステップS211に戻り、変数m+1に該当する元データSの17ビット以降について同様の分割処理を行おうとするが、本例の元データSは16ビットであり、17ビット以降のデータは存在しないので、ステップS211からステップS221に進み、上述したように生成した分割データD(1),D(2),D(3)を秘匿装置1のデータ送受信手段17からネットワーク3を介して保管サーバ7a,7b,7cにそれぞれ送信し、各保管サーバ7に保管し、分割処理を終了する。
ここで、上述した図12のフローチャートのステップS217における定義式による分割データの生成処理、具体的には分割数n=3の場合の分割データの生成処理について詳しく説明する。
まず、整数倍を意味する変数m=0の場合には、ステップS217に示す定義式から各分割データD(i)=D(1)〜D(3)の各々を構成する各分割部分データD(i,2×m+j)=D(i,j)(i=1〜3,j=1〜2)は、次のようになる。
D(1,1)=S(1)*Q(1,1,1)*Q(1,1,2)
D(1,2)=S(2)*Q(2,1,1)*Q(2,1,2)
D(2,1)=S(1)*Q(1,2,1)*Q(1,2,2)
D(2,2)=S(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列の値としたとき下記のように定義される。
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
ここで、
j=1のときは
これを用いると、各分割部分データD(i,j)は次のような定義式により生成される。
D(1,1)=S(1)*Q(1,1,1)*Q(1,1,2)=S(1)*R(1)*R(2)
D(1,2)=S(2)*Q(2,1,1)*Q(2,1,2)=S(2)*R(1)*R(2)
D(2,1)=S(1)*Q(1,2,1)*Q(1,2,2)=S(1)*R(1)*0=S(1)*R(1)
D(2,2)=S(2)*Q(2,2,1)*Q(2,2,2)=S(2)*0*R(2)=S(2)*R(2)
上述した各分割部分データD(i,j)を生成するための定義式は、図13にも図示されている。
図13は、上述したように16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
ここで、上述した定義式により分割データD(1),D(2),D(3)および各分割部分データD(1,1),D(1,2),D(2,1),D(2,2),D(3,1),D(3,2)を生成する過程と定義式の一般形について説明する。
まず、第1の分割データD(1)に対しては、第1の分割部分データD(1,1)は、上述した定義式S(1)*R(1)*R(2)で定義され、第2の分割部分データD(1,2)は定義式S(2)*R(1)*R(2)で定義される。なお、この定義式の一般形は、D(1,j)に対してはS(j)*R(j)*R(j+1)であり、D(1,j+1)に対してS(j+1)*R(j)*R(j+1)である(jは奇数とする)。定義式に従って計算すると、D(1,1)は00110110, D(1,2)は10110011となるので、D(1)は00110110 10110011である。なお、定義式の一般形は、図14にまとめて示されている。
また、第2の分割データD(2)に対しては、D(2,1)はS(1)*R(1)で定義され、D(2,2)はS(2)*R(2)で定義される。この定義式の一般形は、D(2,j)に対してはS(j)*R(j)であり、D(2,j+1)に対してはS(j+1)*R(j+1)である(jは奇数とする)。定義式に従って計算すると、D(2,1)は00000011, D(2,2)は00000010となるので、D(2)は00000011 00000010である。
更に第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である。
上記説明は、S,R,D(1),D(2),D(3)の長さを16ビットとしたが、データの先頭から上記分割処理を繰り返すことにより、どのような長さの元データSからでも分割データD(1),D(2),D(3)を生成することができる。また、処理単位ビット長bは任意にとることができ、元データSの先頭から順にb×2の長さ毎に上記分割処理を繰り返すことにより任意の長さの元データ、具体的には処理単位ビット長b×2の整数倍の長さの元データに対して適用することができる。なお、元データSの長さが処理単位ビット長b×2の整数倍でない場合は、例えば、データ末尾の部分を0で埋めるなどして元データSの長さを処理単位ビット長b×2の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
次に、図13の右側に示す表を参照して、分割データから元データを復元する処理について説明する。
まず、利用者は端末5からネットワーク3を介して秘匿装置1にアクセスし、秘匿装置1のデータ送受信手段17を介して元データSの復元を要求する。秘匿装置1は、この元データSの復元要求を受け取ると、この元データSに対応する分割データD(1),D(2),D(3)が保管サーバ7a,7b,7cに保管されていることを記憶しているので、ネットワーク3を介して保管サーバ7a,7b,7cから分割データD(1),D(2),D(3)を取得し、この取得した分割データD(1),D(2),D(3)から次に示すように元データSを復元する。
まず、分割部分データD(2,1),D(3,1)から第1の元部分データS(1)を次のように生成することができる。
D(2,1)*D(3,1)=(S(1)*R(1))*R(1)
=S(1)*(R(1)*R(1))
=S(1)*0
=S(1)
具体的に計算すると、D(2,1)は00000011, D(3,1)は10110001なので、S(1)は10110010となる。
また、別の分割部分データから次のように第2の元部分データS(2)を生成することができる。
D(2,2)*D(3,2)=(S(2)*R(2))*R(2)
=S(2)*(R(2)*R(2))
=S(2)*0
=S(2)
具体的に計算すると、D(2,2)は00000010, D(3,2)は00110101なので、S(2)は00110111となる。
一般に、jを奇数として、
D(2,j)*D(3,j)=(S(j)*R(j))*R(j)
=S(j)*(R(j)*R(j))
=S(j)*0
=S(j)
であるから、D(2,j)*D(3,j)を計算すれば、S(j)が求まる。
また、一般に、jを奇数として、
D(2,j+1)*D(3,j+1)=(S(j+1)*R(j+1))*R(j+1)
=S(j+1)*(R(j+1)*R(j+1))
=S(j+1)*0
=S(j+1)
であるから、D(2,j+1)*D(3,j+1)を計算すれば、S(j+1)が求まる。
次に、D(1),D(3)を取得してSを復元する場合には、次のようになる。
D(1,1)*D(3,1)*D(3,2)=(S(1)*R(1)*R(2))*R(1)*R(2)
=S(1)*(R(1)*R(1))*(R(2)*R(2))
=S(1)*0*0
=S(1)
であるから、D(1,1)*D(3,1)*D(3,2)を計算すれば、S(1)が求まる。具体的に計算すると、D(1,1)は00110110, D(3,1)は10110001, D(3,2)は00110101なので、S(1)は10110010となる。
また同様に、
D(1,2)*D(3,1)*D(3,2)=(S(2)*R(1)*R(2))*R(1)*R(2)
=S(2)*(R(1)*R(1))*(R(2)*R(2))
=S(2)*0*0
=S(2)
であるから、D(1,2)*D(3,1)*D(3,2)を計算すれば、S(2)が求まる。具体的に計算すると、D(1,2)は10110011, D(3,1)は10110001, D(3,2)は00110101なので、S(2)は00110111となる。
一般に、jを奇数として、
D(1,j)*D(3,j)*D(3,j+1)=(S(j)*R(j)*R(j+1))*R(j)*R(j+1)
=S(j)*(R(j)*R(j))*(R(j+1)*R(j+1))
=S(j)*0*0
=S(j)
であるから、D(1,j)*D(3,j)*D(3,j+1)を計算すれば、S(j)が求まる。
また、一般に、jを奇数として、
D(1,j+1)*D(3,j)*D(3,j+1)=(S(j+1)*R(j)*R(j+1))*R(j)*R(j+1)
=S(j+1)*(R(j)*R(j))*(R(j+1)*R(j+1))
=S(j+1)*0*0
=S(j+1)
であるから、D(1,j+1)*D(3,j)*D(3,j+1)を計算すれば、S(j+1)が求まる。
次に、D(1),D(2)を取得してSを復元する場合には、次のようになる。
D(1,1)*D(2,1)=(S(1)*R(1)*R(2))*(S(1)*R(1))
=(S(1)*S(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となる。
また同様に、
D(1,2)*D(2,2)=(S(2)*R(1)*R(2))*(S(2)*R(2))
=(S(2)*S(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となる。
このR(1),R(2)を使用してS(1),S(2)を求める。
D(2,1)*R(1)=(S(1)*R(1))*R(1)
=S(1)*(R(1)*R(1))
=S(1)*0
=S(1)
であるから、D(2,1)*R(1)を計算すれば、S(1)が求まる。具体的に計算すると、D(2,1)は00000011, R(1)は10110001なので、S(1)は10110010となる。
また同様に、
D(2,2)*R(2)=(S(2)*R(2))*R(2)
=S(2)*(R(2)*R(2))
=S(2)*0
=S(2)
であるからD(2,2)*R(2)を計算すればS(2)が求まる。具体的に計算するとD(2,2)は00000010, R(2)は00110101なので、S(2)は00110111となる。
一般に、jを奇数として、
D(1,j)*D(2,j)=(S(j)*R(j)*R(j+1))*(S(j)*R(j))
=(S(j)*S(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)が求まる。
また同様に、
D(1,j+1)*D(2,j+1)=(S(j+1)*R(j)*R(j+1))*(S(j+1)*R(j+1))
=(S(j+1)*S(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)が求まる。
このR(j),R(j+1)を使用してS(j),S(j+1)を求める。
D(2,j)*R(j)=(S(j)*R(j))*R(j)
=S(j)*(R(j)*R(j))
=S(j)*0
=S(j)
であるからD(2,j)*R(j)を計算すればS(j)が求まる。
また同様に、
D(2,j+1)*R(j+1)=(S(j+1)*R(j+1))*R(j+1)
=S(j+1)*(R(j+1)*R(j+1))
=S(j+1)*0
=S(j+1)
であるからD(2,j+1)*R(j+1)を計算すればS(j+1)が求まる。
上述したように、元データの先頭から処理単位ビット長bに基づいて分割処理を繰り返し行って、分割データを生成した場合には、3つの分割データD(1),D(2),D(3)のすべてを用いなくても、3つの分割データのうち、2つの分割データを用いて上述したように元データを復元することができる。
本発明の他の実施形態として、乱数Rのビット長を元データSのビット長よりも短いものを使用して、元データの分割処理を行うことができる。
すなわち、上述した乱数RはS,D(1),D(2),D(3)と同じビット長のデータとしたが、乱数Rを元データSのビット長より短いものとし、分割データD(1),D(2),D(3)の生成にこの短いビット長の乱数Rを繰り返し用いるものである。
なお、分割データD(3)は乱数Rのみから生成されるので、分割データD(3)は乱数Rを繰り返して保管しておく必要はない。例えば、元データSのビット長を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)とする。
先の説明では、分割部分データD(3,j)を乱数部分データR(j)と定義してD(3)を生成しているが、D(3,20)まで保管すれば十分である。つまり、D(3)の長さはD(1),D(2)の10分の1となる。従って、保管すべきデータの総量は先の実施形態では元データSの3倍であるが、この実施形態では2.1倍とすることができる。乱数Rにおける繰り返し部分のデータの長さは、短すぎると、D(1)またはD(2)のみからRが解読されてしまうことも考えられるため、適切な長さを選択することが望ましい。
この実施形態では例えば乱数Rを生成するために疑似乱数生成アルゴリズムを使用する。乱数には自然界の物理現象などを使って乱数を発生させる真性乱数と、コンピュータのアルゴリズムなどで乱数を発生させる疑似乱数がある、真性乱数は、サイコロを何回も振ったり、雑音などの物理現象を利用したりして生成することができるが、手間や装置がたいへんであるため、その代わりに、適当な長さの種(乱数生成の種となる情報(seeds))から決定的なアルゴリズムに基づいて生成される疑似乱数が用いられる。例えば短い乱数を種とすれば長い乱数を得ることができる。種の長さは、例えば128ビット、160ビットまたはそれ以上のものがある。決定的なアルゴリズムに基づいて生成されるといっても、統計的一様性、無相関性など乱数として必要な性質を一定のレベルで満たしている。具体例としては、ANSI X9,42、FIPS 186−2など標準化されたものがある
(http://www.ipa.go.jp/security/enc/CRYPTREC/fy15/cryptrec20030425_spec01.html)。
これらをもちいれば、乱数生成の種を入力として長い疑似乱数の列を生成することができる。例えば、160ビットの種を与えて元データSのビット長と同じ長さの乱数Rを生成し、上述したようにしてSとRからD(1),D(2)を生成し、D(3)にはRを格納するのではなく160ビットの種を格納して保管することにより、元データSのビット長が大きくなってもD(3)に格納して保管すべきビット数は160ビットで済み、保管すべきデータの総量を押さえることができる。元データSを復元する場合には、D(3)に格納された160ビットの種から元データSのビット長と同じ長さの乱数Rを再度生成し、上述したようにして、これとD(1)またはD(2)を用いて元データSを復元することができる。
上述した各実施形態は、元データを3つに分割し、そのうち2つから元データが復元可能となるものであったが、分割数nを3より大きくとって、n個より少ない個数の分割データから元データを復元することができることは勿論のことである。
その1つの応用例として、元データを4つの分割データに分割する分割数n=4の場合の分割処理について図15に示すフローチャートおよび図16に示す定義式の一般形などを参照して説明する。
まず、利用者は端末5から秘匿装置1にアクセスして元データSを送信し、秘匿装置1ではデータ送受信手段17が端末5からの元データSを受信し、秘匿装置1に供給する(ステップS301)。それから、利用者は端末5から分割数nとして4を秘匿装置1に指示する(ステップS303)。この分割数nは秘匿装置1において予め定められた値を用いてもよい。また、処理単位ビット長bが一例として8ビットと決定される(ステップS305)。次に、元データSのビット長が8×3の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋める(ステップS307)。また、整数倍を意味する変数mを0に設定する(ステップS309)。
次に、元データSの8×3×m+1ビット目から8×3ビット分のデータが存在するか否かが判定される(ステップS311)。なお、本例では、元データSが8×3=24ビット長のデータの場合について説明している。
ステップS311の判定の結果、本例の元データSでは8×3=24ビットのデータであり、変数m=1の場合に相当する8×3×m(=1)+1ビットに相当する25ビット以降のデータは存在しないので、ステップS311からステップS321に進むことになるが、今の場合は、変数mは0であるので、元データSの8×3×m+1ビット目は、8×3×0+1=1となり、元データSの24ビットの1ビット目から8×3ビット分にデータが存在するため、ステップS313に進む。
ステップS313では、変数jを1から3(=分割数n-1)まで変えて、元データSの8×(3×m+j-1)+1ビット目から8ビット分(=処理単位ビット長)のデータを元部分データS(3×m+j)に設定し、これにより元データSを処理単位ビット長で区分けした3個の元部分データS(1),S(2),S(3)が生成される。
次に、変数jを1から3まで変えて、乱数部分データR(3×m+j)に乱数発生手段15から発生する8ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした3個の乱数部分データR(1),R(2),R(3)が生成される(ステップS315)。
次に、ステップS317において、変数iを1から4(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを1から3(=分割数n-1)まで変えながら、ステップS317に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,3×m+j)を生成する。この結果、次に示すような分割データDが生成される。
分割データD
=4個の分割データD(i)=D(1),D(2),D(3),D(4)
第1の分割データD(1)
=3個の分割部分データD(1,j)=D(1,1),D(1,2),D(1,3)
第2の分割データD(2)
=3個の分割部分データD(2,j)=D(2,1),D(2,2),D(2,3)
第3の分割データD(3)
=3個の分割部分データD(3,j)=D(3,1),D(3,2),D(3,3)
第4の分割データD(4)
=3個の分割部分データD(4,j)=D(4,1),D(4,2),D(4,3)
なお、各分割部分データD(i,j)を生成するためのステップS317に示す定義式は、本例のように分割数n=4の場合には、具体的には図16に示す表に記載されているものとなる。図16に示す表から、分割部分データD(1,1)を生成するための定義式はS(1)*R(1)*R(2)*R(3)であり、D(1,2)の定義式はS(2)*R(1)*R(2)*R(3)であり、D(1,3)の定義式はS(3)*R(1)*R(2)*R(3)であり、D(2,1)の定義式はS(1)*R(1)*R(2)であり、D(2,2)の定義式はS(2)*R(2)*R(3)であり、D(2,3)の定義式はS(3)*R(1)*R(3)であり、D(3,1)の定義式はS(1)*R(1)であり、D(3,2)の定義式はS(2)*R(2)であり、D(3,3)の定義式はS(3)*R(3)であり、D(4,1)の定義式はR(1)であり、D(4,2)の定義式はR(2)であり、D(4,3)の定義式はR(3)である。また、図16に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
このように変数m=0の場合について分割データDを生成した後、次に変数mを1増やし(ステップS319)、ステップS311に戻り、変数m=1に該当する元データSの25ビット以降について同様の分割処理を行おうとするが、本例の元データSは24ビットであり、25ビット以降のデータは存在しないので、ステップS311からステップS321に進み、上述したように生成した分割データD(1),D(2),D(3),D(4)を秘匿装置1のデータ送受信手段17からネットワーク3を介して保管サーバ7にそれぞれ送信し、各保管サーバ7に保管し、分割処理を終了する。図8では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
ここで、上述した図15のフローチャートのステップS317における定義式による分割データの生成処理、具体的には分割数n=4の場合の分割データの生成処理について詳しく説明する。
まず、ステップS317に示す定義式から各分割データD(i)=D(1)〜D(4)の各々を構成する各分割部分データD(i,3×m+j)は、次のようになる。
D(1,3×m+1)=S(3×m+1)*Q(1,1,1)*Q(1,1,2)*Q(1,1,3)
D(1,3×m+2)=S(3×m+2)*Q(2,1,1)*Q(2,1,2)*Q(2,1,3)
D(1,3×m+3)=S(3×m+3)*Q(3,1,1)*Q(3,1,2)*Q(3,1,3)
D(2,3×m+1)=S(3×m+1)*Q(1,2,1)*Q(1,2,2)*Q(1,2,3)
D(2,3×m+2)=S(3×m+2)*Q(2,2,1)*Q(2,2,2)*Q(2,2,3)
D(2,3×m+3)=S(3×m+3)*Q(3,2,1)*Q(3,2,2)*Q(3,2,3)
D(3,3×m+1)=S(3×m+1)*Q(1,3,1)*Q(1,3,2)*Q(1,3,3)
D(3,3×m+2)=S(3×m+2)*Q(2,3,1)*Q(2,3,2)*Q(2,3,3)
D(3,3×m+3)=S(3×m+3)*Q(3,3,1)*Q(3,3,2)*Q(3,3,3)
D(4,3×m+1)=R(3×m+1)
D(4,3×m+2)=R(3×m+2)
D(4,3×m+3)=R(3×m+3)
次に、Q(j,i,k)を具体的に求める。これはc(j,i,k)を3×3行列であるU[3,3]×(P[3,3])^(j-1)のi行k列の値としたとき下記のように定義される。
c(j,i,k)=1 のとき Q(j,i,k)=R(3×m+k)
c(j,i,k)=0 のとき Q(j,i,k)=0
j=1のときは
これを用いると、各分割部分データは次のような定義式により生成される。
D(1,3×m+1)=S(3×m+1)*Q(1,1,1)*Q(1,1,2)*Q(1,1,3)
=S(3×m+1)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(1,3×m+2)=S(3×m+2)*Q(2,1,1)*Q(2,1,2)*Q(2,1,3)
=S(3×m+2)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(1,3×m+3)=S(3×m+3)*Q(3,1,1)*Q(3,1,2)*Q(3,1,3)
=S(3×m+3)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(2,3×m+1)=S(3×m+1)*Q(1,2,1)*Q(1,2,2)*Q(1,2,3)
=S(3×m+1)*R(3×m+1)*R(3×m+2)
D(2,3×m+2)=S(3×m+2)*Q(2,2,1)*Q(2,2,2)*Q(2,2,3)
=S(3×m+2)*R(3×m+2)*R(3×m+3)
D(2,3×m+3)=S(3×m+3)*Q(3,2,1)*Q(3,2,2)*Q(3,2,3)
=S(3×m+3)*R(3×m+1)*R(3×m+3)
D(3,3×m+1)=S(3×m+1)*Q(1,3,1)*Q(1,3,2)*Q(1,3,3)
=S(3×m+1)*R(3×m+1)
D(3,3×m+2)=S(3×m+2)*Q(2,3,1)*Q(2,3,2)*Q(2,3,3)
=S(3×m+2)*R(3×m+2)
D(3,3×m+3)=S(3×m+3)*Q(3,3,1)*Q(3,3,2)*Q(3,3,3)
=S(3×m+3)*R(3×m+3)
D(4,3×m+1)=R(3×m+1)
D(4,3×m+2)=R(3×m+2)
D(4,3×m+3)=R(3×m+3)
ここで、上述したように図12のステップS217や図15のステップS317で示した定義式に基づいて元データを分割する分割規則について一般的な表現で記載する。
まず、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、複数n個のうちの1つを表わす変数としてi(=1〜n)およびj(=1〜n-1)を用いて複数(n-1)個の元部分データ、複数(n-1)個の乱数部分データ、複数(n)個の分割データおよび各分割データの複数(n-1)個の分割部分データのそれぞれのうちの1つをそれぞれS(j),R(j),D(i)およびD(i,j)で表わす。
それから、上記変数jを1からn-1まで変えて、各元部分データS(j)を元データSのb×(j-1)+1ビット目からbビット分のデータとして作成する。次に、U[n,n]をn×n行列である上三角行列とし、P[n,n]をn×n行列である回転行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]^(j-1)のi行k列の値と定義する。そして、c(j,i,k)=1のとき、Q(j,i,k)=R(k), c(j,i,k)=0のとき、Q(j,i,k)=0と定義したとき、変数iを1からnまで変えながら、各変数iにおいて変数jを1からn-1まで変えた場合において、i<nのとき、各分割部分データD(i,j)を
と設定し、またi=nのとき、各分割部分データD(i,j)を
D(i,j)=R(j)
と設定する。上記処理を元データSの先頭から末尾まで繰り返し行うことにより元データSから分割数nの分割データを生成することができる。
次に、上述したように元データSを4分割して生成された分割データD(1),D(2),D(3),D(4)から元データSを復元する処理について図16を参照して説明する。なお、図16に示す4分割の場合には、変数jを3×m+1(m≧0である任意の整数)として、同図に示す一般的な定義式から次に示すように元データSを生成することができる。
まず、分割データD(1),D(2)から元データSを求める場合について説明する。
D(1,j)*D(2,j)=(S(j)*R(j)*R(j+1)*R(j+2))*((S(j)*R(j)*R(j+1))
=(S(j)*S(j))*(R(j)*R(j))*(R(j+1)*R(j+1))*R(j+2)
=0*0*0*R(j+2)
=R(j+2)
従って、D(1,j)*D(2,j)を計算すれば、乱数R(j+2)が求まり、同様にD(1,j+1)*D(2,j+1)を計算すれば、乱数R(j)が求まり、同様にD(1,j+2)*D(2,j+2)を計算すれば、乱数R(j+1)が求まり、これらの得られた乱数R(j),R(j+1),R(j+2)を用いれば、
D(1,j)*R(j)*R(j+1)*R(j+2)
=(S(j)*R(j)*R(j+1)*R(j+2))*(R(j)*R(j+1)*R(j+2))
=S(j)*(R(j)*R(j))*(R(j+1)*R(j+1))*(R(j+2)*R(j+2))
=S(j)*0*0*0
=S(j)
であるから、D(1,j)*R(j)*R(j+1)*R(j+2)を計算して、S(j)を求めてもよいし、D(2,j)*R(j)*R(j+1)からS(j)を求めることもできる。
同様に、D(1,j+1)*R(j)*R(j+1)*R(j+2)またはD(2,j+1)*R(j+1)*R(j+2)を計算してS(j+1)を求めることができ、また同様にD(1,j+2)*R(j)*R(j+1)*R(j+2)またはD(2,j+2)*R(j)*R(j+2)を計算してS(j+2)を求めることができる。
更に、上述したと同様に、D(2)とD(3)からSを求めることができる。
具体的には、まずR(j),R(j+1),R(j+2)を求めてから、D(2,j),D(2,j+1),D(2,j+2)またはD(3,j),D(3,j+1),D(3,j+2)とR(j),R(j+1),R(j+2)のXOR演算によりS(j),S(j+1),S(j+2)を求めることができる。
また更に、D(1)とD(4)またはD(2)とD(4)またはD(3)とD(4)からSを求めることができる。
D(4)はRをそのものから定義したものであるから、計算することなくD(4)からR(j),R(j+1),R(j+2)を取得することができ、例えば、D(1,j),D(1,j+1),D(1,j+2)とR(j),R(j+1),R(j+2)のXOR演算によりS(j),S(j+1),S(j+2)を求めることができる。
上述したように、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の1つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、4つの分割データの中から任意に3つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、4つのうち任意の3つの分割データから元データを復元可能である。
図17は、5分割の場合の分割データと定義式を示す表である。この5分割の場合は、jを4×m+1(mはm≧0である任意の整数)として、分割データの定義式から、上述した4分割の場合の復元処理と同様のことが言える。従って、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(3)とD(4)、または、D(5)と任意の1つの分割データD(1)またはD(2)またはD(3)またはD(4)から元データSが復元可能である。そして、5つの分割データの中から任意に3つの分割データを取得すれば、その中には必ずこのいずれかのケースが含まれるため、5つのうち任意の3つから復元可能であるといえる。
また、分割数nを5より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
次に、図18に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
まず、利用者は端末5から秘匿装置1にアクセスして元データSを送信し、秘匿装置1ではデータ送受信手段17が端末5からの元データSを受信し、秘匿装置1に供給する(ステップS401)。また、利用者は端末5から分割数n(n≧3である任意の整数)を秘匿装置1に指示する(ステップS403)。この分割数nは秘匿装置1において予め定められた値を用いてもよい。処理単位ビット長bを決定する(ステップS405)。なお、bは0より大きい任意の整数である。次に、元データSのビット長がb×(n-1)の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋める(ステップS407)。また、整数倍を意味する変数mを0に設定する(ステップS409)。
次に、元データSのb×(n-1)×m+1ビット目からb×(n-1)ビット分のデータが存在するか否かが判定される(ステップS411)。この判定の結果、データが存在しない場合は、ステップS421に進むことになるが、今の場合は、ステップS409で変数mは0に設定された場合であるので、データが存在するため、ステップS413に進む。
ステップS413では、変数jを1からn-1まで変えて、元データSのb×((n-1)×m+j-1)+1ビット目からbビット分のデータを元部分データS((n-1)×m+j)に設定する処理を繰り返し、これにより元データSを処理単位ビット長bで区分けした(n-1)個の元部分データS(1),S(2),…S(n-1)が生成される。
次に、変数jを1からn-1まで変えて、乱数部分データR((n-1)×m+j)に乱数発生手段15から発生する処理単位ビット長bの乱数を設定し、これにより乱数Rを処理単位ビット長bで区分けしたn-1個の乱数部分データR(1),R(2),…R(n-1)が生成される(ステップS415)。
次に、ステップS417において、変数iを1からnまで変えるとともに、更に各変数iにおいて変数jを1からn-1まで変えながら、ステップS417に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,(n-1)×m+j)を生成する。この結果、次に示すような分割データDが生成される。
分割データ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に該当する元データSのb×(n-1)ビット以降について同様の分割処理を行う。最後にステップS411の判定の結果、元データSにデータがなくなった場合、ステップS411からステップS421に進み、上述したように生成した分割データDを秘匿装置1のデータ送受信手段17からネットワーク3を介して保管サーバ7にそれぞれ送信し、各保管サーバ7に保管し、分割処理を終了する。図8では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
次に、図19に示すフローチャートを参照して、分割数nが2の場合の分割処理について説明する。すなわち、上述した各実施形態は図18のフローチャートのステップS403に示したように分割数nが3以上(n≧3)の場合についてのものであるので、図19を用いて分割数nが2の場合について説明する。
まず、利用者は端末5から秘匿装置1にアクセスして元データSを秘匿装置1に供給する(ステップS501)。また、利用者は端末5から分割数nとして2を秘匿装置1に指示する(ステップS503)。この分割数nは秘匿装置1において予め定められた値を用いてもよい。それから処理単位ビット長bとして8ビットを決定する(ステップS505)。次に、元データSのビット長が8の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋める(ステップS507)。また、整数倍を意味する変数mを0に設定する(ステップS509)。
次に、元データSの8×m+1ビット目から8ビット分のデータが存在するか否かが判定される(ステップS511)。この判定の結果、データが存在しない場合は、ステップS521に進むことになるが、今の場合は、変数mは0に設定されているので、データが存在するため、ステップS513に進む。
ステップS513では、元データSの8×m+1ビット目から8ビット分のデータを元部分データS(m+1)に設定し、これにより元部分データS(1)が生成される。
次に、乱数部分データR(m+1)に乱数発生手段15から発生する8ビットの乱数を設定し、これにより乱数部分データR(1)が生成される(ステップS515)。
次に、ステップS517において、同ステップに示す定義式により分割データDの各々を構成する各分割データD(1,m+1),D(2,m+1)が生成される。
このように変数m=0の場合について分割データDを生成した後、次に変数mを1増やし(ステップS519)、ステップS511に戻り、変数m=1に該当する元データSの8ビット以降について同様の分割処理を行う。最後にステップS511の判定の結果、元データSにデータがなくなった場合、ステップS511からステップS521に進み、上述したように生成した分割データD(1)からD(2)を秘匿装置1のデータ送受信手段17からネットワーク3を介して保管サーバ7にそれぞれ送信し、各保管サーバ7に保管し、分割処理を終了する。図8では保管サーバは3個であるが、このうち2個の保管サーバに各分割データを保管すればよい。
ここにおいて、上述した図19のフローチャートのステップS517における定義式による分割データの生成処理、具体的には分割数n=2の場合の分割データの生成処理について詳しく説明する。
変数m=0の場合には、ステップS517に示す定義式から各分割データD(1,1),D(2,1)は、次のようになる。
D(1,1)=S(1)*Q(1,1,1)
D(2,1)=R(1)
次に、Q(j,i,k)を具体的に求める。ここで、n=2を定義に当てはめると、j,i,kはいずれも1しか値をとらない。
c(j,i,k)は1×1行列であるU[1,1]×(P[1,1])^(j-1)のi行k列の値としたとき下記のように定義される。
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
U[1,1]×(P[1,1])^(j-1)=U[1,1]×(P[1,1])^0
=(1)×E[1,1]
=(1)×(1)
=(1)
従って、c(1,1,1)は1であるから、Q(1,1,1)はR(1)と定義される。
以上から定義式は
D(1,1)=S(1)*R(1)
D(2,1)=R(1)
となる。変数mを使用した形式では、
D(1,m+1)=S(m+1)*R(m+1)
D(2,m+1)=R(m+1)
となる。
なお、分割数n=2の場合には、2個の分割データのうち、どちらか一方を取得しただけでは、元データSを復元することはできず、2個のすべての分割データを取得して元データSを復元することになる。
さて、上述した実施形態においては、ここの分割データのみから、それを構成する部分データ間の演算を行うことによって乱数成分が失われる場合がある。即ち、例えば3分割の場合、各分割部分データは次のように定義される。
D(1,1)=S(1)*R(1)*R(2), D(1,2)=S(2)*R(1)*R(2), …
D(2,1)=S(1)*R(1), D(2,2)=S(2)*R(2), …
D(3,1)=R(1), D(3,2)=R(2), …
D(1)について見ると、例えば、D(1,1)、D(1,2)が取得できると、
D(1,1)*D(1,2)=(S(1)*R(1)*R(2))*(S(2)*R(1)*R(2))
=S(1)*S(2)*((R(1)*R(1))*((R(2)*R(2))
=S(1)*S(2)*0*0
=S(1)*S(2)
となる。一般にはD(1,j)*D(1,j+1)=S(j)*S(j+1)である。ここでjはj=2×m+1、mはm≧0の任意の整数である。
D(1,1)、D(1,2)は、上記の定義より、、元データと乱数の演算により生成されたものであり、D(1,1)、D(1,2)それぞれを見ても元データの内容は分からないが、D(1,1)*D(1,2)の演算を行うことによりS(1)*S(2)が算出される。これは元データそのものではないが、乱数成分を含んでいない。
このように乱数成分が失われると、個々の元部分データについて、例えばS(2)の一部が既知である場合にはS(1)の一部が復元可能となるので、安全ではないと考えられる。例えば、元データが標準化されたデータフォーマットに従ったデータであって、S(2)がそのデータフォーマット中のヘッダ情報やパディング(例えば、データ領域の一部を0で埋めたもの)などを含む部分であった場合には、これらのデータフォーマット固有のキーワードや固定文字列などを含むため、その内容は予測され得る。また、S(2)のうち既知の部分とS(1)*S(2)の値から、S(1)の一部が復元可能である。
4分割の場合は、図16より、D(2,j)*D(2,j+1)*D(2,j+2)=S(j)*S(j+1)*S(j+2)である。ここでjはj=3×m+1、mはm≧0の任意の整数である。
5分割の場合は、図17より、D(i,j)*D(i,j+1)*D(i,j+2)*D(i,j+3)=S(j)*S(j+1)*S(j+2)*S(j+3)である。ここでiは1または3,jはj=4×m+1、mはm≧0の任意の整数である。
分割数が5より大きい場合も同様に演算により、乱数成分が失われる。なお、分割数が2の場合にはこのような、問題は生じない。
この問題を解決する一つの方法は以下の通りである。これは3分割の場合に適用可能な方法である。図20におけるD(1,j+1)とD(2,j+1)は、図14におけるD(1,j+1)とD(2,j+1)を入れ替えたものである。ここでjはj=2×m+1、mはm≧0の任意の整数である。 この場合、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図20より
D(1,j)*D(1,j+1)=(S(j)*R(j)*R(j+1))*(S(j+1)*R(j+1))
=S(j)*S(j+1)*R(j)*((R(j+1)*R(j+1))
=S(j)*S(j+1)*R(j)*0
=S(j)*S(j+1)*R(j)
D(2,j)*D(2,j+1)=(S(j)*R(j))*(S(j+1)*R(j)*R(j+1))
=S(j)*S(j+1)*(R(j)*R(j))*R(j+1))
=S(j)*S(j+1)*0*R(j+1)
=S(j)*S(j+1)*R(j+1)
D(3,j)*D(3,j+1)=R(j)*R(j+1)
となるからである。
また、この場合、3つの分割データのうち2つから、元データを復元することができるという特性は失われていない。これは、D(1)、D(2)を取得してSを復元する場合には、図20におけるD(1)、D(2)は、図14におけるD(1)、D(2)を構成する分割部分データを入れ替えたものにすぎないので、明らかにこれらから元データを復元することができ、また、D(1)とD(3)またはD(2)とD(3)を取得してSを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができるからである。
上記の問題を解決する別の方法は以下の通りである。これは分割数が3以上である場合に分割数には関係なく適用可能な方法である。図21、図22、図23は、図14、図16、図17においてD(i,j)を生成する個々の定義式からR(j)を削除したものである。ここでiはn-1>i>0であり、jはj=(n-1)×m+1、mはm≧0の任意の整数、nは分割数である。これは分割数が5より大きい場合でも同様である。
この場合も、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図14、図16、図17においては、個々の分割データの分割部分データ間で演算をすると乱数部分が消去されて、3分割の場合にはD(1,j)*D(1,j+1)=S(j)*S(j+1)(jはj=2×m+1、mはm≧0の任意の整数)となり、4分割の場合にはD(2,j)*D(2,j+1)*D(2,j+2)=S(j)*(S(j+1)*S(j+2)(jはj=3×m+1、mはm≧0の任意の整数)となり、5分割の場合にはD(i,j)*D(i,j+1)*D(i,j+2)*D(i,j+3)=S(j)*S(j+1)*S(j+2)*S(j+3)(iは1または3,jはj=4×m+1、mはm≧0の任意の整数)となっていたが、上記の通りD(i,j)を生成する個々の定義式からR(j)を削除した(iはn-1>i>0、jはj=(n-1)×m+1、mはm≧0の任意の整数、nは分割数)ので、一つのR(j)が消去されずに残ることになるためである。
また、この場合も、n個の分割データのうちの所定の個数の分割データから、元データを復元することができるという特性は失われていない。
まず3分割の場合には、D(1)、D(2)を取得してSを復元する場合は、上述した通りR(j)(jはj=2×m+1、mはm≧0の任意の整数)がD(1,j)*D(2,j+1)から求まり、S(j)が D(2,j)*R(j)=S(j)*R(j)*R(j)
=S(j)*0
=S(j)
から求まり、R(j+1)が
D(1,j)*S(j)=S(j)*R(j+1)*S(j)
=S(j)*S(j)*R(j+1)
=0*R(j+1)
=R(j+1)
から求まり、上述した通りS(j+1)がD(2,j+1)*R(j+1)から求まる。また、D(1)とD(3)またはD(2)とD(3)を取得してSを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができる。
次に4分割の場合には、D(1)、D(2)を取得してSを復元する場合は、R(j+2)が
D(1,j)*D(2,j)=(S(j)*R(j+1)*R(j+2))*(S(j)*R(j+1))
=(S(j)*S(j))*(R(j+1)*R(j+1))*R(j+2)
=0*0*R(j+2)
=R(j+2)
から求まり、上述した通りS(j)がD(1,j)*R(j+1)*R(j+2)またはD(2,j)*R(j+1)から求まる。
また、D(2)とD(3)を取得してSを復元する場合には、上述した通りR(j+2)がD(2,j+1)*D(3,j+1)から求まり、R(j)がD(2,j+2)*D(3,j+2)から求まり、S(j)が
D(3,j)*R(j)=(S(j)*R(j))*R(j)
=S(j)*(R(j)*R(j))
=S(j)*0
=S(j)
から求まり、R(j+1)が
D(2,j)*S(j)=(S(j)*R(j+1))*S(j)
=(S(j)*S(j))*R(j+1)
=0*R(j+1)
=R(j+1)
から求まり、上述した通りS(j)がD(1,j)*R(j+1)*R(j+2)または D(2,j)*R(j+1)から求まる。
また、D(4)と任意の一つの分割データD(1)またはD(2)またはD(3)を取得してSを復元する場合には、D(4)は乱数のみからなる分割データであるので、D(1)またはD(2)またはD(3)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができる。
従って、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の1つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、4つの分割データの中から任意に3つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、4つのうち任意の3つの分割データから元データを復元可能である。
次に5分割の場合については、D(1)とD(2)またはD(2)とD(3)を取得してSを復元する場合、D(3)とD(4)を取得してSを復元する場合、D(5)と任意の一つの分割データD(1)またはD(2)またはD(3)またはD(4)を取得してSを復元する場合のいづれも4分割の場合と同様である。
従って、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(3)とD(4)、または、D(5)と任意の1つの分割データD(1)またはD(2)またはD(3)またはD(4)から元データSが復元可能である。そして、5つの分割データの中から任意に3つの分割データを取得すれば、その中には必ずこのいずれかのケースが含まれるため、5つのうち任意の3つから復元可能であるといえる。
また、分割数nを5より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
上述してきたように、本秘密分散によれば、所定の定義式が元部分データと乱数部分データの排他的論理和からなるので、従来のように多項式や剰余演算を行う高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ迅速に生成することができる。
また、生成した複数の分割データのうち分割数よりも少ない数の分割データに対して定義式を適用することにより元データを復元するので、分割数よりも少ない任意の数xの分割データで元データを復元でき、分割数からxを減算した数までの分割データを紛失したり破壊したとしても、元データを復元することができる。
さらに、元データをネットワークを介して端末から受信し、この元データに対して元部分データ、乱数部分データおよび分割部分データの生成処理を施して生成された複数の分割部分データをネットワークを介して保管サーバに送信して保管するので、多数のユーザが端末からネットワークを介してアクセスして分割処理を依頼することができ、共通化および経済化を図ることができる。
なお、上述した秘密分散では、分割データは、乱数のみからなる1つの分割データと、1つの元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含む場合であるが、上述した実施形態を変形して分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むものとしても良い。また、上述した実施形態を変形して、分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むものとしても良い。
なお、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。例えば、第1および第2の実施形態において、元データSからヘッダ情報を取り出し、ヘッダ情報については秘匿せずにそのまま別に管理し、ヘッダ情報を除いた元データのみから秘匿データ(または分割データ)を生成することとしてもよい。この場合、秘匿装置の秘匿データ生成手段11は、元データからヘッダ情報を除いたデータを所定の処理単位に区切って、元部分データを生成する。また、秘匿データ生成手段11は、元データからヘッダ情報を除いたデータと同じ長さまたは当該データより短い長さの乱数を、所定の処理単位に区切って乱数部分データを生成する。これにより、ヘッダ情報を除いた元データの秘匿データ(または分割データ)を生成することができる。