データ分割装置、データ分割方法およびコンピュータプログラム
【課題】比較的簡単な処理により元データを効率的に分割する。
【解決手段】元データS、分割数n、処理単位ビット長bを設定し、元データSを処理単位ビット長b毎に区分けして複数の元部分データS(j)を生成し、複数の乱数部分データR(j)を生成し、各分割データD(i)を構成する各分割部分データD(i,j)を元部分データと乱数部分データの排他的論理和からなる所定の定義式に従って生成する。また、各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替えることで、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和によって乱数成分が失われることを防止する。さらに、D(1,j)は予め削除しておくことで、分割データを記憶する記憶容量の抑制を図る。
【解決手段】元データS、分割数n、処理単位ビット長bを設定し、元データSを処理単位ビット長b毎に区分けして複数の元部分データS(j)を生成し、複数の乱数部分データR(j)を生成し、各分割データD(i)を構成する各分割部分データD(i,j)を元部分データと乱数部分データの排他的論理和からなる所定の定義式に従って生成する。また、各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替えることで、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和によって乱数成分が失われることを防止する。さらに、D(1,j)は予め削除しておくことで、分割データを記憶する記憶容量の抑制を図る。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データの機密性および安全性を確保するためにデータを分割する技術に関する。
【背景技術】
【0002】
重要な秘密データ(以下、元データという)を保管する場合、紛失、破壊、盗難やプライバシー侵害の脅威がある。このような脅威は秘密に保管すべきデータを単に暗号化しただけでは解決できず、紛失、破壊に備えてコピーを複数作ることが有効であるが、コピーを複数作ると盗難のリスクが増加してしまう。
【0003】
このような問題を解決する手段として、従来、しきい値秘密分散法がある(非特許文献1参照)。この従来の方法は、元データSをn個のデータに分割し、そのうち任意のx個の分割データを集めれば元データSが復元できるが、任意のx-1個の分割データでは元データSは復元できないというものである。従って、x-1個まで分割データが盗まれても元データSが漏れず、またn-x個まで分割データを紛失したり破壊されたりしても、元データSを復元できる。
【0004】
この方法の代表的な実現例としてn-1次多項式と剰余演算により構成される方法がある(非特許文献2参照)。この従来の方法は、公開鍵暗号方式の秘密鍵の分割管理などで利用されており、データ量があまり多くないため、現状のコンピュータの演算処理能力、記憶装置・記憶媒体などのコストに対しては特に問題ない。
【非特許文献1】A. Shamir, "How to Share a Secret", Comm.Assoc.Comput.Mach., Vol. 22, no. 11, pp. 612-613(Nov.1979)
【非特許文献2】Bruce Schneier, "Applied Cryptography", John Wiley&Sons, Inc., pp. 383-384(1994)
【発明の開示】
【発明が解決しようとする課題】
【0005】
上述した従来の方法を安全に保管したいデータ量が例えばメガバイト、ギガバイトまたはそれ以上の規模となった場合に利用すると、多項式演算・剰余演算などを含む多倍長整数の演算処理を大量のデータに対して行う演算処理能力が必要となる。
【0006】
また、従来の方法では、例えば分割数n=5の場合には1バイトのデータから1バイトの分割データが5つ生成されるため、元データに対して単純に分割数に比例した倍数の記憶容量が必要となるなど、コンピュータを用いて具体的に実現する上で現実的ではないという問題がある。
【0007】
本発明は、上記に鑑みてなされたものであり、その目的とするところは、比較的簡単な処理により元データを効率的に分割可能とすることにある。
【0008】
また、本発明の別の目的は、分割データを記憶する記憶容量を抑制することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するため、第1の本発明に係るデータ分割装置は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるように、かつ、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないようにする分割データ生成手段と、を有することを特徴とする。
【0010】
第2の本発明に係るデータ分割装置は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする分割データ生成手段と、を有し、前記分割部分データ生成手段は、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替えることを特徴とする。
【0011】
第1、第2の本発明にあっては、元データを処理単位ビット長毎に区分けして複数の元部分データを生成し、複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和からなる所定の定義式に従って生成することで、コンピュータ処理に適したビット演算である排他的論理和演算を用いるので、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ高速に生成することができる。また、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数部分データが失われないようにすることで、いずれかの分割データから元データを復元し難くして、安全性の向上を図る。
【0012】
上記データ分割装置において、前記分割部分データ生成手段は、分割部分データの生成に際し、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、変数として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行列でi行j列の値u(i,j)がi+j≦n+1 のとき u(i,j)=1
i+j>n+1 のとき u(i,j)=0
である行列とし、P[n,n]をn×n行列でi行j列の値p(i,j)が
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]^(j-1)のi行k列の値と定義し、ただしU[n-1,n-1]×P[n-1,n-1]^(j-1)とは行列U[n-1,n-1]とj-1個のP[n-1,n-1]の積を表し、Q(j,i,k)をc(j,i,k)=1のとき、Q(j,i,k)=R(k)、c(j,i,k)=0のとき、Q(j,i,k)=0 と定義したとき、各分割部分データD(i,j)を、変数iを1からnまで変えながら各変数iにおいて変数jを1からn-1まで変え、排他的論理和の演算子*を用いて、i<nのとき、
【数3】
【0013】
ただし、
【数4】
【0014】
とし、i=nのとき、
D(i,j)=R(j)
として生成するものであって、当該各分割部分データのうちのD(1,j)を削除することを特徴とする。
【0015】
本発明にあっては、分割部分データD(1,j)を削除することで、分割データD(1)を記憶する必要がなくなるので、従来は分割数がnの場合に元のデータのn倍の情報量を記憶する記憶容量が必要であったところ、これをn-1倍に抑えることができる。
【0016】
第3の本発明に係るデータ分割方法は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割方法であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成し、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替え、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とする。
【0017】
第4の本発明に係るコンピュータプログラムは、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割用のコンピュータプログラムであって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する処理と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する処理と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する処理と、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替える処理と、所望の分割数の分割データを複数の分割部分データから生成する処理と、をコンピュータに実行させることにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とする。
【発明の効果】
【0018】
本発明によれば、比較的簡単な処理により元データを効率的に分割することができる。また、本発明によれば、分割データを記憶する記憶容量を抑制することができる。
【発明を実施するための最良の形態】
【0019】
以下、図面を用いて本発明の実施の形態を説明する。図1は、本発明の一実施形態に係るデータ分割方法を実施するデータ分割装置を含むシステム構成図である。本実施形態のデータ分割装置は、符号1で示すように分割装置1としてネットワーク3に接続されて設けられ、このネットワーク3にアクセスしてくる端末5からの元データ分割要求に応じて元データSを複数の分割データに分割し、この分割した複数の分割データをネットワーク3を介して複数の保管サーバ7a,7b,7cに保管するようになっている。なお、図1では、分割装置1は、端末5からの元データSを3つの分割データD(1),D(2),D(3)に分割し、それぞれを複数の保管サーバ7a,7b,7cに保管するようにしている。
【0020】
また、分割装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データ復元要求に応じて複数の分割データD(1),D(2),D(3)をネットワーク3を介して各保管サーバ7から取得し、この取得した複数の分割データD(1),D(2),D(3)から元データSを復元し、ネットワーク3を介して端末5に送信するようになっている。
【0021】
分割装置1は、詳しくは、元データSから複数の分割データDを生成する分割データ生成手段11、複数の分割データDから元データSを復元する元データ復元手段13、元データSから複数の分割データDを生成するために使用される乱数Rを発生する乱数発生手段15、および分割データ生成手段11で生成した複数の分割データDをネットワーク3を介して複数の保管サーバ7a,7b,7cに送信したり、また複数の保管サーバ7a,7b,7cからの複数の分割データDをネットワーク3を介して受信するためのデータ送受信手段17から構成されている。分割データ生成手段11は、分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段を有する。
【0022】
本データ分割装置1は、例えばコンピュータによって構成され、演算装置、記憶装置、メモリ等を備える。各手段は、記憶装置に記憶されているプログラムや各情報、データなどを読み出してメモリに一時的に格納し、これを用いて演算装置によって後述する各種の処理を実行して、その実行結果を記憶装置に記憶させる。
【0023】
本実施形態における元データの分割および復元では、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より1少ない数ずつ生成するので、元データのビット長が処理単位ビット長の(分割数-1)倍の整数倍に一致しない場合は、元データの末尾の部分に0を埋めるなどして元データのビット長を処理単位ビット長の(分割数-1)倍の整数倍に合わせることにより本実施形態を適用することができる。
【0024】
また、上述した乱数も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして乱数発生手段15から生成される。すなわち、乱数は処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして生成される。更に、元データは処理単位ビット長に基づいて所望の分割数の分割データに分割されるが、この分割データの各々も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。すなわち、分割データの各々は、処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。
【0025】
なお、以下の説明では、上述した元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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番目の元部分データを表すものである。
【0026】
この表記を用いると、元データ、乱数データ、分割データとこれらをそれぞれ構成する元部分データ、乱数部分データ、分割部分データは、次のように表記される。
【0027】
元データ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)演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
【0028】
なお、本実施形態で使用する排他的論理和演算(XOR)は、以下の説明では、「*」なる演算記号で表すことにするが、この排他的論理和演算のビット毎の演算規則での各演算結果は下記のとおりである。
【0029】
0 * 0 の演算結果は 0
0 * 1 の演算結果は 1
1 * 0 の演算結果は 1
1 * 1 の演算結果は 0
また、XOR演算は交換法則、結合法則が成り立つ。すなわち、
a*b=b*a
(a*b)*c=a*(b*c)
が成り立つことが数学的に証明される。
【0030】
また、a*a=0,a*0=0*a=aが成り立つ。
【0031】
ここでa,b,cは同じ長さのビット列を表し、0はこれらと同じ長さですべて「0」からなるビット列を表す。
【0032】
次に、フローチャートなどの図面も参照して、上記実施形態の作用について説明するが、この説明の前に図2、図5、図8、図9のフローチャートに示す記号の定義について説明する。
【0033】
(1)
【数5】
【0034】
は、A(1)*A(2)*…A(n)を意味するものとする。
【0035】
(2)c(j,i,k)を、(n-1)×(n-1)行列であるU[n-1,n-1]×(P[n-1,n-1])^(j-1)のi行k列の値と定義する。
【0036】
このときQ(j,i,k)を下記のように定義する。
【0037】
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の整数を表す。
【0038】
(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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
【数6】
【0039】
(4)P[n,n]とは、n×n行列であって、i行j列の値をp(i,j)で表すと、
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列を意味するものとし、「回転行列」ということとする。具体的には下記のような行列であり、他の行列の右側からかけると当該他の行列の1列目を2列目へ、2列目を3列目へ、…,n-1列目をn列目へ、n列目を1列目へ移動させる作用がある。つまり、行列Pを他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
【数7】
【0040】
(5)A,Bをn×n行列とすると、A×Bとは行列AとBの積を意味するものとする
。行列の成分同士の計算規則は通常の数学で用いるものと同じである。
【0041】
(6)Aをn×n行列とし、iを整数とすると、A^iとは行列Aのi個の積を意味するものとする。また、A^0とは単位行列Eを意味するものとする。
【0042】
(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
となる性質がある。
【数8】
【0043】
次に、図2に示すフローチャートおよび図3、図4に示す具体的データなどを参照して、上記実施形態の作用として、まず元データSの分割処理について説明する。
【0044】
本実施形態の分割装置1の利用者は、端末5からネットワーク3を介して分割装置1にアクセスし、分割装置1に元データSを送信し、分割装置1ではデータ送受信手段17が端末5からの元データSを受信し、分割装置1に供給する(図2のステップS201)。なお、本例では、元データSは、16ビットの「10110010 00110111」とする。
【0045】
次に、利用者は端末5から分割数nとして3を分割装置1に指示する(ステップS203)。この分割数nは分割装置1において予め定められた値を用いてもよい。なお、この分割数n=3に従って分割装置1で生成される3個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ16ビット長のデータである。
【0046】
それから、元データ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」となる。
【0047】
次のステップS207では、元データSのビット長が8×2の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋めて、8×2の整数倍に合わせる。なお、本例のように処理単位ビット長bが8ビットおよび分割数nが3に設定された場合における分割処理は、元データSのビット長として16ビットに限られるものでなく、処理単位ビット長b×(分割数n-1)=8×2の整数倍の元データSに対して有効なものである。
【0048】
次に、ステップS209では、変数m、すなわち上述した整数倍を意味する変数mを0に設定する。本例のように、元データSが処理単位ビット長b×(分割数n-1)=8×2=16ビットである場合には、変数mは0であるが、2倍の32ビットの場合には、変数mは1となり、3倍の48ビットの場合には、変数mは2となる。
【0049】
次に、元データ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に進む。
【0050】
ステップ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)を次のように生成する。
【0051】
元データ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)。
【0052】
乱数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が生成される。
【0053】
分割データ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の場合には、具体的には図4に示す表に記載されているものとなる。図4に示す表から、分割部分データ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)である。また、図4に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【0054】
このように整数倍を意味する変数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に保管し、分割処理を終了する。
【0055】
ここで、上述した図2のフローチャートのステップS217における定義式による分割データの生成処理、具体的には分割数n=3の場合の分割データの生成処理について詳しく説明する。
【0056】
まず、整数倍を意味する変数m=0の場合には、ステップS217に示す定義式から各分割データD(i)=D(1)〜D(3)の各々を構成する各分割部分データD(i,2×m+j)=D(i,j)(i=1〜3,j=1〜2)は、次のようになる。
【0057】
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)を具体的に求める。
【0058】
これはc(j,i,k)を2×2行列であるU[2,2]×(P[2,2])^(j-1)のi行k列の値としたとき下記のように定義される。
【0059】
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
ここで、
j=1のときは
【数9】
【0060】
j=2のときは
【数10】
【0061】
これを用いると、各分割部分データD(i,j)は次のような定義式により生成される。
【0062】
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)を生成するための定義式は、図3にも図示されている。
【0063】
図3は、上述したように16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分
データから元データを復元する場合の計算式などを示す表である。
【0064】
ここで、上述した定義式により分割データD(1),D(2),D(3)および各分割部分データD(1,1),D(1,2),D(2,1),D(2,2),D(3,1),D(3,2)を生成する過程と定義式の一般形について説明する。
【0065】
まず、第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である。なお、定義式の一般形は、図4にまとめて示されている。
【0066】
また、第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である。
【0067】
更に第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である。
【0068】
上記説明は、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の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
【0069】
次に、図3の右側に示す表を参照して、分割データから元データを復元する処理について説明する。
【0070】
まず、利用者は端末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を復元する。
【0071】
まず、分割部分データD(2,1),D(3,1)から第1の元部分データS(1)を次のように生成することができる。
【0072】
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となる。
【0073】
また、別の分割部分データから次のように第2の元部分データS(2)を生成することができる。
【0074】
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となる。
【0075】
一般に、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)が求まる。
【0076】
また、一般に、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)が求まる。
【0077】
次に、D(1),D(3)を取得してSを復元する場合には、次のようになる。
【0078】
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となる。
【0079】
また同様に、
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となる。
【0080】
一般に、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)が求まる。
【0081】
また、一般に、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)が求まる。
【0082】
次に、D(1),D(2)を取得してSを復元する場合には、次のようになる。
【0083】
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となる。
【0084】
また同様に、
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となる。
【0085】
このR(1),R(2)を使用してS(1),S(2)を求める。
【0086】
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となる。
【0087】
また同様に、
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となる。
【0088】
一般に、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)が求まる。
【0089】
また同様に、
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)が求まる。
【0090】
このR(j),R(j+1)を使用してS(j),S(j+1)を求める。
【0091】
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)が求まる。
【0092】
また同様に、
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)が求まる。
【0093】
上述したように、元データの先頭から処理単位ビット長bに基づいて分割処理を繰り返し行って、分割データを生成した場合には、3つの分割データD(1),D(2),D(3)のすべてを用いなくても、3つの分割データのうち、2つの分割データを用いて上述したように元データを復元することができる。
【0094】
本発明の他の実施形態として、乱数Rのビット長を元データSのビット長よりも短いものを使用して、元データの分割処理を行うことができる。
【0095】
すなわち、上述した乱数RはS,D(1),D(2),D(3)と同じビット長のデータとしたが、乱数Rを元データSのビット長より短いものとし、分割データD(1),D(2),D(3)の生成にこの短いビット長の乱数Rを繰り返し用いるものである。
【0096】
なお、分割データ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)とする。
【0097】
先の説明では、分割部分データ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が解読されてしまうことも考えられるため、適切な長さを選択することが望ましい。
【0098】
この実施形態では例えば乱数Rを生成するために疑似乱数生成アルゴリズムを使用する。乱数には自然界の物理現象などを使って乱数を発生させる真性乱数と、コンピュータのアルゴリズムなどで乱数を発生させる疑似乱数がある、真性乱数は、サイコロを何回も振ったり、雑音などの物理現象を利用したりして生成することができるが、手間や装置がたいへんであるため、その代わりに、適当な長さの種(乱数生成の種となる情報(seeds))から決定的なアルゴリズムに基づいて生成される疑似乱数が用いられる。例えば短い乱数を種とすれば長い乱数を得ることができる。種の長さは、例えば128ビット、160ビットまたはそれ以上のものがある。決定的なアルゴリズムに基づいて生成されるといっても、統計的一様性、無相関性など乱数として必要な性質を一定のレベルで満たしている。具体例としては、ANSI X9,42、FIPS 186−2など標準化されたものがある
(http://www.ipa.go.jp/security/enc/CRYPTREC/fy15/cryptrec20030425_spec01.html)。
【0099】
これらを用いれば、乱数生成の種を入力として長い疑似乱数の列を生成することができる。例えば、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を復元することができる。
【0100】
上述した各実施形態は、元データを3つに分割し、そのうち2つから元データが復元可能となるものであったが、分割数nを3より大きくとって、n個より少ない個数の分割データから元データを復元することができることは勿論のことである。
【0101】
その1つの応用例として、元データを4つの分割データに分割する分割数n=4の場合の分割処理について図5に示すフローチャートおよび図6に示す定義式の一般形などを参照して説明する。
【0102】
まず、利用者は端末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)。
【0103】
次に、元データSの8×3×m+1ビット目から8×3ビット分のデータが存在するか否かが判定される(ステップS311)。なお、本例では、元データSが8×3=24ビット長のデータの場合について説明している。
【0104】
ステップ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に進む。
【0105】
ステップ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)が生成される。
【0106】
次に、変数jを1から3まで変えて、乱数部分データR(3×m+j)に乱数発生手段15から発生する8ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした3個の乱数部分データR(1),R(2),R(3)が生成される(ステップS315)。
【0107】
次に、ステップS317において、変数iを1から4(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを1から3(=分割数n-1)まで変えながら、ステップS317に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,3×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0108】
分割データ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の場合には、具体的には図6に示す表に記載されているものとなる。図6に示す表から、分割部分データ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)である。また、図6に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【0109】
このように変数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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【0110】
ここで、上述した図5のフローチャートのステップS317における定義式による分割データの生成処理、具体的には分割数n=4の場合の分割データの生成処理について詳しく説明する。
【0111】
まず、ステップS317に示す定義式から各分割データD(i)=D(1)〜D(4)の各々を構成する各分割部分データD(i,3×m+j)は、次のようになる。
【0112】
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列の値としたとき下記のように定義される。
【0113】
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のときは
【数11】
【0114】
j=2のときは
【数12】
【0115】
j=3のときは
【数13】
【0116】
これを用いると、各分割部分データは次のような定義式により生成される。
【0117】
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)
ここで、上述したように図2のステップS217や図5のステップS317で示した定義式に基づいて元データを分割する分割規則について一般的な表現で記載する。
【0118】
まず、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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)で表わす。
【0119】
それから、上記変数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)を
【数14】
【0120】
と設定し、またi=nのとき、各分割部分データD(i,j)を
D(i,j)=R(j)
と設定する。上記処理を元データSの先頭から末尾まで繰り返し行うことにより元データSから分割数nの分割データを生成することができる。
【0121】
次に、上述したように元データSを4分割して生成された分割データD(1),D(2),D(3),D(4)から元データSを復元する処理について図6を参照して説明する。なお、図6に示す4分割の場合には、変数jを3×m+1(m≧0である任意の整数)として、同図に示す一般的な定義式から次に示すように元データSを生成することができる。
【0122】
まず、分割データD(1),D(2)から元データSを求める場合について説明する。
【0123】
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)を求めることもできる。
【0124】
同様に、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)を求めることができる。
【0125】
更に、上述したと同様に、D(2)とD(3)からSを求めることができる。
【0126】
具体的には、まず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)を求めることができる。
【0127】
また更に、D(1)とD(4)またはD(2)とD(4)またはD(3)とD(4)からSを求めることができる。
【0128】
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)を求めることができる。
【0129】
上述したように、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の1つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、4つの分割データの中から任意に3つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、4つのうち任意の3つの分割データから元データを復元可能である。
【0130】
図7は、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つから復元可能であるといえる。
【0131】
また、分割数nを5より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【0132】
次に、図8に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
【0133】
まず、利用者は端末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)。
【0134】
次に、元データSのb×(n-1)×m+1ビット目からb×(n-1)ビット分のデータが存在するか否かが判定される(ステップS411)。この判定の結果、データが存在しない場合は、ステップS421に進むことになるが、今の場合は、ステップS409で変数mは0に設定された場合であるので、データが存在するため、ステップS413に進む。
【0135】
ステップ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)が生成される。
【0136】
次に、変数jを1からn-1まで変えて、乱数部分データR((n-1)×m+j)に乱数発生手段15から発生する処理単位ビット長bの乱数を設定し、これにより乱数Rを処理単位ビット長bで区分けしたn-1個の乱数部分データR(1),R(2),…R(n-1)が生成される(ステップS415)。
【0137】
次に、ステップS417において、変数iを1からnまで変えるとともに、更に各変数iにおいて変数jを1からn-1まで変えながら、ステップS417に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,(n-1)×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0138】
分割データ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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【0139】
ところで、上述した実施形態においては、いずれかの分割データのみから、それを構成する部分データ間の排他的論理和の演算を行うことによって乱数成分が失われる場合がある。即ち、例えば3分割の場合、各分割部分データは次のように定義される。
【0140】
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の任意の整数である。
【0141】
D(1,1)、D(1,2)は、上記の定義より、元データと乱数の演算により生成されたものであり、D(1,1)、D(1,2)それぞれを見ても元データの内容は分からないが、D(1,1)*D(1,2)
の演算を行うことによりS(1)*S(2)が算出される。これは元データそのものではないが、乱数成分を含んでいない。
【0142】
このように乱数成分が失われると、個々の元部分データについて、例えばS(2)の一部が既知である場合にはS(1)の一部が復元可能となるので、安全ではないと考えられる。例えば、元データが標準化されたデータフォーマットに従ったデータであって、S(2)がそのデータフォーマット中のヘッダ情報やパディング(例えば、データ領域の一部を0で埋めたもの)などを含む部分であった場合には、これらのデータフォーマット固有のキーワードや固定文字列などを含むため、その内容は予測され得る。また、S(2)のうち既知の部分とS(1)*S(2)の値から、S(1)の一部が復元可能である。
【0143】
4分割の場合は、図6より、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の任意の整数である。
【0144】
5分割の場合は、図7より、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の任意の整数である。
【0145】
分割数が5より大きい場合も同様に演算により、乱数成分が失われる。なお、分割数が2の場合にはこのような問題は生じない。
【0146】
本実施の形態では、この問題を解決するために、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われることがないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替える。
【0147】
まず、3分割の場合の一例について説明する。図9のローテーション前の表は図4と同一のものである。j=2の列について、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。同図では、これをRotate(1,D(1,2),D(2,2))と示す。これを、j+1を用いた一般式により示すと、D(1,j+1)の値をD(2,j+1)へ格納し、元のD(2,j+1)の値をD(1,j+1)へ格納することにより、1回のローテーションを行うということになる。同図では、これをRotate(1,D(1,j+1),D(2,j+1))と示す。このようにローテーションを行うと、各分割部分データは、図9のローテーション後の表に示すようになる。
【0148】
この場合、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分が失われない。これは、図9より
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)
となるからである。
【0149】
また、この場合、3つの分割データのうち2つから、元データを復元することができるという特性は失われていない。これは、D(1)、D(2)を取得してSを復元する場合には、図9におけるD(1)、D(2)は、図4におけるD(1)、D(2)を構成する分割部分データをローテーションさせたものにすぎないので、明らかにこれらから元データを復元することができ、また、D(1)とD(3)またはD(2)とD(3)を取得してSを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができるからである。
【0150】
次に、4分割の場合における分割部分データのローテーションの一例について説明する。図10のローテーション前の表は図6の上図と同一のものである。j=1の列については、ローテーションは行わない。j=2の列については、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(3,2)へ格納し、元のD(3,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。図10では、これをRotate(1,D(1,2),D(2,2),D(3,2))と示す。また、j=3の列については、D(1,3)の値をD(2,3)へ格納し、元のD(2,3)の値をD(3,3)へ格納し、元のD(3,3)の値をD(1,3)へ格納するローテーションをした後、もう一度同じローテーションを行うことにより、2回のローテーションを行う。このようにローテーションを行うと、各分割部分データは、図10のローテーション後の表に示すように格納される。
【0151】
図11は、これらをj+1、j+2を用いた一般式により示す。図11のローテーション前の表は図6の下図と同一のものである。j+1の列では1回のローテーションにより、D(1,j+1)の値がD(2,j+1)へ格納され、元のD(2,j+1)の値がD(3,j+1)へ格納され、元のD(3,j+1)の値がD(1,j+1)へ格納される。図11では、これをRotate(1,D(1,j+1),D(2,j+1),D(3,j+1))と示す。またj+2の列では2回のローテーションにより、D(1,j+2)の値がD(3,j+2)へ格納され、元のD(3,j+2)の値がD(2,j+2)へ格納され、元のD(2,j+2)の値がD(1,j+2)へ格納される。図11では、これをRotate(2,D(1,j+2),D(2,j+2),D(3,j+2))と示す。このようにローテーションを行うと、各分割部分データは、図11のローテーション後の表に示すように格納される。この場合も、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分は失われない。
【0152】
ところで、分割数が4の場合には、全体の情報量は元の情報の4倍となる。一般に、分割数がnの場合には、元の情報のn倍の情報量となってしまい、保管先における格納領域を圧迫する原因となる。そこで、本実施の形態では、ローテーションの処理を行う前に、全てのD(1,j)の値を削除する。すなわち、図10におけるローテーション前のD(1,1)、D(1,2)、D(1,3)の値にNULLを格納することにより、ローテーション後のD(1,1)、D(2,2)、D(3,3)の値を削除する。また、図11におけるローテーション前のD(1,j)、D(1,j+1)、D(1,j+2)の値にNULLを格納することにより、ローテーション後のD(1,j)、D(2,j+1)、D(3,j+2)の値を削除する。このように、ローテーション前の各分割部分データD(1,j)、すなわち分割データD(1)を削除することで、全体の記憶容量を(n−1)倍に抑える。
【0153】
続いて、この場合の復元処理について説明する。分割数が4の場合には、4つの分割データのうちの任意の3つを用いることで、元データを復元することが可能である。ここでは、一例として、ローテーション後のD(1,1)、D(2,2)、D(3,3)がそれぞれ削除された分割データD(1)、D(2)、D(3)を用いて元データを復元する処理を示す。
【0154】
まず、次のようにして乱数R(1)、R(2)、R(3)を求める。
【0155】
D(1,3)*D(2,3)=(S(3)*R(1)*R(3))*(S(3)*R(3))=R(1)
D(2,1)*D(3,1)=(S(1)*R(1)*R(2))*(S(1)*R(1))=R(2)
D(3,2)*D(1,2)=(S(2)*R(2)*R(3))*(S(2)*R(2))=R(3)
そして、次のようにして元データS(1)、S(2)、S(3)を求める。
【0156】
D(3,1)*R(1)=(S(1)*R(1))*R(1)=S(1)
D(1,2)*R(2)=(S(2)*R(2))*R(2)=S(2)
D(2,3)*R(3)=(S(3)*R(3))*R(3)=S(3)
以上により、元データS(1)、S(2)、S(3)が復元される。
【0157】
次に、別の例として、ローテーション後のD(2,2)、D(3,3)がそれぞれ削除された分割データD(2)、D(3)と、D(4)を用いて元データを復元する処理を示す。ここでは、次のようにして元データS(1)、S(2)、S(3)を求める。
【0158】
D(3,1)*D(4,1)=(S(1)*R(1))*R(1)=S(1)
D(3,2)*D(4,2)*D(4,3)=(S(2)*R(2)*R(3))*R(2)*R(3)=S(2)
D(2,3)*D(4,3)=(S(3)*R(3))*R(3)=S(3)
以上により、元データS(1)、S(2)、S(3)が復元される。この他、D(1)、D(2)、D(4)の組み合わせや、D(1)、D(3)、D(4)の組み合わせからも、同様にして元データS(j)を導くことができる。
【0159】
次に、5分割の場合における分割部分データのローテーションの一例について説明する。図12のローテーション前の表は図7の上図と同一のものである。ここでも、j=1の列では、ローテーションを行わない。j=2の列では、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(3,2)へ格納し、元のD(3,2)の値をD(4,2)へ格納し、元のD(4,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。図12では、これをRotate(1,D(1,2),D(2,2),D(3,2),D(4,2))と示す。また、j=3の列では、D(1,3)の値をD(2,3)へ格納し、元のD(2,3)の値をD(3,3)へ格納し、元のD(3,3)の値をD(4,3)へ格納し、元のD(4,3)の値をD(1,3)へ格納するローテーションをした後、もう一度同じローテーションをすることにより、2回のローテーションを行う。図12では、これをRotate(2,D(1,3),D(2,3),D(3,3),D(4,3))と示す。j=4の列では、D(1,4)の値をD(2,4)へ格納し、元のD(2,4)の値をD(3,4)へ格納し、元のD(3,4)の値をD(4,4)へ格納し、元のD(4,4)の値をD(1,4)へ格納するローテーションをした後、2度同じローテーションをすることにより、3回のローテーションを行う。図12では、これをRotate(3,D(1,4),D(2,4),D(3,4),D(4,4))と示す。このようにローテーションを行うと、各分割部分データは、図12のローテーション後の表に示すように格納される。
【0160】
図13は、これらをj+1、j+2、j+3を用いた一般式により示す。図13のローテーション前の表は図7の下図と同一のものである。j+1の列では、1回のローテーションにより、D(1,j+1)の値がD(2,j+1)へ格納され、元のD(2,j+1)の値がD(3,j+1)へ格納され、元のD(3,j+1)の値がD(4,j+1)へ格納され、元のD(4,j+1)の値がD(1,j+4)へ格納される。図13では、これをRotate(1,D(1,j+1),D(2,j+1),D(3,j+1),D(4,j+1))と示す。j+2の列では、2回のローテーションにより、D(1,j+2)の値がD(3,j+2)へ格納され、元のD(3,j+2)の値がD(1,j+2)へ格納され、元のD(4,j+2)の値がD(2,j+2)へ格納される。図13では、これをRotate(2,D(1,j+2),D(2,j+2),D(3,j+2),D(4,j+2))と示す。j+3の列では、3回のローテーションにより、D(1,j+1)の値がD(4,j+3)へ格納され、元のD(4,j+3)の値がD(3,j+3)へ格納され、元のD(3,j+3)の値がD(2,j+3)へ格納され、元のD(2,j+3)の値がD(1,j+3)へ格納される。図13では、これをRotate(3,D(1,j+3),D(2,j+3),D(3,j+3),D(4,j+3))と示す。このようにローテーションを行うと、各分割部分データは、図13のローテーション後の表に示すように格納される。この場合も、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分は失われない。
【0161】
また、5分割の場合も、4分割と同様に、データ容量を抑制するため、ローテーションの処理を行う前に、全てのD(1,j)の値を削除する。すなわち、図12におけるローテーション前のD(1,1)、D(1,2)、D(1,3)、D(1,4)の値にNULLを格納することにより、ローテーション後のD(1,1)、D(2,2)、D(3,3)、D(4,4)の値を削除する。また、図13におけるローテーション前のD(1,j)、D(1,j+1)、D(1,j+2)、D(1,j+3)の値にNULLを格納することにより、ローテーション後のD(1,j)、D(2,j+1)、D(3,j+2)、D(4,j+3)の値を削除する。このように、分割部分データの一部を削除することで、全体の容量を抑える。
【0162】
元データの復元は、4分割の場合と同様に行うことができ、5個の分割データのうちの3個の分割データから、元データを復元することができるという特性は失われていない。
【0163】
また、分割数nを5より大きくとった場合も、同様にして全てのD(1,j)の値を削除するとともに分割部分データをローテーションさせて分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【0164】
なお、上記実施形態のデータ分割方法の処理手順をプログラムとして例えばCDやFDなどの記録媒体に記録して、この記録媒体をコンピュータシステムに組み込んだり、または記録媒体に記録されたプログラムを通信回線を介してコンピュータシステムにダウンロードしたり、または記録媒体からインストールし、該プログラムでコンピュータシステムを作動させることにより、データ分割方法を実施するデータ分割装置として機能させることができることは勿論であり、このような記録媒体を用いることにより、その流通性を高めることができるものである。
【0165】
上述してきたように、本実施の形態によれば、所定の定義式が元部分データと乱数部分データの排他的論理和からなるので、従来のように多項式や剰余演算を行う高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ高速に生成することができる。
【0166】
また、生成した複数の分割データのうち分割数よりも少ない数の分割データに対して定義式を適用することにより元データを復元するので、分割数よりも少ない任意の数xの分割データで元データを復元でき、分割数からxを減算した数までの分割データを紛失したり破壊したとしても、元データを復元することができる。
【0167】
さらに、元データをネットワークを介して端末から受信し、この元データに対して元部分データ、乱数部分データおよび分割部分データの生成処理を施して生成された複数の分割部分データをネットワークを介して保管サーバに送信して保管するので、多数のユーザが端末からネットワークを介してアクセスして分割処理を依頼することができ、共通化および経済化を図ることができる。
【0168】
また、各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替えることで、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われることを防止できる。なお、このローテーションの手法は、分割数が4以上の場合に特に有効であるが、本実施の形態においては、排他的論理和を用いたデータ分割手法の理解を容易にするために、分割数を3とした場合についても説明した。
【0169】
さらに、分割部分データD(1,j)を削除することで、分割データD(1)を記憶することが不要となるので、従来は分割数がnの場合に元データのn倍の情報量を記憶させる記憶容量が必要であったところ、これをn−1倍に抑えることができる。
【0170】
なお、本実施形態においては、各分割部分データをローテーションする前に分割部分データD(1,j)を削除することとしたが、ローテーションの後でローテーション前の分割部分データD(1,j)に相当するデータを削除することとしてもよい。
【0171】
また、本実施の形態においては、各分割部分データをローテーションさせることとしたが、これに限られるものではなく、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われるということが防止できればよく、この効果が得られるのであれば、各分割部分データをどのように入れ替えても構わない。
【0172】
さらに、上述した実施形態は、分割データは、乱数のみからなる1つの分割データと、1つの元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含む場合であるが、上述した実施形態を変形して分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むものとしても良い。また、上述した実施形態を変形して、分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むものとしても良い。
【図面の簡単な説明】
【0173】
【図1】本発明の一実施形態に係るデータ分割方法を実施するデータ分割装置を含むシステム構成図である。
【図2】図1に示す実施形態のデータ分割装置の分割数n=3の場合の分割処理を示すフローチャートである。
【図3】16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図4】分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図5】図1に示す実施形態のデータ分割装置の分割数n=4の場合の分割処理を示すフローチャートである。
【図6】分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図7】分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図8】図1に示す実施形態のデータ分割装置の分割数がnで処理単位ビット長がbである場合の一般的な分割処理を示すフローチャートである。
【図9】分割数n=3の場合の分割部分データのローテーションの例を示す表である。
【図10】分割数n=4の場合の分割部分データのローテーションの例を示す表である。
【図11】分割数n=4の場合の分割部分データのローテーションの別の例を示す表である。
【図12】分割数n=5の場合の分割部分データのローテーションの例を示す表である。
【図13】分割数n=5の場合の分割部分データのローテーションの別の例を示す表である。
【符号の説明】
【0174】
1 分割装置
3 ネットワーク
5 端末
7a,7b,7c 保管サーバ
11 分割データ生成手段
13 元データ復元手段
15 乱数発生手段
17 データ送受信手段
【技術分野】
【0001】
本発明は、データの機密性および安全性を確保するためにデータを分割する技術に関する。
【背景技術】
【0002】
重要な秘密データ(以下、元データという)を保管する場合、紛失、破壊、盗難やプライバシー侵害の脅威がある。このような脅威は秘密に保管すべきデータを単に暗号化しただけでは解決できず、紛失、破壊に備えてコピーを複数作ることが有効であるが、コピーを複数作ると盗難のリスクが増加してしまう。
【0003】
このような問題を解決する手段として、従来、しきい値秘密分散法がある(非特許文献1参照)。この従来の方法は、元データSをn個のデータに分割し、そのうち任意のx個の分割データを集めれば元データSが復元できるが、任意のx-1個の分割データでは元データSは復元できないというものである。従って、x-1個まで分割データが盗まれても元データSが漏れず、またn-x個まで分割データを紛失したり破壊されたりしても、元データSを復元できる。
【0004】
この方法の代表的な実現例としてn-1次多項式と剰余演算により構成される方法がある(非特許文献2参照)。この従来の方法は、公開鍵暗号方式の秘密鍵の分割管理などで利用されており、データ量があまり多くないため、現状のコンピュータの演算処理能力、記憶装置・記憶媒体などのコストに対しては特に問題ない。
【非特許文献1】A. Shamir, "How to Share a Secret", Comm.Assoc.Comput.Mach., Vol. 22, no. 11, pp. 612-613(Nov.1979)
【非特許文献2】Bruce Schneier, "Applied Cryptography", John Wiley&Sons, Inc., pp. 383-384(1994)
【発明の開示】
【発明が解決しようとする課題】
【0005】
上述した従来の方法を安全に保管したいデータ量が例えばメガバイト、ギガバイトまたはそれ以上の規模となった場合に利用すると、多項式演算・剰余演算などを含む多倍長整数の演算処理を大量のデータに対して行う演算処理能力が必要となる。
【0006】
また、従来の方法では、例えば分割数n=5の場合には1バイトのデータから1バイトの分割データが5つ生成されるため、元データに対して単純に分割数に比例した倍数の記憶容量が必要となるなど、コンピュータを用いて具体的に実現する上で現実的ではないという問題がある。
【0007】
本発明は、上記に鑑みてなされたものであり、その目的とするところは、比較的簡単な処理により元データを効率的に分割可能とすることにある。
【0008】
また、本発明の別の目的は、分割データを記憶する記憶容量を抑制することにある。
【課題を解決するための手段】
【0009】
上記目的を達成するため、第1の本発明に係るデータ分割装置は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるように、かつ、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないようにする分割データ生成手段と、を有することを特徴とする。
【0010】
第2の本発明に係るデータ分割装置は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする分割データ生成手段と、を有し、前記分割部分データ生成手段は、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替えることを特徴とする。
【0011】
第1、第2の本発明にあっては、元データを処理単位ビット長毎に区分けして複数の元部分データを生成し、複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和からなる所定の定義式に従って生成することで、コンピュータ処理に適したビット演算である排他的論理和演算を用いるので、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ高速に生成することができる。また、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数部分データが失われないようにすることで、いずれかの分割データから元データを復元し難くして、安全性の向上を図る。
【0012】
上記データ分割装置において、前記分割部分データ生成手段は、分割部分データの生成に際し、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、変数として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行列でi行j列の値u(i,j)がi+j≦n+1 のとき u(i,j)=1
i+j>n+1 のとき u(i,j)=0
である行列とし、P[n,n]をn×n行列でi行j列の値p(i,j)が
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]^(j-1)のi行k列の値と定義し、ただしU[n-1,n-1]×P[n-1,n-1]^(j-1)とは行列U[n-1,n-1]とj-1個のP[n-1,n-1]の積を表し、Q(j,i,k)をc(j,i,k)=1のとき、Q(j,i,k)=R(k)、c(j,i,k)=0のとき、Q(j,i,k)=0 と定義したとき、各分割部分データD(i,j)を、変数iを1からnまで変えながら各変数iにおいて変数jを1からn-1まで変え、排他的論理和の演算子*を用いて、i<nのとき、
【数3】
【0013】
ただし、
【数4】
【0014】
とし、i=nのとき、
D(i,j)=R(j)
として生成するものであって、当該各分割部分データのうちのD(1,j)を削除することを特徴とする。
【0015】
本発明にあっては、分割部分データD(1,j)を削除することで、分割データD(1)を記憶する必要がなくなるので、従来は分割数がnの場合に元のデータのn倍の情報量を記憶する記憶容量が必要であったところ、これをn-1倍に抑えることができる。
【0016】
第3の本発明に係るデータ分割方法は、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割方法であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成し、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替え、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とする。
【0017】
第4の本発明に係るコンピュータプログラムは、元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割用のコンピュータプログラムであって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する処理と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する処理と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する処理と、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替える処理と、所望の分割数の分割データを複数の分割部分データから生成する処理と、をコンピュータに実行させることにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とする。
【発明の効果】
【0018】
本発明によれば、比較的簡単な処理により元データを効率的に分割することができる。また、本発明によれば、分割データを記憶する記憶容量を抑制することができる。
【発明を実施するための最良の形態】
【0019】
以下、図面を用いて本発明の実施の形態を説明する。図1は、本発明の一実施形態に係るデータ分割方法を実施するデータ分割装置を含むシステム構成図である。本実施形態のデータ分割装置は、符号1で示すように分割装置1としてネットワーク3に接続されて設けられ、このネットワーク3にアクセスしてくる端末5からの元データ分割要求に応じて元データSを複数の分割データに分割し、この分割した複数の分割データをネットワーク3を介して複数の保管サーバ7a,7b,7cに保管するようになっている。なお、図1では、分割装置1は、端末5からの元データSを3つの分割データD(1),D(2),D(3)に分割し、それぞれを複数の保管サーバ7a,7b,7cに保管するようにしている。
【0020】
また、分割装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データ復元要求に応じて複数の分割データD(1),D(2),D(3)をネットワーク3を介して各保管サーバ7から取得し、この取得した複数の分割データD(1),D(2),D(3)から元データSを復元し、ネットワーク3を介して端末5に送信するようになっている。
【0021】
分割装置1は、詳しくは、元データSから複数の分割データDを生成する分割データ生成手段11、複数の分割データDから元データSを復元する元データ復元手段13、元データSから複数の分割データDを生成するために使用される乱数Rを発生する乱数発生手段15、および分割データ生成手段11で生成した複数の分割データDをネットワーク3を介して複数の保管サーバ7a,7b,7cに送信したり、また複数の保管サーバ7a,7b,7cからの複数の分割データDをネットワーク3を介して受信するためのデータ送受信手段17から構成されている。分割データ生成手段11は、分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段を有する。
【0022】
本データ分割装置1は、例えばコンピュータによって構成され、演算装置、記憶装置、メモリ等を備える。各手段は、記憶装置に記憶されているプログラムや各情報、データなどを読み出してメモリに一時的に格納し、これを用いて演算装置によって後述する各種の処理を実行して、その実行結果を記憶装置に記憶させる。
【0023】
本実施形態における元データの分割および復元では、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より1少ない数ずつ生成するので、元データのビット長が処理単位ビット長の(分割数-1)倍の整数倍に一致しない場合は、元データの末尾の部分に0を埋めるなどして元データのビット長を処理単位ビット長の(分割数-1)倍の整数倍に合わせることにより本実施形態を適用することができる。
【0024】
また、上述した乱数も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして乱数発生手段15から生成される。すなわち、乱数は処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の乱数部分データとして生成される。更に、元データは処理単位ビット長に基づいて所望の分割数の分割データに分割されるが、この分割データの各々も(分割数-1)個の元部分データの各々に対応して処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。すなわち、分割データの各々は、処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する(分割数-1)個の分割部分データとして生成される。
【0025】
なお、以下の説明では、上述した元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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番目の元部分データを表すものである。
【0026】
この表記を用いると、元データ、乱数データ、分割データとこれらをそれぞれ構成する元部分データ、乱数部分データ、分割部分データは、次のように表記される。
【0027】
元データ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)演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
【0028】
なお、本実施形態で使用する排他的論理和演算(XOR)は、以下の説明では、「*」なる演算記号で表すことにするが、この排他的論理和演算のビット毎の演算規則での各演算結果は下記のとおりである。
【0029】
0 * 0 の演算結果は 0
0 * 1 の演算結果は 1
1 * 0 の演算結果は 1
1 * 1 の演算結果は 0
また、XOR演算は交換法則、結合法則が成り立つ。すなわち、
a*b=b*a
(a*b)*c=a*(b*c)
が成り立つことが数学的に証明される。
【0030】
また、a*a=0,a*0=0*a=aが成り立つ。
【0031】
ここでa,b,cは同じ長さのビット列を表し、0はこれらと同じ長さですべて「0」からなるビット列を表す。
【0032】
次に、フローチャートなどの図面も参照して、上記実施形態の作用について説明するが、この説明の前に図2、図5、図8、図9のフローチャートに示す記号の定義について説明する。
【0033】
(1)
【数5】
【0034】
は、A(1)*A(2)*…A(n)を意味するものとする。
【0035】
(2)c(j,i,k)を、(n-1)×(n-1)行列であるU[n-1,n-1]×(P[n-1,n-1])^(j-1)のi行k列の値と定義する。
【0036】
このときQ(j,i,k)を下記のように定義する。
【0037】
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の整数を表す。
【0038】
(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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
【数6】
【0039】
(4)P[n,n]とは、n×n行列であって、i行j列の値をp(i,j)で表すと、
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列を意味するものとし、「回転行列」ということとする。具体的には下記のような行列であり、他の行列の右側からかけると当該他の行列の1列目を2列目へ、2列目を3列目へ、…,n-1列目をn列目へ、n列目を1列目へ移動させる作用がある。つまり、行列Pを他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
【数7】
【0040】
(5)A,Bをn×n行列とすると、A×Bとは行列AとBの積を意味するものとする
。行列の成分同士の計算規則は通常の数学で用いるものと同じである。
【0041】
(6)Aをn×n行列とし、iを整数とすると、A^iとは行列Aのi個の積を意味するものとする。また、A^0とは単位行列Eを意味するものとする。
【0042】
(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
となる性質がある。
【数8】
【0043】
次に、図2に示すフローチャートおよび図3、図4に示す具体的データなどを参照して、上記実施形態の作用として、まず元データSの分割処理について説明する。
【0044】
本実施形態の分割装置1の利用者は、端末5からネットワーク3を介して分割装置1にアクセスし、分割装置1に元データSを送信し、分割装置1ではデータ送受信手段17が端末5からの元データSを受信し、分割装置1に供給する(図2のステップS201)。なお、本例では、元データSは、16ビットの「10110010 00110111」とする。
【0045】
次に、利用者は端末5から分割数nとして3を分割装置1に指示する(ステップS203)。この分割数nは分割装置1において予め定められた値を用いてもよい。なお、この分割数n=3に従って分割装置1で生成される3個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ16ビット長のデータである。
【0046】
それから、元データ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」となる。
【0047】
次のステップS207では、元データSのビット長が8×2の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を0で埋めて、8×2の整数倍に合わせる。なお、本例のように処理単位ビット長bが8ビットおよび分割数nが3に設定された場合における分割処理は、元データSのビット長として16ビットに限られるものでなく、処理単位ビット長b×(分割数n-1)=8×2の整数倍の元データSに対して有効なものである。
【0048】
次に、ステップS209では、変数m、すなわち上述した整数倍を意味する変数mを0に設定する。本例のように、元データSが処理単位ビット長b×(分割数n-1)=8×2=16ビットである場合には、変数mは0であるが、2倍の32ビットの場合には、変数mは1となり、3倍の48ビットの場合には、変数mは2となる。
【0049】
次に、元データ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に進む。
【0050】
ステップ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)を次のように生成する。
【0051】
元データ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)。
【0052】
乱数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が生成される。
【0053】
分割データ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の場合には、具体的には図4に示す表に記載されているものとなる。図4に示す表から、分割部分データ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)である。また、図4に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【0054】
このように整数倍を意味する変数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に保管し、分割処理を終了する。
【0055】
ここで、上述した図2のフローチャートのステップS217における定義式による分割データの生成処理、具体的には分割数n=3の場合の分割データの生成処理について詳しく説明する。
【0056】
まず、整数倍を意味する変数m=0の場合には、ステップS217に示す定義式から各分割データD(i)=D(1)〜D(3)の各々を構成する各分割部分データD(i,2×m+j)=D(i,j)(i=1〜3,j=1〜2)は、次のようになる。
【0057】
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)を具体的に求める。
【0058】
これはc(j,i,k)を2×2行列であるU[2,2]×(P[2,2])^(j-1)のi行k列の値としたとき下記のように定義される。
【0059】
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
ここで、
j=1のときは
【数9】
【0060】
j=2のときは
【数10】
【0061】
これを用いると、各分割部分データD(i,j)は次のような定義式により生成される。
【0062】
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)を生成するための定義式は、図3にも図示されている。
【0063】
図3は、上述したように16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分
データから元データを復元する場合の計算式などを示す表である。
【0064】
ここで、上述した定義式により分割データD(1),D(2),D(3)および各分割部分データD(1,1),D(1,2),D(2,1),D(2,2),D(3,1),D(3,2)を生成する過程と定義式の一般形について説明する。
【0065】
まず、第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である。なお、定義式の一般形は、図4にまとめて示されている。
【0066】
また、第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である。
【0067】
更に第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である。
【0068】
上記説明は、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の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
【0069】
次に、図3の右側に示す表を参照して、分割データから元データを復元する処理について説明する。
【0070】
まず、利用者は端末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を復元する。
【0071】
まず、分割部分データD(2,1),D(3,1)から第1の元部分データS(1)を次のように生成することができる。
【0072】
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となる。
【0073】
また、別の分割部分データから次のように第2の元部分データS(2)を生成することができる。
【0074】
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となる。
【0075】
一般に、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)が求まる。
【0076】
また、一般に、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)が求まる。
【0077】
次に、D(1),D(3)を取得してSを復元する場合には、次のようになる。
【0078】
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となる。
【0079】
また同様に、
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となる。
【0080】
一般に、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)が求まる。
【0081】
また、一般に、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)が求まる。
【0082】
次に、D(1),D(2)を取得してSを復元する場合には、次のようになる。
【0083】
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となる。
【0084】
また同様に、
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となる。
【0085】
このR(1),R(2)を使用してS(1),S(2)を求める。
【0086】
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となる。
【0087】
また同様に、
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となる。
【0088】
一般に、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)が求まる。
【0089】
また同様に、
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)が求まる。
【0090】
このR(j),R(j+1)を使用してS(j),S(j+1)を求める。
【0091】
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)が求まる。
【0092】
また同様に、
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)が求まる。
【0093】
上述したように、元データの先頭から処理単位ビット長bに基づいて分割処理を繰り返し行って、分割データを生成した場合には、3つの分割データD(1),D(2),D(3)のすべてを用いなくても、3つの分割データのうち、2つの分割データを用いて上述したように元データを復元することができる。
【0094】
本発明の他の実施形態として、乱数Rのビット長を元データSのビット長よりも短いものを使用して、元データの分割処理を行うことができる。
【0095】
すなわち、上述した乱数RはS,D(1),D(2),D(3)と同じビット長のデータとしたが、乱数Rを元データSのビット長より短いものとし、分割データD(1),D(2),D(3)の生成にこの短いビット長の乱数Rを繰り返し用いるものである。
【0096】
なお、分割データ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)とする。
【0097】
先の説明では、分割部分データ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が解読されてしまうことも考えられるため、適切な長さを選択することが望ましい。
【0098】
この実施形態では例えば乱数Rを生成するために疑似乱数生成アルゴリズムを使用する。乱数には自然界の物理現象などを使って乱数を発生させる真性乱数と、コンピュータのアルゴリズムなどで乱数を発生させる疑似乱数がある、真性乱数は、サイコロを何回も振ったり、雑音などの物理現象を利用したりして生成することができるが、手間や装置がたいへんであるため、その代わりに、適当な長さの種(乱数生成の種となる情報(seeds))から決定的なアルゴリズムに基づいて生成される疑似乱数が用いられる。例えば短い乱数を種とすれば長い乱数を得ることができる。種の長さは、例えば128ビット、160ビットまたはそれ以上のものがある。決定的なアルゴリズムに基づいて生成されるといっても、統計的一様性、無相関性など乱数として必要な性質を一定のレベルで満たしている。具体例としては、ANSI X9,42、FIPS 186−2など標準化されたものがある
(http://www.ipa.go.jp/security/enc/CRYPTREC/fy15/cryptrec20030425_spec01.html)。
【0099】
これらを用いれば、乱数生成の種を入力として長い疑似乱数の列を生成することができる。例えば、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を復元することができる。
【0100】
上述した各実施形態は、元データを3つに分割し、そのうち2つから元データが復元可能となるものであったが、分割数nを3より大きくとって、n個より少ない個数の分割データから元データを復元することができることは勿論のことである。
【0101】
その1つの応用例として、元データを4つの分割データに分割する分割数n=4の場合の分割処理について図5に示すフローチャートおよび図6に示す定義式の一般形などを参照して説明する。
【0102】
まず、利用者は端末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)。
【0103】
次に、元データSの8×3×m+1ビット目から8×3ビット分のデータが存在するか否かが判定される(ステップS311)。なお、本例では、元データSが8×3=24ビット長のデータの場合について説明している。
【0104】
ステップ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に進む。
【0105】
ステップ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)が生成される。
【0106】
次に、変数jを1から3まで変えて、乱数部分データR(3×m+j)に乱数発生手段15から発生する8ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした3個の乱数部分データR(1),R(2),R(3)が生成される(ステップS315)。
【0107】
次に、ステップS317において、変数iを1から4(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを1から3(=分割数n-1)まで変えながら、ステップS317に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,3×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0108】
分割データ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の場合には、具体的には図6に示す表に記載されているものとなる。図6に示す表から、分割部分データ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)である。また、図6に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【0109】
このように変数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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【0110】
ここで、上述した図5のフローチャートのステップS317における定義式による分割データの生成処理、具体的には分割数n=4の場合の分割データの生成処理について詳しく説明する。
【0111】
まず、ステップS317に示す定義式から各分割データD(i)=D(1)〜D(4)の各々を構成する各分割部分データD(i,3×m+j)は、次のようになる。
【0112】
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列の値としたとき下記のように定義される。
【0113】
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のときは
【数11】
【0114】
j=2のときは
【数12】
【0115】
j=3のときは
【数13】
【0116】
これを用いると、各分割部分データは次のような定義式により生成される。
【0117】
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)
ここで、上述したように図2のステップS217や図5のステップS317で示した定義式に基づいて元データを分割する分割規則について一般的な表現で記載する。
【0118】
まず、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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)で表わす。
【0119】
それから、上記変数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)を
【数14】
【0120】
と設定し、またi=nのとき、各分割部分データD(i,j)を
D(i,j)=R(j)
と設定する。上記処理を元データSの先頭から末尾まで繰り返し行うことにより元データSから分割数nの分割データを生成することができる。
【0121】
次に、上述したように元データSを4分割して生成された分割データD(1),D(2),D(3),D(4)から元データSを復元する処理について図6を参照して説明する。なお、図6に示す4分割の場合には、変数jを3×m+1(m≧0である任意の整数)として、同図に示す一般的な定義式から次に示すように元データSを生成することができる。
【0122】
まず、分割データD(1),D(2)から元データSを求める場合について説明する。
【0123】
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)を求めることもできる。
【0124】
同様に、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)を求めることができる。
【0125】
更に、上述したと同様に、D(2)とD(3)からSを求めることができる。
【0126】
具体的には、まず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)を求めることができる。
【0127】
また更に、D(1)とD(4)またはD(2)とD(4)またはD(3)とD(4)からSを求めることができる。
【0128】
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)を求めることができる。
【0129】
上述したように、演算回数の差が1である任意の2つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の1つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、4つの分割データの中から任意に3つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、4つのうち任意の3つの分割データから元データを復元可能である。
【0130】
図7は、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つから復元可能であるといえる。
【0131】
また、分割数nを5より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【0132】
次に、図8に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
【0133】
まず、利用者は端末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)。
【0134】
次に、元データSのb×(n-1)×m+1ビット目からb×(n-1)ビット分のデータが存在するか否かが判定される(ステップS411)。この判定の結果、データが存在しない場合は、ステップS421に進むことになるが、今の場合は、ステップS409で変数mは0に設定された場合であるので、データが存在するため、ステップS413に進む。
【0135】
ステップ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)が生成される。
【0136】
次に、変数jを1からn-1まで変えて、乱数部分データR((n-1)×m+j)に乱数発生手段15から発生する処理単位ビット長bの乱数を設定し、これにより乱数Rを処理単位ビット長bで区分けしたn-1個の乱数部分データR(1),R(2),…R(n-1)が生成される(ステップS415)。
【0137】
次に、ステップS417において、変数iを1からnまで変えるとともに、更に各変数iにおいて変数jを1からn-1まで変えながら、ステップS417に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,(n-1)×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【0138】
分割データ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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【0139】
ところで、上述した実施形態においては、いずれかの分割データのみから、それを構成する部分データ間の排他的論理和の演算を行うことによって乱数成分が失われる場合がある。即ち、例えば3分割の場合、各分割部分データは次のように定義される。
【0140】
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の任意の整数である。
【0141】
D(1,1)、D(1,2)は、上記の定義より、元データと乱数の演算により生成されたものであり、D(1,1)、D(1,2)それぞれを見ても元データの内容は分からないが、D(1,1)*D(1,2)
の演算を行うことによりS(1)*S(2)が算出される。これは元データそのものではないが、乱数成分を含んでいない。
【0142】
このように乱数成分が失われると、個々の元部分データについて、例えばS(2)の一部が既知である場合にはS(1)の一部が復元可能となるので、安全ではないと考えられる。例えば、元データが標準化されたデータフォーマットに従ったデータであって、S(2)がそのデータフォーマット中のヘッダ情報やパディング(例えば、データ領域の一部を0で埋めたもの)などを含む部分であった場合には、これらのデータフォーマット固有のキーワードや固定文字列などを含むため、その内容は予測され得る。また、S(2)のうち既知の部分とS(1)*S(2)の値から、S(1)の一部が復元可能である。
【0143】
4分割の場合は、図6より、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の任意の整数である。
【0144】
5分割の場合は、図7より、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の任意の整数である。
【0145】
分割数が5より大きい場合も同様に演算により、乱数成分が失われる。なお、分割数が2の場合にはこのような問題は生じない。
【0146】
本実施の形態では、この問題を解決するために、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われることがないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替える。
【0147】
まず、3分割の場合の一例について説明する。図9のローテーション前の表は図4と同一のものである。j=2の列について、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。同図では、これをRotate(1,D(1,2),D(2,2))と示す。これを、j+1を用いた一般式により示すと、D(1,j+1)の値をD(2,j+1)へ格納し、元のD(2,j+1)の値をD(1,j+1)へ格納することにより、1回のローテーションを行うということになる。同図では、これをRotate(1,D(1,j+1),D(2,j+1))と示す。このようにローテーションを行うと、各分割部分データは、図9のローテーション後の表に示すようになる。
【0148】
この場合、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分が失われない。これは、図9より
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)
となるからである。
【0149】
また、この場合、3つの分割データのうち2つから、元データを復元することができるという特性は失われていない。これは、D(1)、D(2)を取得してSを復元する場合には、図9におけるD(1)、D(2)は、図4におけるD(1)、D(2)を構成する分割部分データをローテーションさせたものにすぎないので、明らかにこれらから元データを復元することができ、また、D(1)とD(3)またはD(2)とD(3)を取得してSを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができるからである。
【0150】
次に、4分割の場合における分割部分データのローテーションの一例について説明する。図10のローテーション前の表は図6の上図と同一のものである。j=1の列については、ローテーションは行わない。j=2の列については、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(3,2)へ格納し、元のD(3,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。図10では、これをRotate(1,D(1,2),D(2,2),D(3,2))と示す。また、j=3の列については、D(1,3)の値をD(2,3)へ格納し、元のD(2,3)の値をD(3,3)へ格納し、元のD(3,3)の値をD(1,3)へ格納するローテーションをした後、もう一度同じローテーションを行うことにより、2回のローテーションを行う。このようにローテーションを行うと、各分割部分データは、図10のローテーション後の表に示すように格納される。
【0151】
図11は、これらをj+1、j+2を用いた一般式により示す。図11のローテーション前の表は図6の下図と同一のものである。j+1の列では1回のローテーションにより、D(1,j+1)の値がD(2,j+1)へ格納され、元のD(2,j+1)の値がD(3,j+1)へ格納され、元のD(3,j+1)の値がD(1,j+1)へ格納される。図11では、これをRotate(1,D(1,j+1),D(2,j+1),D(3,j+1))と示す。またj+2の列では2回のローテーションにより、D(1,j+2)の値がD(3,j+2)へ格納され、元のD(3,j+2)の値がD(2,j+2)へ格納され、元のD(2,j+2)の値がD(1,j+2)へ格納される。図11では、これをRotate(2,D(1,j+2),D(2,j+2),D(3,j+2))と示す。このようにローテーションを行うと、各分割部分データは、図11のローテーション後の表に示すように格納される。この場合も、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分は失われない。
【0152】
ところで、分割数が4の場合には、全体の情報量は元の情報の4倍となる。一般に、分割数がnの場合には、元の情報のn倍の情報量となってしまい、保管先における格納領域を圧迫する原因となる。そこで、本実施の形態では、ローテーションの処理を行う前に、全てのD(1,j)の値を削除する。すなわち、図10におけるローテーション前のD(1,1)、D(1,2)、D(1,3)の値にNULLを格納することにより、ローテーション後のD(1,1)、D(2,2)、D(3,3)の値を削除する。また、図11におけるローテーション前のD(1,j)、D(1,j+1)、D(1,j+2)の値にNULLを格納することにより、ローテーション後のD(1,j)、D(2,j+1)、D(3,j+2)の値を削除する。このように、ローテーション前の各分割部分データD(1,j)、すなわち分割データD(1)を削除することで、全体の記憶容量を(n−1)倍に抑える。
【0153】
続いて、この場合の復元処理について説明する。分割数が4の場合には、4つの分割データのうちの任意の3つを用いることで、元データを復元することが可能である。ここでは、一例として、ローテーション後のD(1,1)、D(2,2)、D(3,3)がそれぞれ削除された分割データD(1)、D(2)、D(3)を用いて元データを復元する処理を示す。
【0154】
まず、次のようにして乱数R(1)、R(2)、R(3)を求める。
【0155】
D(1,3)*D(2,3)=(S(3)*R(1)*R(3))*(S(3)*R(3))=R(1)
D(2,1)*D(3,1)=(S(1)*R(1)*R(2))*(S(1)*R(1))=R(2)
D(3,2)*D(1,2)=(S(2)*R(2)*R(3))*(S(2)*R(2))=R(3)
そして、次のようにして元データS(1)、S(2)、S(3)を求める。
【0156】
D(3,1)*R(1)=(S(1)*R(1))*R(1)=S(1)
D(1,2)*R(2)=(S(2)*R(2))*R(2)=S(2)
D(2,3)*R(3)=(S(3)*R(3))*R(3)=S(3)
以上により、元データS(1)、S(2)、S(3)が復元される。
【0157】
次に、別の例として、ローテーション後のD(2,2)、D(3,3)がそれぞれ削除された分割データD(2)、D(3)と、D(4)を用いて元データを復元する処理を示す。ここでは、次のようにして元データS(1)、S(2)、S(3)を求める。
【0158】
D(3,1)*D(4,1)=(S(1)*R(1))*R(1)=S(1)
D(3,2)*D(4,2)*D(4,3)=(S(2)*R(2)*R(3))*R(2)*R(3)=S(2)
D(2,3)*D(4,3)=(S(3)*R(3))*R(3)=S(3)
以上により、元データS(1)、S(2)、S(3)が復元される。この他、D(1)、D(2)、D(4)の組み合わせや、D(1)、D(3)、D(4)の組み合わせからも、同様にして元データS(j)を導くことができる。
【0159】
次に、5分割の場合における分割部分データのローテーションの一例について説明する。図12のローテーション前の表は図7の上図と同一のものである。ここでも、j=1の列では、ローテーションを行わない。j=2の列では、D(1,2)の値をD(2,2)へ格納し、元のD(2,2)の値をD(3,2)へ格納し、元のD(3,2)の値をD(4,2)へ格納し、元のD(4,2)の値をD(1,2)へ格納することにより、1回のローテーションを行う。図12では、これをRotate(1,D(1,2),D(2,2),D(3,2),D(4,2))と示す。また、j=3の列では、D(1,3)の値をD(2,3)へ格納し、元のD(2,3)の値をD(3,3)へ格納し、元のD(3,3)の値をD(4,3)へ格納し、元のD(4,3)の値をD(1,3)へ格納するローテーションをした後、もう一度同じローテーションをすることにより、2回のローテーションを行う。図12では、これをRotate(2,D(1,3),D(2,3),D(3,3),D(4,3))と示す。j=4の列では、D(1,4)の値をD(2,4)へ格納し、元のD(2,4)の値をD(3,4)へ格納し、元のD(3,4)の値をD(4,4)へ格納し、元のD(4,4)の値をD(1,4)へ格納するローテーションをした後、2度同じローテーションをすることにより、3回のローテーションを行う。図12では、これをRotate(3,D(1,4),D(2,4),D(3,4),D(4,4))と示す。このようにローテーションを行うと、各分割部分データは、図12のローテーション後の表に示すように格納される。
【0160】
図13は、これらをj+1、j+2、j+3を用いた一般式により示す。図13のローテーション前の表は図7の下図と同一のものである。j+1の列では、1回のローテーションにより、D(1,j+1)の値がD(2,j+1)へ格納され、元のD(2,j+1)の値がD(3,j+1)へ格納され、元のD(3,j+1)の値がD(4,j+1)へ格納され、元のD(4,j+1)の値がD(1,j+4)へ格納される。図13では、これをRotate(1,D(1,j+1),D(2,j+1),D(3,j+1),D(4,j+1))と示す。j+2の列では、2回のローテーションにより、D(1,j+2)の値がD(3,j+2)へ格納され、元のD(3,j+2)の値がD(1,j+2)へ格納され、元のD(4,j+2)の値がD(2,j+2)へ格納される。図13では、これをRotate(2,D(1,j+2),D(2,j+2),D(3,j+2),D(4,j+2))と示す。j+3の列では、3回のローテーションにより、D(1,j+1)の値がD(4,j+3)へ格納され、元のD(4,j+3)の値がD(3,j+3)へ格納され、元のD(3,j+3)の値がD(2,j+3)へ格納され、元のD(2,j+3)の値がD(1,j+3)へ格納される。図13では、これをRotate(3,D(1,j+3),D(2,j+3),D(3,j+3),D(4,j+3))と示す。このようにローテーションを行うと、各分割部分データは、図13のローテーション後の表に示すように格納される。この場合も、個々の分割データのみでは、それを構成する分割部分データ間で排他的論理和の演算を行っても乱数成分は失われない。
【0161】
また、5分割の場合も、4分割と同様に、データ容量を抑制するため、ローテーションの処理を行う前に、全てのD(1,j)の値を削除する。すなわち、図12におけるローテーション前のD(1,1)、D(1,2)、D(1,3)、D(1,4)の値にNULLを格納することにより、ローテーション後のD(1,1)、D(2,2)、D(3,3)、D(4,4)の値を削除する。また、図13におけるローテーション前のD(1,j)、D(1,j+1)、D(1,j+2)、D(1,j+3)の値にNULLを格納することにより、ローテーション後のD(1,j)、D(2,j+1)、D(3,j+2)、D(4,j+3)の値を削除する。このように、分割部分データの一部を削除することで、全体の容量を抑える。
【0162】
元データの復元は、4分割の場合と同様に行うことができ、5個の分割データのうちの3個の分割データから、元データを復元することができるという特性は失われていない。
【0163】
また、分割数nを5より大きくとった場合も、同様にして全てのD(1,j)の値を削除するとともに分割部分データをローテーションさせて分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【0164】
なお、上記実施形態のデータ分割方法の処理手順をプログラムとして例えばCDやFDなどの記録媒体に記録して、この記録媒体をコンピュータシステムに組み込んだり、または記録媒体に記録されたプログラムを通信回線を介してコンピュータシステムにダウンロードしたり、または記録媒体からインストールし、該プログラムでコンピュータシステムを作動させることにより、データ分割方法を実施するデータ分割装置として機能させることができることは勿論であり、このような記録媒体を用いることにより、その流通性を高めることができるものである。
【0165】
上述してきたように、本実施の形態によれば、所定の定義式が元部分データと乱数部分データの排他的論理和からなるので、従来のように多項式や剰余演算を行う高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ高速に生成することができる。
【0166】
また、生成した複数の分割データのうち分割数よりも少ない数の分割データに対して定義式を適用することにより元データを復元するので、分割数よりも少ない任意の数xの分割データで元データを復元でき、分割数からxを減算した数までの分割データを紛失したり破壊したとしても、元データを復元することができる。
【0167】
さらに、元データをネットワークを介して端末から受信し、この元データに対して元部分データ、乱数部分データおよび分割部分データの生成処理を施して生成された複数の分割部分データをネットワークを介して保管サーバに送信して保管するので、多数のユーザが端末からネットワークを介してアクセスして分割処理を依頼することができ、共通化および経済化を図ることができる。
【0168】
また、各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データとローテーションして入れ替えることで、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われることを防止できる。なお、このローテーションの手法は、分割数が4以上の場合に特に有効であるが、本実施の形態においては、排他的論理和を用いたデータ分割手法の理解を容易にするために、分割数を3とした場合についても説明した。
【0169】
さらに、分割部分データD(1,j)を削除することで、分割データD(1)を記憶することが不要となるので、従来は分割数がnの場合に元データのn倍の情報量を記憶させる記憶容量が必要であったところ、これをn−1倍に抑えることができる。
【0170】
なお、本実施形態においては、各分割部分データをローテーションする前に分割部分データD(1,j)を削除することとしたが、ローテーションの後でローテーション前の分割部分データD(1,j)に相当するデータを削除することとしてもよい。
【0171】
また、本実施の形態においては、各分割部分データをローテーションさせることとしたが、これに限られるものではなく、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われるということが防止できればよく、この効果が得られるのであれば、各分割部分データをどのように入れ替えても構わない。
【0172】
さらに、上述した実施形態は、分割データは、乱数のみからなる1つの分割データと、1つの元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含む場合であるが、上述した実施形態を変形して分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むものとしても良い。また、上述した実施形態を変形して、分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むものとしても良い。
【図面の簡単な説明】
【0173】
【図1】本発明の一実施形態に係るデータ分割方法を実施するデータ分割装置を含むシステム構成図である。
【図2】図1に示す実施形態のデータ分割装置の分割数n=3の場合の分割処理を示すフローチャートである。
【図3】16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図4】分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図5】図1に示す実施形態のデータ分割装置の分割数n=4の場合の分割処理を示すフローチャートである。
【図6】分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図7】分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図8】図1に示す実施形態のデータ分割装置の分割数がnで処理単位ビット長がbである場合の一般的な分割処理を示すフローチャートである。
【図9】分割数n=3の場合の分割部分データのローテーションの例を示す表である。
【図10】分割数n=4の場合の分割部分データのローテーションの例を示す表である。
【図11】分割数n=4の場合の分割部分データのローテーションの別の例を示す表である。
【図12】分割数n=5の場合の分割部分データのローテーションの例を示す表である。
【図13】分割数n=5の場合の分割部分データのローテーションの別の例を示す表である。
【符号の説明】
【0174】
1 分割装置
3 ネットワーク
5 端末
7a,7b,7c 保管サーバ
11 分割データ生成手段
13 元データ復元手段
15 乱数発生手段
17 データ送受信手段
【特許請求の範囲】
【請求項1】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるように、かつ、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないようにする分割データ生成手段と、
を有することを特徴とするデータ分割装置。
【請求項2】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする分割データ生成手段と、を有し、
前記分割部分データ生成手段は、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替えることを特徴とするデータ分割装置。
【請求項3】
前記分割部分データ生成手段は、分割部分データの生成に際し、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、変数として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行列でi行j列の値u(i,j)が
i+j≦n+1 のとき u(i,j)=1
i+j>n+1 のとき u(i,j)=0
である行列とし、P[n,n]をn×n行列でi行j列の値p(i,j)が
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]^(j-1)のi行k列の値と定義し、ただしU[n-1,n-1]×P[n-1,n-1]^(j-1)とは行列U[n-1,n-1]とj-1個のP[n-1,n-1]の積を表し、Q(j,i,k)をc(j,i,k)=1のとき、Q(j,i,k)=R(k)、c(j,i,k)=0のとき、Q(j,i,k)=0 と定義したとき、各分割部分データD(i,j)を、変数iを1からnまで変えながら各変数iにおいて変数jを1からn-1まで変え、排他的論理和の演算子*を用いて、i<nのとき、
【数1】
ただし、
【数2】
とし、i=nのとき、
D(i,j)=R(j)
として生成するものであって、当該各分割部分データのうちD(1,j)を削除することを特徴とする請求項2記載のデータ分割装置。
【請求項4】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割方法であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成し、
いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替え、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする
ことを特徴とするデータ分割方法。
【請求項5】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割用のコンピュータプログラムであって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する処理と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する処理と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する処理と、
いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替える処理と、
所望の分割数の分割データを複数の分割部分データから生成する処理と、
をコンピュータに実行させることにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とするコンピュータプログラム。
【請求項1】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるように、かつ、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないようにする分割データ生成手段と、
を有することを特徴とするデータ分割装置。
【請求項2】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割装置であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみからでは元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする分割データ生成手段と、を有し、
前記分割部分データ生成手段は、いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替えることを特徴とするデータ分割装置。
【請求項3】
前記分割部分データ生成手段は、分割部分データの生成に際し、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、変数として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行列でi行j列の値u(i,j)が
i+j≦n+1 のとき u(i,j)=1
i+j>n+1 のとき u(i,j)=0
である行列とし、P[n,n]をn×n行列でi行j列の値p(i,j)が
j=i+1 のとき p(i,j)=1
i=1,j=n のとき p(i,j)=1
上記以外のとき p(i,j)=0
である行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]^(j-1)のi行k列の値と定義し、ただしU[n-1,n-1]×P[n-1,n-1]^(j-1)とは行列U[n-1,n-1]とj-1個のP[n-1,n-1]の積を表し、Q(j,i,k)をc(j,i,k)=1のとき、Q(j,i,k)=R(k)、c(j,i,k)=0のとき、Q(j,i,k)=0 と定義したとき、各分割部分データD(i,j)を、変数iを1からnまで変えながら各変数iにおいて変数jを1からn-1まで変え、排他的論理和の演算子*を用いて、i<nのとき、
【数1】
ただし、
【数2】
とし、i=nのとき、
D(i,j)=R(j)
として生成するものであって、当該各分割部分データのうちD(1,j)を削除することを特徴とする請求項2記載のデータ分割装置。
【請求項4】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割方法であって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成し、
いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替え、
所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする
ことを特徴とするデータ分割方法。
【請求項5】
元データを所望の処理単位ビット長に基づいて4以上の分割数の分割データに分割するデータ分割用のコンピュータプログラムであって、
元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する処理と、
この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する処理と、
各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する処理と、
いずれかの分割データのみを用いてそれを構成する分割部分データ間の排他的論理和を行うことによって乱数成分が失われないように、当該各分割部分データをそれぞれに対応する他の分割データにおける各分割部分データと入れ替える処理と、
所望の分割数の分割データを複数の分割部分データから生成する処理と、
をコンピュータに実行させることにより、各分割データのみから元データを復元不能であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とするコンピュータプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2007−41199(P2007−41199A)
【公開日】平成19年2月15日(2007.2.15)
【国際特許分類】
【出願番号】特願2005−223999(P2005−223999)
【出願日】平成17年8月2日(2005.8.2)
【出願人】(399035766)エヌ・ティ・ティ・コミュニケーションズ株式会社 (321)
【Fターム(参考)】
【公開日】平成19年2月15日(2007.2.15)
【国際特許分類】
【出願日】平成17年8月2日(2005.8.2)
【出願人】(399035766)エヌ・ティ・ティ・コミュニケーションズ株式会社 (321)
【Fターム(参考)】
[ Back to top ]