(57)【特許請求の範囲】
【請求項１】
秘密データから、当該秘密データを復元可能な複数の分散データを生成する秘密分散装置であって、
前記秘密データは、乱数を含まない複数の分割データを有し、
分割データ同士で排他的論理和を行い、分割データ同士の排他的論理和を含む分散データを複数、生成する分散データ生成手段、を備え、
前記秘密データは、前記複数の分割データ（Ｄ）を含む分割グループ（Ｄ（番号１）、Ｄ（番号２）、・・・、Ｄ（番号ｎ）、・・・）を複数、有し（番号ｎは２以上の整数）、
前記分散データ生成手段は、前記分割データ（Ｄ）を前記分割グループ同士で排他的論理和を行い、排他的論理和が行われた複数の分割グループを含む分散データを複数、生成し、
前記複数の分散データのうち、任意の分散データが有する少なくとも２つの分割グループは、他の任意の分散データが有する少なくとも２つの分割グループと比較して、番号１、２、…、ｎに沿ってシフトしている、
ことを特徴とする秘密分散装置。
【請求項２】
前記分散データ生成手段は、さらに、前記分割データと乱数データとの組み合わせで排他的論理和を行い、前記分割データ同士の排他的論理和と、前記分割データおよび乱数データとの組み合わせの排他的論理和とを含む分散データを生成する、
ことを特徴とする請求項１に記載の秘密分散装置。
【請求項３】
さらに、前記複数の分割データから少なくとも１つの分割データを用いて前記乱数データを算出する乱数生成手段を備えた、
ことを特徴とする請求項２に記載の秘密分散装置。
【請求項４】
さらに、前記分割データを複数のサブ分割データに分割する分割手段、を備え、
前記分散データ生成手段は、前記サブ分割データ同士で排他的論理和を行い、サブ分割データ同士の排他的論理和を含む分散データを生成する、
ことを特徴とする請求項１から３のうちいずれか一項に記載の秘密分散装置。
【請求項５】
前記分散データ生成手段は、Ｎ個以上の前記分割グループ同士で排他的論理和を行い（Ｎは２以上の整数）、閾値Ｎの分散データを複数、生成する、
ことを特徴とする請求項１から４のうちいずれか一項に記載の秘密分散装置。
【請求項６】
前記分散データ生成手段は、前記分散データの属性を示す属性情報を、当該分散データに付加する、
ことを特徴とする請求項１から５のうちいずれか一項に記載の秘密分散装置。
【請求項７】
前記分散データ生成手段は、前記属性情報を前記分割データとして、前記分割グループ同士で排他的論理和を行う、
ことを特徴とする請求項６に記載の秘密分散装置。
【請求項８】
データから、当該データを復元可能な複数の分散データを生成する分散装置であって、
前記データは、乱数を含まない複数の分割データを有し、
分割データ同士で排他的論理和を行い、分割データ同士の排他的論理和を含む分散データを複数、生成する分散データ生成手段、を備え、
前記データは、前記複数の分割データ（Ｄ）を含む分割グループ（Ｄ（番号１）、Ｄ（番号２）、・・・、Ｄ（番号ｎ）、・・・）を複数、有し（番号ｎは２以上の整数）、
前記分散データ生成手段は、前記分割データ（Ｄ）を前記分割グループ同士で排他的論理和を行い、排他的論理和が行われた複数の分割グループを含む分散データを複数、生成し、
前記複数の分散データのうち、任意の分散データが有する少なくとも２つの分割グループは、他の任意の分散データが有する少なくとも２つの分割グループと比較して、番号１、２、…、ｎに沿ってシフトしている、
ことを特徴とする分散装置。
【請求項９】
秘密データから、当該秘密データを復元可能な複数の分散データを生成する秘密分散装置であって、
二つ以上のデータに対して演算処理を行う演算処理手段と、
当該秘密データを複数に分割した分割データを含む少なくとも一つの分割ブロックと、その他の分割データを含む少なくとも一つの分割ブロックとの間で、前記演算処理手段による演算処理を行うことで分散データの少なくとも一つを生成し、分割データにおける分割ブロックの並びを維持したままで、前記演算処理を行う各分割データ間における分割ブロックの組合せの少なくとも一つを変えて前記演算処理を行うことで、異なる分散データを生成する分散データ生成手段と、を備え、
前記演算処理を行う各分割データ間のデータの組合せが全く異なるように配置するために、基準となる分割データに対して、その他の分割データの相対位置をシフトするものである、
ことを特徴とする秘密分散装置。
【請求項１０】
基準となる分割データに対して、相対位置を所定方向にシフトする分割データと、相対位置を前記所定方向と逆方向にシフトする分割データを配置することで、前記演算処理を行う各分割データ間のデータの組合せを全く異なるようにする、
ことを特徴とする請求項９に記載の秘密分散装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、少ないデータ量で復元処理が可能な、秘密分散装置および秘密分散方法に関するものである。
【背景技術】
【０００２】
従来、閾値秘密分散としては、多項式補間を利用する手法がよく知られている（例えば、非特許文献１参照。）。しかし、この手法では計算処理に時間を要するため、リアルタイム性を要求される場合や大量のデータに対して用いる場合には不適であった。
【０００３】
これを解決する手段として、多項式補間ではなく、ＸＯＲ処理を用いる閾値秘密分散法が提案されている（例えば、特許文献１、２、３参照）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ａ．Ｓｈａｍｉｒ：“Ｈｏｗ  ｔｏ  Ｓｈａｒｅ  ａ  Ｓｅｃｒｅｔ”、Ｃｏｍｍｕｎｉｃａｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ、Ｎｏｖｅｍｂｅｒ  １９７９、Ｖｏｌｕｍｅ  ２２、Ｎｕｍｂｅｒ  １１
【特許文献】
【０００５】
【特許文献１】特開２００７−１２４０３２号公報
【特許文献２】特開２００８−１４５９１７号公報
【特許文献３】特開２００８−２０３７２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、これらのＸＯＲ処理を用いる閾値秘密分散法では、乱数列がばれると、分散データから元データを推測されてしまう危険がある。また、分散データのデータ量が元データと同じサイズであるため、分散数が増加すると、大量のメモリが必要である。さらに、閾値の数が制限されるなど、閾値秘密分散法として一定の制限がある場合がある。
【０００７】
本発明は、このような従来の技術の問題点を解消するべく案出されたものであり、その主な目的は、分散データから元データを推測されない、安全なＸＯＲ処理を用いる閾値秘密分散法を実現することにある。また、分散データのデータ量を削減することを可能とし、かつ自由に分散数、閾値の設定を可能することで、使いやすい秘密分散装置、分散装置および秘密分散方法を提供することである。
【課題を解決するための手段】
【０００８】
本発明は、秘密データから、当該秘密データを復元可能な複数の分散データを生成する秘密分散装置であって、秘密データは、乱数を含まない複数の分割データを有し、分割データ同士で排他的論理和を行い、分割データ同士の排他的論理和を含む分散データを複数、生成する分散データ生成手段を備え、前記秘密データは、前記複数の分割データ（Ｄ）を含む分割グループ（Ｄ（番号１）、Ｄ（番号２）、・・・、Ｄ（番号ｎ）、・・・）を複数、有し（番号ｎは２以上の整数）、前記分散データ生成手段は、前記分割データ（Ｄ）を前記分割グループ同士で排他的論理和を行い、排他的論理和が行われた複数の分割グループを含む分散データを複数、生成し、前記複数の分散データのうち、任意の分散データが有する少なくとも２つの分割グループは、他の任意の分散データが有する少なくとも２つの分割グループと比較して、番号１、２、…、ｎに沿ってシフトしている。
【０００９】
本発明によれば、分割データ同士で排他的論理和を行うので、分散データを秘密データより少ないデータ量にすることができ、復元処理の速度を向上させることができる。
【００１１】
本発明によれば、任意の２つの分散データ同士で、分割データの排他的論理和の組み合わせに規則性を持たせることができる。
【００１２】
本発明は、分散データ生成手段は、さらに、分割データと乱数データとの組み合わせで排他的論理和を行い、分割データ同士の排他的論理和と、分割データおよび乱数データとの組み合わせの排他的論理和とを含む分散データを生成する。
【００１３】
本発明によれば、分割データを乱数データで暗号化することができ、セキュリティを向上させることができる。
【００１４】
本発明は、さらに、複数の分割データから少なくとも１つの分割データを用いて乱数データを算出する乱数生成手段を備える。
【００１５】
本発明によれば、乱数のシードを予め準備する必要がないので、簡易に乱数を発生させることができる。
【００１６】
本発明は、さらに、分割データを複数のサブ分割データに分割する分割手段を備え、分散データ生成手段は、サブ分割データ同士で排他的論理和を行い、サブ分割データ同士の排他的論理和を含む分散データを生成する。
【００１７】
本発明によれば、秘密データを細かく分割するので、分散データをより多く生成することで、セキュリティを向上させることができる。
【００１８】
本発明は、分散データ生成手段は、Ｎ個以上の分割グループ同士で排他的論理和を行い（Ｎは２以上の整数）、閾値Ｎの分散データを複数、生成する。
【００１９】
本発明によれば、閾値Ｎの分散データを生成することができる。
【００２０】
本発明は、分散データ生成手段は、分散データの属性を示す属性情報を、当該分散データに付加する。
【００２１】
本発明によれば、分散データにその属性が示されているので、分散データの復元を容易に行うことができる。
【００２２】
本発明は、分散データ生成手段は、属性情報を分割データとして、分割グループ同士で排他的論理和を行う。
【００２３】
本発明は、秘密データから、当該秘密データを復元可能な複数の分散データを生成する秘密分散装置であって、二つ以上のデータに対して演算処理を行う演算処理手段と、当該秘密データを複数に分割した分割データを含む少なくとも一つの分割ブロックと、その他の分割データを含む少なくとも一つの分割ブロックとの間で、演算手段による演算処理を行うことで分散データの少なくとも一つを生成し、分割データにおける分割ブロックの並びを維持したまま、演算処理を行う各分割データ間における分割ブロックの組合せの少なくとも一つを変えて演算処理を行うことで、異なる分散データを生成する分散データ生成手段とを備え、演算処理を行う各分割データ間のデータの組合せが全く異なるように配置するために、基準となる分割データに対して、その他の分割データの相対位置をシフトする。
【００２４】
なお秘密データとは、データの中に秘匿しなければならないデータが少なくとも１部あるデータのことであり、すべてを秘匿しなければならないというわけではない。
【００２５】
また、「分割」とは単純にデータを分けることで、秘密分散における「分散」と言葉を使い分けている。但し、分割方法の１種として「分散」が利用できる場合もあり、ここで言う「分割」は「分散」を含むこともある。
【００２６】
本発明によれば、分割データ同士で排他的論理和と同等の演算を行うので、分散データを秘密データより少ないデータ量にすることができ、メモリの縮小と分散処理の速度向上を図ることができる。
【００４７】
本発明によれば、各分散データで、裸で見えるデータ部分を少なくすることができ、各分散データのデータサイズを小さくできる。また、更に高速に処理できるようになる。
【００４８】
本発明は、基準となる分割データに対して、相対位置を所定方向にシフトする分割データと、相対位置を所定方向と逆方向にシフトする分割データを配置することで、演算処理を行う各分割データ間のデータの組合せを全く異なるようにする。
【００４９】
本発明によれば、復元処理のアルゴリズムを非常に単純化でき、より高速な復元処理が可能となる。
【発明の効果】
【００５０】
本発明によれば、分割データ同士で排他的論理和を行うので、分散データを秘密データより少ないデータ量にすることができ、復元処理の速度を向上させることができる。
【図面の簡単な説明】
【００５１】
【図１】（ａ）〜（ｃ）本発明による分散データの生成方法の一例を示す図
【図２】（ａ）閾値２における元データの復元方法の一例を示す図、（ｂ）他の計算処理方法を示す図
【図３】閾値２における元データの復元方法の一例を示す図
【図４】閾値２における元データの復元方法の一例を示す図
【図５】分散データのフォーマットの一例を示す図
【図６】閾値２における元データの復元方法の一例を示す図
【図７】本発明による秘密分散法の一例を示すブロック図
【図８】本発明による秘密分散法のハードウェア構成図
【図９】秘密分散法のハードウェアの一例を示す構成図
【図１０】閾値２における分散データの生成方法の一例を示す図
【図１１】分散データのフォーマットの一例を示す図
【図１２】閾値２における元データの復元方法の一例を示す図
【図１３】閾値２における元データの復元方法の一例を示す図
【図１４】閾値２における分散データの生成方法の一例を示す図
【図１５】分散データのフォーマットの一例を示す図
【図１６】閾値２における分散データの生成方法の一例を示す図
【図１７】閾値２における分散データの生成方法の一例を示す図
【図１８】閾値２における分散データの生成方法の一例を示す図
【図１９】閾値２における分散データの生成方法の一例を示す図
【図２０】閾値２における分散データの生成方法の一例を示す図
【図２１】閾値２における分散データの生成方法の一例を示す図
【図２２】閾値２における分散データの生成方法の一例を示す図
【図２３】閾値２における分散データの生成方法の一例を示す図
【図２４】閾値２における分散データの生成方法の一例を示す図
【図２５】本発明による乱数の共有方法の一例を示す図
【図２６】閾値２における分散データの生成方法の一例を示す図
【図２７】閾値２における分散データの生成方法の一例を示す図
【図２８】閾値２における分散データの生成方法の一例を示す図
【図２９】閾値２における分散データの生成方法の一例を示す図
【図３０】閾値２における分散データの生成方法の一例を示す図
【図３１】閾値２における分散データの生成方法の一例を示す図
【図３２】閾値２における分散データの生成方法の一例を示す図
【図３３】閾値２における分散データの生成方法の一例を示す図
【図３４】分散データのフォーマットの一例を示す図
【図３５】閾値２における分散データの生成方法の一例を示す図
【図３６】閾値２における分散データの生成方法の一例を示す図
【図３７】閾値２における分散データの生成方法の一例を示す図
【図３８】閾値２における分散データの生成方法の一例を示す図
【図３９】閾値２における分散データの生成方法の一例を示す図
【図４０】閾値２における分散データの生成方法の一例を示す図
【図４１】閾値２における分散データの生成方法の一例を示す図
【図４２】閾値２における分散データの生成方法の一例を示す図
【図４３】閾値２における分散データの生成方法の一例を示す図
【図４４】閾値２における分散データの生成方法の一例を示す図
【図４５】閾値３における分散データの生成方法の一例を示す図
【図４６】閾値３における元データの復元方法の一例を示す図
【図４７】閾値３における分散データの生成方法の一例を示す図
【図４８】閾値３における分散データの生成方法の一例を示す図
【図４９】閾値３における分散データの生成方法の一例を示す図
【図５０】閾値３における分散データの生成方法の一例を示す図
【図５１】閾値３における分散データの生成方法の一例を示す図
【図５２】閾値３における分散データの生成方法の一例を示す図
【図５３】閾値４における分散データの生成方法の一例を示す図
【図５４】閾値４における元データの復元方法の一例を示す図
【図５５】閾値４における分散データの生成方法の一例を示す図
【図５６】閾値４における分散データの生成方法の一例を示す図
【図５７】閾値２における分散データの生成方法の一例を示す図
【図５８】閾値３における分散データの生成方法の一例を示す図
【図５９】閾値４における分散データの生成方法の一例を示す図
【図６０】閾値５における分散データの生成方法の一例を示す図
【図６１】閾値６における分散データの生成方法の一例を示す図
【図６２】分散データの他の生成方法の一例を示す図
【図６３】分散データの他の生成方法の一例を示す図
【図６４】分散データの他の生成方法の一例を示す図
【図６５】分散データの他の生成方法の一例を示す図
【図６６】分散データの他の生成方法の一例を示す図
【図６７】分散データの他の生成方法の一例を示す図
【図６８】図６７を補足する説明図
【図６９】閾値５、分散数６のケースでの分散データ生成方法の詳細な説明図
【図７０】分散データの他の復元方法の一例を示す図
【図７１】図７０の詳細な説明図
【図７２】閾値が２で、真性（物理）乱数を利用する場合の安全度を示す図
【図７３】閾値が３で、真性（物理）乱数を利用する場合の安全度を示す図
【図７４】閾値ｋが任意の値で、真性（物理）乱数を利用する場合の安全度を示す図
【図７５】閾値が２で、真性（物理）乱数を利用しない場合の安全度を示す図
【図７６】閾値が３で、真性（物理）乱数を利用しない場合の安全度を示す図
【図７７】閾値ｋが任意の値で、真性（物理）乱数を利用しない場合の安全度を示す図
【図７８】本発明の閾値秘密分散方式が保持する安全性を示す図
【図７９】耐障害性を向上させる方法を示した図
【図８０】分散データから分散データを生成する方法を示した図
【発明を実施するための形態】
【００５２】
以下、本発明の実施の形態を、図面を参照しながら説明する。
【００５３】
（実施の形態１）
図１（ａ）〜（ｃ）は、本発明による分散データの生成方法の一例を示す図である。ここでは、元データから、分散（Ａ）、分散（Ｂ）、分散（Ｃ）の３個の分散データを生成（秘密分散）する方法を説明する。
【００５４】
図に示したように、秘密にすべきデータ（秘密データ、以下単に「元データ」と称す。）を、同じデータサイズの１４のブロック（列）からなる、複数の分割データに分割する。これらの分割データは乱数を含まない。１ブロック分の分割データは、分割ブロックに相当し、ブロック（列）を意味する。
【００５５】
これ以降、他の図も含めて、元データの１番目のブロック（列）を列１と呼び、順に、列２、列３・・・と呼び識別する。このブロック（列）のデータサイズは、１ビット単位で、任意のサイズに設定可能である。なお、ここでは元データを１４のブロック（列）に分割しているが、実際は２個以上であれば、いくつのブロック（列）に分割してもよい。
【００５６】
一方、元データから生成される分散（Ａ）、分散（Ｂ）、分散（Ｃ）の各分散データは、これ以降、他の図も含めて、１番目のブロック（列）を列ａと呼び、順に、列ｂ、列ｃ・・・と呼び識別する。また「分散（Ｘ）の列ｙ」は、［分散（Ｘ）ｙ］と表記する。例えば、「分散（Ａ）の列ａ」は、［分散（Ａ）ａ］と記す。
【００５７】
はじめに、分散（Ａ）の生成方法について説明する。［分散（Ａ）ａ］は、列１と列２とをＸＯＲ処理した値である。同様に、［分散（Ａ）ｂ］は、列３と列４とをＸＯＲ処理した値である。［分散（Ａ）ｃ］以下も、図に示したように、同様の処理によって計算する。このように、分散（Ａ）は、元データを２段（行）に畳み込んでいる。従って、分散（Ａ）のブロック（列）数は、元データのブロック（列）数の１／２になる。
【００５８】
ここで、分散（Ａ）の分散データについて、分割グループを用いて説明する。上記の説明で、元データがブロック（列）に分割された分割データを示したが、ここで、分割データをＤとし、分割グループは、分割データＤ（１）、分割データＤ（２）、・・・、分割データＤ（ｎ）、・・・（ｎは２以上の整数）からなるものとする。奇数の分割データ、１、３、５、７、９、１１を、Ｄ（１）＝１、Ｄ（２）＝３、Ｄ（３）＝５、Ｄ（４）＝７、Ｄ（５）＝９、Ｄ（６）＝１１を含む、分割グループをＤＧ１とする。偶数の分割データ、２、４、６、８、１０、１２を、Ｄ（７）＝２、Ｄ（８）＝４、Ｄ（９）＝６、Ｄ（１１）＝８、Ｄ（１１）＝１０、Ｄ（１２）＝１４を含む、分割グループをＤＧ２とする。この場合、分散（Ａ）の分散データは、図１に示すように、分割データＤを分割グループＤＧ１、ＤＧ２同士で排他的論理和を行われ、分割データＤの排他的論理和の組み合わせは、Ｄ（１）  ＸＯＲ  Ｄ（７）、Ｄ（２）  ＸＯＲ  Ｄ（８）、Ｄ（３）  ＸＯＲ  Ｄ（９）、Ｄ（４）  ＸＯＲ  Ｄ（１０）、Ｄ（５）  ＸＯＲ  Ｄ（１１）、Ｄ（６）  ＸＯＲ  Ｄ（１２）となる。
【００５９】
次に、分散（Ｂ）の生成方法について説明する。［分散（Ｂ）ａ］は、元データの列１そのものである。一方、［分散（Ｂ）ｂ］は、列３と列２とをＸＯＲ処理した値である。［分散（Ｂ）ｃ］以下も、図に示したように、［分散（Ｂ）ｂ］と同様の処理によって計算する。このように、分散（Ｂ）は、元データを２段（行）に畳み込んでいる。従って、分散（Ｂ）のブロック（列）数は、元データのブロック（列）数の１／２になる。
【００６０】
但し、この図を見てわかるように、分散（Ｂ）は、分散（Ａ）の下段に図示したブロック、つまり元データの偶数列２、４、６・・・を、右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（Ｂ）では元データの列１４は計算に利用しない。
【００６１】
ここで、分散（Ｂ）の分散データについて、分散（Ａ）と同様に、分割グループを用いて説明すると、分散（Ｂ）の分散データは、図１に示すように、分割データＤを分割グループＤＧ１、ＤＧ２同士で排他的論理和を行われ、分割データＤの排他的論理和の組み合わせは、Ｄ（２）  ＸＯＲ  Ｄ（７）、Ｄ（３）  ＸＯＲ  Ｄ（８）、Ｄ（４）  ＸＯＲ  Ｄ（９）、Ｄ（５）  ＸＯＲ  Ｄ（１０）、Ｄ（６）  ＸＯＲ  Ｄ（１１）となる。
【００６２】
分散（Ａ）の分散データと分散（Ｂ）の分散データを対比した場合、分散（Ａ）の分散データは、分散（Ｂ）の分散データが有する分割グループＤＧ１、ＤＧ２と比較して、排他的論理和が行われている分割データＤの組み合わせが、番号１、２、３、・・・ｎに沿って、一列分シフトしている。
【００６３】
次に、分散（Ｃ）の生成方法について説明する。［分散（Ｃ）ａ］は、元データの列２そのものである。一方、［分散（Ｃ）ｂ］は、列１と列４とをＸＯＲ処理した値である。［分散（Ｃ）ｃ］以下も、図に示したように、［分散（Ｃ）ｂ］と同様の処理によって計算する。このように、分散（Ｃ）は、元データを２段（行）に畳み込んでいる。従って、分散（Ｃ）のブロック（列）数は、元データのブロック（列）数の１／２になる。
【００６４】
但し、この図を見てわかるように、分散（Ｃ）は、分散（Ａ）の上段に図示したブロック、つまり元データの奇数列１、３、５・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（Ｃ）では元データの列１３は計算に利用しない。
【００６５】
ここで、分散（Ｃ）の分散データについて、分散（Ａ）（Ｂ）と同様に、分割グループを用いて説明すると、分散（Ｃ）の分散データは、図１に示すように、分割データＤを分割グループＤＧ１、ＤＧ２同士で排他的論理和を行われ、分割データＤの排他的論理和の組み合わせは、Ｄ（１）  ＸＯＲ  Ｄ（８）、Ｄ（２）  ＸＯＲ  Ｄ（９）、Ｄ（３）  ＸＯＲ  Ｄ（１０）、Ｄ（４）  ＸＯＲ  Ｄ（１１）、Ｄ（５）  ＸＯＲ  Ｄ（１２）となる。
【００６６】
分散（Ｃ）の分散データを分散（Ａ）の分散データと対比した場合、分散（Ｃ）の分散データは、分散（Ａ）の分散データが有する分割グループＤＧ１、ＤＧ２と比較して、排他的論理和が行われている分割データＤの組み合わせが、番号１、２、３、・・・ｎに沿って、一列分シフトしている。
【００６７】
さらに、分散（Ｃ）の分散データを分散（Ｂ）の分散データと対比した場合、分散（Ｃ）の分散データは、分散（Ｂ）の分散データが有する分割グループＤＧ１、ＤＧ２と比較して、排他的論理和が行われている分割データＤの組み合わせが、番号１、２、３、・・・ｎに沿って、二列分シフトしている。
【００６８】
すなわち、３つの分散データのうち、任意の分散データが有する少なくとも２つの分割グループは、他の任意の分散データが有する少なくとも２つの分割グループと比較して、排他的論理和が行われる分割データの組み合わせが、番号１、２、…、ｎに沿ってシフトしている。
【００６９】
このように、元データを２段（行）に畳み込む操作を行えば、元データの情報を欠落させることができる。これにより、１個の分散データから元データを復元されることを阻止できるようになる。つまり秘密分散を行うことが可能となる。
【００７０】
例えば、“Ｌｅｔ  ｔｈｅｍ  ｂｅｔ  ｈｉｓ  ｒｏｏｍ．”を、ＡＣＩＩコード（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ）で示すと、図１（ｂ）の上段のようになる。なお、値は１６進数表示である。この分散（Ａ）は、図１（ｂ）の下段のようになる。ＸＯＲ算は、上下方向に配置される分割データ（例えば、２２と４Ｃ）同士で行われる。
【００７１】
次に、“Ｌａｐ  ｔｈｅｍ  ｉｎ  ｔｈｉｓ  ｒｏｏｍ．”を、ＡＣＩＩコードで示すと、図１（ｃ）の上段のようになる。この分散（Ａ）は、図１（ｂ）の下段のようになる。
【００７２】
これを見てわかるように、元データと分散データの関係は多対１であり、異なる文章から同じ分散（Ａ）が生成できる。逆に言えば、分散（Ａ）から複数の文章が生成可能である。
【００７３】
なお、ここでは元データはＡＣＩＩコードとした説明したが、これに限られない。文字データは限られるため、分散データから元データを復元するも可能である。
【００７４】
ブロック（列）サイズが文字コードサイズ、すなわち、１バイトである場合、分散データの１ブロック（列）から推測できる元データの組み合せは２５６×２５６個（００Ｈ  ＸＯＲ  ００Ｈ、００Ｈ  ＸＯＲ  ０１Ｈ、・・・、ＦＦＨ  ＸＯＲ  ＦＦＨ）である。しかし、元データがＡＣＩＩコードの場合は、２０Ｈ〜７ＥＨ以外は除外できるので、解読しやすくなる。しかも単語や文として意味をなさないものも除外できるので、さらに、解読しやすいものとなる。
【００７５】
これを避けるためには、元データがＡＳＣＩＩコードなど、解読されやすいコードであれば、何らかのデータ処理を施した加工データを生成し、その加工データから分散データを生成した方がよい。
【００７６】
そして、どのようなデータ処理を施したかの情報（データ）も秘密分散処理を行い、分散データと共に保存するのが望ましい。
【００７７】
なお、この後の図の説明では、説明が煩雑になるのを避けるため、元データに対するデータ処理の説明は割愛しているが、元データを図示したすべての図において、元データとは本当の元データか、または本当の元データに何らかのデータ処理を施した加工データを指すものとする。
【００７８】
このような元データで元データを打ち消す操作によって、各分散データの情報エントロピーは増大させられているため、閾値未満の分散データから元データを復元することは容易ではない。従って、この秘密分散法は、多項式補間の秘密分散法と同等の安全性がある。
【００７９】
一方、ＸＯＲ処理だけで分散データを生成するこの秘密分散法は、多項式補間の秘密分散法に比べ、処理速度が圧倒的に速い。しかも各分散データのデータ量は１／２で済む。
【００８０】
図２（ａ）及び（ｂ）は、本発明による元データの復元方法の一例を示す図である。ここでは、図の上側に示した分散（Ａ）、分散（Ｂ）の２個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。
【００８１】
（１）［分散（Ｂ）ａ］より、元データの列１を取得する。（２）［分散（Ａ）ａ］  ＸＯＲ  列１を計算し、その結果より、列２を取得する。（３）［分散（Ｂ）ｂ］  ＸＯＲ  列２を計算し、その結果より、列３を取得する。（４）［分散（Ａ）ｂ］  ＸＯＲ  列３を計算し、その結果より、列４を取得する。（５）［分散（Ｂ）ｃ］  ＸＯＲ  列４を計算し、その結果より、列５を取得する。（６）［分散（Ａ）ｃ］  ＸＯＲ  列５を計算し、その結果より、列６を取得する。（７）［分散（Ｂ）ｄ］  ＸＯＲ  列６を計算し、その結果より、列７を取得する。（８）［分散（Ａ）ｄ］  ＸＯＲ  列７を計算し、その結果より、列８を取得する。（９）［分散（Ｂ）ｅ］  ＸＯＲ  列８を計算し、その結果より、列９を取得する。（１０）［分散（Ａ）ｅ］  ＸＯＲ  列９を計算し、その結果より、列１０を取得する。（１１）［分散（Ｂ）ｆ］  ＸＯＲ  列１０を計算し、その結果より、列１１を取得する。（１２）［分散（Ａ）ｆ］  ＸＯＲ  列１１を計算し、その結果より、列１２を取得する。（１３）［分散（Ｂ）ｇ］  ＸＯＲ  列１２を計算し、その結果より、列１３を取得する。（１４）［分散（Ａ）ｇ］  ＸＯＲ  列１３を計算し、その結果より、列１４を取得する。
【００８２】
これにより、元データの列１、列２、列３・・・、列１４が復元できる。なお、この計算処理方法はこれに限られるものではない。例えば、分散（Ａ）と分散（Ｂ）の各列でそれぞれＸＯＲ処理すると、元データの奇数列が消えて、図２（ｂ）に示す値が求められる。
【００８３】
こうして次は、以下のように、隣り合う列で順番にＸＯＲ処理を行うと、偶数列の値を求めることができる。列ａ（２）  ＸＯＲ  列ｂ  →  列  ４、４  ＸＯＲ  列ｃ  →  列  ６、６  ＸＯＲ  列ｃ  →  列  ８、８  ＸＯＲ  列ｃ  →  列１０、１０  ＸＯＲ
列ｃ  →  列１２、１２  ＸＯＲ  列ｃ  →  列１４
そしてこれらの値と分散（Ａ）の各列でそれぞれＸＯＲ処理すると、元データの奇数列が求められる。このように、元データを復元するための計算処理方法には、複数の計算処理方法が存在する。
【００８４】
図３は、本発明による元データの復元方法の一例を示す図である。ここでは、図の上側に示した分散（Ａ）、分散（Ｃ）の２個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。（１）［分散（Ｃ）ａ］より、元データの列２を取得する。（２）［分散（Ａ）ａ］  ＸＯＲ  列２を計算し、その結果より、列１を取得する。（３）［分散（Ｃ）ｂ］  ＸＯＲ  列１を計算し、その結果より、列４を取得する。（４）［分散（Ａ）ｂ］  ＸＯＲ  列４を計算し、その結果より、列３を取得する。（５）［分散（Ｃ）ｃ］  ＸＯＲ  列３を計算し、その結果より、列６を取得する。（６）［分散（Ａ）ｃ］  ＸＯＲ  列６を計算し、その結果より、列５を取得する。（７）［分散（Ｃ）ｄ］  ＸＯＲ  列５を計算し、その結果より、列８を取得する。（８）［分散（Ａ）ｄ］  ＸＯＲ  列８を計算し、その結果より、列７を取得する。（９）［分散（Ｃ）ｅ］  ＸＯＲ  列７を計算し、その結果より、列１０を取得する。（１０）［分散（Ａ）ｅ］  ＸＯＲ  列１０を計算し、その結果より、列９を取得する。（１１）［分散（Ｃ）ｆ］  ＸＯＲ  列９を計算し、その結果より、列１２を取得する。（１２）［分散（Ａ）ｆ］  ＸＯＲ  列１２を計算し、その結果より、列１１を取得する。（１３）［分散（Ｃ）ｇ］  ＸＯＲ  列１１を計算し、その結果より、列１４を取得する。（１４）［分散（Ａ）ｇ］  ＸＯＲ  列１４を計算し、その結果より、列１３を取得する。
【００８５】
これにより、元データの列１、列２、列３・・・、列１４が復元できる。なお、図２と同様に、この計算処理方法もこれに限られるものではない。例えば、分散（Ａ）と分散（Ｂ）の各ブロックでそれぞれＸＯＲ処理し、列１の情報から、次々に奇数ブロックの値を求め、次に偶数ブロックの値を求めることも可能である。
【００８６】
図４は、本発明による元データの復元方法の一例を示す図である。ここでは、図の上側に示した分散（Ｂ）、分散（Ｃ）の２個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。（１）［分散（Ｂ）ａ］より、元データの列１を取得する。（２）［分散（Ｃ）ａ］より、元データの列２を取得する。（３）［分散（Ｂ）ｂ］  ＸＯＲ  列２を計算し、その結果より、列３を取得する。（４）［分散（Ｃ）ｂ］  ＸＯＲ  列１を計算し、その結果より、列４を取得する。（５）［分散（Ｂ）ｃ］  ＸＯＲ  列４を計算し、その結果より、列５を取得する。（６）［分散（Ｃ）ｃ］  ＸＯＲ  列３を計算し、その結果より、列６を取得する。（７）［分散（Ｂ）ｄ］  ＸＯＲ  列６を計算し、その結果より、列７を取得する。（８）［分散（Ｃ）ｄ］  ＸＯＲ  列５を計算し、その結果より、列８を取得する。（９）［分散（Ｂ）ｅ］  ＸＯＲ  列８を計算し、その結果より、列９を取得する。（１０）［分散（Ｃ）ｅ］  ＸＯＲ
列７を計算し、その結果より、列１０を取得する。（１１）［分散（Ｂ）ｆ］  ＸＯＲ
列１０を計算し、その結果より、列１１を取得する。（１２）［分散（Ｃ）ｆ］  ＸＯＲ  列９を計算し、その結果より、列１２を取得する。（１３）［分散（Ｂ）ｇ］  ＸＯＲ  列１２を計算し、その結果より、列１３を取得する。（１４）［分散（Ｃ）ｇ］  ＸＯＲ  列１１を計算し、その結果より、列１４を取得する。
【００８７】
これにより、元データの列１、列２、列３・・・、列１４が復元できる。なお、図２、図３と同様に、この計算処理方法もこれに限られるものではない。この図４以降の各図で説明する復元方法も一例を示しているだけで、計算方法は１個に限られるものではない。
【００８８】
以上、図２、図３、図４の説明を見てわかるように、この秘密分散は閾値２の秘密分散になっている。後で再度説明を行うが、元データを２段（行）に畳み込む操作を行うと、閾値２の秘密分散となる。従って、本発明による秘密分散は閾値秘密分散を実現できる。
【００８９】
図５は、本発明による分散データのフォーマットの一例を示す図である。
【００９０】
図２、図３、図４の説明からわかるように、復元に用いる分散データによって、計算処理方法を変えなくてはならない。ここでは、適切な計算処理方法を選択するためのしかけを説明する。
【００９１】
分散データを生成する際、分散（Ａ）、分散（Ｂ）、分散（Ｃ）の各分散データのヘッダ部には、分散情報を付加する。ここで分散情報とは、どのような処理で分散データを生成したか、または逆にどのような方法で復元を行うかを示す情報である。分散情報は、属性情報の一例であり、属性情報は、分散データの属性を示す。属性の例としては、識別情報（後述）、段数（分割グループの組み合わせ数）、復元方法などがある。
【００９２】
例えば、図１で説明したように、［分散（Ａ）ａ］の生成には列１と列２を使い、元データを２段（行）に畳み込む操作を行っているので、分散情報には、２段（行）、つまり閾値２で、列１・列２スタートと記す。同様に、分散（Ｂ）の分散情報には、２段（行）、つまり閾値２で、列１スタートと記し、分散（Ｃ）の分散情報には、２段（行）、つまり閾値２で、列２スタートと記す。
【００９３】
このような分散情報を付加すれば、復元に際して、どのような計算処理方法を選択すればよいかがわかる。
【００９４】
さらに、この分散情報には、識別情報であるＩＤ（ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）を付加している。この情報は必須ではないが、誤った復元を防止する上で便利である。
【００９５】
同じ元データから作成された分散データに対して、同じＩＤを付与するものとすれば、復元に際して、ＩＤを調べることで、元データが復元可能かを復元前に知ることができる。ＩＤが異なれば、その復元は誤っているので、無駄に復元処理を行う必要がなくなる。また、ＩＤを用いれば、復元した結果が、正しい元データなのかも保証できる。
【００９６】
なお、ＩＤの生成方法には様々な方法があるが、通し番号とするか、乱数で生成するものとすれば簡単である。
【００９７】
なお、同じ元データから作成された分散データに対して、同じＩＤを付与すると説明したが、同じ元データから生成された分散データであることを示す方法は、これに限られるものではない。例えば、ある直線に並ぶ点をＩＤとすることで、同じ元データから生成された分散データであることを示すこともできる。
【００９８】
ここでは、分散データに付けたＩＤで元データが復元可能か否かを判断しているが、元データに付けた付加情報（マーク）が、復元の結果現れるかによって、正しい復元か否かを判断することも可能である。
【００９９】
なおここでは、分散情報をヘッダ部に記述すると説明しているが、分散情報は分散データのどの箇所（例えば末端）に記述してもよいし、分散情報を分散データとは別に保存するとすることも可能である。また、加工データから元データを生成するための情報（データ）、すなわち、元データに施したデータ処理法など情報（データ）は、これも分散情報（データ）の一部として保存してもよい。なおこのような分散情報（データ）は、これも秘密分散処理して保存するが望ましい。
【０１００】
なおここでは、分散情報は、「ＩＤ、２段（閾値２）、Ｘスタート」と記述するとしているが、その記述方法は様々にあり、１個に限られるものではない。例えば、ＡＳＣＩＩ文字列で記述してもよいし、特殊なコマンドや識別子などで記述してもよい。
【０１０１】
図６は、本発明による元データの復元方法の一例を示す図である。ここでは、分散（Ａ）、分散（Ｂ）、分散（Ｃ）というように複数の分散データの中から、２個の分散データを選択し、その選択した２個の分散データから元データを復元する方法を説明する。なお、各分散データには、図５で説明した分散情報が付与されているものとする。
【０１０２】
（１）選択した２個の分散データのＩＤを比較する。ＩＤが等しくなければ、同じ元データから生成された分散データではないので、エラーとし、復元処理を中断する。なお、元データに付与した付加情報が現れるかによって、復元結果が正しいか否かを判断するようにしている場合には、ここでのＩＤ判定はなく、次の処理に進む。
【０１０３】
（２）閾値の数、つまり段（行）の数をチェックする。閾値２の場合は次の処理に進む。閾値３以上の場合は、この後で説明を行う、別の復元処理を施す。
【０１０４】
（３）１・２スタートと１スタートの組み合せかチェックする。１・２スタートと１スタートの組み合せであれば、図２で説明した計算処理方法で元データを復元する。
【０１０５】
（４）１・２スタートと２スタートの組み合せかチェックする。１・２スタートと２スタートの組み合せであれば、図３で説明した計算処理方法で元データを復元する。
【０１０６】
（５）１スタートと２スタートの組み合せかチェックする。１スタートと２スタートの組み合せであれば、図４で説明した計算処理方法で元データを復元する。
【０１０７】
ここで、（３）、（４）、（５）は、いずれを先にチェックしてもよい。なお、（３）、（４）、（５）に記述した分散データ以外にも、元データを復元可能な分散データがあるので、（３）、（４）、（５）に該当しない場合は、別の復元処理を施す。その内容はこの後で説明を行う。
【０１０８】
図５および図６の説明でわかるように、複数の分散データから閾値以上の分散データを選択すれば、元データが復元できる。従って、ｎを分散数、ｍを閾値とすれば、本発明は（ｎ、ｍ）型の閾値秘密分散になっている。
【０１０９】
図７は、本発明による秘密分散法の一例を示すブロック図の一例である。図７では、図１、図２、図３、図４、図５、図６の処理方法を装置として実現する場合の説明を行う。
【０１１０】
ここでは、分散データの生成および元データの復元は、秘密分散モジュール２によって行われ、アプリケーションプログラム１が、秘密分散モジュール２に対して、分散データの生成および元データの復元をリクエストするものとして説明を行う。このアプリケーションプログラム１と秘密分散モジュール２が動作するコンピュータは、同じものでも異なるものでもよい。
【０１１１】
また、元データおよび分散データは、記憶装置３に格納されるが、この記憶装置３もアプリケーションプログラム１と秘密分散モジュール２が動作するコンピュータと同じものでも異なるものでもよい。
【０１１２】
ここでは、アプリケーションプログラム１、秘密分散モジュール２および記憶装置３が異なるコンピュータ上で動作していたとしても、説明を煩雑にしないために、コンピュータ間の通信方法に関する説明は割愛する。
【０１１３】
なお、上側に図示したアプリケーションプログラム１と記憶装置３は、分散データの生成方法を説明するもので、下側に図示したアプリケーションプログラム１と記憶装置３は、元データの復元方法を説明するものであるが、上側と下側のアプリケーションプログラム１と記憶装置３は、同じアプリケーションプログラム、記憶装置であってもよいし、異なるアプリケーションプログラム、記憶装置であってもよい。
【０１１４】
はじめに、分散データの生成方法から説明を行う。アプリケーションプログラム１は、秘密分散させたい元データを記憶装置３に格納する。そして分散処理依頼部１００は、分散条件を示す分散条件情報、および、元データを格納したアドレスを示すアドレス情報Ａ１、および、生成した分散データの格納先アドレスを示す、アドレス情報Ａ２、Ａ３、Ａ４を、分散処理部３００に渡す。
【０１１５】
ここで、分散条件情報とは、秘密分散を行う上で必要となる情報のことで、分散数や閾値などの情報がこれに当たる。ここでは、図１のように、元データを３個に分散する場合の例で説明を行うので、分散数＝３と指示したものとする。なお、この例では分散数＝３なので、３個の格納先アドレス情報を用意しているが、さらに多数の分散データを生成するのであれば、分散処理依頼部１００は、その分の格納先アドレス情報も用意しなければならない。
【０１１６】
分散処理部３００は、アドレス情報Ａ１に示された記憶装置３のアドレスから元データを読出し、分散条件情報に従って、図１と同様の手段によって分散データを生成する。この時、図５のように、各分散データのヘッダに分散情報を付加する。また、分散処理部３００は、乱数生成部４００にＩＤとして利用する乱数を生成させ、この乱数をＩＤとして、これも図５のように、分散情報に付加する。そして、分散処理部３００は、この生成した分散データ（Ａ）、（Ｂ）、（Ｃ）を、分散処理依頼部１００が指定したアドレス情報Ａ２、Ａ３、Ａ４のアドレス先に格納する。
【０１１７】
次に、元データの復元方法の説明を行う。アプリケーションプログラム１は、復元に用いる分散データを記憶装置３に格納する。そして、復元処理依頼部２００は、復元した元データの格納先アドレスを示すアドレス情報Ｂ１および分散データを格納した先のアドレスを示すアドレス情報Ｂ２、Ｂ３、Ｂ４を分散処理部３００に渡す。なお、ここでは、閾値が２の場合で説明を行っているので、アプリケーションプログラム１は最低２個の分散データを用意すれば良く、アドレス情報Ｂ４は提示しなくてもよい。
【０１１８】
復元処理部５００は、アドレス情報Ｂ２、Ｂ３、Ｂ４に示された記憶装置３のアドレスから分散データを読出し、分散情報に従って、図６と同様の手段によって元データを復元する。なお、閾値＝２なので、先に記したように、復元処理部５００は、ＩＤが同じ分散データを２個見つけた時点で、アドレス情報Ｂ４を読まずに、直ちに元データの復元を行ってもよい。しかし、復元データが正しいか否かをチェックするために、アドレス情報Ｂ４に示されたアドレス先の分散データも利用して復元を行い、先に復元した元データと比較してもよい。そして、復元処理部５００は、この復元した元データを、復元処理依頼部２００が指定したアドレス情報Ｂ１のアドレス先に格納する。
【０１１９】
図８は、本発明による秘密分散法のハードウェア構成図の一例である。ここでは、図７のアプリケーションプログラム１、秘密分散モジュール２および記憶装置３が、同じコンピュータ上で動作している場合で説明を行う。このコンピュータは、プログラム処理を実行するＣＰＵ１０、一時的な記憶メモリであるＲＡＭ２０、書き換え可能な不揮発性メモリであるＨＤＤ（ハードディスク）３０で構成されている。
【０１２０】
図７に示した各処理部は、ＣＰＵ１０およびＲＡＭ２０で実行される。また、元データおよび分散（Ａ）、分散（Ｂ）、分散（Ｃ）の格納先はＨＤＤ３０である。従って、図７で説明したアドレス情報Ａ１、Ａ２、Ａ３、Ａ４およびＢ１、Ｂ２、Ｂ３、Ｂ４は、フォルダ・ファイル名とすることができる。
【０１２１】
なお、ここでは、書き換え可能な不揮発性メモリであるＨＤＤ３０に、元データおよび分散（Ａ）、分散（Ｂ）、分散（Ｃ）を格納するようにしているが、これはフラッシュメモリなど他の不揮発性メモリでもＲＡＭ２０のような揮発メモリであっても構わない。また分散処理を行う元データ、および、復元を行う分散データは、リードオンリーのメモリに格納することもできる。
【０１２２】
なお、ＨＤＤ３０をＵＳＢのフラッシュメモリなど外部記憶装置として、この外部記憶装置を、このコンピュータに接続して利用するものとすれば、簡単に使えて便利である。
【０１２３】
この図示していないが、図７に図示したＩＤは一時的に使用するものなので、ＲＡＭ２０に格納して利用するとよい。
【０１２４】
図９は、本発明による秘密分散法のハードウェア構成図の一例である。ここでは、図７のアプリケーションプログラム１および秘密分散モジュール２が動作するコンピュータと、記憶装置３の一部である分散データを格納するコンピュータが異なる場合で説明を行う。なお元データは、秘密分散モジュール２が動作するコンピュータ内の記憶装置３に格納するものとする。
【０１２５】
秘密分散モジュール２が動作するコンピュータと分散データを格納するコンピュータとはネットワークによって接続されている。また、各分散データはそれぞれ異なるコンピュータ上に格納するものとする。
【０１２６】
このように、各分散データを異なるコンピュータ上に格納する目的は、不正な元データの復元を防止するためである。各コンピュータの管理者が別人であれば、１人の管理者の権限だけでは元データを復元できなくなり安全である。例えば、コンピュータがクラウドコンピュータの場合、１社のクラウドコンピュータに分散データを集めてしまうと、その会社の管理者に元データを復元される危険性があるが、図９のような構成を用いれば、その危険性を大きく緩和できる。
【０１２７】
現在、クラウドコンピュータはその利用料金の安さや手軽さが評価されているが、データの中身を盗み見される危険性があり、セキュリティが要求される業務では利用が進まない状況にある。図９のような構成を用いれば、安全にクラウドコンピュータを利用できるようになる。
【０１２８】
秘密分散モジュール２が動作するコンピュータは、プログラム処理を実行するＣＰＵ１０、一時的な記憶メモリであるＲＡＭ２０、書き換え可能な不揮発性メモリであるＨＤＤ（ハードディスク）３０とネットワークのデータ送受信を実行するＭＡＣ／ＰＨＹ５０で構成されている。
【０１２９】
図７に示した各処理部は、ＣＰＵ１０およびＲＡＭ２０で実行される。また、元データの格納先はＨＤＤ３０である。従って、図７で説明したアドレス情報Ａ１およびＢ１は、フォルダ・ファイル名とすることができる。
【０１３０】
なおここでは、書き換え可能な不揮発性メモリであるＨＤＤ３０に、元データを格納するようにしているが、これはフラッシュメモリなど他の不揮発性メモリでもＲＡＭ２０のような揮発メモリであっても構わない。また分散処理を行う元データは、リードオンリーのメモリに格納することもできる。
【０１３１】
ＨＤＤ３０をＵＳＢのフラッシュメモリなど外部記憶装置として、この外部記憶装置を、このコンピュータに接続して利用するものとすれば簡単に使えて便利である。
【０１３２】
図示していないが、図７に図示したＩＤは一時的に使用するものなので、ＲＡＭ２０に格納して利用するとよい。
【０１３３】
ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）／ＰＨＹ５０は、ネットワーク通信を制御するハードウェアである。実際の通信は、ＣＰＵ１０およびＲＡＭ２０によって制御される。
【０１３４】
次に分散データを格納するコンピュータに関して説明を行う。ここでは分散（Ａ）、分散（Ｂ）、分散（Ｃ）と３個に分散させ、それぞれ異なるコンピュータに格納するものとする。
【０１３５】
なお、閾値未満の分散データであれば、同じコンピュータに格納しても危険ではないので、実際は用途に合わせて、どのコンピュータにいくつの分散データを格納するかを決めることができる。
【０１３６】
分散（Ａ）を格納するコンピュータは、通信制御や記憶装置へのアクセスを行うＣＰＵ１１とＲＡＭ２１、および、ネットワーク通信を制御するハードウェアであるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）／ＰＨＹ５１および分散（Ａ）を格納する記憶装置であるＨＤＤ３１で構成されている。
【０１３７】
同様に、分散（Ｂ）を格納するコンピュータは、通信制御や記憶装置へのアクセスを行うＣＰＵ１２とＲＡＭ２２、および、ネットワーク通信を制御するハードウェアであるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）／ＰＨＹ５２および分散（Ａ）を格納する記憶装置であるＨＤＤ３２で構成され、分散（Ｃ）を格納するコンピュータは、通信制御や記憶装置へのアクセスを行うＣＰＵ１３とＲＡＭ２３およびネットワーク通信を制御するハードウェアであるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）／ＰＨＹ５３、および、分散（Ａ）を格納する記憶装置であるＨＤＤ３３で構成されている。
【０１３８】
このように分散データの格納先は、秘密分散モジュール２が動作するコンピュータとは異なるコンピュータのＨＤＤ３０であるので、図７で説明したアドレス情報Ａ２、Ａ３、Ａ４およびＢ２、Ｂ３、Ｂ４は、ネットワーク上のフォルダ・ファイル名やＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）とすることができる。
【０１３９】
なおここでは、書き換え可能な不揮発性メモリであるＨＤＤ３０に、分散データを格納するようにしているが、これはフラッシュメモリなど他の不揮発性メモリでもＲＡＭ２０のような揮発メモリであっても構わない。また復元を行う分散データは、リードオンリーのメモリに格納することもできる。
【０１４０】
以上のように、実施の形態１では、分割データ同士で排他的論理和を行うので、分散データを秘密データより少ないデータ量にすることができ、復元処理の速度を向上させることができる。また、分散データを生成する場合に、分割グループ同士を番号（列）に沿ってシフトさせているので、任意の２つの分散データ同士で、分割データの排他的論理和の組み合わせに規則性を持たせることができる、乱数を含まないデータ同士で容易に秘密分散方法を実現することができる。
【０１４１】
（実施の形態２）
実施の形態２は、実施の形態１と異なり、元データに乱数を付加した場合である。
【０１４２】
図１０は、本発明による分散データの生成方法の一例を示す図である。ここでは、図１とは異なる方法で分散データを生成している。図１と比較するために、ここでも、分散（１）、分散（２）、分散（３）の３個の分散データを生成する場合で説明を行う。
【０１４３】
図１０の分散（１）は、図１の分散（Ａ）と同じである。また、分散（２）も分散（Ｂ）と同じである。異なるのは３番目の分散データである。図１の分散（Ｃ）は、分散（Ａ）の上段を１個ずらしたものになっているが、図１０の分散（３）は、分散（１）、すなわち、分散（Ａ）の下段を２個ずらしたものになっている。
【０１４４】
このように、分散（Ａ）の下段を２個ずらしたものも分散データとして利用できる。また、同様に分散（Ａ）の上段をＮ（Ｎ＝１、２、３・・・）個ずらしたものも分散データとして利用できる。
【０１４５】
なおこれ以降の図でも、分散データを生成するのに、下段をずらした方法で説明を行うが、どの図でも、同じように上段をずらした分散データの生成も可能である。
【０１４６】
但し、図１０の分散（３）のような複数個ずらした分散データを利用する場合には注意が必要である。例えば、分散（２）および分散（３）には、元データの列１４の情報がないので、分散（２）と分散（３）から元データを復元した場合、列１４は復元できない。
【０１４７】
この課題に対処するには、図１０のように、元データに対して、列１４を乱数とした修正データを作成し、これから分散データを生成すればよい。つまり、元データを図１より１個少ない、１３個のブロック（列）に分け、列１３の最後に、乱数で構成された１個のダミーブロック（列）を加え、これから分散データを生成すればよい。そして元データを復元する際は、乱数で構成された最後のダミーブロック（列）、すなわち列１４は削除、または復元しなければよい。
【０１４８】
なおこうすると、列１４のダミーブロック（列）は、［分散（１）ｇ］にある列１３を暗号化する効果も生む。
【０１４９】
図６でも説明したが、この図の説明からわかるように、閾値２の分散データを生成する方法は、図１の方法に限られるものではなく、図１０のような方法も存在する。
【０１５０】
図１１は、本発明による分散データのフォーマットの一例を示す図である。ここでは、図５の分散情報に、元データのブロック（列）数であるＬＥＮ長の情報を付加している。これにより、元データを復元した場合に、どこからがダミーブロック（列）がわかるので、正しく元データを復元できるようになる。なお、ダミーブロック（列）を識別する方法はこれに限られるものではなく、例えば、ダミーブロック（列）の番号を記述してもよい。
【０１５１】
図１２は、本発明による元データの復元方法の一例を示す図である。ここでは、図の上側に示した分散（１）、分散（３）の２個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。
【０１５２】
（１）［分散（３）ａ］より、元データの列１を取得する。（２）［分散（１）ａ］  ＸＯＲ  列１を計算し、その結果より、列２を取得する。（３）［分散（３）ｂ］より、元データの列３を取得する。（４）［分散（１）ｂ］  ＸＯＲ  列３を計算し、その結果より、列  ４を取得する。（５）［分散（３）ｃ］  ＸＯＲ  列２を計算し、その結果より、列  ５を取得する。（６）［分散（１）ｃ］  ＸＯＲ  列５を計算し、その結果より、列  ６を取得する。（７）［分散（３）ｄ］  ＸＯＲ  列４を計算し、その結果より、列  ７を取得する。（８）［分散（１）ｄ］  ＸＯＲ  列７を計算し、その結果より、列
８を取得する。（９）［分散（３）ｅ］  ＸＯＲ  列６を計算し、その結果より、列  ９を取得する。（１０）［分散（１）ｅ］  ＸＯＲ  列９を計算し、その結果より、列１０を取得する。（１１）［分散（３）ｆ］  ＸＯＲ  列８を計算し、その結果より、列１１を取得する。（１２）［分散（１）ｆ］  ＸＯＲ  列１１を計算し、その結果より、列１２を取得する。（１３）［分散（３）ｇ］  ＸＯＲ  列１０を計算し、その結果より、列１３を取得する。（１４）［分散（１）ｇ］  ＸＯＲ  列１３を計算し、その結果より、列１４を取得する。（１５）分散情報のＬＥＮ長よりブロック（列）数を読み出す。ブロック（列）数は１３とわかるので、列１４を削除する。
【０１５３】
このように、図１の分散（Ａ）の上段、または下段を複数個ずらした分散データを利用しても、元データを復元できることがわかる。なおここでは、列１４を復元した後に削除しているが、最初に分散情報のＬＥＮ長を見て、それ以上のブロック（列）は復元しないとする方法もある。なお、復元の計算処理方法はこれに限られるものではない。
【０１５４】
図１３は、本発明による元データの復元方法の一例を示す図である。ここでは、図１の分散（Ａ）の上段を１個ずらした分散（Ｃ）と、分散（Ａ）の下段を２個ずらした分散（３）でも、元データを復元できることを示す。
【０１５５】
（１）［分散（３）ａ］より、元データの列１を取得する。（２）［分散（３）ａ］より、元データの列３を取得する。（３）［分散（Ｃ）ｂ］より、元データの列２を取得する。（４）［分散（Ｃ）ｂ］  ＸＯＲ  列３を計算し、その結果より、列４を取得する。（５）［分散（Ｃ）ｃ］  ＸＯＲ  列２を計算し、その結果より、列６を取得する。（６）［分散（３）ｃ］  ＸＯＲ  列５を計算し、その結果より、列５を取得する。（７）［分散（３）ｄ］  ＸＯＲ  列４を計算し、その結果より、列７を取得する。（８）［分散（Ｃ）ｄ］  ＸＯＲ  列７を計算し、その結果より、列８を取得する。（９）［分散（Ｃ）ｅ］  ＸＯＲ  列６を計算し、その結果より、列１０を取得する。（１０）［分散（３）ｅ］  ＸＯＲ  列９を計算し、その結果より、列９を取得する。（１１）［分散（３）ｆ］  ＸＯＲ  列８を計算し、その結果より、列１１を取得する。（１２）［分散（Ｃ）ｆ］  ＸＯＲ  列１１を計算し、その結果より、列１２を取得する。（１３）［分散（Ｃ）ｇ］  ＸＯＲ  列１０を計算し、その結果より、列１４を取得する。（１４）［分散（３）ｇ］  ＸＯＲ  列１３を計算し、その結果より、列１３を取得する。
【０１５６】
このように、図１の分散（Ａ）の上段、下段を複数個ずらした分散データを組み合わせて利用しても、元データを復元できることがわかる。なおここでは、ブロック（列）１４は乱数とする必要がない。ブロック（列）１４を乱数、すなわちダミーブロック（列）としなければならないのは、下段を１個ずらした分散データと下段を２個ずらした分散データの両方を用いる場合である。同様に、上段を１個ずらした分散データと上段を２個ずらした分散データの両方を用いる場合は、ブロック（列）１３を乱数、すなわちダミーブロック（列）としなければならない。なお復元の計算処理方法はこれに限られるものではない。
【０１５７】
図１４は、本発明による分散データの生成方法の一例を示す図である。ここでは、図１０に、分散（４）を追加している。図を見てわかるように、分散（４）は下段を３個ずらしたものになっている。
【０１５８】
このように、分散（Ａ）の下段を３個、４個、・・・とずらしたものも分散データとして利用できる。また、同様に分散（Ａ）の上段を３個、４個、・・・とずらしたものも分散データとして利用できる。
【０１５９】
但し、図１０の分散（３）と同様、分散（４）のような複数個ずらした分散データを利用する場合には注意が必要である。例えば、分散（３）、および、分散（４）には、元データの列１２と列１４の情報がないので、分散（３）と分散（４）から元データを復元した場合、列１２と列１４は復元できない。
【０１６０】
この課題に対処するには、図１０と同様に、復元で欠落する列を乱数、すなわちダミーブロック（列）とすればよい。ここでは列１２と列１４を乱数とすればよい。つまり、図に示したように、元データを、図１より２個少ない１２個のブロック（列）に分け、欠落する２個分のダミーブロック（列）を付加した修正データを作成し、これから分散データを生成すればよい。
【０１６１】
なお、そのダミーブロック（列）を付加する位置は、図に示したように、欠落するブロック（列）である列１２と列１４である。そして元データを復元する際は、乱数で構成されたダミーブロック（列）は削除または復元しなければよい。
【０１６２】
同様に、分散（１）の上下段をＸ個ずらす場合は、（Ｘ−１）個のダミーブロック（列）を用意し、欠落する部分を埋め合わせれば済む。
【０１６３】
このように、ダミーブロック（列）を利用すれば、いくつもの分散データを生成することが可能である。ここからわかるように、本発明を用いれば、分散数を自由に設定可能である。つまり、容易に（Ｎ、２）の閾値分散（分散数Ｎ＝２、３、４・・・、閾値２）をつくり出すことが可能である。
【０１６４】
なお、こうすると、列１２および列１４のダミーブロック（列）は、［分散（１）ｆ］の列１１、［分散（１）ｇ］の列１３および［分散（２）ｇ］の列１３を暗号化する効果も生む。
【０１６５】
なお、図の元データの列１１と列１３との間の斜線は、データが存在しないことを意味している。つまり、列１１の直後のデータは列１３であることを示している。これ以降、すべての図で、斜線は、データが存在しないことを示すものとする。
【０１６６】
図１５は、本発明による分散データのフォーマットの一例を示す図である。ここでは、図５の分散情報に、ダミーブロック（列）の位置情報を付加している。これにより、元データを復元した場合に、どこがダミーブロック（列）であるかがわかるので、正しく元データを復元できるようになる。
【０１６７】
なお、ダミーブロック（列）を識別する方法はこれに限られるものではなく、例えば、ダミーブロック（列）に識別情報を付加し、この識別情報が出現するかでダミーブロック（列）か否かを判断するものとしてもよい。
【０１６８】
なお、この分散（４）を利用した元データの復元方法は、図２、図３、図４、図１２、図１３を参照すれば容易にわかるので、詳細の説明は割愛する。同じく、これ以降、閾値２の場合における、元データの復元方法の詳細説明は割愛する。
【０１６９】
図１６は、本発明による分散データの生成方法の一例を示す図である。ここでは、図１０とは異なり、分散データの列ｇを見てわかるように、上段のブロック（列）が１個多い構成になっている。この場合、図を見てわかるように、図１０と同じ要領で、３個の分散データを生成しても欠落するブロック（列）がない。図１０では分散（２）と分散（３）とで元データを復元した場合、列１４が欠落したが、図１６では、上段が下段よりブロック（列）が１個多いため、分散（２）と分散（３）とで元データを復元した場合でも、欠落するブロック（列）がない。
【０１７０】
図１４では、分散（１）の上下段をＸ個ずらす場合は、（Ｘ−１）個のダミーブロック（列）を用意するように説明したが、これは分散（１）の上下段のブロック（列）数が等しい場合の話である。図１６のように、分散（１）の上下段のブロック（列）数が他方より１個多い場合（但し、少ないブロック（列）の段をずらす）は、（Ｘ−２）個のダミーブロック（列）を用意すればよい。同様に、分散（１）の上下段のブロック（列）数が他方よりＭ個多い場合は、（Ｘ−１−Ｍ）個のダミーブロック（列）を用意すればよい。但し、Ｘ≧１＋Ｍである。
【０１７１】
なお、この図１６と図１０とを比較してみるとわかるが、図１０の修正データは、図１６の元データの最後に、意味のない乱数を付加した形である。従って、本質的には、図１０と図１６の分散データの生成方法は同じである。但し、図１６の［分散（１）ｇ］が裸で見えているのに対し、図１０の［分散（１）ｇ］は乱数でＸＯＲ処理され（暗号化され）ている。
【０１７２】
図１７は、本発明による分散データの生成方法の一例を示す図である。図１７は、図１６より１個多く、分散データ、すなわち、分散（４）を生成している。図を見てわかるように、分散（３）と分散（４）とで復元を行うと、列１２が欠落する。
【０１７３】
この課題に対処するために、ここでは、図に示したように、元データを、図１６より１個少ない１２個のブロック（列）に分け、欠落する１個分のダミーブロック（列）を付加した修正データを作成し、これから分散データを生成している。そのダミーブロック（列）を付加する位置は、図に示したように、欠落するブロック（列）である列１２である。そして元データを復元する際は、乱数で構成されたダミーブロック（列）は削除、または復元しないようにすればよい。
【０１７４】
この図１７と図１４とを比較してみるとわかるが、図１４の修正データは、図１７の修正データの最後に意味のない乱数を付加した形である。従って、本質的には、図１４と図１７の分散データの生成方法は同じである。但し、図１７の［分散（１）ｇ］が裸で見えているのに対し、図１４の［分散（１）ｇ］は乱数でＸＯＲ処理され（暗号化され）ている。
【０１７５】
図１８は、本発明による分散データの生成方法の一例を示す図である。図１８は、図１７よりさらに１個多く、分散データ、すなわち、分散（５）を生成している。今までの説明でわかるように、ここでは欠落する２個分のダミーブロック（列）が必要となる。
【０１７６】
図１７と比較しやすくするためには、図１８の元データの列番号を、１、２、３・・・、９、１１、１３とし、修正データのブロック（列）数を、図１７と同じ１３個にするのがよいが、ここでは図１４と比較しやすくするために、図１７の元データの列番号を、１、２、３・・・、１１、１３、１５とし、修正データのブロック（列）数を図１７より２個多くなるように図示している。
【０１７７】
この図１８と図１４とを比較してみるとわかるが、図１８の修正データは、図１４の修正データの最後に意味あるデータを付加した形になっている。こうすると、ダミーブロック（列）の数は同じままなのに、分散数は１個増加する。
【０１７８】
図１６のように、分散データの上段、若しくは下段を１個ずらせば、分散数を３にでき、図１０のように、元データに最後に意味のない乱数を付加した修正データを秘密分散処理すれば、最後のブロック（列）を暗号化できる。また、図１７のように、その乱数の次に、意味あるデータを付加すれば、分散数を１個多い４にでき、図１４のように、元データに最後に意味のない乱数を付加した修正データを秘密分散処理すれば、最後のブロック（列）を暗号化できる。さらに、図１８のように、その乱数の次に、意味あるデータを付加すれば、分散数を１個多い５にでき、・・・というように、分散数は自由に設定できる。
【０１７９】
図１９は、本発明による分散データの生成方法の一例を示す図である。図１９は、図１８の分散データの上段と下段を入れ替えたものになっている。これは、図１８の上段をずらして分散データを生成しているのと等価である。これは図１０で説明したように、上段・下段のいずれか一方をずらせば分散データが生成できることを意味している。なお、分散データを生成するのは、上段・下段のいずれか一方をずらすだけでなく、図１のように上段・下段の両方をずらすことでも生成できる。
【０１８０】
この図１９からはもう１個の知見を得られる。これまでの図の説明では、元データの列１、２から［分散（１）ａ］が生成され、同様に以下、元データの列３、４から［分散（１）ｂ］、元データの列５、６から［分散（１）ｃ］、・・・と生成されているが、この列１、列２、列３・・・の番号は、図１９のように、通し番号で連続していなければならないというものではない。
【０１８１】
図２０は、本発明による分散データの生成方法の一例を示す図である。図２０では、図１９で説明した、「この列１、列２、列３・・・の番号は、通し番号で連続していなければならないというものではない」ということを簡潔に説明したものである。
【０１８２】
元データの本当の並びは、図２０に図示したように、列１０、列３、列１６・・・と並んでいたとする。これに、並びを変える、図１で説明したデータ処理を施して、列１、列２、列３・・・と配置を変えた修正（加工）データを生成する。なお、欠落するブロック（列）を乱数のダミーブロック（列）にする処理も同時に施す。このような操作を行うと、後は図１８と全く同じになる。
【０１８３】
なお、図１でも説明したが、このようなデータ処理は、分散データから元データを推測させにくくするので好ましい。
【０１８４】
このように、分散データの各ブロック（列）に元データのどのブロック（列）を配置するかは自由である。これは、図１９以外のどの図でも同じである。従って、本発明は、元データの奇数ブロック（列）、偶数ブロック（列）を、分散データの上段・下段の２段（行）に分けて配置するというものではなく、元データの各ブロック（列）を、任意に２個のグループに分け、分散データの上段・下段に配置したものであることがわかる。また分散データの上段・下段でのブロック（列）を並べる順番も任意である。
【０１８５】
なお、これ以降の図で説明するが、閾値＝３の場合は３段（行）に、閾値＝４の場合は４段（行）に、閾値＝Ｎ（Ｎ＝３、４、５・・・）の場合はＮ段（行）に元データを分割するが、２段（行）と同様に、分散データのどの段（行）のグループに、元データのどのブロックを配置するかは任意である。また、その段（行）でのブロック（列）を並べる順番も任意である。
【０１８６】
図２１は、本発明による分散データの生成方法の一例を示す図である。この図２１は、図１０から元データの列１と列３を除去したものである。今までの図では、分散（１）の下段のブロック（列）数は分散データの上段のブロック（列）数以下であったが、図２１では分散（１）の下段のブロック（列）数が上段のブロック（列）数より多い配置となっている。このように配置する利点は、図２７の説明で改めて行う。
【０１８７】
閾値＝Ｎ（Ｎ＝３、４、５・・・）の場合も同様であるが、このように、各段にいくつのブロック（列）を配置するかは任意である。
【０１８８】
図２２は、本発明による分散データの生成方法の一例を示す図である。この図２２は、図１７から元データの列１０を除去し、図１７のようなダミーブロック（列）を挿入しないものである。
【０１８９】
図２２では、分散（１）の上段のブロック（列）数が、下段のブロック（列）数より３個多い。一方、図１７は、ダミーブロック（列）を挿入しているため、分散（１）の上段のブロック（列）数が、下段のブロック（列）数より１個多いように見えているが、ダミーブロック（列）は元データにはない単なる乱数なので、これを除去すればわかるように、実際は、分散（１）の上段のブロック（列）数が、下段のブロック（列）数より２個多いケースの説明になっている。つまり、図２２は図１７より、分散（１）の上段のブロック（列）数と下段のブロック（列）数の差が１個多い形になっている。
【０１９０】
分散（１）の上段のブロック（列）数と下段のブロック（列）数の差が１個より多くしたことで、図２２では、図１７より、分散数をさらに１個多い５個にすることができている。
【０１９１】
実は、ここの説明は、図１６や図１８の説明の繰り返しになっている。図２２が図１６や図１８の説明と異なるところは、ダミーブロック（列）の扱いだけである。図１６や図１８では、欠落するブロック（列）をダミーブロック（列）で補うとしたが、図２２が図１８からダミーブロック（列）を剥ぎ取った形になっているのを見てわかるように、ダミーブロック（列）は必ずしも必須でない。
【０１９２】
図２３は、本発明による分散データの生成方法の一例を示す図である。今までの図では分散（１）の下段を左にずらして他の分散データを生成していたが、ここでは、分散（１）の下段を右にずらして他の分散データを生成している。なお、下段ではなく、上段を右にずらしても同様に分散データを生成できる。
【０１９３】
このように、左にずらしても右にずらしても本質は全く同じであり、他の図で説明している方法は、この右にずらす場合にも適用できる。なお、欠落するブロック（列）がある場合、右にずらす場合は、左にずらす場合に比べて、欠落するブロック（列）の位置が異なる。図２３の例では、列２が欠落する。図２３では、この列２を乱数とするダミーブロック（列）で補っているが、図２２で説明したように、このダミーブロック（列）はなくてもよい。
【０１９４】
以上のように、実施の形態２では、分割データと乱数データとを組み合わせて排他的論理和を行うので、分割データを乱数データで暗号化することができ、分割データが推測し易い場合（例えば、同じ値、０、０、０、・・・が続く場合や、値に規則性を有する場合）であっても、分割データを難読化させることで、セキュリティを向上させることができる。
【０１９５】
（実施の形態３）
実施の形態３は、実施の形態１、２と異なり、元データに付加する乱数を共有する場合である。
【０１９６】
図２４は、本発明による分散データの生成方法の一例を示す図である。図２４は、裸で見えている、図１４の［分散（２）ａ］、［分散（３）ａ］と［分散（３）ｂ］、［分散（４）ａ］と［分散（４）ｂ］と［分散（４）ｃ］を、乱数でＸＯＲ処理（暗号化）したものである。つまり、分散データの中に元データが出現しないようにするものである。そのため、乱数１２や乱数１４のように、欠落するブロックもダミーブロック（列）で埋めている。これにより、閾値未満の分散データで元データを復元することは、より困難となる。
【０１９７】
ここでは図示したように、［分散（２）ａ］を乱数ＡでＸＯＲ処理し、以下同様に、［分散（３）ａ］を乱数Ｂで、［分散（３）ｂ］を乱数Ｃで、［分散（４）ａ］を乱数Ｄで、［分散（４）ｂ］を乱数Ｅで、［分散（４）ｃ］を乱数ＦでＸＯＲ処理している。
【０１９８】
なお、ここではすべて違う乱数としているが、すべて同じ乱数ＡでＸＯＲ処理するとしてもよいし、同じ列は同じ乱数でＸＯＲ処理するとしてもよい。また、分散データ毎に同じ乱数を使用しても良く、乱数をどのように使うかは自由である。
【０１９９】
なお、この乱数の共有方法には様々な方法がある。まず乱数そのものを本発明による秘密分散法や多項式補間による秘密分散法で処理（乱数から分散データを生成）してもよいし、乱数生成器のシード（初期値）など、この乱数を生成できる条件（データ）を、本発明による秘密分散法や多項式補間による秘密分散法で処理してもよい。また秘密分散処理を行わずに、分散（３）に乱数Ａを、分散（４）に乱数Ｂ、Ｃを、分散（２）に乱数Ｄ、Ｅ、Ｆを配布するなど、互いの乱数を持ち合うことも可能である。
【０２００】
図２５にその乱数の共有方法の一例を示す。ここでは、図２３で利用しない乱数Ｇ、Ｈ、・・・Ｎも秘密分散処理しているが、利用する乱数だけを秘密分散処理することも可能である。また、ここでは図２３で利用する乱数を分散データの上段にしているが、これを下段に配置することも可能であり、その乱数の配置は自由である。
【０２０１】
なお、元データのどの列とどの乱数がＸＯＲ処理されているかなど、これら乱数の利用方法に関する情報は分散情報に記憶するとよい。
【０２０２】
図２６は、本発明による分散データの生成方法の一例を示す図である。図２６は、図２４と同様に、裸で見えている、図１４の［分散（２）ａ］、［分散（３）ａ］と［分散（３）ｂ］、［分散（４）ａ］と［分散（４）ｂ］と［分散（４）ｃ］を、乱数でＸＯＲ処理（暗号化）したものである。つまり、これも分散データの中に元データの値が出現しないようにするものである。そのため、乱数１２や乱数１４のように、欠落するブロックもダミーブロック（列）で埋めている。
【０２０３】
この図２６と図１４とを比較してみるとわかるが、図２６の修正データは、図１４の修正データの最初に乱数列を付加した形になっている。これによって、分散（２）、分散（３）、分散（４）を生成した場合に、図１４の［分散（２）ａ］、［分散（３）ａ］と［分散（３）ｂ］、［分散（４）ａ］と［分散（４）ｂ］と［分散（４）ｃ］が元データのまま出現することを防いでいる。
【０２０４】
このように、乱数をデータの一部として配置しているので、図２５では図２３とは異なり、乱数列を再度分散して配付する必要がない。なお、元データの先頭にいくつ乱数を付加したかなど、乱数に関する情報は分散情報に記憶するとよい。
【０２０５】
（実施の形態４）
実施の形態４は、実施の形態１〜３と異なり、元データの欠落するブロックに乱数を付加する場合である。
【０２０６】
図２７は、本発明による分散データの生成方法の一例を示す図である。図２７も、図２４や図２６と同様に、分散データの中に元データが出現しないようにするものである。そのため、乱数１８や乱数２０のように、欠落するブロックもダミーブロック（列）で埋めている。
【０２０７】
これは、図２１の応用になっている。図２１では、分散（１）下段のブロック（列）数を、上段のブロック（列）数より数を多くしているが、この多いブロック（列）を乱数とすることで、他の分散データを生成する際に、上段のブロックが裸のまま出現するのを防いでいる。図２１の利点はここにある。なお、分散数＝Ｎ（Ｎ＝２、３、４・・・）の場合、この余計なブロック（列）は、Ｎ−１個用意すればよい。
【０２０８】
このようにすると、図２６と同様に、乱数列を再度分散して配付する必要がなくなる。しかも図２６より、簡単に処理でき、処理時間も短くなる。
【０２０９】
図２８は、本発明による分散データの生成方法の一例を示す図である。図２８も、図２４、図２６、図２７と同様に、分散データの中に元データが出現しないようにするものである。そのため、乱数１４のように、欠落するブロックもダミーブロック（列）で埋めている。
【０２１０】
図２７では分散データの下段に乱数のダミーブロック（列）を配置したが、ここでは、上段にダミーブロック（列）を配置することで同じ効果を生み出している。
【０２１１】
また図２８では、今までの図の説明にない、乱数１５のダミーブロック（列）を配置している。これは分散数を１個増加させる場合に、分散（１）の最後の列が裸で見えるのを防止している。この方法は、他の図２４、図２６、図２７でも利用できる。例えば図２４では、列１３を乱数とすれば、乱数１４がなくても、分散データの中に元データの値が出現せず、かつ分散数を同じものにすることが可能である。
【０２１２】
図２９は、本発明による分散データの生成方法の一例を示す図である。図２９では、図２８の乱数１４も無くしている。このように欠落するブロック（ここでは列１４、列１６）の分散（１）での相手側ブロック（ここでは列１３、列１５）を、乱数のダミーブロック（列）とすることでも、分散データの最後の列が裸で見えるのを防止できる。
【０２１３】
同じように、図２２の列９、列１１、列１３も乱数のダミーブロック（列）とするのがよい。
【０２１４】
（実施の形態５）
実施の形態５は、実施の形態１〜４と異なり、元データをさらに分割する修正データを用いる場合である。
【０２１５】
図３０は、本発明による分散データの生成方法の一例を示す図である。これは図１０と比べて見ればわかるように、分散データを生成するのに、元データ、または修正データの列１、列２、列３・・・を、２個を１組にして図のように配置したものである。
【０２１６】
もっと正確に言えば、元データ、または修正データの各列（列１、列２、列３・・・）を、列１であれば、サブ分割データとして列の丸１と列の丸３、列２であれば、サブ分割データとして列の丸２と列の丸４というように、２個のブロックに分割し、列の丸１、列の丸３、列の丸２、列の丸４・・・の複数のサブ分割データからなる、新たな列として、図１０の要領で、分散データを生成したものである。
【０２１７】
図１０との違いは、各分散データを生成するのに、下段のブロックを、元データ、または修正データの１ブロック（列）サイズ分ではなく、半分（１／２）のブロック（列）サイズでずらしているところである。このようにずらすサイズを変更することも可能である。但しこの場合、１ブロック（列）サイズは２ビット以上でなければならない。
【０２１８】
このような操作を行うと、図１０と比べて見てわかるように、ダミーブロック（列）を挿入しなくても、より多くの分散データが生成できる。なお、このような操作は、他の図でも利用できる。
【０２１９】
図３１は、本発明による分散データの生成方法の一例を示す図である。これは図３０より分散数を１個多くしたものである。この場合、１個のダミーブロック（列）が挿入されるが、これを見てわかるように、乱数としないといけない部分は、元データ、または修正データの半分のブロック（列）サイズ分で済む。
【０２２０】
図３２は、本発明による分散データの生成方法の一例を示す図である。これは図１０と比べて見ればわかるように、分散データを生成するのに、元データ、または修正データの列１、列２、列３・・・を、３個を１組にして図のように配置したものである。
【０２２１】
もっと正確に言えば、元データ、または修正データの各列（列１、列２、列３・・・）を、列１であれば、サブ分割データとして列の丸１と列の丸３と列の丸５、列２であれば、サブ分割データとして列２と列４と列６というように、３個のブロックに分割し、列の丸１、列の丸３、列の丸５、列の丸２、列の丸４、列の丸６・・・の複数のサブ分割データからなる新たな列として、図１０の要領で、分散データを生成したものである。
【０２２２】
図１０との違いは、各分散データを生成するのに、下段のブロックを、元データ、または修正データの１ブロック（列）サイズ分ではなく、１／３分のブロック（列）サイズでずらしているところである。このように、ずらすサイズを１／Ｎ（Ｎ＝２、３、４・・・）のブロック（列）サイズで変更できる。但しこの場合、１ブロック（列）サイズはＮビット以上でなければならない。
【０２２３】
このような操作を行うと、図１０や図３０と比べて見てわかるように、ダミーブロック（列）を挿入しなくても、より多くの分散データが生成できる。なお、このような操作は、他の図でも利用できる。
【０２２４】
以上のように、実施の形態５では、元データを細かく分割するので、分散データをより多く生成することで、セキュリティを向上させることができる。
【０２２５】
（実施の形態６）
実施の形態６は、乱数を用いた他の例を示している。
【０２２６】
図３３は、本発明による分散データの生成方法の一例を示す図である。これは図１０の上段をすべて乱数、すなわち、ダミーブロック（列）としたものである。このような配置にするには、図示しているように、元データの各列の間にダミーブロック（列）を挿入すればよい。
【０２２７】
このような操作を行うと、各分散データのデータ量は元データと等価になるものの、各分散データは元データをストリーミング暗号したのと等価になり、閾値未満の分散データから元データを推測するのが困難になる。しかも普通のストリーミング暗号と異なり、復元には、暗号器やシード（初期値）が必要ではないので、乱数として自然（物理）乱数も利用できる。自然（物理）乱数を利用した場合、これはバーナム暗号（Ｖｅｒｎａｍ  ｃｉｐｈｅｒ、またはＶｅｒｎａｍ'ｓ  Ｏｎｅ−ｔｉｍｅ  Ｐａｄ）と等価になり、完全に安全な分散データとなる。つまり閾値未満の分散データからは絶対に元データを復元されることはなくなる。
【０２２８】
図３４は、本発明による分散データのフォーマットの一例を示す図である。ここでは、図３３で利用した乱数の位置情報を、分散情報に付加している。これにより、元データを復元した場合に、どれが乱数、すなわちダミーブロック（列）がわかるので、正しく元データを復元できるようになる。なお、ダミーブロック（列）を識別する方法はこれに限られるものではなく、例えば、ダミーブロック（列）の番号を記述してもよい。
【０２２９】
図３５は、本発明による分散データの生成方法の一例を示す図である。これは図３３の乱数（乱数Ａ）を、別の乱数（乱数Ｂ）でＸＯＲ処理している。この乱数Ｂは、乱数Ａの乱数生成器と同じ乱数生成器で生成してもよいが、異なる乱数生成器で生成すれば、セキュリティレベルが向上するので望ましい。
【０２３０】
図３３で説明したように、各分散データは元データをストリーミング暗号したのと等価であるものの、復元には、暗号器やシード（初期値）が必要ないので、いくらでも複雑な乱数を生成して用いることが可能である。
【０２３１】
通常のストリーミング暗号でもこのように２重の乱数で暗号化することは可能であるが、復号時にも同じように２重の乱数で復号化しなくてはならず、時間を要する。本発明の方式であれば、２重、３重といくつの乱数で暗号化しても、復元時の処理は一度で済むため、処理時間が短くて済む。
【０２３２】
図３６は、本発明による分散データの生成方法の一例を示す図である。これは図３３の乱数（乱数Ａ）を、別の乱数（乱数Ｂ）でＸＯＲ処理している。図３５と比べると、乱数Ｂが飛び飛びの値になっていることがわかる。
【０２３３】
図３３で説明したように、各分散データは元データをストリーミング暗号したのと等価であるものの、復元には、暗号器やシード（初期値）が必要ないので、自然（物理）乱数などの再現性のない乱数を用いることが可能である。図３３で説明したようにすべての乱数を自然（物理）乱数とするのがよいが、組込み機器で、大量の自然（物理）乱数を迅速に生成できるものは多くはない。従って、図３６のように乱数生成器で生成した乱数Ａを、飛び飛びに発生させた自然（物理）乱数である乱数ＢでＸＯＲ処理するとよい。このような操作を行えば、乱数列が解読されることがなくなり、図３２と同様、安全になる。
【０２３４】
なお、ここでは乱数列Ａの一部のデータも飛ばしているように、取得した自然（物理）乱数の値によって、乱数生成器で生成した一部のデータも飛ばすような処理を行えば安全になるので望ましい。
【０２３５】
図３７は、本発明による分散データの生成方法の一例を示す図である。これは、乱数、すなわちダミーブロック（列）を適当に元データに挿入した修正データを生成し、これから分散データを生成しているものである。取得した自然（物理）乱数の値によって、元データに挿入する乱数、すなわちダミーブロック（列）の位置を決めるとすると、図３２と同様、安全になる。なお、挿入する乱数は、自然（物理）乱数が望ましいが、乱数生成器で生成した乱数であっても安全性は損なわれない。このような乱数、すなわちダミーブロック（列）の配置方法は、分散データのデータ量も削減できてよい。
【０２３６】
図３８は、本発明による分散データの生成方法の一例を示す図である。これは、乱数を元データから生成している。ここでは列２と列４から乱数１を、列６と列８から乱数３というように、乱数を生成しているが、どのような列、若しくは列の組み合せで乱数を生成するかは任意である。規則的に行ってもよいが、例えば、乱数生成器で生成した乱数や自然（物理）乱数の値によって、乱数１、３、５・・・を生成する列、若しくは、列の組み合せを決めるとよい。
【０２３７】
このように、元データから乱数列を生成すれば、乱数列を解読することが不可能となり、閾値未満の分散データから元データを推測できなくなる。繰り返しになるが、これは復元に、暗号器やシード（初期値）が必要ない特徴ゆえにできることである。なお、この生成した乱数を、ここでは図３３と同様の方法で利用しているが、図３５や図３６や図３７のような利用の仕方であってもよい。
【０２３８】
図３９は、本発明による分散データの生成方法の一例を示す図である。これは、図３８で乱数を生成する組みが、元データ１個、または２個であったものを、元データ３個まで拡張したものである。このように１つの乱数を生成する元データの数はいくつであってもよい。限度はあるものの、１つの乱数を生成するのに、より多くの元データを利用すれば複雑になり、より安全になる。なお、この生成した乱数を、ここでは図３３と同様の方法で利用しているが、図３５や図３６や図３７のような利用の仕方であってもよい。
【０２３９】
図４０は、本発明による分散データの生成方法の一例を示す図である。これは、図３８や図３９とは異なり、修正データに用いる乱数Ｂを生成するのに、元データだけでなく、乱数生成器により生成された乱数Ａ、若しくは自然（物理）乱数Ａも活用している。
【０２４０】
なお、乱数Ａをどの位置で利用するかは、元データと同様に、規則的に行ってもよいが、例えば、乱数生成器で生成した乱数や自然（物理）乱数の値によって決めるとすれば、より安全になるので望ましい。また、乱数も、元データと同様に２重にＸＯＲ処理したものを利用してもよい。なお、この生成した乱数を、ここでは図３３と同様の方法で利用しているが、図３５や図３６や図３７のような利用の仕方であってもよい。
【０２４１】
図４１は、本発明による分散データの生成方法の一例を示す図である。これは、図３３とは異なる方法で分散データを生成したものである。図３３では乱数、すなわちダミーブロック（列）と元データを組み合わせてＸＯＲ処理したデータを分散データとしているが、ここでは、乱数、すなわちダミーブロック（列）だけを分散データとしている。そして、この乱数、すなわちダミーブロック（列）でＸＯＲ処理されたデータを共有データとして、各分散データ保有者に配布するものである。なお、この共有データは図３３の分散（１）と等価である。
【０２４２】
なお、元データの復元には、まず乱数列（乱数１、２、３・・・）を求める。閾値以上の分散データが集まれば、今まで説明してきた方法によって、乱数列がわかる。次に、共有データとこの乱数列でＸＯＲ処理すれば、元データが復元できる。また、乱数列による分散データの生成方法は、この図４１に図示した方法だけでなく、他の図で示す分散データの生成方法も利用可能である。
【０２４３】
図４２は、本発明による分散データの生成方法の一例を示す図である。ここでは、図４１と異なり、乱数列による分散データを生成するのに、乱数Ａと乱数Ｂを利用している。乱数Ａと乱数Ｂは同じ乱数生成器でも異なる乱数生成器から生成してもよい。またどちらか一方、またはどこか一部、またはすべてが自然（物理）乱数であってもよい。
【０２４４】
さらに、図３３から説明してきた一連の要領も利用可能で、例えば一部の乱数を欠けたものにすることも、一部の乱数を２重、３重の乱数のＸＯＲ処理されたデータとすることなども可能である。また、図３８や図３９のように、乱数の少なくとも一部に元データを関与させれば、乱数が自然（物理）乱数に近いものになり、安全上好ましい。
【０２４５】
図４３は、本発明による分散データの生成方法の一例を示す図である。ここでは、図４１とは異なり、図４１の共有データも分散処理して、各分散データ保有者に配布するものである。こうすると、閾値未満の分散データから元データを推測することはより困難になる。
【０２４６】
なお、このような構成をとる場合には、配付する分散データの組み合せに注意を要する。例えば、［分散（２）ａ］と［分散（３）ｅ］や、［分散（３）ａ］と［分散（１）ｅ］などのような組み合せで、分散データを配布してはならない。［分散（２）ａ］と［分散（３）ｅ］をＸＯＲ処理すれば列１が、同様に、［分散（３）ａ］と［分散（１）ｅ］をＸＯＲ処理すれば列２が復元できてしまう。また、この乱数の生成方法に関しては、図３３から説明してきた一連の要領が利用可能である。
【０２４７】
図４４は、本発明による分散データの生成方法の一例を示す図である。ここでは、図４１とは異なり、図４１の共有データすべてを共有するのではなく、分散させて共有するようにしている。つまり、閾値以上の分散データが集結すると共有データを生成できるようにしている。例えば、分散（１）と分散（２）が集結すれば、Ａ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇ、Ｈすべてが揃うので、元データを復元できる。このようにすれば、閾値未満の分散データでは、すべての元データの情報が完全に揃わないので、閾値未満の分散データからは完全に元データを推測できなくなる。
【０２４８】
なおこのような構成をとる場合には、配付する分散データの組み合せに注意を要する。例えば、［分散（２）ａ］とＡや、［分散（３）ａ］とＢなどのような組み合せで、分散データを配布してはならない。［分散（２）ａ］とＡをＸＯＲ処理すれば列１が、同様に、［分散（３）ａ］とＢをＸＯＲ処理すれば列２が復元できてしまう。
【０２４９】
なおこの乱数の生成方法に関しては、図３３から説明してきた一連の要領が利用可能である。また、図４１の共有データの分散方法は、図４４の方法に限られるものではなく、いろいろな方法がある。
【０２５０】
（実施の形態７）
実施の形態７は、３段の畳み込みの場合を示している。
【０２５１】
図４５は、本発明による分散データの生成方法の一例を示す図である。今までの図では、分散データを生成するのに、２段（行）に畳み込む操作を行ってきたが、ここでは３段（行）に畳み込む操作を行っている。
【０２５２】
はじめに分散（１）の生成方法について説明する。［分散（１）ａ］は、列１と列２と列３とをＸＯＲ処理した値である。同様に、［分散（１）ｂ］は、列４と列５と列６をＸＯＲ処理した値である。［分散（１）ｃ］以下も、図に示したように、同様の処理によって計算する。このように、分散（１）は、元データを３段（行）に畳み込んでいる。従って、分散（１）のブロック（列）数は、元データのブロック（列）数の１／３になる。
【０２５３】
次に分散（２）の生成方法について説明する。［分散（２）ａ］は、列１と列３とをＸＯＲ処理した値である。一方、［分散（２）ｂ］は、列４と列２と列６とをＸＯＲ処理した値である。［分散（２）ｃ］以下も、図に示したように、［分散（２）ｂ］と同様の処理によって計算する。このように、分散（２）は、元データを３段（行）に畳み込んでいる。従って、分散（２）のブロック（列）数は、元データのブロック（列）数の１／３になる。
【０２５４】
但し、この図を見てわかるように、分散（２）は、分散（１）の中段に図示したブロック、つまり元データの列２、５、８・・・を、右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（２）では元データの列１４は計算に利用しない。
【０２５５】
次に分散（３）の生成方法について説明する。［分散（３）ａ］は、列１と列２とをＸＯＲ処理した値である。一方、［分散（３）ｂ］は、列４と列５と列３とをＸＯＲ処理した値である。［分散（３）ｃ］以下も、図に示したように、［分散（３）ｂ］と同様の処理によって計算する。このように、分散（３）は、元データを３段（行）に畳み込んでいる。従って、分散（３）のブロック（列）数は、元データのブロック（列）数の１／３になる。
【０２５６】
但し、この図を見てわかるように、分散（３）は、分散（１）の下段に図示したブロック、つまり元データの列３、６、９・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（Ｃ）では元データの列１５は計算に利用しない。
【０２５７】
次に、分散（４）の生成方法について説明する。［分散（４）ａ］は、元データの列１そのものである。一方、［分散（４）ｂ］は、列４と列２と列３とをＸＯＲ処理した値である。［分散（４）ｃ］以下も、図に示したように、［分散（４）ｂ］と同様の処理によって計算する。このように、分散（４）は、元データを３段（行）に畳み込んでいる。従って、分散（４）のブロック（列）数は、元データのブロック（列）数の１／３になる。
【０２５８】
但し、この図を見てわかるように、分散（４）は、分散（１）の中段・下段に図示したブロック、つまり元データの列２、５、８・・・と列３、６、９・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（４）では元データの列１４と列１５は計算に利用しない。
【０２５９】
このように、元データを３段（行）に畳み込む操作を行えば、元データの情報を欠落させることができる。これにより、１個の分散データから元データを復元されることを阻止できるようになる。つまり秘密分散を行うことが可能となる。
【０２６０】
しかも、３段（行）に畳み込む場合は、２段（行）に畳み込む場合より、より複雑になるので、セキュリティレベルが向上し、かつ各分散データのデータ量は１／３で済む。
【０２６１】
なおここでは、元データを１５のブロック（列）に分割しているが、実際は３個以上であれば、いくつのブロック（列）に分割してもよい。また、このブロック（列）のデータサイズは、１ビット単位で、任意のサイズに設定可能である。
【０２６２】
なお、すべての列を３段（行）の畳み込むには、ブロック（列）数は３の倍数にする必要があるが、必ずしも元データを３の倍数に分割する必要はない。２段（行）の場合で説明したのと同様であるが、３段（行）に畳み込めないところは、データのない空ブロック（列）とするか、乱数のダミーブロック（列）とすればよい。これはＮ段（行）（Ｎ＝２、３、４・・・）の場合でも同様である。
【０２６３】
図４６は、本発明による元データの復元方法の一例を示す図である。ここでは、図４５の４個の分散データのうち、分散（１）、分散（２）、分散（３）を利用して復元を行う場合の一例を示す。つまり図の上側に示した分散（１）、分散（２）、分散（３）の３個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。
【０２６４】
（１）［分散（１）ａ］  ＸＯＲ  ［分散（２）ａ］を計算し、その結果より、列２を取得する。（２）［分散（１）ａ］  ＸＯＲ  ［分散（３）ａ］を計算し、その結果より、列３を取得する。（３）［分散（１）ａ］  ＸＯＲ  列２  ＸＯＲ  列  ３を計算し、その結果より、列１を取得する。（４）［分散（１）ｂ］  ＸＯＲ  ［分散（２）ｂ］  ＸＯＲ  列  ２を計算し、その結果より、列５を取得する。（５）［分散（１）ｂ］  ＸＯＲ  ［分散（３）ｂ］  ＸＯＲ  列  ３を計算し、その結果より、列６を取得する（６）［分散（１）ｂ］  ＸＯＲ  列５  ＸＯＲ  列  ６を計算し、その結果より、列４を取得する。（７）［分散（１）ｃ］  ＸＯＲ  ［分散（２）ｃ］  ＸＯＲ  列  ５を計算し、その結果より、列８を取得する。（８）［分散（１）ｃ］  ＸＯＲ  ［分散（３）ｃ］
ＸＯＲ  列  ６を計算し、その結果より、列９を取得する。（９）［分散（１）ｃ］  ＸＯＲ  列８  ＸＯＲ  列  ９を計算し、その結果より、列７を取得する。（１０）［分散（１）ｄ］  ＸＯＲ  ［分散（２）ｄ］  ＸＯＲ  列  ８を計算し、その結果より、列１１を取得する。（１１）［分散（１）ｄ］  ＸＯＲ  ［分散（３）ｄ］  ＸＯＲ  列  ９を計算し、その結果より、列１２を取得する。（１２）［分散（１）ｄ］  ＸＯＲ  列１１  ＸＯＲ  列１２を計算し、その結果より、列１０を取得する。（１３）［分散（１）ｅ］  ＸＯＲ  ［分散（２）ｅ］  ＸＯＲ  列１１を計算し、その結果より、列１４を取得する。（１４）［分散（１）ｅ］  ＸＯＲ  ［分散（３）ｅ］  ＸＯＲ  列１２を計算し、その結果より、列１５を取得する。（１５）［分散（１）ｅ］  ＸＯＲ  列１４  ＸＯＲ  列１５を計算し、その結果より、列１３を取得する。
【０２６５】
これにより、元データの列１、列２、列３・・・、列１５が復元できる。この説明を見てわかるように、この秘密分散は閾値３の秘密分散になっている。このように、分散データを２段（行）で生成すれば、閾値は２となり、分散データを３段（行）で生成すれば、閾値は３となる。また図４５で示したように、分散数は閾値以上に設定できる。
【０２６６】
図４７は、本発明による分散データの生成方法の一例を示す図である。ここでは図４５とは異なる方法で、３段（行）による分散データを生成している。
【０２６７】
分散（２´）は、図４５の分散（２）の中段を１個右にずらしたものである。すなわち、図４５の分散（１）の中段を２個右にずらしたものである。同様に、分散（３´）は、図４５の分散（３）の下段を１個右にずらしたものである。すなわち、図４５の分散（１）の下段を右に２個右にずらしたものである。同様に、分散（４´）は、図４５の分散（４）の中段・下段それぞれを１個右にずらしたものである。すなわち、図４５の分散（１）の中段・下段それぞれを右に２個右にずらしたものである。このように、２段（行）による分散データの生成と同様に、各段を、Ｎ（Ｎ＝１、２、３・・・）個ずらしたものも分散データとして使用できる。なお、各段をそれぞれ１個、２個ずらした組み合せも可能である。
【０２６８】
図４８は、本発明による分散データの生成方法の一例を示す図である。ここでは図４５とは異なる方法で、３段（行）による分散データを生成している。
【０２６９】
分散（５）は、分散（１）の上段を１個右にずらしたものである。分散（６）は、分散（１）の下段を１個右にずらしたものである。分散（７）は、分散（１）の上段・下段それぞれを１個右にずらしたものである。
【０２７０】
このように分散数は自由に設定できる。従って、ｎを分散数、ｍを閾値とすれば、本発明は（ｎ、ｍ）型の閾値秘密分散になっている。なお、図４５、図４７、図４８で示した分散データは、閾値３の分散データの一部にすぎない。２段（行）による分散データの生成方法は、この３段（行）による分散データの生成方法にも適用可能なので、様々な分散データを生成できる。例えば、ここではブロック（列）を右にずらしているが、２段（行）による分散データの生成方法で説明したように左にずらすことも可能である。
【０２７１】
図４９は、本発明による分散データの生成方法の一例を示す図である。これは図４５と比べて見ればわかるように、分散データを生成するのに、元データ、または修正データの列１、列２、列３・・・を、２個を１組にして図のように配置したものである。もっと正確に言えば、元データ、または修正データの各列（列１、列２、列３・・・）を、列１であれば列の丸１と列の丸４、列２であれば列の丸２と列の丸５というように、２個のブロックに分割し、列の丸１、列の丸４、列の丸２、列の丸５・・・を新たな列として、図４５の要領で、分散データを生成したものである。
【０２７２】
図４５との違いは、各分散データを生成するのに、中段・下段のブロックを、元データ、または修正データの１ブロック（列）サイズ分ではなく、１／２のブロック（列）サイズでずらしているところである。このように、２段（行）による分散データだけでなく、３段（行）による分散データにおいても、ずらすサイズを変更することも可能である。２段（行）による分散データと同様に、３段（行）による分散データにおいても、１／Ｎ（Ｎ＝２、３、４・・・）でブロック（列）をずらすことが可能である。
【０２７３】
このように２段（行）による分散データの生成方法した様々な手法は、この３段（行）による分散データの生成方法にも適用可能である。
【０２７４】
図５０は、本発明による分散データの生成方法の一例を示す図である。２段（行）による分散データの生成方法の説明で、乱数、すなわちダミーブロック（列）を用いて、閾値未満の分散データから元データを推測することを困難にする、若しくは不可能にする手法を説明したが、これは３段（行）による分散データの生成にも適用できる。図５０はその一例である。この図５０は、図３３の手法を、３段（行）による分散データに適用したものである。
【０２７５】
このように２段（行）による分散データの様々な生成方法は、この３段（行）による分散データの生成方法にも適用可能である。
【０２７６】
なおこの図からは、もう１つ知見が得られる。各分散データに配置された元データに着目すると理解できるように、各分散データにおける元データの配置方法は、２段（行）による分散データの生成方法そのものである。つまり、２段（行）、すなわち、閾値＝２の分散データに、ダミーブロック（列）からなる段（行）を１段（行）付加すれば、閾値＝３の分散データが生成できることを意味している。同様に、２段（行）、すなわち、閾値＝２の分散データに、ダミーブロック（列）からなる段（行）をＮ（Ｎ＝１、２、３・・・）段（行）付加すれば、閾値＝２＋Ｎの分散データが生成できる。同様に、Ｍ（Ｍ＝１、２、３・・・）段（行）、すなわち、閾値＝Ｍの分散データに、ダミーブロック（列）からなる段（行）をＮ（Ｎ＝１、２、３・・・）段（行）付加すれば、閾値＝Ｍ＋Ｎの分散データが生成できる。
【０２７７】
図５１は、本発明による分散データの生成方法の一例を示す図である。これは、図３７の手法を、３段（行）による分散データに適用したものである。このように２段（行）による分散データの様々な生成方法は、この３段（行）による分散データの生成方法にも適用可能である。
【０２７８】
図５２は、本発明による分散データの生成方法の一例を示す図である。これは分散データの３段（行）のうち、２段（行）までが、乱数、すなわち、ダミーブロック（列）になっている。乱数Ａと乱数Ｂは同じ乱数生成器で発生させた乱数とすることも、異なる乱数生成器で発生させた乱数とすることも可能である。また、その一部、若しくはすべてを自然（物理）乱数とすることも可能である。このように段数が増加すると、複数の段で乱数、すなわちダミーブロック（列）を利用することができ、さらに複雑な分散データを生成することが可能となる。
【０２７９】
（実施の形態８）
実施の形態８は、４段の畳み込みの場合を示している。
【０２８０】
図５３は、本発明による分散データの生成方法の一例を示す図である。ここでは４段（行）に畳み込む操作を行っている。
【０２８１】
はじめに、分散（１）の生成方法について説明する。［分散（１）ａ］は、列１と列２と列３と列４とをＸＯＲ処理した値である。同様に、［分散（１）ｂ］は、列５と列６と列７と列８とをＸＯＲ処理した値である。［分散（１）ｃ］以下も、図に示したように、同様の処理によって計算する。このように、分散（１）は、元データを４段（行）に畳み込んでいる。従って、分散（１）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２８２】
次に分散（２）の生成方法について説明する。［分散（２）ａ］は、列１と列３と列４とをＸＯＲ処理した値である。一方、［分散（２）ｂ］は、列５と列２と列７と列８とをＸＯＲ処理した値である。［分散（２）ｃ］以下も、図に示したように、［分散（２）ｂ］と同様の処理によって計算する。このように、分散（２）は、元データを４段（行）に畳み込んでいる。従って、分散（２）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２８３】
但し、この図を見てわかるように、分散（２）は、分散（１）の上から２段目に図示したブロック、つまり元データの列２、６、１０・・・を、右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（２）では元データの列１４は計算に利用しない。
【０２８４】
次に、分散（３）の生成方法について説明する。［分散（３）ａ］は、列１と列２と列４とをＸＯＲ処理した値である。一方、［分散（３）ｂ］は、列５と列６と列３と列８とをＸＯＲ処理した値である。［分散（３）ｃ］以下も、図に示したように、［分散（３）ｂ］と同様の処理によって計算する。このように、分散（３）は、元データを４段（行）に畳み込んでいる。従って、分散（３）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２８５】
但し、この図を見てわかるように、分散（３）は、分散（１）の上から３段目に図示したブロック、つまり元データの列３、７、１１・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（Ｃ）では元データの列１５は計算に利用しない。
【０２８６】
次に分散（４）の生成方法について説明する。［分散（４）ａ］は、列１と列２と列３とをＸＯＲ処理した値である。一方、［分散（４）ｂ］は、列５と列６と列７と列４とをＸＯＲ処理した値である。［分散（４）ｃ］以下も、図に示したように、［分散（３）ｂ］と同様の処理によって計算する。このように、分散（４）は、元データを４段（行）に畳み込んでいる。従って、分散（４）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２８７】
但し、この図を見てわかるように、分散（４）は、分散（１）の上から４段目に図示したブロック、つまり元データの列３、７、１１・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（４）では元データの列１６は計算に利用しない。
【０２８８】
次に分散（５）の生成方法について説明する。［分散（５）ａ］は、列１と列４とをＸＯＲ処理した値である。一方、［分散（５）ｂ］は、列５と列２と列３と列８とをＸＯＲ処理した値である。［分散（５）ｃ］以下も、図に示したように、［分散（５）ｂ］と同様の処理によって計算する。このように、分散（５）は、元データを４段（行）に畳み込んでいる。従って、分散（５）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２８９】
但し、この図を見てわかるように、分散（５）は、分散（１）の上から２段目、および３段目に図示したブロック、つまり元データの列２、６、１０・・・、および、列３、７、１１・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（５）では元データの列１４、および、列１５は計算に利用しない。
【０２９０】
次に、分散（６）の生成方法について説明する。［分散（６）ａ］は、列１と列２とをＸＯＲ処理した値である。一方、［分散（６）ｂ］は、列５と列６と列３と列４とをＸＯＲ処理した値である。［分散（６）ｃ］以下も、図に示したように、［分散（６）ｂ］と同様の処理によって計算する。このように、分散（６）は、元データを４段（行）に畳み込んでいる。従って、分散（６）のブロック（列）数は、元データのブロック（列）数の１／４になる。
【０２９１】
但し、この図を見てわかるように、分散（６）は、分散（１）の上から３段目、および４段目に図示したブロック、つまり元データの列３、７、１１・・・、および、列４、８、１２・・・を右に１個ずらしてＸＯＲ処理した値になっている。従って、分散（６）では元データの列１５、および、列１６は計算に利用しない。
【０２９２】
このように、元データを４段（行）に畳み込む操作を行えば、元データの情報を欠落させることができる。これにより、１個の分散データから元データを復元されることを阻止できるようになる。つまり秘密分散を行うことが可能となる。
【０２９３】
しかも、４段（行）に畳み込む場合は、２段（行）や３段（行）に畳み込む場合より、より複雑になるので、セキュリティレベルが向上し、かつ各分散データのデータ量は１／４で済む。つまりＮ（Ｎ＝１、２、３・・・）段（行）に畳み込めば、データ量は１／Ｎになる。
【０２９４】
なおここでは、元データを１６のブロック（列）に分割しているが、実際は４個以上であれば、いくつのブロック（列）に分割してもよい。また、このブロック（列）のデータサイズは、１ビット単位で、任意のサイズに設定可能である。
【０２９５】
なお、すべての列を４段（行）の畳み込むには、ブロック（列）数は４の倍数にする必要があるが、必ずしも元データを４の倍数に分割する必要はない。２段（行）や３段（行）の場合で説明したのと同様であるが、４段（行）に畳み込めないところは、データのない空ブロック（列）とするか、乱数のダミーブロック（列）とすればよい。これはＮ段（行）（Ｎ＝２、３、４・・・）の場合でも同様である。
【０２９６】
図５４は、本発明による元データの復元方法の一例を示す図である。ここでは、図５３の６個の分散データのうち、分散（１）、分散（２）、分散（３）、分散（４）を利用して復元を行う場合の一例を示す。つまり図の上側に示した分散（１）、分散（２）、分散（３）、分散（４）の４個の分散データから、図の下側に示した元データを復元する方法を、フローチャートを使って説明する。
【０２９７】
（１）［分散（１）ａ］  ＸＯＲ  ［分散（２）ａ］を計算し、その結果より、列２を取得する。（２）［分散（１）ａ］  ＸＯＲ  ［分散（３）ａ］を計算し、その結果より、列３を取得する。（３）［分散（１）ａ］  ＸＯＲ  ［分散（４）ａ］を計算し、その結果より、列４を取得する。（４）［分散（１）ａ］  ＸＯＲ  列２  ＸＯＲ  列３  ＸＯＲ  列４を計算し、その結果より、列１を取得する。（５）［分散（１）ｂ］  ＸＯＲ  ［分散（２）ｂ］  ＸＯＲ  列２を計算し、その結果より、列６を取得する。（６）［分散（１）ｂ］  ＸＯＲ  ［分散（３）ｂ］  ＸＯＲ  列３を計算し、その結果より、列７を取得する。（７）［分散（１）ｂ］  ＸＯＲ  ［分散（４）ｂ］  ＸＯＲ  列４を計算し、その結果より、列８を取得する。（８）［分散（１）ｂ］  ＸＯＲ  列６  ＸＯＲ  列７  ＸＯＲ  列８を計算し、その結果より、列５を取得する。（９）［分散（１）ｃ］  ＸＯＲ  ［分散（２）ｃ］  ＸＯＲ  列６を計算し、その結果より、列１０を取得する。（１０）［分散（１）ｃ］  ＸＯＲ  ［分散（３）ｃ］  ＸＯＲ  列７を計算し、その結果より、列１１を取得する。（１１）［分散（１）ｃ］  ＸＯＲ  ［分散（４）ｃ］  ＸＯＲ  列８を計算し、その結果より、列１２を取得する。（１２）［分散（１）ｃ］  ＸＯＲ  列１０  ＸＯＲ  列１１  ＸＯＲ  列１２を計算し、その結果より、列５を取得する。（１３）［分散（１）ｄ］  ＸＯＲ  ［分散（２）ｄ］  ＸＯＲ  列１０を計算し、その結果より、列１４を取得する。（１４）［分散（１）ｄ］  ＸＯＲ  ［分散（３）ｄ］  ＸＯＲ  列１１を計算し、その結果より、列１５を取得する。（１５）［分散（１）ｄ］  ＸＯＲ  ［分散（４）ｄ］  ＸＯＲ  列１２を計算し、その結果より、列１６を取得する。（１６）［分散（１）ｄ］  ＸＯＲ  列１４  ＸＯＲ  列１５  ＸＯＲ  列１６を計算し、その結果より、列１３を取得する。
【０２９８】
これにより、元データの列１、列２、列３・・・、列１６が復元できる。この説明を見てわかるように、この秘密分散は閾値４の秘密分散になっている。このように、分散データを２段（行）で生成すれば、閾値は２となり、分散データを３段（行）で生成すれば、閾値は３となり、分散データを４段（行）で生成すれば、閾値は４となる。つまり、分散データをＮ（Ｎ＝２、３、４・・・）段（行）で生成すれば、閾値はＮとなる。また図５３で示したように、分散数は閾値以上に設定できる。
【０２９９】
図５５は、本発明による分散データの生成方法の一例を示す図である。ここでは図５３とは異なる方法で、４段（行）による分散データを生成している。
【０３００】
分散（２´）は、図５３の分散（２）の上から２段目を１個右にずらしたものである。すなわち、図５３の分散（１）の上から２段目を２個右にずらしたものである。同様に、分散（３´）は、図５３の分散（３）の上から３段目を１個右にずらしたものである。すなわち、図５３の分散（１）の上から３段目を右に２個右にずらしたものである。同様に、分散（４´）は、図５３の分散（４）の上から４段目を１個右にずらしたものである。すなわち、図５３の分散（１）の上から４段目を右に２個右にずらしたものである。このように、２段（行）や３段（行）による分散データの生成と同様に、各段を、Ｎ（Ｎ＝１、２、３・・・）個ずらしたものも分散データとして使用できる。なお、各段をそれぞれ１個、２個、３個ずらした組み合せも可能である。
【０３０１】
このように分散数は自由に設定できる。従って、ｎを分散数、ｍを閾値とすれば、本発明は（ｎ、ｍ）型の閾値秘密分散になっている。
【０３０２】
なお、図５３、図５５で示した分散データは、閾値４の分散データの一部にすぎない。２段（行）や３段（行）による分散データの様々な生成方法は、この４段（行）による分散データの生成方法にも適用可能なので、様々な分散データを生成できる。例えば、ここではブロック（列）を右にずらしているが、２段（行）による分散データの生成方法で説明したように左にずらすことも可能である。
【０３０３】
このように、Ｎ（Ｎ＝２、３・・・）段（行）による分散データの生成方法にも、２段（行）や３段（行）による分散データの生成方法の手法が活用できる。また、ずらすサイズを変更したり、ダミーブロック（列）を利用したりする手法など、それ以外の様々な手法も、２段（行）や３段（行）による分散データの生成方法と同様、Ｎ（Ｎ＝２、３・・・）段（行）による分散データの生成方法に活用できる。
【０３０４】
図５６は、本発明による分散データの生成方法の一例を示す図である。これは図５０を再度説明するものである。各分散データに配置された元データに着目すると理解できるように、各分散データにおける元データの配置方法は、２段（行）による分散データの生成方法そのものである。つまり、２段（行）、すなわち閾値＝２の分散データに、ダミーブロック（列）からなる段（行）を２段（行）付加すれば、閾値＝４の分散データが生成できることを意味している。
【０３０５】
（実施の形態９）
実施の形態９は、７以上の分散データを生成した場合を示している。
【０３０６】
図５７から図６１は、本発明による分散データの生成方法の一例を示す図である。図５７は閾値２における分散データの生成方法の一例を示す図、図５８は閾値３における分散データの生成方法の一例を示す図、図５９は閾値４における分散データの生成方法の一例を示す図、図６０は閾値５における分散データの生成方法の一例を示す図、図６１は閾値６における分散データの生成方法の一例を示す図の分散データの作成方法の一例を示している。
【０３０７】
ここで灰色の部分、つまり、列ａから列ｔは、列に並ぶすべてのデータをＸＯＲ処理したデータである。例えば、図５７の分散（１）の列ａは、元データ１３と元データ２をＸＯＲ処理したデータであり、以下、同様に、列ｂは、元データ１５と元データ４をＸＯＲ処理したデータ、列ｃは、元データ１７と元データ６をＸＯＲ処理したデータである。図５８以降も同様で、例えば、図５８の分散（１）の列ａは、元データ１９、２、３をＸＯＲ処理したデータであり、以下、同様に、列ｂは、元データ２２、５、６をＸＯＲ処理したデータ、列ｃは、元データ２５、８、９をＸＯＲ処理したデータである。
【０３０８】
また灰色でない部分、つまり列ａ以前に記述している値は、その分散データが保持する元データそのものであり、この値はＸＯＲ処理さていない。なおこのＸＯＲ処理されない元データは、本当のオリジナルデータの頭に追加した乱数列とするのが望ましい。つまり、本当のオリジナルデータに、必要な分（裸で見える元データの数分）だけ、頭に乱数列を加え、これを元データとすればよい。復元する際は、復元後に、この追加した乱数列を削除すればよい。どの程度の乱数列を加えたかは、各分散データのヘッダ情報に格納すればわかる。
【０３０９】
図５７から図６１を見てわかるように、閾値２の分散データを生成するには、２段（２行）に分けてＸＯＲ処理すればよく、同様に、閾値３、閾値４、閾値５・・・の分散データを生成するには、３段、４段、５段に分けてＸＯＲ処理すればよい。
【０３１０】
但し、各分散データの各列の数字の組み合わせに同じものが生じないように配置する必要がある。図５７では１段目（上段）を右に１個ずつずらしてこれを実現している。これはあくまで一例であり、１段目（上段）を右に２、３・・・とずらしても、また左に１、２、３・・・とずらしてもよい。また逆に２段目（下段）を上段のようにずらしてもよいし、また上段を右に、下段を左にずらしてもよい。
【０３１１】
なお、図５７では分散（１）の１段目を２段目に比べ、左に６個ずらした位置をスタート地点としているが、この１段目のスタート地点は任意である。また他の図でも同様であるが、元データは１、２、３・・・と並んでいるように図示しているが、この並びも任意である。
【０３１２】
図５８では１段目（上段）を右に１個ずつずらし、３段目（下段）を左に１個ずつずらすことで、各分散データの各列の数字の組み合わせに同じものが生じないように配置している。これも前の説明と同様で、このような組み合わせ方法はいくらでも存在する。例えば図６２のように、１段目（上段）を左に２個ずつ、２段目を左に１個ずつずらしてもよい。なお、図５７と同様に、分散（１）の１段目を２、３段目に比べ、左に６個ずらした位置をスタート地点としているが、この１段目のスタート地点は任意である。
【０３１３】
図５９では１段目（上段）を右に２個ずつ、２段目を右に１個ずつらし、４段目（下段）を左に１個ずつずらすことで、各分散データの各列の数字の組み合わせに同じものが生じないように配置している。これも前の説明と同様で、このような組み合わせ方法はいくらでも存在する。例えば図６３のように、１段目（上段）を左に３個ずつ、２段目を左に２個ずつ、３段目を左に１個ずつずらしてもよい。
【０３１４】
なお、図５７、図５８と同様に、分散（１）の１段目を３、４段目下段に比べ、左に１２個ずらした位置をスタート地点としているが、この１段目のスタート地点は任意である。同様に２、３、４段目のスタート地点も任意である。これは閾値５以降の場合も同様である。
【０３１５】
図６０、図６１も図５７から図５９と同様で、格段のずらし方を変えることで、各分散データの各列の数字の組み合わせに同じものが生じないように配置している。これも前の説明と同様で、このような組み合わせ方法はいくらでも存在する。
【０３１６】
重要なのは、格段でずらす個数を変えることである。同じ個数でずらすものがあると、復元できなくなる。但し、ずらす方向は右と左の２つがあるので、右方向と左方向で同じ個数ずらした段（行）は共存できる。例えば左方向にＮ（Ｎ＝１、２、３・・・）個ずらした段と右方向にＮ個ずらした段の組み合わせは可能である。
【０３１７】
なお各分散データで、ずらさない段を１個だけなら配置できる。但し、これは必ず配置しなければならないというものではない。
【０３１８】
図６４は、本発明による分散データの生成方法の一例を示す図である。図５７から図６１は分散数が７の場合の効果的な分散データの作成方法を図示しているが、ここでは、閾値４のケースで、分散数が８の場合の効果的な分散データの作成方法を図示している。
【０３１９】
図６４を同じ閾値４である図５９と見比べるとわかるように、１段目（上段）の元データの数（灰色でない部分）が、分散数７の図５９では、６の倍数になっているのに対し、分散数８の図６４では、７の倍数になっている。図５７から図６１のようなデータ配置をとり、分散数をＮ（Ｎ＝１、２、３・・・）とした場合、このように、１段目（上段）の元データの数をＮ−１の倍数にすればよいことがわかる。
【０３２０】
図６５は、本発明による分散データの生成方法の一例を示す図である。ここでは元データ２をシード値としてこれを乱数生成器に挿入し、この乱数生成が発生した乱数列Ａ、ＢＣ・・・を各列ａ、ｂ、ｃ・・・のそれぞれとＸＯＲ処理している。こうすることで、元データ列に特徴的なデータが連続して現れる場合に、これを隠匿できるようになる。
【０３２１】
なおここでは元データ２の少なくとも一部（元データ２に何らかのデータ処理を施した値を含む）をシード値としているが、シード値は、どの元データ、あるいは複数の分割データであってもよい。またシード値は複数の元データから生成されるとすることも可能である。少なくともシードにする元データは、各分散データの灰色でない部分に存在する元データでなければ、安全である。ここでは元データ２をシードとしているので、元データ２がある列以降（ここでは列ａ以降）の列に乱数列とのＸＯＲ処理を行うことが可能である。
【０３２２】
このような分散データから元データを復元する場合は、まずシード値となっている元データを復元する。そして、分散処理の場合と同様に、その元データをシード値として乱数生成器に乱数列を発生させ、その乱数列と各分散データの各列（シードとなった元データがある列より後の列）のデータとをＸＯＲ処理し、それから復元を行えばよい。
【０３２３】
このように、複数の分割データから少なくとも１つの分割データを用いて乱数データを算出するので、乱数のシードを予め準備する必要がないので、簡易に乱数を発生させることができる。
【０３２４】
図６６は、本発明による分散データの生成方法の一例を示す図である。今までの説明では、元データのデータ数に関して説明を行っていない。閾値２では２段（行）、閾値３では３段（行）というようにデータを配置するので、元データのデータ数はそれぞれ２の倍数、３の倍数というように、閾値の倍数になっていなければならない。しかし本当のオリジナルデータのデータ数は、このように、閾値の倍数になっているとは限らない。
【０３２５】
そこで、オリジナルデータのデータ数が閾値の倍数になっていない場合には、オリジナルデータの最後にダミーデータを加えて元データを作り、元データのデータ数を閾値の倍数にする処理が必要である。復元の際は、このダミーデータを除去しなくてはならないので、従って、その数が把握できなくてはならない。この情報を各分散データのヘッダ情報に格納し、復元の際はこの情報を読み取って、ダミーデータを除去するとすることも可能であるが、図６６のように「＊Ａ」と記した部分にその数を記述し、復元の際に、このデータを見て、ダミーデータを除去するとした方が、プログラムが簡単になりよい。
【０３２６】
なお、ここでは、「＊Ａ」の部分にダミーデータのデータ数情報を格納するとして説明しているが、これは元データのどの部分に挿入されても構わない。
【０３２７】
（実施の形態１０）
図６７は、分散データの生成方法を効果的に行う一例の概略図である。斜線部分は、図５７〜図６５で灰色でない部分に相当し、分散データが保持する元データを格納する部分である。その斜線部分の右側部分が、図５７〜図６５の灰色部分に相当し、各データをＸＯＲ処理した値を格納する部分である。なお、灰色になっているところは、行の中段を現している。但し、偶数行の場合は、上段を下段より１段多くとり、中段を定めるものとする。従って、２行の場合は、上段・中段だけで構成され、下段はない。
【０３２８】
分散データを作成するにあたっては、閾値２では２行、閾値３では３行と言うように、閾値の数と同じ数の行（段）を用意する。この分散データを更にストリーミング暗号するなど、閾値を超える行（段）に擬似乱数をセットするなどして利用することも可能であるが、これは本質的な話ではないので、説明を簡略化するために割愛する。
【０３２９】
はじめに分散データを生成する際に、移動しない行（段）を決める。ここでは、この移動しない行（段）を灰色で示した中段とする。閾値２の分散データを生成する場合は、この中段の上に、１行（段）追加する。次に、閾値３の分散データを生成する場合は、閾値２の行（段）、即ち上段・中段の下に、１行（段）追加する。同様に、閾値４の分散データを生成する場合には、閾値３の行（段）の最上段の上に更に１行（段）追加し、閾値5の分散データを生成する場合には、閾値４の行（段）の最下段の下に更に１行（段）追加する。以降も同様に、閾値が偶数であれば、１つ前の閾値の行（段）の最上段の上に更に１行（段）追加し、閾値が奇数であれば、１つ前の閾値の行（段）の最下段の下に更に１行（段）追加する。このように、中段を基点に上、下、上、下の順に行（段）を追加し、利用する行を用意する。
【０３３０】
そして、図５７〜図６５で説明したように、異なる分散データを作成する度に、上段はデータを右側に、下段はデータを左側に、また、中段に隣接する上・下段は１列ずれ、それに隣接する次の上・下段は２列ずれるというように、中段からの距離（行数）の数だけ列をずらすものとする。
【０３３１】
なおここでは、以上のような分散データ作成方法を示しているが、実際は、閾値の数の増加に対して行（段）をどのように追加しても良いし、各々の行（段）がどちらに、どれだけずれても構わない。図４８に示したように、異なる分散データで、同じ方向に同じ列数ずれる行（段）が複数あっても良いし、移動しない（ずれない）行（段）が複数あっても良い。しかし、そのように、同じ方向に、同じ列数ずれる行（段）が存在する分散データ作成方法では、任意に分散数を決めるのが難しい上、閾値未満の分散データを入手できた場合に、いくつかの行（段）が復元されてしまうセキュリティ上の問題が発生する。例えば、閾値３である図４８で、分散（１）と分散（２）の２つの分散データが入手できれば、上段に配置された元データ１、４、７、・・・、１３は容易に復元されてしまう。
【０３３２】
従って、各行（段）で、同じ方向なら異なる数だけ列をずらす方が、分散数も任意に設定でき、かつセキュリティも向上する。また、ここで説明した分散データ作成方法のように、ずらす列数をなるだけ少なくすれば、斜線部分のデータ数が減り良い。図２９で説明したように、ＸＯＲ処理しないデータは、セキュリティ上、乱数を配置する。そのため、斜線部分のデータ数をできるだけ減らした方が、分散データの生成・復元も速く、記憶容量も小さくて済み、効率的である。
【０３３３】
図６８は、図６７の補足である。図６８では、図６７で説明したような方法で分散データを作成した場合、斜線部分の列数がいくつになるかを示している。新たな分散データを作成する度に、中段に隣接する上・下段は１列ずれるので、中段に隣接する上・下段に対しては、斜線部分で、式（１）の数の列が少なくとも必要になる。
【０３３４】
実際の分散数−１・・・（１）
【０３３５】
この列数は最低の数であり、これ以上の列数を用意することには問題はない。例えば分散数が６であれば、中段に隣接する上・下段に対しては、斜線部分で最低５列必要であるが、６列以上であっても分散データは作成可能である。次の図６９では、そのような分散データ作成方法を示している。
【０３３６】
以上のことを逆に言えば、中段に隣接する上・下段に対して用意する斜線部分の列数は、式（２）であり、実際の分散数は、この最大分散可能数の範囲内で決定すれば良い。
【０３３７】
最大分散可能数（ＭＡＸの分散数）−１・・・（２）
【０３３８】
なお、中段に隣接する上・下段が利用する斜線部分の列をここではエリアと呼ぶ。つまり、中段に隣接する上・下段（閾値２、３のケース）は１エリア分（１は、上段の行数に等しい）の列数を利用する。
【０３３９】
閾値が４以上になった場合は、異なる分散データを作成する度に、２、３・・・と移動する行（段）が現れるが、この場合も閾値２、３と同様に、斜線部分には上段の行数に等しいエリア数を用意すれば良い。例えば閾値４、５であれば、２エリア、閾値６、７であれば３エリアを用意すれば良い。従って実際に必要となる斜線部分の列数は式（３）のようになる。
【０３４０】
上段の行数×（最大分散可能数−１）・・・（３）
【０３４１】
なお、斜線の列数がいくつ必要かは、データの配置方法によっても異なるものなので、ここで説明した列数の求め方はあくまで一例である。
【０３４２】
図６９は、閾値５、分散数６のケースでの分散データ作成方法の一例を詳細、かつ具体的に示した図である。図６７、６８と同様に、斜線部分は、図５７〜図６５で灰色でない部分に相当し、分散データが保持する元データを格納する部分（元データがそのままの値で見えてしまう原データ部）である。その斜線部分の右側部分が、図５７〜図６５の灰色部分に相当し、各データをＸＯＲ処理した値を格納する部分である。
【０３４３】
また説明を分かりやすくするために、ここでは、元データを１２５個のブロック（領域）に分けるものとする。このように、実際のブロック数は、閾値の倍数であるのが好ましいが、必ずしもこれに限定されるものではない。足りないブロックは空白データとするかダミーデータで埋めることも可能であり、元データをいくつのブロックに分割するかは、本質的な議論ではない。
【０３４４】
元データを１，２，３・・・１２５のブロックに分割したら、ブロック番号の若い順に、最上段から最下段へと各ブロックを配置して各分散データを生成していく。つまり、ブロック１は最上段に、ブロック2は次の上段に、ブロック３は中段に、ブロック４は次の下段に、そしてブロック５は最下段に配置する。全行（段）に配置し終えたら、次はその右隣の列に、同様に、ブロック番号の若い順に、最上段から最下段へと各ブロックを配置していく。つまり、ブロック６はブロック１と同じ行（最上段）の１列右隣に、ブロック７はブロック２と同じ行（段）の１列右隣に、ブロック８はブロック３と同じ行（中段）の１列右隣に、ブロック９はブロック４と同じ行（段）の１列右隣に、そしてブロック１０はブロック５と同じ行（最下段）の１列右隣に配置する。同様の操作を続け、ブロック１２５までを配置していく。
【０３４５】
なお、中段を除いて、各分散データで、一番はじめのブロックを配置する各行（段）の列の位置は異なる。１番目の分散データである分散データ（１）の最上段においては、はじめのブロックを配置する列の位置は、斜線部分の一番左側、つまり、ＸＯＲ処理を行う一番左側の列（列ａ）から２エリア左側に配置するものとする。なおここでは、最大分散数を７としているので、１エリアは６列で構成されている。また、分散データ（１）の次の上段においては、はじめのブロックを配置する列の位置は、ＸＯＲ処理を行う一番左側の列から１エリア左側に配置するものとし、中断から最下段においては、はじめのブロックを配置する列の位置は、ＸＯＲ処理を行う一番左側の列とする。
【０３４６】
このような配置をする理由は、なるだけ原データ部に配置されるデータ数を少なくするためであり、実際は、はじめの列の位置をどこにしても構わない。
【０３４７】
次に、２番目の分散データである分散データ（２）であるが、最上段においては、はじめのブロックを配置する列の位置は、分散データ（１）の同じ行（最上段）の右２列横に配置する。また、分散データ（２）の次の上段においては、はじめのブロックを配置する列の位置は、分散データ（１）の同じ行（段）の右１列横に配置する。続く中段のはじめのブロックを配置する列の位置は、分散データ（１）と同様、ＸＯＲ処理を行う一番左側の列とする。続く下段における配置位置は、上段と向きが逆になる。つまり、分散データ（２）の最下段においては、はじめのブロックを配置する列の位置は、分散データ（１）の同じ行（最下段）の左２列横に配置する。また、分散データ（２）の次の下段においては、はじめのブロックを配置する列の位置は、分散データ（１）の同じ行（段）の左１列横に配置する。
【０３４８】
この操作を同様に行い、分散データ（３），（４），（５），（６）を生成する。なおここでは先に記したように、最大分散数を７としているので、分散データ（６）において、各上段のはじめのブロックは、ＸＯＲ処理を行う一番左側の列に並ばない。また、下段・最下段はＸＯＲ処理を行う一番左側の列から１エリア先、２エリア先に到達しない。もし最大分散数を６としていれば、分散データ（６）において、各上段のはじめのブロックは、ＸＯＲ処理を行う一番左側の列に並び、下段・最下段はＸＯＲ処理を行う一番左側の列から１エリア先、２エリア先に到達して、各段のはじめのブロックの配置位置は、分散データ（１）と逆になる。
【０３４９】
ここで分散数６の分散データを作成するのに、わざわざ最大分散数を７としているのは、ＸＯＲ処理を簡略化するためである。分散データ（１）〜（６）を見て分かるように、各上段・各下段のブロック数は、中段のブロック数より必ず大きい。従って、各列で、ＸＯＲ処理するブロック数を割り出す方法は共通化でき簡単である。一方、ここで分散データ（７）を作成すれば、分散データ（７）の最上段・上段のブロック数は、中段より小さな値となるため、ＸＯＲ処理するブロック数を割り出すのに、これだけ別処理しなければならない。従って、本当に分散させたい数に１を加えた数を最大分散数とするのが好ましい。
【０３５０】
なおここでは、分散データ（１）〜（６）の順に、順々に各行（段）のブロックを、右・左方向に、図６７の要領で列をずらして配置しているが、図６７で説明したように、実際は、各々の行（段）がどちらに、どれだけずれても構わない。しかし、ここで説明したように、すべての列でブロックの組合せが異なるような配置をとれば、分散数を容易に増加させることが可能でセキュリティ上も好ましい。また、原データ部のデータ数を削減できて良い。
【０３５１】
以上のように配置すると、分散データ（１）は、原データ部に、ブロック１，６・・・５６と、ブロック２，７，・・・２７が配置されることになる。なお、このブロックの並び順には意味はない。
【０３５２】
また、分散データ（１）のＸＯＲ部の列ａには、式（４）の計算結果が配置される。
【０３５３】
“６１” ＸＯＲ “３２” ＸＯＲ “３” ＸＯＲ “４” ＸＯＲ “５”・・・（４）
【０３５４】
ここでアンダーバーが付いた数字は、ブロックのインデックスを意味する。例えば、“６１”はブロック６１を意味する。以下の説明でも同じ表記を用いる。同様に列ｂには、式（５）の計算結果が配置される。
【０３５５】
“６６” ＸＯＲ “３７” ＸＯＲ “８” ＸＯＲ “９” ＸＯＲ “１０”・・・（５）
【０３５６】
以下、列ｃ，列ｄ・・・列ｙで同様にＸＯＲ処理が行われ、その計算結果が各々の列に配置される。
【０３５７】
つまり、分散データ（１）は、ブロック１，６・・・５６とブロック２，７，・・・２７のそのままの値と、各列でＸＯＲ処理された、列ａ，列ｂ・・・列ｙの値で構成される。この各値の並び順には意味はないが、図６９に示した順で各値を配置しておくと復元処理を簡単に行えるので好ましい。
【０３５８】
なお、分散データ（１）を見ればわかるように、ブロック１，６・・・５６とブロック２，７，・・・２７はそのままの値が見えている。また、列ｎ〜列ｙまでは５未満のブロックでＸＯＲ処理しているため、他の列に比べ、値を推測する組み合わせが減少しており、セキュリティ度が低くなっている。
【０３５９】
従って、元データのブロック１〜ブロック６０、及びブロック６６〜ブロック１２５は乱数とするのが好ましい。正確に言えば、ブロック３やブロック６６などのように、この乱数とするブロックの中にも、乱数にしなくても安全なブロックは存在するが、その安全なブロックの位置を計算するのが面倒であるので、このようにざっくりと処理するのが簡単で良い。
【０３６０】
つまり、５ブロック分の本当に秘匿したいデータ（元データ）をブロック６１〜６５に配置し、ブロック１〜１２５のその他のブロックに乱数を配置することで元データを生成し、その元データから分散データを生成させれば、セキュリティ度が向上し、かつ簡単に処理できて良い。復元においては、元データから乱数のブロックを取り除き、５ブロック分の本当に秘匿したいデータを取り出せば良い。なお、本当に秘匿したいデータのブロックへの配置は、必ずしも本当に秘匿したいそのデータの並び通りに行う必要はない。
【０３６１】
本当に秘匿したいデータが５ブロック分より多い場合は、ブロック６１〜６５以降にその本当に秘匿したいデータのブロックを追加するだけで良く、乱数のブロックはこれ以上必要ない。
【０３６２】
なお、１ブロックのデータサイズであるが、そのサイズは１ビットでも１バイトでも４バイトでも良く、データサイズは任意である。但し、１度で大量にＸＯＲ処理すれば、処理速度が向上するので、利用するＣＰＵにおいて、ＸＯＲ処理できる最大のデータサイズを、１ブロックのデータサイズとするのが好ましい。
【０３６３】
なお、本当に秘匿したいデータをブロックで分割した際に、１ブロック未満になる場合には、１ブロックになるように、ダミーデータを追加し、復元した際に除去するようにすれば良い。その追加したダミーデータの位置やサイズなどの情報はどこかのブロックか、またはヘッダ情報に記述しておくなどすれば良い。
【０３６４】
同じく本当に秘匿したいデータが５ブロック分に足りない場合にも、同様にダミーデータを追加して、つまりダミーブロックを追加して５ブロックにすれば良い。本当に秘匿したいデータが６ブロック以上で、同様に５ブロック刻みにならない場合も同様である。なおここでは、閾値が５なので５ブロック刻みとしているが、閾値Ｎ（Ｎ＝１，２・・・）であればＮブロック刻みとなる。なお、閾値Ｎにおける本当に秘匿したいデータは必ずしもこのようにＮブロック刻みにする必要はなく、１ブロック刻みとしても問題はない。例えば、ブロック６１〜６５の内、１ブロックのみが本当に秘匿したいデータで、あとの残りすべてがダミーデータであっても構わない。
【０３６５】
図７０は、分散データの復元方法を効果的に行う一例の概略図である。ここでは図６９の分散データ（１）〜（５）を利用する場合を例にとり説明を行う。なお、復元方法はこれに限られるものではないが、ここで説明する方法を用いれば、復元のプログラム処理を簡便にできる。
【０３６６】
はじめに復元に用いられる分散データを通し番号の若い順に並びかえる。ここで通し番号とは、図６９で分散データに付与した（１）〜（６）の番号のことで、通し番号の若い分散データほど、ブロック１が左側に位置する。ここでは、例として図６９の分散データ（１）〜（５）を利用するので、そのまま分散データ（１）〜（５）の順で上から並べる。
【０３６７】
復元処理は、通し番号の一番若い分散データを用いて、一番目の行（最上段）を復元する。そして、次に若い分散データを用いて、次の行（段）を復元する。同様に、その次に若い分散データを用いて、次の行（段）を復元するというように、分散データの通し番号順に、上から復元する行（段）を決定する。従ってここでは、分散データ（１）で最上段を、分散データ（２）で上段を、分散データ（３）で中段を、分散データ（４）で下段を、分散データ（５）で最下段の復元を行う。
【０３６８】
図７１は、図７０を更に詳細に示した図である。ここでは復元の実際の順番を特に詳しく説明する。
【０３６９】
はじめに中段を復元する分散データ（３）に注目する。分散データ（３）では、はじめにブロック３を復元しないといけないが、これを復元するには、ブロック１４、２５、２２、４１の値が必要になる。これらブロックは、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。従ってブロック３は、式（６）を計算することによって求められる。
【０３７０】
《分散データ（３）列ａ》 ＸＯＲ “１４” ＸＯＲ “２５” ＸＯＲ “２２” ＸＯＲ “４１”・・・（６）
【０３７１】
なおここで、《分散データ（３）列ａ》とは、分散データ（３）の列ａの値を意味する。以降の説明でも同様の表記を用いる。
【０３７２】
次も同じく、中段を復元する分散データ（３）に注目する。分散データ（３）では、次にブロック８を復元しないといけないが、これを復元するには、ブロック１９、３０、２７、４６の値が必要になる。これらブロックは、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。従ってブロック８は、式（７）を計算することによって求められる。
【０３７３】
《分散データ（３）列ｂ》 ＸＯＲ “１９” ＸＯＲ “３０” ＸＯＲ “２７” ＸＯＲ “４６”・・・（７）
【０３７４】
次も同じく、中段を復元する分散データ（３）に注目する。分散データ（３）では、次にブロック１３を復元しないといけないが、これを復元するには、ブロック２４、３５、３２、５１の値が必要になる。ブロック３５、５１は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。一方、ブロック２４、３２は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３７５】
まずブロック３２の復元方法を説明する。この復元は図７０で説明したように、上段を復元する分散データ（２）を用いて行う。分散データ（２）で、ブロック３２を復元するには、ブロック８、１４、２０、５６の値が必要になる。ここでブロック８はすでに復元済みである。また、ブロック１４、２０、５６は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。従ってブロック３２は、式（８）を計算することによって求められる。
【０３７６】
《分散データ（２）列ｂ》 ＸＯＲ “８” ＸＯＲ “１４” ＸＯＲ “２０” ＸＯＲ “５６”・・・（８）
【０３７７】
次にブロック２４の復元方法を説明する。この復元は図７０で説明したように、下段を復元する分散データ（４）を用いて行う。分散データ（４）で、ブロック２４を復元するには、ブロック８、４０、２２、３６の値が必要になる。ここでブロック８はすでに復元済みである。また、ブロック４０、２２、３６は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。従ってブロック２４は、式（９）を計算することによって求められる。
【０３７８】
《分散データ（４）列ｂ》 ＸＯＲ “８” ＸＯＲ “４０” ＸＯＲ “２２” ＸＯＲ “３６”・・・（９）
【０３７９】
従って、分散データ（３）のブロック１３を復元するのに必要なブロック２４、３５、３２、５１の値はすべて既知となるので、ブロック１３は、式（１０）を計算することによって求められる。
【０３８０】
《分散データ（３）列ｃ》 ＸＯＲ “２４” ＸＯＲ “３５” ＸＯＲ “３２” ＸＯＲ “５１”・・・（１０）
【０３８１】
次も同じく、中段を復元する分散データ（３）に注目する。分散データ（３）では、次にブロック１８を復元しないといけないが、これを復元するには、ブロック２９、４０、３７、５６の値が必要になる。ブロック４０、５６は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。一方、ブロック２９、３７は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３８２】
まずブロック３７の復元方法を説明する。この復元は図７０で説明したように、上段を復元する分散データ（２）を用いて行う。分散データ（２）で、ブロック３７を復元するには、ブロック１３、１９、２５、６１の値が必要になる。ここでブロック１３はすでに復元済みである。また、ブロック１９、２５は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。一方、ブロック６１は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３８３】
ブロック６１の復元は、図７０で説明したように、最上段を復元する分散データ（１）を用いて行う。分散データ（１）で、ブロック６１を復元するには、ブロック３、４、５、３２の値が必要になる。これらのブロックは、すでに復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在するので、ブロック６１は、式（１１）を計算することによって求められる。
【０３８４】
《分散データ（１）列ａ》 ＸＯＲ “３” ＸＯＲ “４” ＸＯＲ “５” ＸＯＲ “３２”・・・（１１）
【０３８５】
従って、ブロック３７は、式（１２）を計算することによって求められる。
【０３８６】
《分散データ（２）列ｃ》 ＸＯＲ “１３” ＸＯＲ “１９” ＸＯＲ “２５” ＸＯＲ “６１”・・・（１２）
【０３８７】
次にブロック２９の復元方法を説明する。この復元は図７０で説明したように、下段を復元する分散データ（４）を用いて行う。分散データ（４）で、ブロック２９を復元するには、ブロック１３、４５、２７、４１の値が必要になる。ここでブロック１３はすでに復元済みである。また、ブロック２７、４１は、分散データ（１）〜（５）のいずれかの斜線部分に存在するので、そのままの値を利用する。一方、ブロック４５は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３８８】
ブロック４５の復元は、図７０で説明したように、最下段を復元する分散データ（５）を用いて行う。分散データ（５）で、ブロック４５を復元するには、ブロック３、２４、１２、２１の値が必要になる。これらのブロックは、すでに復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在するので、ブロック４５は、式（１３）を計算することによって求められる。
【０３８９】
《分散データ（５）列ａ》 ＸＯＲ “３” ＸＯＲ “２４” ＸＯＲ “１２” ＸＯＲ “２１”・・・（１３）
【０３９０】
従って、ブロック２９は、式（１４）を計算することによって求められる。
【０３９１】
《分散データ（４）列ｃ》 ＸＯＲ “１３” ＸＯＲ “４５” ＸＯＲ “２７” ＸＯＲ “４１”・・・（１４）
【０３９２】
従って、中段のブロック１８は、式（１５）を計算することによって求められる。
【０３９３】
《分散データ（３）列ｄ》 ＸＯＲ “２９” ＸＯＲ “４０” ＸＯＲ “３７” ＸＯＲ “５６”・・・（１５）
【０３９４】
次も同じく、中段を復元する分散データ（３）に注目する。分散データ（３）では、次にブロック２３を復元しないといけないが、これを復元するには、ブロック３４、４５、４２、６１の値が必要になる。ブロック４５、６１は、すでに復元済みである。一方、ブロック３４、４２は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３９５】
まずブロック４２の復元方法を説明する。この復元は図７０で説明したように、上段を復元する分散データ（２）を用いて行う。分散データ（２）で、ブロック４２を復元するには、ブロック１８、２４、３０、６６の値が必要になる。ここでブロック１８、２４、３０は、復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在する。一方、ブロック６６は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０３９６】
ブロック６６の復元は、図７０で説明したように、最上段を復元する分散データ（１）を用いて行う。分散データ（１）で、ブロック６６を復元するには、ブロック８、９、１０、３７の値が必要になる。これらのブロックは、すでに復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在するので、ブロック６６は、式（１６）を計算することによって求められる。
【０３９７】
《分散データ（１）列ｂ》 ＸＯＲ “８” ＸＯＲ “９”ＸＯＲ “１０” ＸＯＲ “３７”・・・（１６）
【０３９８】
従って、ブロック４２は、式（１７）を計算することによって求められる。
【０３９９】
《分散データ（２）列ｄ》 ＸＯＲ “１８” ＸＯＲ “２４” ＸＯＲ “３０” ＸＯＲ “６６”・・・（１７）
【０４００】
次にブロック３４の復元方法を説明する。この復元は図７０で説明したように、下段を復元する分散データ（４）を用いて行う。分散データ（４）で、ブロック３４を復元するには、ブロック１８、５０、３２、４６の値が必要になる。ここでブロック１８、３２、４６は、復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在する。一方、ブロック５０は分散データ（１）〜（５）のいずれの斜線部分にも存在しないので復元して値を求めなくてはならない。
【０４０１】
ブロック５０の復元は、図７０で説明したように、最下段を復元する分散データ（５）を用いて行う。分散データ（５）で、ブロック５０を復元するには、ブロック８、２９、１７、２６の値が必要になる。これらのブロックは、すでに復元済みか、あるいは分散データ（１）〜（５）のいずれかの斜線部分に存在するので、ブロック５０は、式（１８）を計算することによって求められる。
【０４０２】
《分散データ（５）列ｂ》 ＸＯＲ “８” ＸＯＲ “２９” ＸＯＲ “１７” ＸＯＲ “２６”・・・（１８）
【０４０３】
従って、ブロック３４は、式（１９）を計算することによって求められる。
【０４０４】
《分散データ（４）列ｄ》 ＸＯＲ “１８” ＸＯＲ “５０” ＸＯＲ “３２” ＸＯＲ “４６”・・・（１９）
【０４０５】
従って、中段のブロック２３は、式（２０）を計算することによって求められる。
【０４０６】
《分散データ（３）列ｅ》 ＸＯＲ “３４” ＸＯＲ “４５” ＸＯＲ “４２” ＸＯＲ “６１”・・・（２０）
【０４０７】
以上のような手順で、次々と復元を行えば、元データを完全に復元可能である。
【０４０８】
この手順は次のように一般化すると、より効率的に復元が行える。復元は、最上段、最下段、上段、下段、中段と言うように、上・下・次の上・下（閾値が偶数の場合、最後の下段はない。また閾値が４以上でなければ、次の上・下はない）、そして最後に中段という手順で復元を行う。従って、ここでは、分散データ（１）、（５）、（２）、（４）、（３）の順で逐次復元を行う。そしてその一連の復元が済めば、同様の手順で次の列、次の列と復元を行っていく。
【０４０９】
但し、各行（段）で復元を開始する列の位置は異なる。中段に隣接する上段を復元する分散データは、中段を復元する分散データより、式（２１）の分の列だけ、左にずれた位置で復元が開始される。
【０４１０】
１列×（中段を復元する分散データの通し番号−上段を復元する分散データの通し番号）・・・（２１）
【０４１１】
また、同様に、中段に隣接する下段を復元する分散データは、中段を復元する分散データより、式（２２）の分の列だけ、左にずれた位置で復元が開始される。
【０４１２】
１列×（下段を復元する分散データの通し番号−中段を復元する分散データの通し番号）・・・（２２）
【０４１３】
同様に先の上段に隣接する次の上段を復元する分散データは、先の上段を復元する分散データより、２列×（先上段を復元する分散データの通し番号−次上段を復元する分散データの通し番号）分の列だけ、左にずれた位置で復元が開始される。また、同様に、先の下段に隣接する次の下段を復元する分散データは、先の上段を復元する分散データより、２列×（次下段を復元する分散データの通し番号−先下段を復元する分散データの通し番号）分の列だけ、左にずれた位置で復元が開始される。以下、同様である。
【０４１４】
以上より、ここでは、分散データ２の復元開始位置は、分散データ３より式（２３）の列だけ左にずれる。
【０４１５】
１列×（３−２）＝１列・・・（２３）
同様に、分散データ４の復元開始位置は、分散データ３より式（２４）の列だけ左にずれる。
【０４１６】
１列×（４−３）＝１列・・・（２４）
また、分散データ１の復元開始位置は、分散データ２より式（２５）の列だけ左にずれる。
【０４１７】
２列×（２−１）＝２列・・・（２５）
【０４１８】
従って、分散データ１の復元開始位置は、中段を復元する分散データ３より式（２６）の列だけ左にずれる。
【０４１９】
２列＋１列＝３列・・・（２６）
【０４２０】
同様に、分散データ５の復元開始位置は、分散データ４より式（２７）の列だけ左にずれる。
【０４２１】
２列×（５−４）＝２列・・・（２７）
【０４２２】
従って、分散データ５の復元開始位置は、中段を復元する分散データ３より式（２８）の列だけ左にずれる。
【０４２３】
２列＋１列＝３列・・・（２８）
【０４２４】
中段のはじめの復元開始位置を列ａにとるので、処理順番が１番である分散データ（１）の復元開始位置は、最上段で列ａより左に３列ずれた位置になる。これはブロック４６になる。これは斜線部分に存在するので、ここでは何もしなくて良い。次に処理順番が２番である分散データ（５）の復元開始位置であるが、これは最下段で列ａより左に３列ずれた位置になる。これはブロック３０になる。これは斜線部分に存在するので、ここでも何もしなくて良い。
【０４２５】
次に処理順番が３番である分散データ（２）の復元開始位置であるが、これは上段で列ａより左に１列ずれた位置になる。これはブロック２２になる。これは斜線部分に存在するので、ここでも何もしなくて良い。次に処理順番が４番である分散データ（４）の復元開始位置であるが、これは、下段で列ａより左に１列ずれた位置になる。これはブロック１４になる。これは斜線部分に存在するので、ここでも何もしなくて良い。
【０４２６】
次に処理順番が５番である分散データ（３）の復元であるが、その復元位置は、ブロック３である。この時点で、ブロック３以外のブロックの値はすでに既知なので、列ａとブロック３以外のブロックとをＸＯＲ処理することによって、ブロック３を復元できる。
【０４２７】
次に処理順番が６番である分散データ（１）の復元を行うが、その復元位置は、ブロック４６の右１列隣のブロック５１である。これは斜線部分に存在するので、ここでは何もしなくて良い。次に処理順番が７番である分散データ（５）の復元を行うが、その復元位置は、ブロック３０の右１列隣のブロック３５である。これは斜線部分に存在するので、ここでも何もしなくて良い。
【０４２８】
次に処理順番が８番である分散データ（２）の復元を行うが、その復元位置は、ブロック２２の右１列隣のブロック２７である。この時点で、ブロック２７以外のブロックの値はすでに既知なので、列ａとブロック２７以外のブロックとをＸＯＲ処理することによって、ブロック２７を復元できる。次に処理順番が９番である分散データ（４）の復元を行うが、その復元位置は、ブロック１４の右１列隣のブロック１９である。この時点で、ブロック１９以外のブロックの値はすでに既知なので、列ａとブロック１９以外のブロックとをＸＯＲ処理することによって、ブロック１９を復元できる。
【０４２９】
次に処理順番が１０番である分散データ（３）の復元であるが、その復元位置は、ブロック８である。この時点で、ブロック８以外のブロックの値はすでに既知なので、列ｂとブロック８以外のブロックとをＸＯＲ処理することによって、ブロック８を復元できる。
【０４３０】
次に処理順番が１１番である分散データ（１）の復元を行うが、その復元位置は、ブロック５６である。これは斜線部分に存在するので、ここでは何もしなくて良い。次に処理順番が１２番である分散データ（５）の復元を行うが、その復元位置は、ブロック４０である。これは斜線部分に存在するので、ここでも何もしなくて良い。
【０４３１】
次に処理順番が１３番である分散データ（２）の復元を行うが、その復元位置は、ブロック３２である。この時点で、ブロック３２以外のブロックの値はすでに既知なので、列ｂとブロック３２以外のブロックとをＸＯＲ処理することによって、ブロック３２を復元できる。次に処理順番が１４番である分散データ（４）の復元を行うが、その復元位置は、ブロック２４である。この時点で、ブロック２４以外のブロックの値はすでに既知なので、列ｂとブロック２４以外のブロックとをＸＯＲ処理することによって、ブロック２４を復元できる。
【０４３２】
次に処理順番が１５番である分散データ（３）の復元であるが、その復元位置は、ブロック１３である。この時点で、ブロック１３以外のブロックの値はすでに既知なので、列ｃとブロック１３以外のブロックとをＸＯＲ処理することによって、ブロック１３を復元できる。
【０４３３】
次に処理順番が１６番である分散データ（１）の復元を行うが、その復元位置は、ブロック６１である。この時点で、ブロック６１以外のブロックの値はすでに既知なので、列ａとブロック６１以外のブロックとをＸＯＲ処理することによって、ブロック６１を復元できる。次に処理順番が１７番である分散データ（５）の復元を行うが、その復元位置は、ブロック４５である。この時点で、ブロック４５以外のブロックの値はすでに既知なので、列ａとブロック４５以外のブロックとをＸＯＲ処理することによって、ブロック４５を復元できる。次に処理順番が１８番である分散データ（２）の復元を行うが、その復元位置は、ブロック３７である。この時点で、ブロック３７以外のブロックの値はすでに既知なので、列ｃとブロック３７以外のブロックとをＸＯＲ処理することによって、ブロック３７を復元できる。次に処理順番が１９番である分散データ（４）の復元を行うが、その復元位置は、ブロック２９である。この時点で、ブロック２９以外のブロックの値はすでに既知なので、列ｃとブロック２９以外のブロックとをＸＯＲ処理することによって、ブロック２９を復元できる。次に処理順番が２０番である分散データ（３）の復元であるが、その復元位置は、ブロック１８である。この時点で、ブロック１８以外のブロックの値はすでに既知なので、列ｄとブロック１８以外のブロックとをＸＯＲ処理することによって、ブロック１８を復元できる。
【０４３４】
このような手順を繰り返せば、すべてのブロックを復元でき、元データを得ることができる。このように復元は玉突きの手順で行われている。これを理解しやすくするため、図７１では、ブロックの数字を丸と三角で囲み、それを傍線でつなげた。復元されるところは丸、それを利用するところは三角で囲んでいる。例えば、分散データ（１）の列ａで復元されたブロック６１は、分散データ（２）の列ｃの復元で利用されることを意味している。但し、斜線部分にブロックがある場合は、復元処理は行わず、その値をそのまま利用するだけである。なお、すべての復元と利用の関係を図示すると煩わしくなるので、一部の関係は図示していない。
【０４３５】
先にも記述したように、復元方法はこれに限られるものではないが、この手順を用いれば、かなり簡単、かつ高速に復元を行うことが可能になる。
【０４３６】
図７２〜７８では、本発明の閾値秘密分散方式がどの程度の安全性を保持するかを示す。図７２は、閾値が２で、真性（物理）乱数[Genuine random number / Physical random number]を十分利用する場合の安全度を示す図である。
（１）本当に秘匿したいデータＳは、ブロック１〜８で構成されるものとする。
（２）次に、本当に秘匿したいデータのブロックサイズと同じブロック[１]〜[９]で構成される真性（物理）乱数を用意する。そして、この本当に秘匿したいデータのブロック間に、図のように、真性（物理）乱数のブロックを挟みこみ、元データを生成する。
（３）この元データから、本発明の要領で、２つの分散データＷ１とＷ２を図のように生成する。Ｗ１，Ｗ２とも同じ列のブロックはＸＯＲ処理するものとする。この時、Ｗ１，Ｗ２はいわゆるバーナム暗号になっていることが分かる。従って、片方の分散データを取得しただけでは、復元を行うことは絶対に不可能である。
（４）エントロピーを計算してみる。本当に秘匿したいデータＳのエントロピーをＨ（Ｓ）、分散データＷ１，Ｗ２のいずれか一方が明らかになった（分かってしまった）場合のエントロピーを、それぞれＨ（Ｓ|Ｗ１），Ｈ（Ｓ|Ｗ２）と表記すると、図７２に示したように、式（２９）になる。
【０４３７】
Ｈ（Ｓ）＝Ｈ（Ｓ|Ｗ１）＝Ｈ（Ｓ|Ｗ２）・・・（２９）
【０４３８】
つまり、これは情報理論的に安全な（ｋ，ｎ）完全閾値秘密分散である。従って、これからも（３）と同様に、片方の分散データを取得しただけでは、復元を行うことが絶対に不可能であることが分かる。なおここで、ｋは閾値（ここでは２）、ｎは分散数である。
【０４３９】
図７３は、閾値が３で、真性（物理）乱数を十分利用する場合の安全度を示す図である。
（１）本当に秘匿したいデータＳは、ブロック１〜６で構成されるものとする。
（２）次に、本当に秘匿したいデータのブロックサイズと同じブロック（１）〜（８）、及び（９）〜（１６）で構成される真性（物理）乱数を用意する。そして、この本当に秘匿したいデータのブロック間に、図のように、真性（物理）乱数のブロックを挟みこみ、元データを生成する。
（３）この元データから、本発明の要領で、３つの分散データＷ１，Ｗ２，Ｗ３を
図のように生成する。Ｗ１，Ｗ２，Ｗ３とも同じ列のブロックはＸＯＲ処理するものとする。この時、Ｗ１，Ｗ２，Ｗ３はいわゆるバーナム暗号になっていることが分かる。従って、１つ、または２つの分散データを取得しただけでは、復元を行うことは絶対に不可能である。
（４）エントロピーを計算してみる。本当に秘匿したいデータＳのエントロピーをＨ（Ｓ）、分散データＷ１，Ｗ２，Ｗ３のいずれか２つが明らかになった（分かってしまった）場合のエントロピーを、それぞれＨ（Ｓ|Ｗ１，Ｗ２），Ｈ（Ｓ|Ｗ１，Ｗ３），Ｈ（Ｓ|Ｗ２，Ｗ３）と表記すると、図７３に示したように、式（３０）になる。
【０４４０】
Ｈ（Ｓ）＝Ｈ（Ｓ|Ｗ１，Ｗ２）＝Ｈ（Ｓ|Ｗ１，Ｗ３）＝Ｈ（Ｓ|Ｗ２，Ｗ３）・・・（３０）
【０４４１】
つまり、これは情報理論的に安全な（ｋ，ｎ）完全閾値秘密分散である。従って、これからも（３）と同様に、１つまたは２つの分散データを取得しただけでは、復元を行うことが絶対に不可能であることが分かる。なおここでｋは閾値（ここでは３）、ｎは分散数である。
【０４４２】
図７４は、閾値ｋが任意の値で、真性（物理）乱数を十分利用する場合の安全度を示す図である。図７２や図７３と同様の計算を行えば、式（３１）になることが分かる。
【０４４３】
Ｈ(Ｓ)＝Ｈ(Ｓ｜（ｋ−１）個の分散データ)・・・（３１）
【０４４４】
つまり、これは情報理論的に安全な（ｋ，ｎ）完全閾値秘密分散である。
【０４４５】
図７５は、閾値が２で、真性（物理）乱数を一切利用しない場合の安全度を示す図である。
（１）本当に秘匿したいデータＳは、ブロック１〜８で構成されるものとする。
（２）この本当に秘匿したいデータから、本発明の要領で、２つの分散データＷ１とＷ２を図のように生成する。Ｗ１，Ｗ２とも同じ列のブロックはＸＯＲ処理するものとする。
（３）エントロピーを計算してみる。本当に秘匿したいデータＳのエントロピーをＨ（Ｓ）、分散データＷ１，Ｗ２のいずれか一方が明らかになった（分かってしまった）場合のエントロピーを、それぞれＨ（Ｓ|Ｗ１），Ｈ（Ｓ|Ｗ２）と表記すると、図７５に示したように、式（３２）になる。
【０４４６】
１/２×Ｈ（Ｓ）＝Ｈ（Ｓ|Ｗ１）＝Ｈ（Ｓ|Ｗ２）・・・（３２）
【０４４７】
つまり、これはＬ＝ｋ＝２の（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散である。なお、このように本当に秘匿したいデータだけで分散データを生成する場合には、既知のデータフォーマットなど、本当に秘匿したいデータに用いられる何らかの特徴を推測して復元を試みられる可能性があるので、本当に秘匿したいデータを擬似乱数などで暗号化するなどの対策をとった上で、分散データを生成するのが好ましい。
【０４４８】
図７６は、閾値が３で、真性（物理）乱数を一切利用しない場合の安全度を示す図である。
（１）本当に秘匿したいデータＳは、ブロック１〜６で構成されるものとする。
（２）この本当に秘匿したいデータから、本発明の要領で、３つの分散データＷ１，Ｗ２，Ｗ３を図のように生成する。Ｗ１，Ｗ２，Ｗ３とも同じ列のブロックはＸＯＲ処理するものとする。
（３）エントロピーを計算してみる。本当に秘匿したいデータＳのエントロピーをＨ（Ｓ）、分散データＷ１，Ｗ２，Ｗ３のいずれか一方が明らかになった（分かってしまった）場合のエントロピーを、それぞれＨ（Ｓ|Ｗ１），Ｈ（Ｓ|Ｗ２），Ｈ（Ｓ|Ｗ３）と表記すると、図７６に示したように、２/３×Ｈ（Ｓ）＝Ｈ（Ｓ|Ｗ１）＝Ｈ（Ｓ|Ｗ２）＝Ｈ（Ｓ|Ｗ３）になる。また、分散データＷ１，Ｗ２，Ｗ３のいずれか２つが明らかになった（分かってしまった）場合のエントロピーを、それぞれＨ（Ｓ|Ｗ１，Ｗ２），Ｈ（Ｓ|Ｗ１，Ｗ３），Ｈ（Ｓ|Ｗ２，Ｗ３）と表記すると、図７６に示したように、式（３３）になる。
【０４４９】
１/３×Ｈ（Ｓ）＝Ｈ（Ｓ|Ｗ１，Ｗ２）＝Ｈ（Ｓ|Ｗ１，Ｗ３）＝Ｈ（Ｓ|Ｗ２，Ｗ３）・・・（３３）
【０４５０】
つまり、これはＬ＝ｋ＝３の （ｋ，Ｌ，ｎ）ランプ型閾値秘密分散である。なお、このように本当に秘匿したいデータだけで分散データを生成する場合には、既知のデータフォーマットなど、本当に秘匿したいデータに用いられる何らかの特徴を推測して復元を試みられる可能性があるので、本当に秘匿したいデータを擬似乱数などで暗号化するなどの対策をとった上で、分散データを生成するのが好ましい。
【０４５１】
図７７は、閾値ｋが任意の値で、真性（物理）乱数を一切利用しない場合の安全度を示す図である。図７５や図７６と同様の計算を行えば、任意のｋに対して、式（３４）になることが分かる。
【０４５２】
１/ｋ×Ｈ(Ｓ)＝Ｈ(Ｓ｜（ｋ−１）個の分散データ)・・・（３４）
【０４５３】
つまり、これはＬ＝ｋの（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散である。
【０４５４】
図７８は、本発明の閾値秘密分散方式がどの程度の安全性を保持するかを一般的に示した図である。真性（物理）乱数を本当に秘匿したいデータに挟み込んで元データを生成し、分散データを作成するものとする。真性（物理）乱数の数が０の場合は、図７５〜７７で示したように、ランプ型閾値秘密分散では一番セキュリティ度が低いＬ＝ｋの （ｋ，Ｌ，ｎ）ランプ型閾値秘密分散になる。この真性（物理）乱数の数を徐々に増やすと、それに比例して、分散データのエントロピーも増加する。つまり１＜Ｌ＜ｋの （ｋ，Ｌ，ｎ）ランプ型閾値秘密分散になる。そして、真性（物理）乱数の数が本当に秘匿したいデータのサイズ以上になると、情報理論的に完全に安全なＬ＝１の （ｋ，Ｌ，ｎ）ランプ型閾値秘密分散、即ち（ｋ，ｎ）完全閾値分散になる。
【０４５５】
つまり、真性（物理）乱数の数によって、ランプ型閾値秘密分散の値Ｌが、最低のセキュリティレベルであるＬ＝ｋから、最高のセキュリティレベルＬ＝１まで連続的に変化する。言い換えれば、閾値秘密分散法における最低のセキュリティレベルであるＬ＝ｋの（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散から、情報理論的に完全に安全な（ｋ，ｎ）完全閾値分散まで安全度が連続的に変化する。これは他の閾値秘密分散法にはない特徴である。これによりユーザは、データサイズの縮小等による経済メリットとセキュリティレベルを容易にトレードオフできるようになる。
【０４５６】
なお、この後、図７９で説明を行うが、本発明を用いて、（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散より更に低いセキュリティレベルの秘密分散も実現できる。
【０４５７】
また、真性（物理）乱数の大量な入手にはかなりのコストを要するが、本発明に従えば、Ｌ＝ｋの（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散、即ち、真性（物理）乱数を不要とする閾値秘密分散も選択できるので、真性（物理）乱数の入手コストは必須でなくなる。
【０４５８】
なお、先に記したように、Ｌ＝ｋの（ｋ，Ｌ，ｎ）ランプ型閾値秘密分散の場合には、既知のデータフォーマットなど、本当に秘匿したいデータに用いられる何らかの特徴を推測して復元を試みられる危険性はある。しかしこれに対処する簡単な対策は様々有り、これが致命的な欠陥となることはない。例えば、本当に秘匿したいデータを擬似乱数で暗号化したデータを元データとして分散データを作成するとしても良いし、擬似乱数を用いて、本当に秘匿したいデータを並び替えたものを元データとして分散データを作成するとしても良い。また複数の独立した本当に秘匿したいデータを交互に挟み込んだデータを元データとして分散データを作成するのも良い。
【０４５９】
なお、データを暗号化し、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ Ａｒｒａｙｓ ｏｆ Ｉｎｅｘｐｅｎｓｉｖｅ Ｄｉｓｋｓ）で用いられる分散手法と等価な方法で、データを分割・保存するような方式は、各々分散データのエントロピーはかなり低く（つまり推測しやすい）、セキュリティレベルは極めて低いと言える。
【０４６０】
図７９は、耐障害性を向上させる方法を示した図である。元データを見れば分かるように、ブロック１〜３の値が重複するように、元データを構成している。このようにデータを重複させるとエントロピーが減少し、セキュリティレベルは低下するものの、一部のデータが欠損しても元データを復元できる可能性が向上する。例えば、分散（Ａ）の列ｃがデータ欠損したとしても、分散（Ａ）の列ｂ，分散（Ｂ）の列ｃ，列ｄを利用することで、分散（Ａ）の列ｃのデータは復元できる。このように本発明を用いれば、耐障害性の向上も容易に実現できる。
【０４６１】
図８０は、分散データから分散データを生成する方法を示した図である。これまでは、分割データから分散データを生成するものとして説明をおこなってきたが、ここで示すように、分散データからも分散データを生成可能である。従って、分割データとは分散データを含む、大きな意味でのデータ分割を意味することが分かる。
【０４６２】
はじめに元データから分散データ（Ａ）、及び、分散データ（Ｂ）を生成する。これを図に示した修正データのように並び替える。なおここで「＊」と表記しているのは「ＸＯＲ」の略記である。そして次に、その修正データから再び分散データを生成する。それが分散データ（１）、及び、分散データ（２）である。分散データ（１）列ｂは“「３＊２」ＸＯＲ「３＊４」”なので、結局これは「２ ＸＯＲ ４」になる。このような計算を施した結果を、分散データ（１‘）、及び、分散データ（２‘）に示した。なお、列ａの値は交換しておく必要がある。この分散データ（１‘）、及び、分散データ（２‘）を見れば分かるが、本発明によれば、偶数ブロック、奇数ブロックで分けて、分散データを生成することも可能である。
【０４６３】
本発明の秘密分散装置は、秘匿したいデータ、若しくは秘匿したいデータと乱数から構成される秘密データから、当該秘密データを復元可能な複数の分散データを生成する秘密分散装置であって、秘密データの分割データ同士で排他的論理和演算を行うことで分散データを生成し、各分割データ間のデータの組合せを変えて排他的論理和演算を行うことで異なる分散データを生成する分散データ生成手段を備えことを特徴とする。
【０４６４】
本発明によれば、分割データ同士で排他的論理和を行うので、分散データを秘密データより少ないデータ量にすることができ、分散・復元処理速度を向上させることができる。更に、真性（物理）乱数の量によって、連続的に、ランプ型閾値分散から完全閾値分散までを実現できる。また、任意の閾値、かつ任意の分散数の閾値秘密分散も実現可能である
【０４６５】
本発明の実施形態では、秘密データを取り扱う秘密分散方法について、説明したが、取り扱うデータは必ずしも秘密にすべきデータである必要はなく、通常のデータを取り扱ってもよい。通常のデータとしては、通信端末間でやりとりされる、テキストデータや画像データなどの通信データや、制御情報を含む制御データでもよい。本発明は、当該発明を通信に利用することで、効率良く圧縮した上で通信を行うことができる効果を有する。
【０４６６】
なお、上述した実施形態では、排他的論理和演算は、２つ又は２つ以上のデータに対して行う演算手段における演算の一機能として記載されている。これにより、演算手段は、以下のような演算を実行可能となる。即ち、演算手段は、共通（同一）の数回分の排他的論理和演算により、所定のデータを元の所定のデータに戻す。
【産業上の利用可能性】
【０４６７】
本発明にかかる閾値秘密分散法は、分散データから元データを推測されない安全なＸＯＲ処理を用いる閾値秘密分散法で、分散データ量の削減を図ることもでき、また自由に分散数、閾値を設定できるなど有用である。
【符号の説明】
【０４６８】
１  アプリケーション
２  秘密分散モジュール
３  記憶装置
１０、１１、１２、１３  ＣＰＵ
２０、２１、２２、２３  ＲＡＭ
３０、３１、３２、３３  ＨＤＤ
５０、５１、５２、５３  ＭＡＣ／ＰＨＹ
１００  分散処理依頼部
２００  復元処理依頼部
３００  分散処理部
４００  乱数生成部
５００  復元処理部
【図６８】
0005685735.tif 000002
【図７２】
0005685735.tif 000003
【図７３】
0005685735.tif 000004
【図７４】
0005685735.tif 000005
【図７５】
0005685735.tif 000006
【図７６】
0005685735.tif 000007
【図７７】
0005685735.tif 000008
【図７８】
0005685735.tif 000009
【図７９】
0005685735.tif 000010
【図８０】
0005685735.tif 000011
【図１】
0005685735.tif 000012
【図２】
0005685735.tif 000013
【図３】
0005685735.tif 000014
【図４】
0005685735.tif 000015
【図５】
0005685735.tif 000016
【図６】
0005685735.tif 000017
【図７】
0005685735.tif 000018
【図８】
0005685735.tif 000019
【図９】
0005685735.tif 000020
【図１０】
0005685735.tif 000021
【図１１】
0005685735.tif 000022
【図１２】
0005685735.tif 000023
【図１３】
0005685735.tif 000024
【図１４】
0005685735.tif 000025
【図１５】
0005685735.tif 000026
【図１６】
0005685735.tif 000027
【図１７】
0005685735.tif 000028
【図１８】
0005685735.tif 000029
【図１９】
0005685735.tif 000030
【図２０】
0005685735.tif 000031
【図２１】
0005685735.tif 000032
【図２２】
0005685735.tif 000033
【図２３】
0005685735.tif 000034
【図２４】
0005685735.tif 000035
【図２５】
0005685735.tif 000036
【図２６】
0005685735.tif 000037
【図２７】
0005685735.tif 000038
【図２８】
0005685735.tif 000039
【図２９】
0005685735.tif 000040
【図３０】
0005685735.tif 000041
【図３１】
0005685735.tif 000042
【図３２】
0005685735.tif 000043
【図３３】
0005685735.tif 000044
【図３４】
0005685735.tif 000045
【図３５】
0005685735.tif 000046
【図３６】
0005685735.tif 000047
【図３７】
0005685735.tif 000048
【図３８】
0005685735.tif 000049
【図３９】
0005685735.tif 000050
【図４０】
0005685735.tif 000051
【図４１】
0005685735.tif 000052
【図４２】
0005685735.tif 000053
【図４３】
0005685735.tif 000054
【図４４】
0005685735.tif 000055
【図４５】
0005685735.tif 000056
【図４６】
0005685735.tif 000057
【図４７】
0005685735.tif 000058
【図４８】
0005685735.tif 000059
【図４９】
0005685735.tif 000060
【図５０】
0005685735.tif 000061
【図５１】
0005685735.tif 000062
【図５２】
0005685735.tif 000063
【図５３】
0005685735.tif 000064
【図５４】
0005685735.tif 000065
【図５５】
0005685735.tif 000066
【図５６】
0005685735.tif 000067
【図５７】
0005685735.tif 000068
【図５８】
0005685735.tif 000069
【図５９】
0005685735.tif 000070
【図６０】
0005685735.tif 000071
【図６１】
0005685735.tif 000072
【図６２】
0005685735.tif 000073
【図６３】
0005685735.tif 000074
【図６４】
0005685735.tif 000075
【図６５】
0005685735.tif 000076
【図６６】
0005685735.tif 000077
【図６７】
0005685735.tif 000078
【図６９】
0005685735.tif 000079
【図７０】
0005685735.tif 000080
【図７１】
0005685735.tif 000081