JP5194094B2 - データ分割方法、データ分割装置およびコンピュータプログラム - Google Patents

データ分割方法、データ分割装置およびコンピュータプログラム Download PDF

Info

Publication number
JP5194094B2
JP5194094B2 JP2010252306A JP2010252306A JP5194094B2 JP 5194094 B2 JP5194094 B2 JP 5194094B2 JP 2010252306 A JP2010252306 A JP 2010252306A JP 2010252306 A JP2010252306 A JP 2010252306A JP 5194094 B2 JP5194094 B2 JP 5194094B2
Authority
JP
Japan
Prior art keywords
data
divided
original
random number
partial
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP2010252306A
Other languages
English (en)
Other versions
JP2011041326A (ja
JP2011041326A5 (ja
Inventor
利彦 荻原
進 野村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NTT Communications Corp
Original Assignee
NTT Communications Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NTT Communications Corp filed Critical NTT Communications Corp
Priority to JP2010252306A priority Critical patent/JP5194094B2/ja
Publication of JP2011041326A publication Critical patent/JP2011041326A/ja
Publication of JP2011041326A5 publication Critical patent/JP2011041326A5/ja
Application granted granted Critical
Publication of JP5194094B2 publication Critical patent/JP5194094B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0816Key establishment, i.e. cryptographic processes or cryptographic protocols whereby a shared secret becomes available to two or more parties, for subsequent use
    • H04L9/085Secret sharing or secret splitting, e.g. threshold schemes

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Storage Device Security (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Complex Calculations (AREA)

Description

本発明は、データの機密性および安全性を確保するためにはデータを分割して保管することが有効であるが、このような場合などに有効なデータ分割方法および装置に関し、更に詳しくは、元データを所望の処理単位ビットに基づいて所望の分割数の分割データに分割するデータ分割方法および装置に関する。
重要な秘密データ(以下、元データという)を保管する場合、紛失、破壊、盗難やプライバシー侵害の脅威がある。このような脅威は秘密に保管すべきデータを単に暗号化しただけでは解決できず、紛失、破壊に備えてコピーを複数作ることが有効であるが、コピーを複数作ると盗難のリスクが増加してしまう。
このような問題を解決する手段として、従来、しきい値秘密分散法がある(非特許文献1参照)。この従来の方法は、元データSをn個のデータに分割し、そのうち任意のx個の分割データを集めれば元データSが復元できるが、任意のx-1個の分割データでは元データSは復元できないというものである。従って、x-1個まで分割データが盗まれても元データSが漏れず、またn-x個まで分割データを紛失したり破壊されたりしても、元データSを復元できる。
この方法の代表的な実現例としてn-1次多項式と剰余演算により構成される方法がある(非特許文献2参照)。この従来の方法は、公開鍵暗号方式の秘密鍵の分割管理などで利用されており、データ量があまり多くないため、現状のコンピュータの演算処理能力、記憶装置・記憶媒体などのコストに対しては特に問題ない。
A. Shamir, "How to Share a Secret", Comm.Assoc.Comput.Mach., Vol. 22, no. 11, pp. 612-613(Nov.1979) Bruce Schneier, "Applied Cryptography", John Wiley&Sons, Inc., pp. 383-384(1994)
上述した従来の方法を安全に保管したいデータ量が例えばメガバイト、ギガバイトまたはそれ以上の規模となった場合に利用すると、多項式演算・剰余演算などを含む多倍長整数の演算処理を大量のデータに対して行う演算処理能力が必要となるとともに、またこの従来の方法では、例えば分割数n=5の場合には1バイトのデータから1バイトの分割データが5つ生成されるため、元データに対して単純に分割数に比例した倍数の記憶容量が必要となるなど、コンピュータを用いて具体的に実現する上で現実的ではないという問題がある。
また、上述した従来の方法では、データの機密性を確保するため分割演算のための処理単位を設定しているが、この分割演算の処理単位にある程度のデータ長が必要となり、任意の処理単位で分割演算を行うことができないという問題もある。
本発明は、上記に鑑みてなされたもので、その目的とするところは、比較的簡単な処理により元データを効率的に分割し得るデータ分割方法、装置およびコンピュータプログラムを提供することにある。
上記目的を達成するため、本発明は、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成し、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データが不明であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることを特徴とするデータ分割方法を提供する。
また、本発明では、元部分データと乱数部分データは、分割数より1つ少ない複数個ずつ生成されることを特徴とする。
また、本発明では、分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むことを特徴とする。
また、本発明では、乱数のみからなる1つの分割データは、任意に定めた長さの乱数を繰り返すことによって構成されることを特徴とする。
また、本発明では、乱数のみからなる1つの分割データは、疑似乱数生成アルゴリズムに基づいて所定の長さの情報から生成された疑似乱数により構成されることを特徴とする。
また、本発明では、分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むことを特徴とする。
また、本発明は、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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=n,j=1 のとき 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のとき、
Figure 0005194094
とし、i=nのとき、
D(i,j)=R(j)
として生成する、ただし
Figure 0005194094
*は排他的論理和演算を表す、ことを特徴とする。
また、本発明では、各分割データは、各分割データを構成する分割部分データ間で演算を行うことによって乱数成分が失われることがないように生成されることを特徴とする。
また、本発明では、各分割データは、まず元部分データと乱数部分データの排他的論理和演算による所定の定義式を用いて各分割データを構成する複数の分割部分データを生成し、その後各分割データを構成するある1つの分割部分データと別の1つの分割部分データを入れ換えることによって生成されることを特徴とする。
また、本発明では、各分割データは、まず元部分データと乱数部分データの排他的論理和演算による所定の定義式を用いて各分割データD(i)を構成する複数の分割部分データD(i,j)を生成し、その後各iの値がn-1>i>0であるD(i,j)からj番目の乱数部分データR(j)を削除することによって生成される、ただしnは所望の分割数、j=(n-1)×m+1, m≧0は任意の整数である、ことを特徴とする。
さらに、本発明は、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割装置であって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成する元部分データ生成手段と、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成する乱数生成手段と、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成する分割部分データ生成手段と、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データが不明であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにする分割データ生成手段とを有することを特徴とするデータ分割装置を提供する。
さらに、本発明は、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割用のコンピュータプログラムであって、元データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、元データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処置単位ビット長毎に生成し、所望の分割数の分割データを複数の分割部分データから生成することにより、各分割データのみから元データが不明であるが、生成した分割データのうちの所定の個数の分割データから元データが復元可能であるようにすることをコンピュータに実行させることを特徴としたコンピュータプログラムを提供する。
以上説明したように、本発明によれば、元データを処理単位ビット長毎に区分けして複数の元部分データを生成し、複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和からなる所定の定義式に従って生成するので、従来のように多項式や剰余演算を用いることなく、コンピュータ処理に適したビット演算である排他的論理和演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ迅速に生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。
本発明の一実施形態に係るデータ分割方法を実施するデータ分割装置を含むシステム構成図である。 図1に示す実施形態のデータ分割装置の分割数n=3の場合の分割処理を示すフローチャートである。 16ビットの元データSを8ビットの処理単位ビット長に基づいて分割数n=3で3分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。 分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。 図1に示す実施形態のデータ分割装置の分割数n=4の場合の分割処理を示すフローチャートである。 分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。 分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。 図1に示す実施形態のデータ分割装置の分割数がnで処理単位ビット長がbである場合の一般的な分割処理を示すフローチャートである。 図1に示す実施形態のデータ分割装置の分割数が2である場合の分割処理を示すフローチャートである。 分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。 分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の更に別の例を示す表である。 分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。 分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。
以下、図面を用いて本発明の実施の形態を説明する。図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に保管するようにしている。
また、分割装置1は、ネットワーク3を介してアクセスしてくる端末5からの元データ復元要求に応じて複数の分割データD(1),D(2),D(3)をネットワーク3を介して各保管サーバ7から取得し、この取得した複数の分割データD(1),D(2),D(3)から元データSを復元し、ネットワーク3を介して端末5に送信するようになっている。
分割装置1は、詳しくは、元データSから複数の分割データDを生成する分割データ生成手段11、複数の分割データDから元データSを復元する元データ復元手段13、元データSから複数の分割データDを生成するために使用される乱数Rを発生する乱数発生手段15、および分割データ生成手段11で生成した複数の分割データDをネットワーク3を介して複数の保管サーバ7a,7b,7cに送信したり、また複数の保管サーバ7a,7b,7cからの複数の分割データDをネットワーク3を介して受信するためのデータ送受信手段17から構成されている。
上述したように構成される本実施形態における元データの分割および復元では、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より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」からなるビット列を表す。
次に、フローチャートなどの図面も参照して、上記実施形態の作用について説明するが、この説明の前に図2、図5、図8、図9のフローチャートに示す記号の定義について説明する。
(1)
Figure 0005194094
は、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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
Figure 0005194094
(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を他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
Figure 0005194094
(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
となる性質がある。
Figure 0005194094
次に、図2に示すフローチャートおよび図3、図4に示す具体的データなどを参照して、上記実施形態の作用として、まず元データSの分割処理について説明する。
本実施形態の分割装置1の利用者は、端末5からネットワーク3を介して分割装置1にアクセスし、分割装置1に元データSを送信し、分割装置1ではデータ送受信手段17が端末5からの元データSを受信し、分割装置1に供給する(図2のステップ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の場合には、具体的には図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の場合の任意の整数についての一般的な定義式も記載されている。
このように整数倍を意味する変数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に保管し、分割処理を終了する。
ここで、上述した図2のフローチャートのステップ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のときは
Figure 0005194094
j=2のときは
Figure 0005194094
これを用いると、各分割部分データ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)を生成するための定義式は、図3にも図示されている。
図3は、上述したように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である。なお、定義式の一般形は、図4にまとめて示されている。
また、第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の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
次に、図3の右側に示す表を参照して、分割データから元データを復元する処理について説明する。
まず、利用者は端末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の場合の分割処理について図5に示すフローチャートおよび図6に示す定義式の一般形などを参照して説明する。
まず、利用者は端末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の場合には、具体的には図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の場合の任意の整数についての一般的な定義式も記載されている。
このように変数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個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
ここで、上述した図5のフローチャートのステップ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のときは
Figure 0005194094
j=2のときは
Figure 0005194094
j=3のときは
Figure 0005194094
これを用いると、各分割部分データは次のような定義式により生成される。
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で示した定義式に基づいて元データを分割する分割規則について一般的な表現で記載する。
まず、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれ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)を
Figure 0005194094
と設定し、またi=nのとき、各分割部分データD(i,j)を
D(i,j)=R(j)
と設定する。上記処理を元データSの先頭から末尾まで繰り返し行うことにより元データSから分割数nの分割データを生成することができる。
次に、上述したように元データSを4分割して生成された分割データD(1),D(2),D(3),D(4)から元データSを復元する処理について図6を参照して説明する。なお、図6に示す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つの分割データから元データを復元可能である。
図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つから復元可能であるといえる。
また、分割数nを5より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に1を加えたものである。つまり、前記最大個数に1を加えれば演算回数の差が1である2つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
次に、図8に示すフローチャートを参照して、分割数が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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
次に、図9に示すフローチャートを参照して、分割数nが2の場合の分割処理について説明する。すなわち、上述した各実施形態は図8のフローチャートのステップS403に示したように分割数nが3以上(n≧3)の場合についてのものであるので、図9を用いて分割数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に保管し、分割処理を終了する。図1では保管サーバは3個であるが、このうち2個の保管サーバに各分割データを保管すればよい。
ここにおいて、上述した図9のフローチャートのステップ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分割の場合は、図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の任意の整数である。
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の任意の整数である。
分割数が5より大きい場合も同様に演算により、乱数成分が失われる。なお、分割数が2の場合にはこのような、問題は生じない。
この問題を解決する一つの方法は以下の通りである。これは3分割の場合に適用可能な方法である。図10におけるD(1,j+1)とD(2,j+1)は、図4におけるD(1,j+1)とD(2,j+1)を入れ替えたものである。ここでjはj=2×m+1、mはm≧0の任意の整数である。
この場合、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図10より
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を復元する場合には、図10におけるD(1)、D(2)は、図4におけるD(1)、D(2)を構成する分割部分データを入れ替えたものにすぎないので、明らかにこれらから元データを復元することができ、また、D(1)とD(3)またはD(2)とD(3)を取得してSを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができるからである。
上記の問題を解決する別の方法は以下の通りである。これは分割数が3以上である場合に分割数には関係なく適用可能な方法である。図11、図12、図13は、図4、図6、図7においてD(i,j)を生成する個々の定義式からR(j)を削除したものである。ここでiはn-1>i>0であり、jはj=(n-1)×m+1、mはm≧0の任意の整数、nは分割数である。これは分割数が5より大きい場合でも同様である。
この場合も、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図4、図6、図7においては、個々の分割データの分割部分データ間で演算をすると乱数部分が消去されて、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個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
なお、上記実施形態のデータ分割方法の処理手順をプログラムとして例えばCDやFDなどの記録媒体に記録して、この記録媒体をコンピュータシステムに組み込んだり、または記録媒体に記録されたプログラムを通信回線を介してコンピュータシステムにダウンロードしたり、または記録媒体からインストールし、該プログラムでコンピュータシステムを作動させることにより、データ分割方法を実施するデータ分割装置として機能させることができることは勿論であり、このような記録媒体を用いることにより、その流通性を高めることができるものである。
上述してきたように、本実施例によれば、所定の定義式が元部分データと乱数部分データの排他的論理和からなるので、従来のように多項式や剰余演算を行う高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ迅速に生成することができる。
また、生成した複数の分割データのうち分割数よりも少ない数の分割データに対して定義式を適用することにより元データを復元するので、分割数よりも少ない任意の数xの分割データで元データを復元でき、分割数からxを減算した数までの分割データを紛失したり破壊したとしても、元データを復元することができる。
さらに、元データをネットワークを介して端末から受信し、この元データに対して元部分データ、乱数部分データおよび分割部分データの生成処理を施して生成された複数の分割部分データをネットワークを介して保管サーバに送信して保管するので、多数のユーザが端末からネットワークを介してアクセスして分割処理を依頼することができ、共通化および経済化を図ることができる。
なお、上述した実施形態は、分割データは、乱数のみからなる1つの分割データと、1つの元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含む場合であるが、上述した実施形態を変形して分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むものとしても良い。また、上述した実施形態を変形して、分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むものとしても良い。
1 分割装置
3 ネットワーク
5 端末
7a,7b,7c 保管サーバ
11 分割データ生成手段
13 元データ復元手段
15 乱数発生手段
17 データ送受信手段

Claims (13)

  1. 元データを所望の分割数の分割データに分割するデータ分割方法であって、
    データ分割装置は、
    前記元データを秘密分散法を用いて該元データが復元できる複数の分割データにそれぞれ分割するデータ分割ステップと、
    分割された複数の分割データを、ハードウェア的に独立した複数の記憶部にそれぞれ保管する保管ステップと、を行い、
    前記秘密分散法は、
    前記元データを所定の長さ毎に区切って、複数の元部分データを生成し、
    前記複数の元部分データの各々に対応して、前記元データと同じ長さの乱数または前記元データより短い長さの乱数を前記所定の長さ毎に区切って、複数の乱数部分データを生成し、
    前記元部分データと前記乱数部分データとの排他的論理和演算を行い、前記複数の分割データを生成すること
    を特徴とするデータ分割方法。
  2. 分割データは、乱数のみからなる1つ以上の分割データと、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる1つ以上の分割データを含むことを特徴とする請求項1記載のデータ分割方法。
  3. 乱数のみからなる1つの分割データは、任意に定めた長さの乱数を繰り返すことによって構成されることを特徴とする請求項2記載のデータ分割方法。
  4. 乱数のみからなる1つの分割データは、疑似乱数生成アルゴリズムに基づいて所定の長さの情報から生成された疑似乱数により構成されることを特徴とする請求項2または請求項3記載のデータ分割方法。
  5. 分割データは、1つ以上の元部分データと1つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる2つ以上の分割データを含むことを特徴とする請求項1記載のデータ分割方法。
  6. 各分割データは、各分割データを構成する分割部分データ間で演算を行うことによって乱数成分が失われることがないように生成されることを特徴とする請求項1記載のデータ分割方法。
  7. 各分割データは、まず元部分データと乱数部分データの排他的論理和演算による所定の定義式を用いて各分割データを構成する複数の分割部分データを生成し、その後各分割データを構成するある1つの分割部分データと別の1つの分割部分データを入れ換えることによって生成されることを特徴とする請求項記載のデータ分割方法。
  8. 各分割データは、まず元部分データと乱数部分データの排他的論理和演算による所定の定義式を用いて各分割データD(i)を構成する複数の分割部分データD(i,j)を生成し、その後各iの値がn-1>i>0であるD(i,j)からj番目の乱数部分データR(j)
    を削除することによって生成される、ただしnは所望の分割数、j=(n-1)×m+1, m≧0は任意の整数である、ことを特徴とする請求項記載のデータ分割方法。
  9. 前記保管ステップは、元部分データと乱数部分データの排他的論理和演算回数が所定数の分割部分データを第1の記憶部に、元部分データと乱数部分データの演算回数が前記所定数より1少ない分割部分データを第2の記憶部に保管することを特徴とする請求項5記載のデータ分割方法。
  10. 前記第1の記憶部に保管される分割部分データと、前記第2の記憶部に保管される分割部分データとを用いて、元データまたは乱数データが復元されることを特徴とする請求項記載のデータ分割方法。
  11. データ分割装置が行う、元データを所定の分割数n(n≧3)の分割データに分割するデータ分割方法であって、
    前記データ分割装置は、
    前記元データを(n-1)個の元部分データS(j),j=1〜n-1に区切るステップと、
    (n-1)個の乱数部分データR(k),k=1〜n-1を生成するステップと、
    前記元部分データと前記乱数部分データの排他的論理和を行い、各分割データD(i),i=1〜nを構成する各分割部分データ D(i,j),i=1〜n,j=1〜n-1を生成するステップと、
    前記生成した各分割データを、各記憶部にそれぞれ保管するステップと、を行い、
    前記生成するステップは、
    i=1〜n-1,j=1〜n-1の各i,jについてD(i,j)を、第k列,k=1〜n-iの成分が1で他の成分が0である1行(n-1)列の行列の成分を右方向に(j-1)回巡回させたとき成分が1である列の番号に対応する乱数部分データと、S(j)との排他的論理和によって生成し、j=1〜n-1の各jについてD(n,j)をR(j)によって生成すること
    を特徴とするデータ分割方法。
  12. 元データを所望の分割数の分割データに分割するデータ分割装置であって、
    前記元データを秘密分散法を用いて該元データが復元できる複数の分割データにそれぞれ分割するデータ分割手段と、
    分割された複数の分割データをハードウェア的に独立した複数の記憶手段にそれぞれ保管する保管手段と、を備え、
    前記秘密分散法は、
    前記元データを所定の長さ毎に区切って、複数の元部分データを生成し、
    前記複数の元部分データの各々に対応して、前記元データと同じ長さの乱数または前記元データより短い長さの乱数を前記所定の長さ毎に区切って、複数の乱数部分データを生成し、
    前記元部分データと前記乱数部分データとの排他的論理和演算を行い、前記複数の分割データを生成すること
    を特徴とするデータ分割装置。
  13. 元データを所望の分割数の分割データに分割するデータ分割プログラムであって、
    コンピュータを、
    前記元データを秘密分散法を用いて該元データが復元できる複数の分割データにそれぞれ分割するデータ分割手段、
    分割された複数の分割データをハードウェア的に独立した複数の記憶手段にそれぞれ保管する保管手段、として機能させ、
    前記秘密分散法は、
    前記元データを所定の長さ毎に区切って、複数の元部分データを生成し、
    前記複数の元部分データの各々に対応して、前記元データと同じ長さの乱数または前記元データより短い長さの乱数を前記所定の長さ毎に区切って、複数の乱数部分データを生成し、
    前記元部分データと前記乱数部分データとの排他的論理和演算を行い、前記複数の分割データを生成すること
    を特徴とするデータ分割プログラム。
JP2010252306A 2002-12-19 2010-11-10 データ分割方法、データ分割装置およびコンピュータプログラム Expired - Lifetime JP5194094B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010252306A JP5194094B2 (ja) 2002-12-19 2010-11-10 データ分割方法、データ分割装置およびコンピュータプログラム

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2002367608 2002-12-19
JP2002367608 2002-12-19
JP2010252306A JP5194094B2 (ja) 2002-12-19 2010-11-10 データ分割方法、データ分割装置およびコンピュータプログラム

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2003423530A Division JP4676695B2 (ja) 2002-12-19 2003-12-19 データ分割方法、データ分割装置およびコンピュータプログラム

Publications (3)

Publication Number Publication Date
JP2011041326A JP2011041326A (ja) 2011-02-24
JP2011041326A5 JP2011041326A5 (ja) 2011-04-07
JP5194094B2 true JP5194094B2 (ja) 2013-05-08

Family

ID=32677086

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010252306A Expired - Lifetime JP5194094B2 (ja) 2002-12-19 2010-11-10 データ分割方法、データ分割装置およびコンピュータプログラム

Country Status (7)

Country Link
US (1) US7616766B2 (ja)
EP (1) EP1576763B1 (ja)
JP (1) JP5194094B2 (ja)
CN (1) CN100563152C (ja)
AU (1) AU2003288758A1 (ja)
HK (1) HK1087859A1 (ja)
WO (1) WO2004057461A2 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4676695B2 (ja) * 2002-12-19 2011-04-27 エヌ・ティ・ティ・コミュニケーションズ株式会社 データ分割方法、データ分割装置およびコンピュータプログラム
EP1714423B1 (en) 2004-02-10 2017-03-29 NTT Communications Corp. Secret information management scheme based on secret sharing scheme
JP4602675B2 (ja) * 2004-02-10 2010-12-22 エヌ・ティ・ティ・コミュニケーションズ株式会社 機密情報管理システム、機密情報管理方法、および機密情報管理プログラム、並びに機密情報管理システム用端末プログラム
US20050216754A1 (en) * 2004-03-24 2005-09-29 Natan Ehud Method of encrypting digital items delivery through a communication network
CN102609640B (zh) 2004-10-25 2015-07-15 安全第一公司 安全数据分析方法和系统
JP2008022373A (ja) * 2006-07-13 2008-01-31 Canon Inc 改竄検知情報生成装置、撮像装置、改竄検知情報生成方法、プログラムおよび記憶媒体
JP5049288B2 (ja) * 2006-11-09 2012-10-17 パナソニック株式会社 改竄検出システム、改竄検出方法、改竄検出プログラム、記録媒体、集積回路、認証情報生成装置及び改竄検出装置
JP4917453B2 (ja) * 2007-02-22 2012-04-18 Kddi株式会社 閾値秘密分散装置、閾値秘密分散方法、秘密情報復元方法およびプログラム
JP4302150B2 (ja) * 2007-03-23 2009-07-22 株式会社東芝 データ処理装置及びプログラム
CN104079573A (zh) 2009-05-19 2014-10-01 安全第一公司 用于安全保护云中的数据的系统和方法
CN101882992B (zh) * 2010-06-21 2012-12-12 中国农业大学 门限秘密信息分配、还原方法及装置
CA2808124A1 (en) 2010-08-12 2012-02-16 Don Martin Systems and methods for secure remote storage of data
CN106372499A (zh) 2010-08-18 2017-02-01 安全第公司 用于安全保护虚拟机计算环境的系统和方法
US8538029B2 (en) * 2011-03-24 2013-09-17 Hewlett-Packard Development Company, L.P. Encryption key fragment distribution
US9430655B1 (en) * 2012-12-28 2016-08-30 Emc Corporation Split tokenization
KR101472320B1 (ko) * 2013-05-30 2014-12-12 고려대학교 산학협력단 클라우드 환경에 비밀분산 기법을 이용한 데이터 보호 방법
EP2887575B1 (en) * 2013-12-18 2020-09-02 Laurenz Vorderwülbecke Distributed data file storage method and apparatus
JP6259295B2 (ja) * 2014-01-23 2018-01-10 エヌ・ティ・ティ・コミュニケーションズ株式会社 データ秘匿方法、データ秘匿装置、およびデータ秘匿プログラム
WO2016081942A2 (en) 2014-11-21 2016-05-26 Security First Corp. Gateway for cloud-based secure storage
US9813232B2 (en) * 2015-03-17 2017-11-07 Cypress Semiconductor Corporation Device and method for resisting non-invasive attacks
US10348490B2 (en) * 2015-12-10 2019-07-09 Ns Solutions Corporation Information processing device, authorization system, information processing method, and recording medium
CN105406966B (zh) * 2015-12-30 2018-11-09 中国农业大学 一种门限秘密信息分配、还原、完整性验证方法及装置
FR3050554B1 (fr) * 2016-04-21 2018-05-18 Institut De Recherche Technologique Systemx Procede d'encodage d'un ensemble de bits
JP6322314B2 (ja) * 2017-03-17 2018-05-09 エヌ・ティ・ティ・コミュニケーションズ株式会社 データ秘匿方法、データ秘匿装置、およびデータ秘匿プログラム
CN107612897A (zh) * 2017-09-07 2018-01-19 唐冬香 一种数据传输方法
US11962687B2 (en) 2019-04-05 2024-04-16 Google Llc Methods for protecting privacy

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3029381B2 (ja) * 1994-01-10 2000-04-04 富士通株式会社 データ変換装置
US6088449A (en) 1996-11-05 2000-07-11 Tri-Strata Security, Inc. Tri-signature security architecture systems and methods
US6526145B2 (en) * 1997-01-29 2003-02-25 David M. Marzahn Data encryptor/decryptor using variable in-place I/O
US6047069A (en) * 1997-07-17 2000-04-04 Hewlett-Packard Company Method and apparatus for preserving error correction capabilities during data encryption/decryption
FI107669B (fi) * 1998-02-13 2001-09-14 Nokia Mobile Phones Ltd Menetelmä ja järjestely tiedonsiirron salaamiseksi
JP2000172548A (ja) * 1998-12-11 2000-06-23 Nippon Telegr & Teleph Corp <Ntt> 電子データ管理方法,装置およびそのプログラム記録媒体
JP3560860B2 (ja) * 1999-07-23 2004-09-02 株式会社東芝 秘密分散システム、装置及び記憶媒体
KR100749428B1 (ko) * 1999-12-20 2007-08-14 다이니폰 인사츠 가부시키가이샤 분산형 데이터 아카이브 장치, 시스템 및 기록 매체
JP2001211153A (ja) * 2000-01-25 2001-08-03 Murata Mach Ltd 秘密鍵生成方法
JP2001290707A (ja) * 2000-04-05 2001-10-19 Kazumi Mochizuki データ処理方法、データ処理プログラムを格納したコンピュータ読取可能な記憶媒体、およびデータ処理装置
JP3724399B2 (ja) * 2001-01-23 2005-12-07 株式会社日立製作所 疑似乱数生成装置またはそれを用いた暗号復号処理装置
JP2002352146A (ja) * 2001-05-22 2002-12-06 Nippon Telegr & Teleph Corp <Ntt> コンテンツ部分課金方法及びシステム及びコンテンツ部分課金プログラム及びコンテンツ部分課金プログラムを格納した記憶媒体
US7787619B2 (en) * 2002-01-29 2010-08-31 Avaya Inc. Method and apparatus for secure key management using multi-threshold secret sharing

Also Published As

Publication number Publication date
CN1726669A (zh) 2006-01-25
JP2011041326A (ja) 2011-02-24
CN100563152C (zh) 2009-11-25
US7616766B2 (en) 2009-11-10
HK1087859A1 (en) 2006-10-20
EP1576763B1 (en) 2015-09-30
WO2004057461A3 (en) 2005-02-24
US20060072744A1 (en) 2006-04-06
WO2004057461A2 (en) 2004-07-08
AU2003288758A1 (en) 2004-07-14
EP1576763A2 (en) 2005-09-21
AU2003288758A8 (en) 2004-07-14

Similar Documents

Publication Publication Date Title
JP5194094B2 (ja) データ分割方法、データ分割装置およびコンピュータプログラム
EP3058678B1 (en) System and method for dynamic, non-interactive, and parallelizable searchable symmetric encryption
JP4676695B2 (ja) データ分割方法、データ分割装置およびコンピュータプログラム
CN110337649B (zh) 用于搜索模式未察觉的动态对称可搜索加密的方法和系统
KR100363457B1 (ko) 암호체계용매핑레퍼토리
JP4610176B2 (ja) データ原本性確保方法およびシステム、ならびにデータ原本性確保用プログラム
US8085938B2 (en) Secret information management scheme based on secret sharing scheme
EP2953052B1 (en) Systems and methods for dynamic data storage
JP4539952B2 (ja) 情報分散保管システム、その装置、プログラム及び記録媒体
CN1918844B (zh) 基于保密共享方案的保密信息管理系统和方法
JP2006018850A (ja) データ保管システム
JP2005141436A5 (ja)
JP5749368B2 (ja) データ原本性確保方法およびシステム、ならびにデータ原本性確保用プログラム
CN116488814A (zh) 一种基于fpga的数据加密的安全计算方法
JP4856909B2 (ja) データ分割・復元システム、端末装置、データ分割・復元方法、およびコンピュータプログラム
JP4789536B2 (ja) データ分割装置、データ分割方法およびコンピュータプログラム
JP4619045B2 (ja) データ秘匿装置、データ秘匿方法、及びデータ秘匿プログラム
Vershinin et al. Associative steganography of text messages
JP6259295B2 (ja) データ秘匿方法、データ秘匿装置、およびデータ秘匿プログラム
JP4486851B2 (ja) 機密情報管理システム、機密情報管理方法、および機密情報管理プログラム、並びに機密情報管理システム用端末プログラム
JP4194481B2 (ja) 秘密情報保管処理方法及び秘密情報保管装置、並びに秘密情報復元処理方法及び秘密情報復元装置
JP4664008B2 (ja) アクセス権管理システム、アクセス権管理装置、アクセス権管理方法、端末用プログラム、及びアクセス権管理プログラム
JP6322314B2 (ja) データ秘匿方法、データ秘匿装置、およびデータ秘匿プログラム
Kalaiselvi et al. A Sheltered CARMA Algorithm Using Cosseted Articulate For Implication Data
EP3285429A1 (en) Method for securely transmitting digital data

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110121

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130129

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130204

R150 Certificate of patent or registration of utility model

Ref document number: 5194094

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160208

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term