(57)【特許請求の範囲】
【請求項１】
データをバーナム暗号を用いて秘匿するデータ秘匿装置であって、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成する手段と、
前記データと、前記第１の乱数との排他的論理和により暗号データを生成する手段と、
生成された暗号データを所定の記憶部に記憶する手段と、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成する手段と、
前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化手段と、
前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化手段で生成された暗号データを前記記憶部に記憶する手段と、
を有することを特徴とするデータ秘匿装置。
【請求項２】
前記暗号データ暗号化手段は、さらに、生成された暗号データと、前記記憶部に記憶された暗号データの生成時に用いられた乱数との排他的論理和により、暗号データを生成することを特徴とする請求項１記載のデータ秘匿装置。
【請求項３】
前記記憶部に記憶された暗号データと、前記データから前記記憶部に記憶された暗号データを生成するまでに用いた乱数すべてとを結合した排他的論理和により、前記データを復号する手段を有することを特徴とする請求項１記載のデータ秘匿装置。
【請求項４】
前記記憶部に記憶された暗号データと、前記記憶部に記憶された暗号データを生成するときに用いた乱数との排他的論理和により、前記データを復号する手段を有することを特徴とする請求項２記載のデータ秘匿装置。
【請求項５】
データを秘密分散法を用いて秘匿するデータ秘匿装置であって、
前記秘密分散法は、
前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、
新たに発生させた第２の乱数から処理単位ビット長の複数の第２の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成する手段と、
前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データを生成する手段と、
前記分割データを暗号データとして所定の記憶部に記憶する手段と、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成する手段と、
前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成する手段と、
前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶する手段と、
を有することを特徴とするデータ秘匿装置。
【請求項６】
前記記憶部に記憶された暗号データのうち、復元可能な所定の個数の分割データの組み合わせから、前記秘密分散法を用いて、前記データを復号する手段を有することを特徴とする請求項５記載のデータ秘匿装置。
【請求項７】
前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データと該各第１の乱数部分データに対応する第２の乱数部分データとの排他的論理和演算に置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする請求項５又は６記載のデータ秘匿装置。
【請求項８】
前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データに対応する第２の新たな乱数部分データに置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする請求項５又は６記載のデータ秘匿装置。
【請求項９】
前記所定の時期は、コンピュータの計算能力をもとに判断された、前記擬似乱数関数に用いられたブロック暗号の脆弱時期であることを特徴とする請求項１乃至８のいずれか１項に記載のデータ秘匿装置。
【請求項１０】
データをバーナム暗号を用いて秘匿するデータ秘匿方法であって、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成するステップと、
前記データと、前記第１の乱数との排他的論理和により暗号データを生成するステップと、
生成された暗号データを所定の記憶部に記憶するステップと、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成するステップと、
前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化ステップと、
前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化ステップで生成された暗号データを前記記憶部に記憶するステップと、
を有することを特徴とするデータ秘匿方法。
【請求項１１】
データを秘密分散法を用いて秘匿するデータ秘匿方法であって、
前記秘密分散法は、
前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、
新たに発生させた第２の乱数から処理単位ビット長の複数の第２の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成するステップと、
前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データを生成するステップと、
前記分割データを暗号データとして所定の記憶部に記憶するステップと、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成するステップと、
前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成するステップと、
前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶するステップと、
を有することを特徴とするデータ秘匿方法。
【請求項１２】
データをバーナム暗号を用いて秘匿するためのコンピュータが読み取り可能なデータ秘匿プログラムであって、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成するステップと、
前記データと、前記第１の乱数との排他的論理和により暗号データを生成するステップと、
生成された暗号データを所定の記憶部に記憶するステップと、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成するステップと、
前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化ステップと、
前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化ステップで生成された暗号データを前記記憶部に記憶するステップと、
を前記コンピュータに実行させることを特徴とするデータ秘匿プログラム。
【請求項１３】
前記暗号データ暗号化ステップは、さらに、生成された暗号データと、前記記憶部に記憶された暗号データの生成時に用いられた乱数との排他的論理和により、暗号データを生成することを特徴とする請求項１２記載のデータ秘匿プログラム。
【請求項１４】
前記記憶部に記憶された暗号データと、前記データから前記記憶部に記憶された暗号データを生成するまでに用いた乱数すべてとを結合した排他的論理和により、前記データを復号するステップを前記コンピュータに実行させることを特徴とする請求項１２記載のデータ秘匿プログラム。
【請求項１５】
前記記憶部に記憶された暗号データと、前記記憶部に記憶された暗号データを生成するときに用いた乱数との排他的論理和により、前記データを復号するステップを有することを特徴とする請求項１３記載のデータ秘匿プログラム。
【請求項１６】
データを秘密分散法を用いて秘匿するためのコンピュータが読み取り可能なデータ秘匿プログラムであって、
前記秘密分散法は、
前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、
新たに発生させた第２の乱数から処理単位ビット長の第２の複数の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、
ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成するステップと、
前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データに分割するステップと、
前記分割データを暗号データとして所定の記憶部に記憶するステップと、
所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成するステップと、
前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成するステップと、
前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶するステップと、
を前記コンピュータに実行させることを特徴とするデータ秘匿プログラム。
【請求項１７】
前記記憶部に記憶された暗号データのうち、復元可能な所定の個数の分割データの組み合わせから、前記秘密分散法を用いて、前記データを復号するステップを前記コンピュータに実行させることを特徴とする請求項１６記載のデータ秘匿プログラム。
【請求項１８】
前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データと該各第１の乱数部分データに対応する第２の乱数部分データとの排他的論理和演算に置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする請求項１６又は１７記載のデータ秘匿プログラム。
【請求項１９】
前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データに対応する第２の新たな乱数部分データに置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする請求項１６又は１７記載のデータ秘匿プログラム。
【請求項２０】
前記所定の時期は、コンピュータの計算能力をもとに判断された、前記擬似乱数関数に用いられたブロック暗号の脆弱時期であることを特徴とする請求項１２乃至１９のいずれか１項に記載のデータ秘匿プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化された情報の解読を防止する技術に関し、特に、ブロック暗号を用いた擬似乱数アルゴリズムにより生成された暗号化用乱数が脆弱化したときに好適に適用できるデータ秘匿装置、データ秘匿方法、及びデータ秘匿プログラムに関する。
【背景技術】
【０００２】
データの暗号化方法の１つに、バーナム暗号がある。バーナム暗号とは、データと同じ長さの乱数列を用意し、暗号化に際しては、データのｎビット目と乱数列のｎビット目の排他的論理和（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」からなるビット列を表す。
【０００６】
図１４に簡単なバーナム暗号の例を示す。平文Ｘと鍵Ｙとの排他的論理和演算（XOR）により、計算された暗号文Ｚは、再度、鍵Ｙとの排他的論理和演算（XOR）により、平文Ｘに復号されていることがわかる。
【０００７】
一方、ブロック暗号は、データを一定のブロック長に区切って、ブロック単位に暗号鍵を用いて暗号化処理を行う方法であるが、このブロック暗号は、コンピュータを用いても計算量的に解読困難であることによりデータを秘匿する。これに対して、上述したバーナム暗号は、いくら計算リソースがあっても鍵となる乱数列がなければデータを得ることができないものである。しかし、バーナム暗号においては、データと同じ長さの乱数列が必要であるため、シード（乱数生成の種となる情報）を入力として長い乱数列を生成する擬似乱数生成アルゴリズムが用いられることが多い。
【０００８】
尚、この出願に関連する先行技術文献情報としては、次のものがある。
【非特許文献１】Information Security Laboratory、“One-Time Pad or Vernam Cipher”、[Online]、［平成１６年５月２０日検索］、インターネット＜ＵＲＬ：http://islab.oregonstate.edu/koc/ece679/notes/onetime.pdf＞
【非特許文献２】情報処理振興事業協会 通信・放送機構、“暗号技術評価報告書(2002 年度版) CRYPTREC Report 2002”、[Online]、［平成１６年５月２０日検索］、インターネット＜ＵＲＬ： http://www.shiba.tao.go.jp/kenkyu/CRYPTREC/PDF/c02_report.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、既存の擬似乱数生成アルゴリズムの多くは、その構成の一部にブロック暗号を用いている。ブロック暗号は、上述したように計算量的に解読困難であることによりデータを秘匿するものであるから、コンピュータの性能向上とともに脆弱化する。ブロック暗号の脆弱化は、必ずしも擬似乱数生成アルゴリズムの脆弱化につながるわけではないが、ある一部の乱数列から他の部分の乱数列が予測されることもあり得る。従って、既存の擬似乱数アルゴリズムにより生成された乱数列を用いたバーナム暗号は、長期間にわたって秘匿したいデータの暗号化には有効でないという課題がある。
【００１０】
本発明は、上記の課題を解決するためになされたものであり、バーナム暗号をはじめとする、ブロック暗号を用いた擬似乱数生成アルゴリズムにより生成された乱数列と、秘匿したいデータとの排他的論理和を計算してデータを暗号化をする暗号化方式において、長期間にわたってデータを秘匿し得るデータ秘匿装置、データ秘匿方法、及びデータ秘匿プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、請求項１記載の本発明は、データをバーナム暗号を用いて秘匿するデータ秘匿装置であって、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成する手段と、前記データと、前記第１の乱数との排他的論理和により暗号データを生成する手段と、生成された暗号データを所定の記憶部に記憶する手段と、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成する手段と、前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化手段と、前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化手段で生成された暗号データを前記記憶部に記憶する手段と、を有することを特徴とする。
【００１２】
請求項２記載の本発明は、請求項１記載の発明において、前記暗号データ暗号化手段は、さらに、生成された暗号データと、前記記憶部に記憶された暗号データの生成時に用いられた乱数との排他的論理和により、暗号データを生成することを特徴とする。
【００１３】
請求項３記載の本発明は、請求項１記載の発明において、前記記憶部に記憶された暗号データと、前記データから前記記憶部に記憶された暗号データを生成するまでに用いた乱数すべてとを結合した排他的論理和により、前記データを復号する手段を有することを特徴とする。
【００１４】
請求項４記載の本発明は、請求項２記載の発明において、前記記憶部に記憶された暗号データと、前記記憶部に記憶された暗号データを生成するときに用いた乱数との排他的論理和により、前記データを復号する手段を有することを特徴とする。
【００１５】
請求項５記載の本発明は、データを秘密分散法を用いて秘匿するデータ秘匿装置であって、前記秘密分散法は、前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、新たに発生させた第２の乱数から処理単位ビット長の複数の第２の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成する手段と、前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データを生成する手段と、前記分割データを暗号データとして所定の記憶部に記憶する手段と、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成する手段と、前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成する手段と、前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶する手段と、を有することを特徴とする。
【００１６】
請求項６記載の本発明は、請求項５記載の発明において、前記記憶部に記憶された暗号データのうち、復元可能な所定の個数の分割データの組み合わせから、前記秘密分散法を用いて、前記データを復号する手段を有することを特徴とする。
【００１７】
請求項７記載の本発明は、請求項５又は６記載の発明において、前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データと該各第１の乱数部分データに対応する第２の乱数部分データとの排他的論理和演算に置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする。
【００１８】
請求項８記載の本発明は、請求項５又は６記載の発明において、前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データに対応する第２の新たな乱数部分データに置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする。
【００１９】
請求項９記載の本発明は、請求項１乃至８のいずれか１項に記載の発明において、前記所定の時期は、コンピュータの計算能力をもとに判断された、前記擬似乱数関数に用いられたブロック暗号の脆弱時期であることを特徴とする。
【００２０】
請求項１０記載の本発明は、データをバーナム暗号を用いて秘匿するデータ秘匿方法であって、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成するステップと、前記データと、前記第１の乱数との排他的論理和により暗号データを生成するステップと、生成された暗号データを所定の記憶部に記憶するステップと、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成するステップと、前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化ステップと、前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化ステップで生成された暗号データを前記記憶部に記憶するステップと、を有することを特徴とする。
【００２１】
請求項１１記載の本発明は、データを秘密分散法を用いて秘匿するデータ秘匿方法であって、前記秘密分散法は、前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、新たに発生させた第２の乱数から処理単位ビット長の複数の第２の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成するステップと、前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データを生成するステップと、前記分割データを暗号データとして所定の記憶部に記憶するステップと、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成するステップと、前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成するステップと、前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶するステップと、を有することを特徴とする。
【００２２】
請求項１２記載の本発明は、データをバーナム暗号を用いて秘匿するためのコンピュータが読み取り可能なデータ秘匿プログラムであって、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて第１の乱数を生成するステップと、前記データと、前記第１の乱数との排他的論理和により暗号データを生成するステップと、生成された暗号データを所定の記憶部に記憶するステップと、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、第２の乱数を生成するステップと、前記記憶部に記憶された暗号データと、前記第２の乱数との排他的論理和により暗号データを生成する暗号データ暗号化ステップと、前記記憶部に記憶された暗号データに代えて、前記暗号データ暗号化ステップで生成された暗号データを前記記憶部に記憶するステップと、を前記コンピュータに実行させることを特徴とする。
【００２３】
請求項１３記載の本発明は、請求項１２記載の発明において、前記暗号データ暗号化ステップは、さらに、生成された暗号データと、前記記憶部に記憶された暗号データの生成時に用いられた乱数との排他的論理和により、暗号データを生成することを特徴とする。
【００２４】
請求項１４記載の本発明は、請求項１２記載の発明において、前記記憶部に記憶された暗号データと、前記データから前記記憶部に記憶された暗号データを生成するまでに用いた乱数すべてとを結合した排他的論理和により、前記データを復号するステップを前記コンピュータに実行させることを特徴とする。
【００２５】
請求項１５記載の本発明は、請求項１３記載の発明において、前記記憶部に記憶された暗号データと、前記記憶部に記憶された暗号データを生成するときに用いた乱数との排他的論理和により、前記データを復号するステップを有することを特徴とする。
【００２６】
請求項１６記載の本発明は、データを秘密分散法を用いて秘匿するためのコンピュータが読み取り可能なデータ秘匿プログラムであって、前記秘密分散法は、前記データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、前記データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、前記データのビット長と同じまたはこれより短い長さの第１の乱数から処理単位ビット長の複数の第１の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと第１の乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、新たに発生させた第２の乱数から処理単位ビット長の第２の複数の乱数部分データを生成し、前記各分割部分データと第２の乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、前記所望の分割数の再分割データを生成するデータ分割方法であり、ブロック暗号を構成要素に持つ擬似乱数生成関数を用いて前記第１の乱数を生成するステップと、前記データと前記第１の乱数から、前記秘密分散法を用いて前記分割データに分割するステップと、前記分割データを暗号データとして所定の記憶部に記憶するステップと、所定の時期に、前記記憶部に記憶された暗号データの生成時に用いられた擬似乱数生成関数よりも計算量が大きい別の擬似乱数生成関数を用いて、前記第２の乱数を生成するステップと、前記記憶部に記憶された暗号データと前記第２の乱数から、前記秘密分散法を用いて前記再分割データを生成するステップと、前記記憶部に記憶された暗号データに代えて、前記再分割データを暗号データとして前記記憶部に記憶するステップと、を前記コンピュータに実行させることを特徴とする。
【００２７】
請求項１７記載の本発明は、請求項１６記載の発明において、前記記憶部に記憶された暗号データのうち、復元可能な所定の個数の分割データの組み合わせから、前記秘密分散法を用いて、前記データを復号するステップを前記コンピュータに実行させることを特徴とする。
【００２８】
請求項１８記載の本発明は、請求項１６又は１７記載の発明において、前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データと該各第１の乱数部分データに対応する第２の乱数部分データとの排他的論理和演算に置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする。
【００２９】
請求項１９記載の本発明は、請求項１６又は１７記載の発明において、前記秘密分散法は、前記各分割部分データの定義式における第１の乱数部分データを、該第１の乱数部分データに対応する第２の新たな乱数部分データに置換した各再分割部分データの定義式により、各再分割部分データを生成することを特徴とする。
【００３０】
請求項２０記載の本発明は、請求項１２乃至１９のいずれか１項に記載の発明において、前記所定の時期は、コンピュータの計算能力をもとに判断された、前記擬似乱数関数に用いられたブロック暗号の脆弱時期であることを特徴とする。
【発明の効果】
【００３１】
本発明によれば、ブロック暗号を構成要素に持つ擬似乱数生成関数により生成された乱数を用いて、バーナム暗号により暗号化されたデータを、所定の時期にさらに、より計算量の大きい擬似乱数生成関数により生成された乱数を用いて、バーナム暗号によりさらに暗号化するので、長期間にわたってデータを秘匿し続けることができる。
【００３２】
また、本発明によれば、ブロック暗号を用いた擬似乱数生成関数により生成された乱数を用いて、秘密分散法により生成された分割データを、所定の時期にさらに、秘密分散法により、より計算量の大きい擬似乱数生成関数により生成された乱数を用いて、さらに再分割するので、長期間にわたってデータを秘匿し続けることができる。
【００３３】
特に、本発明における秘密分散法は、データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、新たに発生させた乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割部分データと該乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、所望の分割数の再分割データを生成するので、データを復元することなく、データを再分割することができるので、データをよりセキュアに管理することができる。
【発明を実施するための最良の形態】
【００３４】
以下、本発明の実施の形態を図面を用いて説明する。
【００３５】
＜第１の実施の形態＞
図１は、本発明の第１の実施の形態に係るデータ秘匿装置１の概略構成を示すブロック図である。図１に示すデータ秘匿装置１は、バーナム暗号を用いてデータを秘匿する装置であり、記憶部１１、乱数生成部１２、データ暗号部１３、及びデータ復号部１４を備えている。
【００３６】
詳しくは、記憶部１１は、秘匿したいデータＳ、データＳからバーナム暗号により生成される暗号データＩ（Ｉ＝Ａ，Ｂ，Ｃ，…）、バーナム暗号に用いられるシードＪ（Ｊ＝α，β，γ，…）などを記憶するものである。
【００３７】
乱数生成部１２は、ブロック暗号を構成要素に持つ擬似乱数アルゴリズムＫ（Ｋ＝Ｆ，Ｇ，Ｈ，…）を用いてシードＪから乱数を生成するようになっている。尚、擬似乱数アルゴリズムＫを用いてシードＪから生成された乱数をＫ（Ｊ）と表す。
【００３８】
データ暗号部１３は、バーナム暗号を用いてデータを暗号化するもので、具体的には、データＳと、乱数生成部１２で生成された乱数Ｋ（Ｊ）との排他的論理和（XOR）を計算して、暗号データＩを生成するようになっている。また、既にデータＳが暗号化されているときは、暗号データＩをさらに暗号化するようになっており、暗号データＩと、乱数生成部１２で生成された乱数Ｋ（Ｊ）との排他的論理和（XOR）を計算して、暗号データＩ’を生成するようになっている。
【００３９】
データ復号部１４は、暗号データＩをデータＳに復号化するもので、バーナム暗号の性質から、暗号生成に使用した乱数Ｋ（Ｊ）と、暗号データＩとの排他的論理和（XOR）を計算することで、データＳを復号できるようになっている。
【００４０】
ここで、上述したデータ秘匿装置１は、少なくとも演算機能および制御機能を備えた中央演算装置（ＣＰＵ）、プログラムやデータを格納する機能を有するＲＡＭ等からなる主記憶装置（メモリ）を有する電子的な装置から構成されているものである。また、上記装置は、主記憶装置の他、ハードディスクなどの補助記憶装置を具備していてもよい。
【００４１】
このうち、乱数生成部１２、データ暗号部１３、及びデータ復号部１４は、上記ＣＰＵによる演算制御機能を具体的に示したものに他ならない。また、記憶部１１は、上記主記憶装置及び補助記憶装置の機能を備えたものである。
【００４２】
また、本実施の形態に係る各種処理を実行するプログラムは、前述した主記憶装置またはハードディスクに格納されているものである。そして、このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読み取り可能な記録媒体に記録することも、通信ネットワークを介して配信することも可能である。
【００４３】
次に、図２を用いて、本実施の形態に係るデータ秘匿装置１の動作を説明する。
【００４４】
まず、乱数生成部１２が、記憶部１１に記憶されたシードαをもとに擬似乱数生成アルゴリズムＦにより、データＳと同じ長さの乱数Ｆ（α）を生成する（ステップＳ１０）。
【００４５】
次に、データＳと乱数Ｆ（α）から、バーナム暗号により、暗号データＡを生成し、記憶部１１に記憶する（ステップＳ２０，Ｓ３０）。即ち、Ａ＝Ｓ*Ｆ（α）である。
【００４６】
尚、擬似乱数生成アルゴリズムＦは、その時点（データＳを擬似乱数アルゴリズムＦを用いて暗号化する時点）において、コンピュータの計算能力からブロック暗号が解読不能であると判断される程度の計算量を要するアルゴリズムで、暗号データ生成時にはデータ秘匿装置１に与えられている。
【００４７】
時間の経過とともにコンピュータの性能が向上し、擬似乱数アルゴリズムＦを構成するブロック暗号の脆弱化が予測された場合（例えば、具体的には、ブロック暗号解読に必要な計算量と、その時点で入手可能なコンピュータの計算能力の双方を鑑みて、数年程度で解読可能な場合など）には、解読に必要な計算量がより大きいブロック暗号を構成要素に持つ擬似乱数アルゴリズムＧを用いて、記憶部１１に記憶されたシードβをもとに、データＳと同じ長さの乱数Ｇ（β）を生成する（ステップＳ４０，Ｓ５０）。
【００４８】
次に、記憶部１１に記憶された暗号データＡと乱数Ｇ（β）とから、バーナム暗号を用いて、暗号データＢを生成し、暗号データＡに代えて記憶部１１に記憶する（ステップＳ６０，Ｓ７０）。即ち、Ｂ＝Ａ*Ｇ（β）である。
【００４９】
尚、擬似乱数生成アルゴリズムＧは、上述したように擬似乱数生成アルゴリズムＦより計算量が必要とされ、その時点（暗号データＡを擬似乱数アルゴリズムＧを用いて暗号化する時点）において、コンピュータの計算能力からブロック暗号が解読不能であると判断される程度の計算量を要するアルゴリズムで、暗号データ生成時にはデータ秘匿装置１に与えられている。例えば、具体的には、擬似乱数生成アルゴリズムＦの構成要素には１２８ビット鍵のＡＥＳ（Advanced Encryption Standard）が用いられていた場合には、擬似乱数生成アルゴリズムＧの構成要素としては、２５６ビット鍵のＡＥＳを用いるものである。
【００５０】
以降は、上記ステップＳ４０〜Ｓ７０の繰り返しである。即ち、時間の経過とともにコンピュータの性能が向上し、擬似乱数アルゴリズムＧを構成するブロック暗号の脆弱化が予測された場合、解読に必要な計算量がより大きいブロック暗号を構成要素に持つ擬似乱数アルゴリズムＨを用いて、記憶部１１に記憶されたシードγをもとに、データＳと同じ長さの乱数Ｈ（γ）を生成し、記憶部１１に記憶された暗号データＢと乱数Ｈ（γ）とから、バーナム暗号を用いて、暗号データＣ（＝Ｂ*Ｈ（γ））を生成し、暗号データＢに代えて記憶部１１に記憶する（ステップＳ４０，Ｓ５０，Ｓ６０，Ｓ７０）。
【００５１】
次に、データＳを復号する動作について説明する。記憶部１１に記憶された暗号データからデータＳを復号するには、データＳから現時点の暗号データを生成するまでに用いた乱数すべてを取得し、該乱数すべてと、現時点の暗号データとの排他的論理和（XOR）を計算する（ステップＳ８０，Ｓ９０）。例えば、現時点において記憶部１１に暗号データＡが記憶されている場合には、用いた乱数はＦ（α）だけであるから、
Ａ*Ｆ（α）＝（Ｓ*Ｆ（α））*Ｆ（α）
＝Ｓ*（Ｆ（α）*Ｆ（α））
＝Ｓ*０
＝Ｓ
となり、データＳを得ることができる。
【００５２】
また、現時点において記憶部１１に暗号データＢが記憶されている場合には、用いた乱数はＦ（α）及びＧ（β）であるから、
Ｂ*Ｆ（α）*Ｇ（β）＝（Ａ*Ｇ（β））*Ｆ（α）*Ｇ（β）
＝（Ｓ*Ｆ（α）*Ｇ（β））*Ｆ（α）*Ｇ（β）
＝Ｓ*（Ｆ（α）*Ｆ（α））*（Ｇ（β））*Ｇ（β））
＝Ｓ*０*０
＝Ｓ
となり、データＳを得ることができる。
【００５３】
また、現時点において記憶部１１に暗号データＣが記憶されている場合には、用いた乱数はＦ（α）、Ｇ（β）及びＨ（γ）であるから、
Ｃ*Ｆ（α）*Ｇ（β）*Ｈ（γ）＝Ｂ*Ｈ（γ）*Ｆ（α）*Ｇ（β）*Ｈ（γ）
＝（Ｂ*Ｈ（γ））*Ｆ（α）*Ｇ（β）*Ｈ（γ）
＝（Ｓ*Ｆ（α）*Ｇ（β）*Ｈ（γ））*Ｆ（α）*Ｇ（β）*Ｈ（γ）
＝Ｓ*（Ｆ（α）*Ｆ（α））*（（Ｇ（β）*Ｇ（β））*（Ｈ（γ）*Ｈ（γ））
＝Ｓ*０*０*０
＝Ｓ
となり、データＳを得ることができる。
【００５４】
従って、本実施の形態に係るデータ秘匿装置１によれば、ブロック暗号を構成要素に持つ擬似乱数生成関数により生成された乱数を用いて、バーナム暗号により暗号化されたデータを、所定の時期にさらに、より計算量の大きい擬似乱数生成関数により生成された乱数を用いて、バーナム暗号によりさらに暗号化するので、長期間にわたってデータを秘匿し続けることができる。
【００５５】
尚、第１の実施の形態の変形として、データ暗号部１３及びデータ復号部１４の代わりに、以下に示すような暗号計算を行うデータ暗号部１３’及びデータ復号部１４’を備えたデータ秘匿装置１’（図示せず）を用いて本発明を実施してもよい。
【００５６】
データ暗号部１３’は、今回生成した乱数及び前回生成した乱数の双方を用いて計算するもので、例えば、上述した暗号データＢ及び暗号データＣは、それぞれ
Ｂ＝Ａ*Ｇ（β）*Ｆ（α）、Ｃ＝Ｂ*Ｈ（γ）*Ｇ（β）と表される。
【００５７】
Ｂ＝Ａ*Ｇ（β）*Ｆ（α）
＝（Ｓ*Ｆ（α））*Ｇ（β）*Ｆ（α）
＝Ｓ*（Ｆ（α）* *Ｆ（α））*Ｇ（β）
＝Ｓ*０*Ｇ（β）
＝Ｓ*Ｇ（β）
Ｃ＝Ｂ*Ｈ（γ）*Ｇ（β）
＝（Ｓ*Ｇ（β））*Ｈ（γ）*Ｇ（β）
＝Ｓ*（Ｇ（β）*Ｇ（β））*Ｈ（γ）
＝Ｓ*Ｈ（γ）
従って、この方法では、脆弱化した擬似乱数アルゴリズムによる乱数成分を除くことができる。
【００５８】
また、データ復号部１４’は、今回生成した乱数だけを用いて排他的論理和（XOR）の計算をして、データを復号するもので、例えば、暗号データＢ及び暗号データＣからデータＳに復号するには、それぞれ、Ｂ*Ｇ（β）、Ｃ*Ｈ（γ）により求められる。
【００５９】
Ｂ*Ｇ（β）＝（Ｓ*Ｇ（β））*Ｇ（β）
＝Ｓ*（Ｇ（β））*Ｇ（β））
＝Ｓ*０
＝Ｓ
Ｃ*Ｈ（γ）＝（Ｓ*Ｈ（γ））*Ｈ（γ）
＝Ｓ*（Ｈ（γ）*Ｈ（γ））
＝Ｓ*０
＝Ｓ
＜第２の実施の形態＞
（１．システム構成）
図３は、本発明の第２の実施の形態に係るデータ秘匿装置２の概略構成を示すブロック図である。図３に示すように、データ秘匿装置２は、通信ネットワーク４を介してハードウェア的に互いに独立した複数（本実施の形態では２とする）のデータ保管用サーバコンピュータ（以下、単に保管サーバとよぶ）３ａ，３ｂと接続されており、後述する独自の秘密分散アルゴリズムによる秘密分散法（以下、秘密分散法Ａとよぶ）を用いて秘匿したいデータＳを複数のデータに分割し、該分割データを保管サーバ３ａ，３ｂおよびデータ秘匿装置２に、保管するようになっている（本実施の形態では、秘匿したいデータＳを３つの分割データD(1)，D(2) ，D(3)に分割し、それぞれを保管サーバ３ａ，３ｂおよびデータ秘匿装置２に保管する）。尚、後述する秘密分散法Ａは、バーナム暗号によりデータを秘匿するのではないが、ブロック暗号を用いた擬似乱数生成アルゴリズムにより生成された乱数列と、秘匿したいデータとの排他的論理和を計算してデータを暗号化をする暗号化方式であり、かつ、データを分割して秘匿するので、第１の実施の形態よりも、よりセキュアな方法である。
【００６０】
尚、本実施の形態においては、データＳを３分割して保管する場合を例に説明するが、本発明はデータＳを３分割する場合に限定されるわけではなく、ｎ分割（ｎ＝２以上の整数）の場合にも適用されるものである。また、本実施の形態においては、分割データD(1),D(2)を保管サーバ３、分割データD(3)をデータ秘匿装置２に割り当てたが、どの分割データをどの装置に割り当ててもよいものである。さらには、データ分散という観点から、分割データを物理的に異なる装置に割り当てるようにしたが、分割されたデータそれぞれをデータ秘匿装置２に保管するようにしてもよいものである。
【００６１】
詳しくは、記憶部２１は、秘匿したいデータＳ、データＳから秘密分散法Ａにより生成される分割データの一つである分割データD(3)、秘密分散法Ａに用いられるシードＪ（Ｊ＝α，β，γ，…）などを記憶するものである。
【００６２】
乱数生成部２２は、ブロック暗号を構成要素に持つ擬似乱数アルゴリズムＫ（Ｋ＝Ｆ，Ｇ，Ｈ，…）を用いてシードＪから乱数を生成するようになっている。尚、擬似乱数アルゴリズムＫを用いてシードＪから生成された乱数をＫ（Ｊ）と表す。
【００６３】
分割データ生成部２３は、データＳ及び乱数Ｋ（Ｊ）から秘密分散法Ａを用いて複数の分割データD(1)，D(2)，D(3)を生成するようになっている。
【００６４】
再分割データ生成部２４は、既にデータＳが分割されて、分割データD(1)，D(2)，D(3)が保持されているときは、さらに、この分割データD(1)，D(2)，D(3)及び乱数Ｋ（Ｊ）から秘密分散法Ａを用いて複数の再分割データD’(1)，D’(2)，D’(3)を生成するようになっている。
【００６５】
元データ復元部２５は、複数の分割データD(1), D(2), D(3)（再分割データD’(1)，D’(2)，D’(3)）から秘密分散法Ａを用いてデータＳを復元するようになっている。
【００６６】
データ通信部２６は、保管サーバ３ａ及び３ｂとそれぞれ分割データの送受信を行うようになっている。
【００６７】
ここで、上述したデータ秘匿装置２、保管サーバ３ａ，３ｂは、それぞれ少なくとも演算機能および制御機能を備えた中央演算装置（ＣＰＵ）、プログラムやデータを格納する機能を有するＲＡＭ等からなる主記憶装置（メモリ）を有する電子的な装置から構成されているものである。また、上記装置は、主記憶装置の他、ハードディスクなどの補助記憶装置を具備していてもよい。
【００６８】
このうち、データ秘匿装置２の乱数生成部２２、分割データ生成部２３、再分割データ生成部２４、元データ復元部２５、及び通信部２６は、上記ＣＰＵによる演算制御機能を具体的に示したものに他ならない。また、記憶部２１は、上記主記憶装置及び補助記憶装置の機能を備えたものである。
【００６９】
また、本実施の形態に係る各種処理を実行するプログラムは、前述した主記憶装置またはハードディスクに格納されているものである。そして、このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読み取り可能な記録媒体に記録することも、通信ネットワークを介して配信することも可能である。
【００７０】
（２．秘密分散法Ａ）
ここで、本実施の形態における独自の秘密分散アルゴリズムによる秘密分散法Ａについて説明する。
【００７１】
本実施形態における元データ（データＳに相当する）の分割および復元では、元データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するが、この場合の処理単位ビット長は任意の値に設定することができ、元データを処理単位ビット長毎に区分けして、この元部分データから分割部分データを分割数より１少ない数ずつ生成するので、元データのビット長が処理単位ビット長の（分割数-1）倍の整数倍に一致しない場合は、元データの末尾の部分に０を埋めるなどして元データのビット長を処理単位ビット長の（分割数-1）倍の整数倍に合わせることにより本実施形態を適用することができる。
【００７２】
また、上述した乱数も（分割数-1）個の元部分データの各々に対応して処理単位ビット長のビット長を有する（分割数-1）個の乱数部分データとして乱数生成部２２から生成される。すなわち、乱数は処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する（分割数-1）個の乱数部分データとして生成される。更に、元データは処理単位ビット長に基づいて所望の分割数の分割データに分割されるが、この分割データの各々も（分割数-1）個の元部分データの各々に対応して処理単位ビット長のビット長を有する（分割数-1）個の分割部分データとして生成される。すなわち、分割データの各々は、処理単位ビット長毎に区分けされて、処理単位ビット長のビット長を有する（分割数-1）個の分割部分データとして生成される。
【００７３】
なお、以下の説明では、上述した元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、また複数のデータや乱数などのうちの１つを表わす変数としてi(=1〜n)およびj(=1〜n-1)を用い、（分割数n-1）個の元部分データ、（分割数n-1）個の乱数部分データ、および分割数n個の分割データDのそれぞれのうちの１つをそれぞれS (j),R(j)およびD(i)で表記し、更に各分割データD(i)を構成する複数(n-1)の分割部分データをD(i,j)で表記するものとする。すなわち、S (j)は、元データSの先頭から処理単位ビット長毎に区分けして１番から順に採番した時の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）演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
【００７６】
次に、フローチャートなどの図面も参照して、本実施の形態における秘密分散法Ａの作用について説明するが、この説明の前に図４乃至８、図１０および図１２に示す記号の定義について説明する。
【００７７】
（１）Πi=1nA(i)は、A(1)*A(2)*…A(n)を意味するものとする。
【００７８】
（２）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
ただし、ｍはｍ≧0の整数を表す。
【００８１】
（３）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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
【数１】
0004619045.tif 000002
【００８２】
（４）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
である行列を意味するものとし、「回転行列」ということとする。具体的には下記のような行列であり、他の行列の右側からかけると当該他の行列の１列目を２列目へ、２列目を３列目へ、…,n-1列目をn列目へ、n列目を１列目へ移動させる作用がある。つまり、行列Pを他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
【数２】
0004619045.tif 000003
【００８３】
（５）A,Bをn×n行列とすると、A×Bとは行列AとBの積を意味するものとする。行列の成分同士の計算規則は通常の数学で用いるものと同じである。
【００８４】
（６）Aをn×n行列とし、iを整数とすると、A＾iとは行列Aのi個の積を意味するものとする。また、A＾0とは単位行列Eを意味するものとする。
【００８５】
（７）単位行列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
となる性質がある。
【数３】
0004619045.tif 000004
【００８６】
次に、図４に示すフローチャートおよび図５および図６に示す具体的データなどを参照して、まず元データSの分割処理について説明する。これは、データ秘匿装置２の分割データ生成部２３の機能を説明するものである。
【００８７】
まず、元データSをデータ秘匿装置２に与える（図４のステップＳ２０１）。なお、本例では、元データSは、１６ビットの「10110010 00110111」とする。
【００８８】
次に、データ秘匿装置２は、分割数nとして３と指示する（ステップＳ２０３）。なお、この分割数n=3に従ってデータ秘匿装置２で生成される３個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ１６ビット長のデータである。
【００８９】
それから、元データSを分割するために使用される処理単位ビット長bを８ビットと決定する（ステップＳ２０５）。この処理単位ビット長bは、利用者がデータ秘匿装置２に対して指定してもよいし、またはデータ秘匿装置２において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよいが、ここでは元データSを割り切れることができる８ビットとしている。従って、上記１６ビットの「10110010 00110111」の元データSは、８ビットの処理単位ビット長で区分けされた場合の２個の元分割データS(1)およびS(2)は、それぞれ「10110010」および「00110111」となる。
【００９０】
次のステップＳ２０７では、元データSのビット長が8×2の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を０で埋めて、8×2の整数倍に合わせる。なお、本例のように処理単位ビット長bが８ビットおよび分割数nが３に設定された場合における分割処理は、元データSのビット長として１６ビットに限られるものでなく、処理単位ビット長b×(分割数n-1)=8×2の整数倍の元データSに対して有効なものである。
【００９１】
次に、ステップＳ２０９では、変数m、すなわち上述した整数倍を意味する変数mを０に設定する。本例のように、元データSが処理単位ビット長b×(分割数n-1)=8×2=16ビットである場合には、変数mは０であるが、２倍の３２ビットの場合には、変数mは１となり、３倍の４８ビットの場合には、変数mは２となる。
【００９２】
次に、元データSの8×2×m+1ビット目から8×2ビット分のデータが存在するか否かが判定される（ステップＳ２１１）。これは、このステップＳ２１１以降に示す分割処理を元データSの変数mで特定される処理単位ビット長b×(分割数n-1)=8×2=16ビットに対して行った後、元データSとして次の１６ビットがあるか否かを判定しているものである。本例のように元データSが１６ビットである場合には、１６ビットの元データSに対してステップＳ２１１以降の分割処理を１回行うと、後述するステップＳ２１９で変数mが+1されるが、本例の元データSでは変数mがm+1の場合に相当する１７ビット以降のデータは存在しないので、ステップＳ２１１からステップＳ２２１に進むことになるが、今の場合は、変数mは０であるので、元データSの8×2×m+1ビット目は、8×2×0+1=1となり、元データSの１６ビットの１ビット目から8×2ビット分にデータが存在するため、ステップＳ２１３に進む。
【００９３】
ステップＳ２１３では、変数jを１から２(=分割数n-1)まで変えて、元データSの8×(2×m+j-1)+1ビット目から８ビット分(=処理単位ビット長)のデータを元部分データS(2×m+j)に設定し、これにより元データSを処理単位ビット長で区分けした２(分割数n-1)個の元部分データS(1),S(2)を次のように生成する。
【００９４】
元データS=S(1),S(2)
第１の元部分データS(1)=「10110010」
第２の元部分データS(2)=「00110111」
次に、変数jを１から２(=分割数n-1)まで変えて、乱数部分データR(2×m+j)に乱数生成部２２から発生する８ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした２(分割数n-1)個の乱数部分データR(1),R(2)を次のように生成する（ステップＳ２１５）。
【００９５】
乱数R=R(1),R(2)
第１の乱数部分データR(1)=「10110001」
第２の乱数部分データR(2)=「00110101」
次に、ステップＳ２１７において、変数iを１から３(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを１から２(=分割数n-1)まで変えながら、ステップＳ２１７に示す分割データを生成するための元部分データと乱数部分データの排他的論理和からなる定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,2×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【００９６】
分割データD
=３個の分割データD(i)=D(1),D(2),D(3)
第１の分割データD(1)
=２個の分割部分データD(1,j)=D(1,1),D(1,2)
=「00110110」,「10110011」
第２の分割データD(2)
=２個の分割部分データD(2,j)=D(2,1),D(2,2)
=「00000011」,「00000010」
第３の分割データD(3)
=２個の分割部分データD(3,j)=D(3,1),D(3,2)
=「10110001」,「00110101」
なお、各分割部分データ(i,j)を生成するためのステップＳ２１７に示す定義式は、本例のように分割数n=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)である。また、図６に示す表にはm>0の場合の任意の整数についての一般的な定義式も記載されている。
【００９７】
このように整数倍を意味する変数m=0の場合について分割データDを生成した後、次に変数mを１増やし（ステップＳ２１９）、ステップＳ２１１に戻り、変数m+1に該当する元データSの１７ビット以降について同様の分割処理を行おうとするが、本例の元データSは１６ビットであり、１７ビット以降のデータは存在しないので、ステップＳ２１１からステップＳ２２１に進み、上述したように生成した分割データD(1),D(2),D(3)を保管サーバ３及びデータ秘匿装置２にそれぞれ保存して、分割処理を終了する。なお、このように保管された分割データD(1),D(2),D(3)はそれぞれ単独では元データが推測できない。
【００９８】
ここで、上述した図４のフローチャートのステップＳ２１７における定義式による分割データの生成処理、具体的には分割数n=3の場合の分割データの生成処理について詳しく説明する。
【００９９】
まず、整数倍を意味する変数m=0の場合には、ステップＳ２１７に示す定義式から各分割データ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)
上記の６つの式のうち上から４つの式に含まれる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のときは
【数４】
0004619045.tif 000005
【０１０３】
j=2のときは
【数５】
0004619045.tif 000006
【０１０４】
これを用いると、各分割部分データ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)を生成するための定義式は、図５にも図示されている。
【０１０６】
図５は、上述したように１６ビットの元データSを８ビットの処理単位ビット長に基づいて分割数n=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)を生成する過程と定義式の一般形について説明する。
【０１０８】
まず、第１の分割データD(1)に対しては、第１の分割部分データD(1,1)は、上述した定義式S(1)*R(1)*R(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である。なお、定義式の一般形は、図６にまとめて示されている。
【０１０９】
また、第２の分割データ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である。
【０１１０】
更に第３の分割データD(3)に対しては、D(3,1)はR(1)で定義され、D(3,2)はR(2)で定義される。この定義式の一般形は、D(3,j)に対してはR(j)であり、D(3,j+1)に対してはR(j+1)である（jは奇数とする）。定義式に従って計算すると、D(3,1)は10110001, D(3,2)は00110101となるので、D(3)は10110001 00110101である。
【０１１１】
上記説明は、S,R,D(1),D(2),D(3)の長さを１６ビットとしたが、データの先頭から上記分割処理を繰り返すことにより、どのような長さの元データSからでも分割データD(1),D(2),D(3)を生成することができる。また、処理単位ビット長bは任意にとることができ、元データSの先頭から順にb×2の長さ毎に上記分割処理を繰り返すことにより任意の長さの元データ、具体的には処理単位ビット長b×2の整数倍の長さの元データに対して適用することができる。なお、元データSの長さが処理単位ビット長b×2の整数倍でない場合は、例えば、データ末尾の部分を０で埋めるなどして元データSの長さを処理単位ビット長b×2の整数倍に合わせることにより上述した本実施形態の分割処理を適用することができる。
【０１１２】
次に、図５の右側に示す表を参照して、分割データから元データを復元する処理について説明する。これは、データ秘匿装置２の元データ復元部２５の機能を説明するものである。
【０１１３】
まず、データ秘匿装置２に元データSの復元を要求する。データ秘匿装置２は、自己および保管サーバ３から分割データD(1),D(2),D(3)を取得し、この取得した分割データD(1),D(2),D(3)から次に示すように元データSを復元する。
【０１１４】
まず、分割部分データD(2,1),D(3,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となる。
【０１１６】
また、別の分割部分データから次のように第２の元部分データ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に基づいて分割処理を繰り返し行って、分割データを生成した場合には、３つの分割データD(1),D(2),D(3)のすべてを用いなくても、３つの分割データのうち、２つの分割データを用いて上述したように元データを復元することができる。
【０１３７】
尚、本実施の形態に係るデータ秘匿装置２においては、３つの分割データD(1),D(2),D(3)を生成するようになっていたので、分割数が３の場合について説明したが、秘密分散法Ａは、分割数がｎの場合にも適用できるものである。
【０１３８】
次に、図７に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
【０１３９】
まず、元データSをデータ秘匿装置２に与える（ステップＳ４０１）。また、データ秘匿装置２に、分割数n(n≧3である任意の整数)を指示する（ステップＳ４０３）。処理単位ビット長bを決定する（ステップＳ４０５）。なお、bは０より大きい任意の整数である。次に、元データSのビット長がb×(n-1)の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を０で埋める（ステップＳ４０７）。また、整数倍を意味する変数mを０に設定する（ステップＳ４０９）。
【０１４０】
次に、元データSのb×(n-1)×m+1ビット目からb×(n-1)ビット分のデータが存在するか否かが判定される（ステップＳ４１１）。この判定の結果、データが存在しない場合は、ステップＳ４２１に進むことになるが、今の場合は、ステップＳ４０９で変数mは０に設定された場合であるので、データが存在するため、ステップＳ４１３に進む。
【０１４１】
ステップＳ４１３では、変数jを１から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を１からn-1まで変えて、乱数部分データR((n-1)×m+j)に乱数生成部２２から発生する処理単位ビット長bの乱数を設定し、これにより乱数Rを処理単位ビット長bで区分けしたn-1個の乱数部分データR(1),R(2),…R(n-1)が生成される（ステップＳ４１５）。
【０１４３】
次に、ステップＳ４１７において、変数iを１からnまで変えるとともに、更に各変数iにおいて変数jを１からn-1まで変えながら、ステップＳ４１７に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,(n-1)×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【０１４４】
分割データD
=n個の分割データD(i)=D(1),D(2),…D(n)
第１の分割データD(1)
=n-1個の分割部分データD(1,j)=D(1,1),D(1,2),…D(1,n-1)
第２の分割データ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を１増やし（ステップＳ４１９）、ステップＳ４１１に戻り、変数m=1に該当する元データSのb×(n-1)ビット以降について同様の分割処理を行う。最後にステップＳ４１１の判定の結果、元データSにデータがなくなった場合、ステップＳ４１１からステップＳ４２１に進み、上述したように生成した分割データD(1), …,D(n)を保管サーバ３およびデータ秘匿装置２にそれぞれ保存して、分割処理を終了する。
【０１４５】
さて、上述した実施形態においては、個々の分割データのみから、それを構成する部分データ間の演算を行うことによって乱数成分が失われる場合がある。即ち、例えば３分割の場合、各分割部分データは次のように定義される。
【０１４６】
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)である。ここでｊはｊ＝２×ｍ＋１、ｍはｍ≧０の任意の整数である。
【０１４７】
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)がそのデータフォーマット中のヘッダ情報やパディング（例えば、データ領域の一部を０で埋めたもの）などを含む部分であった場合には、これらのデータフォーマット固有のキーワードや固定文字列などを含むため、その内容は予測され得る。また、S(2)のうち既知の部分とS(1)*S(2)の値から、S(1)の一部が復元可能である。
【０１４９】
この問題を解決する方法は以下の通りである。図８におけるD(1,j+1)とD(2,j+1)は、図６におけるD(1,j+1)とD(2,j+1)を入れ替えたものである。ここでｊはｊ＝２×ｍ＋１、ｍはｍ≧０の任意の整数である。
【０１５０】
この場合、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図８より
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)
となるからである。
【０１５１】
また、この場合、３つの分割データのうち２つから、元データを復元することができるという特性は失われていない。これは、D(1)、D(2)を取得してＳを復元する場合には、図８におけるD(1)、D(2)は、図６におけるD(1)、D(2)を構成する分割部分データを入れ替えたものにすぎないので、明らかにこれらから元データを復元することができ、また、D(1)とD(3)またはD(2)とD(3)を取得してＳを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができるからである。
【０１５２】
次に、一旦分割された分割データにさらに乱数を与えて新たな分割データ（再分割データ）を生成する再分割処理について説明する。データ秘匿装置２の再分割データ生成部２４の機能を説明するものであるが、これに関しても、分割数が３の場合を例に説明する。尚、本実施の形態における再分割処理は、２つの方法があるので、以下、それぞれについて説明する。
【０１５３】
（２−１．乱数追加注入方式）
図９は、乱数追加注入方式におけるデータ再分割処理の概要を説明するフローチャート図である。同図によれば、まず分割データD(1),D(2),D(3)を取得し（ステップＳ５０１）、次に、乱数生成部２２で再分割の際に用いる乱数R’を生成する（ステップＳ５０３）。
【０１５４】
次に、分割データD(1),D(2),D(3)それぞれに乱数R’を所定のルールで注入する（ステップＳ５０５）。これは、後述するようなルールにより分割データD(1),D(2),D(3)の分割部分データと乱数R’の乱数部分データの排他的論理和をとり、新たな分割データD’(1),D’(2),D’(3)を生成するものである（ステップＳ５０７）。
【０１５５】
図１０は、元データSを、元データの半分の長さの処理単位ビット長bに基づいて分割数n=3で３分割する場合の分割部分データの定義式、乱数の再注入後の分割部分データの定義式、および各分割部分データから元データを復元する場合の計算式などを示す表である。
【０１５６】
ここで、分割部分データD(i,j)の定義式について説明する。
【０１５７】
まず、第１の分割データD(1)に対しては、図８に示すように、第１の分割部分データD(1,1)は、定義式S(1)*R(1)*R(2)で定義され、第２の分割部分データD(1,2)は定義式S(2)*R(2)で定義される。なお、この定義式の一般形は、D(1,j)に対してはS(j)*R(j)*R(j+1)であり、D(1,j+1)に対してS(j+1)*R(j+1)である（jは奇数とする）。
【０１５８】
また、第２の分割データD(2)に対しては、図８に示すように、D(2,1)はS(1)*R(1)で定義され、D(2,2)はS(2)*R(1)*R(2)で定義される。この定義式の一般形は、D(2,j)に対してはS(j)*R(j)であり、D(2,j+1)に対してはS(j+1)*R(j)*R(j+1)である（jは奇数とする）。
【０１５９】
更に第３の分割データD(3)に対しては、図８に示すように、D(3,1)はR(1)で定義され、D(3,2)はR(2)で定義される。この定義式の一般形は、D(3,j)に対してはR(j)であり、D(3,j+1)に対してはR(j+1)である（jは奇数とする）。
【０１６０】
次に、新たな乱数R’注入後の分割部分データD’(i,j)の定義式について説明する。
【０１６１】
まず、第１の分割データD’(1)に対しては、図１０に示すように、第１の分割部分データD’(1,1)は、定義式D(1,1)* R’(1)*R’(2)、即ち、S(1)*R(1)*R(2)*R’(1)*R’(2)で定義され、第２の分割部分データD’(1,2)は、定義式D(1,2)*R’(2)、即ち、S(2)*R(2)* R’(2)で定義される。なお、この定義式の一般形は、D’(1,j)に対してはD(1,j)*R’(j)*R’(j+1)であり、D’(1,j+1)に対してD(1,j+1)*R’(j+1)である（jは奇数とする）。
【０１６２】
また、第２の分割データD’(2)に対しては、図１０に示すように、D’(2,1)はD(2,1)* R’(1)、即ち、S(1)*R(1)* R’(1)で定義され、D’(2,2)はD (2,2)*R’(1)*R’(2)、即ち、S(2)*R(1)* R(2)*R’(1)*R’(2)で定義される。この定義式の一般形は、D’(2,j)に対してはD(2,j)* R’(j)であり、D’(2,j+1)に対してはD(2,j+1)* R’(j)*R’(j+1)である（jは奇数とする）。
【０１６３】
また、第３の分割データD’(3)に対しては、図１０に示すように、D’(3,1)はD(3,1)* R’(1)、即ち、R(1)* R’(1)で定義され、D’(3,2)はD (3,2)*R’(2)、即ち、R(2)* R’(2)で定義される。この定義式の一般形は、D’(3,j)に対してはD(3,j)* R’(j)*であり、D’(3,j+1)に対してはD (3,j+1)* R’(j+1)である（jは奇数とする）。
【０１６４】
このように、再分割部分データD’(i,j)はそれぞれ、分割部分データD (i,j)に、分割部分データD (i,j)の定義式で注入されていた乱数部分データR(j)に対応する乱数部分データR’(j)を注入して排他的論理和を計算して求めるものである。
【０１６５】
次に、図１０の右側に示す表を参照して、再分割データから元データを復元する処理について説明する。これは、データ秘匿装置２の元データ復元部２５の機能を説明するものである。
【０１６６】
まず、分割部分データD’(2,1),D’(3,1)から第１の元部分データS(1)を次のように生成することができる。
【０１６７】
D’(2,1)*D’(3,1)=(S(1)*R(1)*R’(1))*(R(1)*R’(1))
=S(1)*(R(1)*R(1))* (R’(1)* R’(1))
=S(1)*0*0
=S(1)
また、別の分割部分データから次のように第２の元部分データS(2)を生成することができる。
【０１６８】
D’(2,2)*D’(3,1)*D’(3,2)=(S(2)*R(1)*R(2)*R’(1)*R’(2))*
(R(1)* R’(1))* (R(2)* R’(2))
=S(2)*(R(1)*R(1))*(R(2)*R(2))*
(R’(1)* R’(1))* (R’(2)* R’(2))
=S(2)*0*0*0*0
=S(2)
一般に、jを奇数として、
D’(2,j)*D’(3,j)=(S(j)*R(j)*R’(j))*(R(j)* R’(j))
=S(j)*(R(j)*R(j))*(R’(j)*R’(j))
=S(j)*0*0
=S(j)
であるから、D’(2,j)*D’(3,j)を計算すれば、S(j)が求まる。
【０１６９】
また、一般に、jを奇数として、
D’(2,j+1)* D’(3,j)*D’(3,j+1)=(S(j+1)*R(j)*R(j+1)*R’(j)*R’(j+1))*
(R(j)* R’(j))*(R(j+1)* R’(j+1))
=S(j+1)*((R(j)*R(j))*(R(j+1)*R(j+1))* 
*(R’(j)*R’(j))*(R’(j+1)*R’(j+1))
=S(j+1)*0*0*0*0
=S(j+1)
であるから、D’(2,j+1)* D’(3,j)*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))*
(R(1)* R’(1))* (R(2)* R’(2))
= S(1)*(R(1)*R(1))* (R(2)*R(2)) *
(R’(1)* R’(1))* (R’(2)* R’(2))
=S(1)*0*0*0*0
=S(1)
であるから、D’(1,1)*D’(3,1)*D’(3,2)を計算すれば、S(1)が求まる。
【０１７２】
また同様に、
D’(1,2)* D’(3,2)=(S(2)*R(2)*R’(2))*(R(2)*R’(2))
=S(2)*(R(2)*R(2))*(R’(2)*R’(2))
=S(2)*0*0
=S(2)
であるから、D’(1,2)* D’(3,2)を計算すれば、S(2)が求まる。
【０１７３】
一般に、jを奇数として、
D’(1,j)*D’(3,j)*D’(3,j+1)=(S(j)*R(j)*R(j+1)*R’(j)*R’(j+1))*
(R(j)*R’(j))*(R(j+1)*R’(j+1))
=S(j)*(R(j)*R(j))*(R(j+1)*R(j+1))*
(R’(j)*R’(j))* (R’(j+1)*R’(j+1))
=S(j)*0*0*0*0
=S(j)
であるから、D’(1,j)*D’(3,j)*D’(3,j+1)を計算すれば、S(j)が求まる。
【０１７４】
また、一般に、jを奇数として、
D’(1,j+1)* D’(3,j+1)=(S(j+1)*R(j+1)*R’(j+1)) *(R(j+1)*R’(j+1))
=S(j+1)*(R(j+1)*R(j+1))*(R’(j+1)*R’(j+1))
=S(j+1)*0*0
=S(j+1)
であるから、D’(1,j+1)* D’(3,j+1)を計算すれば、S(j+1)が求まる。
【０１７５】
次に、D’(1),D’(2)を取得してSを復元する場合には、次のようになる。
【０１７６】
D’(1,1)*D’(2,1)=(S(1)*R(1)*R(2)*R’(1)*R’(2))*(S(1)*R(1)*R’(1))
=(S(1)*S(1))*(R(1)*R(1))*(R’(1)*R’(1))*R(2)* R’(2)
=0*0*0*R(2)*R’(2)
=R(2)*R’(2)
であるから、D’(1,1)*D’(2,1)を計算すれば、R(2)*R’(2)が求まる。
【０１７７】
また同様に、
D’(1,2)*D’(2,2)=(S(2)*R(2)*R’(2))*(S(2)*R(1)*R(2)*R’(1)*R’(2))
=(S(2)*S(2))*R(1)*R’(1)*(R(2)*R(2))*(R’(2)*R’(2))
=0*R(1)*R’(1)*0*0
=R(1)*R’(1)
であるから、D’(1,2)*D’(2,2)を計算すれば、R(1)*R’(1)が求まる。
【０１７８】
このR(1)*R’(1)，R(2)*R’(2)を使用してS(1),S(2)を求める。
【０１７９】
D’(2,1)* R(1)*R’(1)=(S(1)*R(1)*R’(1))* R(1)*R’(1)
=S(1)*(R(1)*R(1))* (R’(1)*R’(1))
=S(1)*0*0
=S(1)
であるから、D’(2,1)*R(1)*R’(1)を計算すれば、S(1)が求まる。
【０１８０】
また同様に、
D’(1,2)*R(2)*R’(2)=(S(2)*R(2)*R’(2))* R(2)*R’(2)
=S(2)*(R(2)*R(2))* (R’(2)*R’(2))
=S(2)*0*0
=S(2)
であるからD’(2,2)*R(2)*R’(2)を計算すればS(2)が求まる。
【０１８１】
一般に、jを奇数として、
D’(1,j)*D’(2,j)=(S(j)*R(j)*R(j+1)*R’(j)*R’(j+1))*(S(j)*R(j)*R’(j))
=(S(j)*S(j))*(R(j)*R(j))*(R’(j)*R’(j))*R(j+1) *R’(j+1)
=0*0*0*R(j+1)*R’(j+1)
= R(j+1)*R’(j+1)
であるからD’(1,j)*D’(2,j)を計算すればR(j+1)*R’(j+1)が求まる。
【０１８２】
また同様に、
D’(1,j+1)*D’(2,j+1)=(S(j+1)* R(j+1)*R’(j+1))*
(S(j+1)*R(j)*R(j+1)* R’(j)*R’(j+1))
=(S(j+1)*S(j+1))*R(j)* R’(j)*
(R(j+1)*R(j+1))*(R’(j+1)* R’(j+1))
=0* R(j)* R’(j)*0*0
= R(j)* R’(j)
であるからD’(1,j+1)*D’(2,j+1)を計算すればR(j)* R’(j)が求まる。
【０１８３】
このR(j)* R’(j)，R(j+1)*R’(j+1)を使用してS(j),S(j+1)を求める。
【０１８４】
D’(2,j)*R(j)* R’(j)=(S(j)*R(j)*R’(j))*R(j)*R’(j)
=S(j)*(R(j)*R(j))*(R’(j)*R’(j))
=S(j)*0*0
=S(j)
であるからD’(2,j)*R(j)* R’(j)を計算すればS(j)が求まる。
【０１８５】
また同様に、
D’(1,j+1)*R(j+1)* R’(j+1)=(S(j+1)*R(j+1)*R’(j+1))*R(j+1)* R’(j+1)
=S(j+1)*(R(j+1)*R(j+1))* (R’(j+1)*R’(j+1))
=S(j+1)*0*0
=S(j+1)
であるからD’(1,j+1)*R(j+1)* R’(j+1)を計算すればS(j+1)が求まる。
【０１８６】
以上、乱数追加注入方式により再分割データを生成した場合には、３つの再分割データD’(1),D’(2),D’(3)のすべてを用いなくても、３つの再分割データのうち、２つの再分割データを用いて上述したように元データを復元することができる。
【０１８７】
また、乱数追加注入方式においては、一旦元データを復元することなく（元データが見える形で現れない）、データの再分割処理を行うことができるので、よりセキュアなデータ管理が可能となる。
【０１８８】
（２−２．乱数書き換え方式）
図１１は、乱数書き換え方式におけるデータ再分割処理の概要を説明するフローチャート図である。同図によれば、まず分割データD(1),D(2),D(3)を取得し（ステップＳ６０１）、次に、乱数生成部２２で再分割の際に用いる乱数R’を生成する（ステップＳ６０３）。
【０１８９】
次に、分割データD(1),D(2),D(3)それぞれに乱数R’を上述した乱数追加注入方式により注入する（ステップＳ６０５）。次に、乱数R’を注入された分割データから旧乱数であるRを消去して、新たな再分割データD’(1),D’(2),D’(3)を生成する（ステップＳ６０７，Ｓ６０９）。
【０１９０】
図１２は、元データSを、元データの半分の長さの処理単位ビット長bに基づいて分割数n=3で３分割する場合の分割部分データの定義式、乱数R’の再注入後の分割部分データの定義式、さらに乱数Rを消去後の分割部分データの定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【０１９１】
本方式においては、ステップＳ６０５までは、上述した乱数追加注入方式と同様であるため、説明は省略し、古い乱数Ｒを消去した分割部分データの定義式について説明する。
【０１９２】
まず、第１の分割データD’(1)に対しては、図１２に示すように、第１の分割部分データD’(1,1)は、定義式(S(1)*R(1)*R(2)*R’(1)*R’(2))*(R(1)*R(2))、即ち、S(1)* R’(1)*R’(2)で定義され、第２の分割部分データD’(1,2)は、定義式(S(2)*R(2)* R’(2))*R(2)、即ち、S(2)*R’(2)で定義される。なお、この定義式の一般形は、D’(1,j)に対してはS(j) *R’(j)*R’(j+1)であり、D’(1,j+1)に対してS(j+1)*R’(j+1)である（jは奇数とする）。
【０１９３】
また、第２の分割データD’(2)に対しては、図１２に示すように、D’(2,1)は(S(1)*R(1)* R’(1))* R(1)、即ち、S(1)* R’(1)で定義され、D’(2,2)は(S(2)*R(1)* R(2)*R’(1)*R’(2))*R(1)*R(2)、即ち、S(2)*R’(1)*R’(2)で定義される。この定義式の一般形は、D’(2,j)に対してはS(j)* R’(j)*であり、D(2,j+1)に対してはS(j+1)* R’(j)*R’(j+1)である（jは奇数とする）。
【０１９４】
また、第３の分割データD’(3)に対しては、図１２に示すように、D’(3,1)は(R(1)* R’(1))*R(1)、即ち、R’(1)で定義され、D’(3,2)は(R(2)* R’(2))* R(2)、即ち、R’(2)で定義される。この定義式の一般形は、D’(3,j)に対してはR’(j)*であり、D(3,j+1)に対してはR’(j+1)である（jは奇数とする）。
【０１９５】
このように、再分割部分データD’(i,j)はそれぞれ、分割部分データD (i,j)に、分割部分データD (i,j)の定義式で注入されていた乱数部分データR(j)に対応する乱数部分データR’(j)を注入した後、さらに乱数部分データR(j)を消去するように乱数部分データR(j)を注入して排他的論理和を計算し、求めるものである。
【０１９６】
その結果、もとの分割部分データD (i,j)の定義式において、乱数部分データR(j)を乱数部分データR’(j)に置換したものが、再分割部分データD ’(i,j)の定義式となる。
【０１９７】
次に、図１２の右側に示す表を参照して、再分割データから元データを復元する処理について説明する。これは、データ秘匿装置２の元データ復元部２５の機能を説明するものである。
【０１９８】
まず、分割部分データD’(2,1),D’(3,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)
また、別の分割部分データから次のように第２の元部分データS(2)を生成することができる。
【０２００】
D’(2,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)
一般に、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)*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’(2,j+1)* D’(3,j)*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,2)* D’(3,2)=(S(2)*R’(2))*R’(2)
=S(2)*(R’(2)*R’(2))
=S(2)*0
=S(2)
であるから、D’(1,2)* D’(3,2)を計算すれば、S(2)が求まる。
【０２０５】
一般に、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+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’(1,j+1)* 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,2)*D’(2,2)=(S(2)*R’(2))*(S(2)*R’(1)*R’(2))
=(S(2)*S(2))*(R’(2)*R’(2))*R’(1)
=0*0*R’(1)
= R’(1)
であるから、D’(1,2)*D’(2,2)を計算すれば、R’(1)が求まる。
【０２１０】
この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’(1,2)*R’(2)=(S(2)*R’(2))* R’(2)
=S(2)* (R’(2)*R’(2))
=S(2)*0
=S(2)
であるからD’(1,2)* R’(2)を計算すればS(2)が求まる。
【０２１３】
一般に、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+1))* (S(j+1)*R’(j)*R’(j+1))
=(S(j+1)*S(j+1))*(R’(j+1)* R’(j+1))*R’(j)
=0*0*R’(j)
=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’(1,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’(1,j+1)* R’(j+1)を計算すればS(j+1)が求まる。
【０２１８】
以上、乱数書き換え方式により再分割データを生成した場合には、３つの再分割データD’(1),D’(2),D’(3)のすべてを用いなくても、３つの再分割データのうち、２つの再分割データを用いて上述したように元データを復元することができる。
【０２１９】
また、乱数書き換え方式においても、一旦元データを復元することなく（元データが見える形で現れない）、データの再分割処理を行うことができるので、よりセキュアなデータ管理が可能となる。
【０２２０】
（３．動作）
次に、図１３を用いて、本実施の形態に係るデータ秘匿装置２の動作を説明する。
【０２２１】
まず、乱数生成部２２が、記憶部２１に記憶されたシードαをもとに擬似乱数生成アルゴリズムＦにより、データＳと同じ長さの乱数Ｆ（α）（上述した秘密分散法Ａでの乱数Ｒに相当）を生成する（ステップＳ１１０）。
【０２２２】
次に、データＳと乱数Ｆ（α）とから、秘密分散法Ａを用いて、分割データD(1), D(2), D(3)を生成し、記憶部２１に記憶するとともに、保管サーバ３ａ及び３ｂに保管する（ステップＳ１２０，Ｓ１３０）。
【０２２３】
尚、擬似乱数生成アルゴリズムＦは、その時点（データＳを擬似乱数アルゴリズムＦを用いて分割する時点）において、コンピュータの計算能力からブロック暗号が解読不能であると判断される程度の計算量を要するアルゴリズムで、分割データ生成時にはデータ秘匿装置２に与えられている。
【０２２４】
時間の経過とともにコンピュータの性能が向上し、擬似乱数アルゴリズムＦを構成するブロック暗号の脆弱化が予測された場合（例えば、具体的には、ブロック暗号解読に必要な計算量と、その時点で入手可能なコンピュータの計算能力の双方を鑑みて、数年程度で解読可能な場合など）には、解読に必要な計算量がより大きいブロック暗号を構成要素に持つ擬似乱数アルゴリズムＧを用いて、記憶部２１に記憶されたシードβをもとに、データＳと同じ長さの乱数Ｇ（β）（上述した秘密分散法Ａでの乱数Ｒ’に相当）を生成する（ステップＳ１４０，Ｓ１５０）。
【０２２５】
次に、記憶部２１及び保管サーバ３ａ,３ｂに保管された分割データD(1), D(2), D(3)から秘密分散法Ａを用いて再分割データD’(1), D’(2), D’(3)を生成し、分割データD(1), D(2), D(3)に代えて、記憶部２１及び保管サーバ３ａ,３ｂに保管する（ステップＳ１６０，Ｓ１７０）。
【０２２６】
尚、擬似乱数生成アルゴリズムＧは、上述したように擬似乱数生成アルゴリズムＦより計算量が必要とされ、その時点（分割データを擬似乱数アルゴリズムＧを用いて再分割する時点）において、コンピュータの計算能力からブロック暗号が解読不能であると判断される程度の計算量を要するアルゴリズムで、再分割データ生成時にはデータ秘匿装置２に与えられている。例えば、具体的には、擬似乱数生成アルゴリズムＦの構成要素には１２８ビット鍵のＡＥＳ（Advanced Encryption Standard）が用いられていた場合には、擬似乱数生成アルゴリズムＧの構成要素としては、２５６ビット鍵のＡＥＳを用いるものである。
【０２２７】
以降は、上記ステップＳ１４０〜Ｓ１７０の繰り返しである。即ち、時間の経過とともにコンピュータの性能が向上し、擬似乱数アルゴリズムＧを構成するブロック暗号の脆弱化が予測された場合、解読に必要な計算量がより大きいブロック暗号を構成要素に持つ擬似乱数アルゴリズムＨを用いて、記憶部２１に記憶されたシードγをもとに、乱数Ｈ（γ）を生成し、記憶部２１及び保管サーバ３ａ,３ｂに保管された再分割データD’(1), D’(2), D’(3)から、秘密分散法Ａを用いて、再分割データD” (1), D”(2), D”(3)を生成し、再分割データD’(1), D’(2), D’(3)に代えて、記憶部２１及び保管サーバ３ａ,３ｂに保管する（ステップＳ１４０，Ｓ１５０，Ｓ１６０，Ｓ１７０）。
【０２２８】
尚、データＳを復号するときは、記憶部２１及び保管サーバ３ａ,３ｂに保管された分割データ（再分割データ）のうち、いずれか２つから秘密分散法Ａを用いて復号化する（ステップＳ１８０）。
【０２２９】
従って、本実施の形態に係るデータ秘匿装置２によれば、ブロック暗号を用いた擬似乱数生成アルゴリズムにより生成された乱数を用いて、秘密分散法Ａにより生成された分割データを、所定の時期にさらに、秘密分散法Ａにより、より計算量の大きい擬似乱数生成アルゴリズムにより生成された乱数を用いて、さらに再分割するので、長期間にわたってデータを秘匿し続けることができる。
【０２３０】
特に、秘密分散法Ａは、データを所望の処理単位ビット長に基づいて所望の分割数の分割データに分割するデータ分割方法であり、データを処理単位ビット長毎に区分けして、複数の元部分データを生成し、この複数の元部分データの各々に対応して、データのビット長と同じまたはこれより短い長さの乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割データを構成する各分割部分データを元部分データと乱数部分データの排他的論理和によって処理単位ビット長毎に生成して、所望の分割数の分割データを生成するとともに、新たに発生させた乱数から処理単位ビット長の複数の乱数部分データを生成し、各分割部分データと該乱数部分データの排他的論理和により処理単位ビット長毎に再分割部分データを生成して、所望の分割数の再分割データを生成するので、データを復元することなく、データを再分割することができるので、データをよりセキュアに管理することができる。
【０２３１】
尚、本実施の形態における秘密分散法Ａは、多項式演算・剰余演算などを含む多倍長整数の演算処理を必要としないので、大容量データを多数処理する場合においても簡単かつ迅速にデータの分割および復元を行うことができるという効果を得ることができる。
【図面の簡単な説明】
【０２３２】
【図１】本発明の第１の実施の形態に係るデータ秘匿装置の概略構成を示すブロック図である。
【図２】本発明の第１の実施の形態に係るデータ秘匿装置の動作を示すフローチャート図である。
【図３】本発明の第２の実施の形態に係るデータ秘匿装置の概略構成を示すブロック図である。
【図４】秘密分散法Ａの分割数ｎ＝３の場合の分割処理を示すフローチャートである。
【図５】秘密分散法Ａにおいて１６ビットの元データSを８ビットの処理単位ビット長に基づいて分割数n=3で３分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図６】秘密分散法Ａの分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図７】秘密分散法Ａの分割数がｎで処理単位ビット長がｂである場合の一般的な分割処理を示すフローチャートである。
【図８】秘密分散法Ａの分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。
【図９】秘密分散法Ａのデータ再分割処理（乱数追加注入方式）を示すフローチャートである。
【図１０】乱数追加注入方式により元データSを元データSの半分の長さの処理単位ビット長に基づいて分割数n=3で再分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図１１】秘密分散法Ａのデータ再分割処理（乱数書き換え方式）を示すフローチャートである。
【図１２】乱数書き換え方式により元データSを元データSの半分の長さの処理単位ビット長に基づいて分割数n=3で再分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図１３】本発明の第２の実施の形態に係るデータ秘匿装置の動作を示すフローチャート図である。
【図１４】バーナム暗号の一例を説明する図である。
【符号の説明】
【０２３３】
１，２…データ秘匿装置
３ａ，３ｂ…保管サーバ
４…通信ネットワーク
１１，２１…記憶部
１２，２２…乱数生成部
１３…データ暗号部
１４…データ復号部
２３…分割データ生成部
２４…再分割データ生成部
２５…元データ復元部
２６…通信部
【図１】
0004619045.tif 000007
【図２】
0004619045.tif 000008
【図３】
0004619045.tif 000009
【図４】
0004619045.tif 000010
【図５】
0004619045.tif 000011
【図６】
0004619045.tif 000012
【図７】
0004619045.tif 000013
【図８】
0004619045.tif 000014
【図９】
0004619045.tif 000015
【図１０】
0004619045.tif 000016
【図１１】
0004619045.tif 000017
【図１２】
0004619045.tif 000018
【図１３】
0004619045.tif 000019
【図１４】
0004619045.tif 000020