(57)【要約】【課題】秘匿されたデータを部分的に復元する。【解決手段】元データSを秘匿するデータ秘匿方法であって、コンピュータ１は、元データSを所定の処理単位に区切って元部分データを生成するステップと、乱数を所定の処理単位に区切って、乱数部分データを生成するステップと、元部分データと乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成するステップと、秘匿部分データに復元ＩＤを付与し、記憶部１９に格納するステップと、復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた秘匿部分データを記憶部１９から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元するステップとを行う。【選択図】  図１
2015138198.tif 000002
【特許請求の範囲】
【請求項１】
元データを秘匿するデータ秘匿方法であって、
コンピュータは、
前記元データを所定の処理単位に区切って、元部分データを生成するステップと、
乱数を前記所定の処理単位に区切って、乱数部分データを生成するステップと、
前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成するステップと、
前記秘匿部分データに復元ＩＤを付与し、記憶部に格納するステップと、
前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶部から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元するステップと、を行うこと
を特徴とするデータ秘匿方法。
【請求項２】
元データを秘匿するデータ秘匿装置であって、
前記元データを所定の処理単位に区切って、元部分データを生成する元部分データ生成手段と、
乱数を前記所定の処理単位に区切って、乱数部分データを生成する乱数部分データ生成手段と、
前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成する秘匿部分データ生成手段と、
前記秘匿部分データに復元ＩＤを付与し、記憶手段に格納する復元ＩＤ付与手段と、
前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶手段から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元する元データ復元手段と、を有すること
を特徴とするデータ秘匿装置。
【請求項３】
請求項２記載のデータ秘匿装置であって、
前記秘匿部分データは、秘密分散法を用いて元データを所定の分割数に分割した分割データの部分である分割部分データであって、
前記秘匿部分データ生成手段は、各分割部分データのみからは対応する元部分データは復元できないが、前記分割数より少ない所定の個数の分割部分データから対応する元部分データが復元可能であるように、元部分データと乱数部分データとの排他論理和演算を行うこと
を特徴とするデータ秘匿装置。
【請求項４】
請求項２または３記載のデータ秘匿装置であって、
前記復元ＩＤは、前記元データのデータ特徴単位に付与されること
を特徴とするデータ秘匿装置。
【請求項５】
請求項４記載のデータ秘匿装置であって、
前記データ特徴単位は、個人情報の各項目であること
を特徴とするデータ秘匿装置。
【請求項６】
請求項４記載のデータ秘匿装置であって、
前記データ特徴単位は、前記元データの映像のフレーム単位であること
を特徴とするデータ秘匿装置。
【請求項７】
請求項２から６のいずれか１項に記載のデータ秘匿装置であって、
前記元部分データ生成手段は、前記元データからヘッダ情報を除いたデータを前記所定の処理単位に区切って、元部分データを生成し、
前記乱数部分データ生成手段は、前記元データからヘッダ情報を除いたデータと同じ長さまたは当該データより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成すること
を特徴とするデータ秘匿装置。
【請求項８】
請求項２記載のデータ秘匿装置であって、
複数のユーザの各々が前記元データの秘匿したい部分のみを各ユーザ固有の乱数で排他論理和演算して生成したユーザ秘匿データを、取得する取得手段と、
前記取得したユーザ秘匿データの全てを排他論理和演算することで、閲覧制御秘匿データを生成する閲覧制御秘匿データ生成手段と、をさらに有し、
前記複数のユーザが秘匿した部分の元データは、前記閲覧制御秘匿データに前記複数のユーザ固有の乱数を排他論理和演算することで復元されること
を特徴とするデータ秘匿装置。
【請求項９】
元データを秘匿するデータ秘匿プログラムであって、
コンピュータに、
前記元データを所定の処理単位に区切って、元部分データを生成するステップと、
乱数を前記所定の処理単位に区切って、乱数部分データを生成するステップと、
前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成するステップと、
前記秘匿部分データに復元ＩＤを付与し、記憶部に格納するステップと、
前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶部から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元するステップと、
を実行させることを特徴とするデータ秘匿プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを秘匿するデータ秘匿方法、データ秘匿装置、およびデータ秘匿プログラムに関する。
【背景技術】
【０００２】
従来から、データの内容を秘匿する技術として、暗号技術が広く知られている。あるデータに対して暗号鍵をかけることによって、そのデータを秘密に保護することが可能である。
【０００３】
また、データの内容を秘匿する他の技術として、秘密分散技術も知られている（特許文献１参照）。これは、データをＮ個に分散し、そのうちのＫ−１個では復元できないが、Ｋ個集めると復元できるようにする技術であり、可用性が担保される利益がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２１３６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、データを暗号化または秘密分散すると、部分的な復元（復号）ができない。このため、データ全体を復元する必要が無い場合や、一部だけを相手に見せたり渡したりしたい場合にも、一旦、暗号化または秘密分散されたデータ全体を復元しなければならず、セキュリティ上の問題がある。
【０００６】
本発明は上記事情に鑑みてなされたものであり、本発明の目的は、秘匿されたデータを部分的に復元可能なデータ秘匿方法、データ秘匿装置、およびデータ秘匿プログラムを提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明は、元データを秘匿するデータ秘匿方法であって、コンピュータは、前記元データを所定の処理単位に区切って、元部分データを生成するステップと、乱数を前記所定の処理単位に区切って、乱数部分データを生成するステップと、前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成するステップと、前記秘匿部分データに復元ＩＤを付与し、記憶部に格納するステップと、前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶部から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元するステップと、を行う。
【０００８】
本発明は、元データを秘匿するデータ秘匿装置であって、前記元データを所定の処理単位に区切って、元部分データを生成する元部分データ生成手段と、乱数を前記所定の処理単位に区切って、乱数部分データを生成する乱数部分データ生成手段と、前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成する秘匿部分データ生成手段と、前記秘匿部分データに復元ＩＤを付与し、記憶手段に格納する復元ＩＤ付与手段と、前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶手段から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元する元データ復元手段とを、有する。
【０００９】
上記データ秘匿装置において、前記秘匿部分データは、秘密分散法を用いて元データを所定の分割数に分割した分割データの部分である分割部分データであって、前記秘匿部分データ生成手段は、各分割部分データのみからは対応する元部分データは復元できないが、前記分割数より少ない所定の個数の分割部分データから対応する元部分データが復元可能であるように、元部分データと乱数部分データとの排他論理和演算を行うこととしてもよい。
【００１０】
上記データ秘匿装置において、前記復元ＩＤは、前記元データのデータ特徴単位に付与されることとしてもよい。
【００１１】
上記データ秘匿装置において、前記データ特徴単位は、個人情報の各項目であることとしてもよい。
【００１２】
上記データ秘匿装置において、前記データ特徴単位は、前記元データの映像のフレーム単位であることとしてもよい。
【００１３】
上記データ秘匿装置において、前記元部分データ生成手段は、前記元データからヘッダ情報を除いたデータを前記所定の処理単位に区切って、元部分データを生成し、前記乱数部分データ生成手段は、前記元データからヘッダ情報を除いたデータと同じ長さまたは当該データより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成することとしてもよい。
【００１４】
上記データ秘匿装置において、複数のユーザの各々が前記元データの秘匿したい部分のみを各ユーザ固有の乱数で排他論理和演算して生成したユーザ秘匿データを、取得する取得手段と、前記取得したユーザ秘匿データの全てを排他論理和演算することで、閲覧制御秘匿データを生成する閲覧制御秘匿データ生成手段と、をさらに有し、前記複数のユーザが秘匿した部分の元データは、前記閲覧制御秘匿データに前記複数のユーザ固有の乱数を排他論理和演算することで復元されることとしてもよい。
【００１５】
本発明は、元データを秘匿するデータ秘匿プログラムであって、コンピュータに、前記元データを所定の処理単位に区切って、元部分データを生成するステップと、乱数を前記所定の処理単位に区切って、乱数部分データを生成するステップと、前記元部分データと前記乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成するステップと、前記秘匿部分データに復元ＩＤを付与し、記憶部に格納するステップと、前記復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた前記秘匿部分データを前記記憶部から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元するステップと、を実行させる。
【発明の効果】
【００１６】
本発明により、秘匿されたデータを部分的に復元可能なデータ秘匿方法、データ秘匿装置、およびデータ秘匿プログラムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の第１の実施形態に係るデータ秘匿システムの構成図である。
【図２】秘匿データ生成処理を説明するための説明図である。
【図３】あるユーザが他のユーザに元データの一部を閲覧させる処理を示す図である。
【図４】範囲指定された元データと、対応するビット位置情報とを示す図である。
【図５】複数ユーザによる閲覧制限を行う場合のシステム構成例である。
【図６】複数ユーザによる閲覧制限の仕組みを説明する説明図である。
【図７】閲覧制限秘匿データを復元する場合に必要となる乱数を示す説明図である。
【図８】本発明の第２の実施形態に係るデータ秘匿システムの構成図である。
【図９】秘匿データ生成処理を説明するための説明図である。
【図１０】あるユーザが他のユーザに元データの一部を閲覧させる処理を示す図である。
【図１１】範囲指定された元データと、対応するビット位置情報とを示す図である。
【図１２】分割数n=3の場合のデータ分割処理を示すフローチャートである。
【図１３】１６ビットの元データSを８ビットの処理単位ビット長に基づいて分割数n=3で３分割する場合の各データと定義式および各分割部分データから元データを復元する場合の計算式などを示す表である。
【図１４】分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図１５】分割数n=4の場合のデータ分割処理を示すフローチャートである。
【図１６】分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図１７】分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式を示す表である。
【図１８】分割数がnで処理単位ビット長がbである場合の一般的なデータ分割処理を示すフローチャートである。
【図１９】分割数が２である場合のデータ分割処理を示すフローチャートである。
【図２０】分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。
【図２１】分割数n=3の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の更に別の例を示す表である。
【図２２】分割数n=4の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。
【図２３】分割数n=5の場合の分割データ、分割部分データ、各分割部分データを生成する定義式の別の例を示す表である。
【発明を実施するための形態】
【００１８】
以下、図面を用いて本発明の実施の形態について説明する。
【００１９】
＜第１の実施形態＞
図１は、本発明の第１の実施形態に係るデータ秘匿システムの構成図である。本実施形態のデータ秘匿システムは、秘匿装置１（データ秘匿装置）と、端末５、保管サーバ７とを備える。
【００２０】
秘匿装置１は、ネットワーク３を介してアクセスしてくる端末５からの元データSの秘匿要求に応じて、元データSの秘匿データを生成する。また、秘匿装置１は、ネットワーク３を介してアクセスしてくる端末５からの元データ復元要求に応じて、秘匿データから元データSを復元し、ネットワーク３を介して端末５に送信する。本実施形態の秘匿装置１は、秘匿データ生成手段１１と、元データ復元手段１３と、乱数発生手段１５と、データ送受信手段１７と、秘匿データ記憶手段１９と、を備える。
【００２１】
秘匿データ生成手段１１（元部分データ生成手段、乱数部分データ生成手段、秘匿部分データ生成手段、復元ＩＤ付与手段、取得手段、閲覧制御秘匿データ生成手段）は、元データSから秘匿データを生成する。具体的には、秘匿データ生成手段１１は、元データSを所定の処理単位に区切って、元部分データを生成するとともに、元データSと同じ長さまたは元データSより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成する。そして、秘匿データ生成手段１１は、元部分データと乱数部分データとを、所定数ずつ順番に取り出し、取り出した元部分データと乱数部分データとを用いて排他論理和演算を行うことで、秘匿部分データを生成し、生成した秘匿部分データに復元ＩＤを付与し、秘匿データ記憶手段１９に格納する。
【００２２】
元データ復元手段１３は、秘匿データから元データを復元する。具体的には、元データ復元手段１３は、端末５から復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた秘匿部分データを秘匿データ記憶手段１９から読み出し、読み出した秘匿部分データを用いて対応する元部分データを復元する。
【００２３】
乱数発生手段１５は、元データSから秘匿データを生成するために使用される乱数を発生する。データ送受信手段１７は、乱数発生手段１５が発生した乱数をネットワーク３を介して保管サーバ７に送信するとともに、また保管サーバ７からの乱数をネットワーク３を介して受信する。秘匿データ記憶手段１９には、元データSから生成される秘匿データが格納される。本実施形態では、秘匿データ記憶手段１９には、元データSを部分的に復元できるように、秘匿データを構成する複数の秘匿部分データが格納される。
【００２４】
なお、以下に説明する本実施形態では、元データSと同じ長さの乱数を用いることとするが、元データSの長さよりも短い乱数を使用して、元データSを秘匿することとしてもよい。すなわち、乱数を元データSの長さより短いものとし、この短い長さの乱数を繰り返し用いることとしてもよい。
【００２５】
なお、上記説明した秘匿装置１および端末５には、例えば、ＣＰＵと、メモリと、ハードディスク等の外部記憶装置と、入力装置と、出力装置とを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、ＣＰＵがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、秘匿装置１および端末５の各機能は、秘匿装置１用のプログラムの場合は秘匿装置１のＣＰＵが、そして、端末５用のプログラムの場合は端末５のＣＰＵがそれぞれ実行することにより実現される。また、秘匿装置１用のプログラムおよび端末５用のプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００２６】
次に、本実施形態の処理について説明する。
【００２７】
［秘匿データの生成処理］
図２は、本実施形態の秘匿装置１の秘匿データ生成処理を説明するための説明図である。
【００２８】
本実施形態の秘匿装置１の利用者は、端末５からネットワーク３を介して秘匿装置１にアクセスし、秘匿装置１に元データSを送信する。秘匿装置１のデータ送受信手段１７は、端末５からの元データSを受信する。そして、秘匿データ生成手段１１は、元データSを秘匿するために使用される処理単位ビット長bを決定する。この処理単位ビット長bは、利用者が端末５から秘匿装置１に対して指定してもよいし、または秘匿装置１において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよい。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、元データSの末尾を０で埋めて、処理単位ビット長bの整数倍の長さにする。そして、秘匿データ生成手段１１は、元データSを処理単位ビット長bに区切って分割し、複数の元部分データS１〜Snを生成する（Ｓ１１）。
【００２９】
また、秘匿データ生成手段１１は、乱数発生手段１５が生成した元データSと同じビット長の乱数Rを取得し、当該乱数Rを処理単位ビット長bに区切って分割し、複数の乱数部分データR１〜Rnを生成する（Ｓ１２）。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、処理単位ビット長bの整数倍の長さの乱数Rを生成する。
【００３０】
そして、秘匿データ生成手段１１は、元部分データと乱数部分データとを、先頭から所定数ずつ順番に取り出す（Ｓ１３）。図示する例では、元部分データS１〜S3と乱数部分データR１〜R3とを3つずつ取り出すものとする。
【００３１】
そして、秘匿データ生成手段１１は、取り出した各元部分データと、対応する各乱数部分データとの排他的論理和演算（XOR）をそれぞれ行うことにより、所定数の秘匿部分データを生成する（Ｓ１４）。図示する例では、元部分データS1と対応する乱数部分データR1との排他論理和演算を行うことで秘匿部分データSR1を生成し、元部分データS2と対応する乱数部分データR2との排他論理和演算を行うことで秘匿部分データSR2を生成し、元部分データS3と対応する乱数部分データR3との排他論理和演算を行うことで秘匿部分データSR3を生成する。
【００３２】
そして、秘匿データ生成手段１１は、生成した所定数の秘匿部分データに復元IDを付加して保管する（Ｓ１５）。本実施形態では、秘匿データ生成手段１１は、復元IDを付加した秘匿部分データを秘匿データ記憶部１９に格納する。図示する例では、所定数の秘匿部分データSR1、SR2、SR3に復元IDとして「001」を付加するものとする。復元IDは、データの順序がわかるものが好ましく、ここでは「001」、「002」、「003」、・・・のように+1ずつ加算した値を復元IDとして用いるものとする。
【００３３】
なお、本実施形態では、秘匿データ生成部１１は、復元IDの他にビット位置情報も付加して秘匿部分データを秘匿データ記憶手段１９に保管するものとする。ビット位置情報は、元データSの先頭からのビット位置を示すものである。これにより、復元IDを指定して元データSの所望の部分を復元すること、または、ビット位置情報を指定して元データSの所望の部分を復元することもできる。
【００３４】
また、秘匿データ生成手段１１は、所定数の秘匿部分データの鍵となる乱数部分データに、Ｓ１５で付加した復元IDと同じ復元IDを付加して、秘匿部分データの格納場所とは異なる場所に保管する（Ｓ１６）。本実施形態では、秘匿データ生成手段１１は、データ送受信手段１７を用いて、復元IDを付加した乱数部分データを保管サーバ７に送信し、格納する。図示する例では、所定数の乱数部分データR1、R2、R3に復元IDとして「001」を付加し、さらにビット位置情報も付加して格納するものとする。
【００３５】
全ての元部分データに対して、Ｓ１３からＳ１６の処理を行うことで全ての元部分データに対応する秘匿部分データが生成される。ここで、秘匿データは、全ての秘匿部分データから構成され、元データS全体の秘匿データを意味する。
【００３６】
なお、図２に示す本実施形態では、元データおよび乱数を区切る所定の処理単位として、秘匿データの生成処理を高速化するために、所定の長さの処理単位ビット長を用いることとしたが、処理単位ビット長以外の処理単位で、元データおよび乱数を区切ることとしてもよい。
【００３７】
例えば、処理単位として、元データのデータ特徴単位を用い、当該データ特徴単位に生成される各秘匿部分データに対してそれぞれ復元IDを付与することが考えられる。データ特徴単位は、例えば、個人情報の各項目（氏名、住所、電話番号など）であって、各項目毎に生成される秘匿部分データに、各復元IDを付与することが考えられる。また、データ特徴単位は、元データが動画の場合、映像のフレーム単位であって、フレーム単位に生成される秘匿部分データに、各復元IDを付与することが考えられる。
【００３８】
また、図１および図２に示す実施形態では、秘匿装置１の秘匿データ記憶手段１９に秘匿部分データを格納し、保管サーバ７に乱数部分データを格納することとしたが、秘匿データ記憶手段１９に乱数部分データを格納し、保管サーバ７に秘匿部分データを格納することとしてもよい。
【００３９】
以上説明した秘匿データの生成処理を事前準備として、その後、元データSの部分的な復元処理が行われる。
【００４０】
［元データの復元処理］
以下に、元データの一部を復元する処理について説明する。
【００４１】
まず、秘匿装置１が、端末５からの要求を受け付けて、元データの一部を復元する処理について説明する。秘匿装置１の元データ復元手段１３は、端末５から復元IDを受け付けて、当該復元IDに対応付けられた秘匿部分データを秘匿データ記憶手段１９から読み出す。また、元データ復元手段１３は、受け付けた復元IDに対応付けられた乱数部分データを保管サーバ７から取得する。そして、元データ復元手段１３は、読み出した秘匿部分データと、取得した乱数部分データとの排他論理和演算を行うことで、受け付けた復元IDに対応する部分の元データ（元部分データ）を復元し、要求元の端末５に送信する。
【００４２】
次に、図３を用いて、あるユーザが、他のユーザに元データの一部を閲覧させる処理について説明する。図３では、元データの復元処理は、秘匿装置１ではなく、端末で行われる。
【００４３】
元データの部分閲覧を許可する許可者（例えば、上司）は、元データの中で復元させる部分を自身の端末５１に入力し、指定する（Ｓ２１）。許可者は、例えば、復元させる部分が元データの何ビット目にあたるかを示すビット位置情報を入力することで、元データの中で復元する部分を指定することが考えられる。
【００４４】
また、図４に示すように、元データが画像データの場合、端末５のディスプレイ上に元データを表示し、許可者が元データの一部を範囲指定（図４の斜線部分）することで、元データの中で復元する部分を指定することとしてもよい。この場合、端末５１は、許可者がディスプレイ上で指定した範囲が、元データの何ビット目にあたるかのビット位置情報を取得する。通常、映像ファイル、画像ファイルにおいては、利用者が認識する情報の範囲とデータのビット列とが対応していない。そのため、例えば端末５１に実装されたアプリケーションを用いて任意の解像度を選択し、ピクセル単位に秘匿する表示場所を指定することにより、元のファイル（元データ）のビット列を取得することを可能とする。
【００４５】
また、元データが動画データの場合、時間（例えば、再生開始から５分〜６分）で範囲指定すること、あるいは、元データのデータカラムのセル（データ項目）で範囲指定することとしてもよい。
【００４６】
そして、端末５１は、許可者が指定した範囲のビット位置情報を秘匿装置１に送信し、当該ビット位置情報に対応する復元IDを要求する（Ｓ２２）。
【００４７】
秘匿装置１の元データ復元手段１３は、データ送受信手段１７を用いてビット位置情報を受信し、秘匿データ記憶手段１９を参照して、当該ビット位置情報に対応する復元IDを特定する。秘匿データ記憶手段１９には、図２で説明したように、復元IDと、ビット位置情報と、秘匿部分データとが、対応付けて記憶されている。そして、元データ復元手段１３は、特定した復元IDを、データ送受信手段１７を用いて端末５１に送信する（Ｓ２３）。
【００４８】
端末５１は、秘匿装置１から受信した復元IDに対応する乱数部分データを、保管サーバ７から取得する（Ｓ２４）。そして、端末５１は、Ｓ２３で取得した復元IDと、Ｓ２４で取得した乱数部分データ（鍵）とを、元データの一部を閲覧させる閲覧者（例えば、部下）の端末５２に送信する（Ｓ２５）。
【００４９】
閲覧者の端末５２は、復元IDおよび乱数部分データを受信すると、当該復元IDに対応する秘匿部分データを秘匿装置１に要求する（Ｓ２６）。
【００５０】
秘匿装置１の元データ復元手段１３は、データ送受信手段１７を用いて復元IDを受信し、秘匿データ記憶手段１９を参照して、当該復元IDに対応する秘匿部分データを特定し、データ送受信手段１７を用いて閲覧者の端末５２に送信する（Ｓ２７）。
【００５１】
閲覧者の端末５２は、秘匿装置１から送信された秘匿部分データと、Ｓ２５で許可者の端末５１から送信された乱数部分データとを排他論理和演算することで、元データの一部を復元する（Ｓ２８）。
【００５２】
このように、本実施形態では、元データを部分的に復元することが可能になり、データ全体を復元するのに比べてセキュリティも高く、より高速に復元することができる。すなわち、必要な部分（閲覧させたい部分）だけを復元することで、データ漏洩のリスクを低減しつつ、短時間で復元することができる。
【００５３】
［複数ユーザによる閲覧制限］
次に、本実施形態を用いた、複数ユーザによる閲覧制限について説明する。
【００５４】
図５は、複数ユーザによる閲覧制限を行う場合のシステム構成例である。図５に示す例では、Ａさん、Ｂさん、Ｃさんの３人の各ユーザが、元データSの所望の部分に各ユーザ固有の乱数Rで排他論理和演算を行うことで、元データSの閲覧制限を行うものである。
【００５５】
図５では、Ａさんが使用する端末６１、Ｂさんが使用する端末６２、およびＣさんが使用する端末６３は、ネットワーク３を介して秘匿装置１に接続される。また、元データSを秘匿する際に、各端末６１〜６３および秘匿装置１は、元データSが格納されている保管サーバ７１に、ネットワーク３を介してアクセスし、元データSを取得できるものとする。また、各端末６１〜６３（各ユーザ）は、それぞれ個別の乱数R1、R2、R3を保持している。なお、各乱数R1、R2、R3は、元データSと同じビット長または元データSより短いビット長である。
【００５６】
図６は、複数ユーザによる閲覧制限の仕組みを説明する説明図である。
【００５７】
Ｓ３１において、各端末６１〜６３は、ユーザの指示を受け付けて、保管サーバ７１にアクセスし、部分的に閲覧制限をかけるために元データSを取得する。そして、各端末６１〜６３は、元データSに対して閲覧制限（鍵）をかけたい部分に、各ユーザが保持する乱数を排他論理和演算して、ユーザ秘匿データを生成する。図示する例では、Ａさんの端末６１は、Ａさんの指示を受け付けて、元データSのＡさんの所望の部分に、当該部分に対応する部分の乱数R1を排他論理和演算して、ユーザ秘匿データSR1を生成する。また、Ｂさんの端末６２は、Ｂさんの指示を受け付けて、元データSのＢさんの所望の部分に、当該部分に対応する部分の乱数R2を排他論理和演算して、ユーザ秘匿データSR2を生成する。また、Ｃさんの端末６３は、Ｃさんの指示を受け付けて、元データSのＣさんの所望の部分に、当該部分に対応する部分の乱数R3を排他論理和演算して、ユーザ秘匿データSR3を生成する。
【００５８】
なお、各ユーザが元データSの閲覧制限をかけたい部分に排他論理和演算する乱数は、前述のとおり元データSの当該部分に対応する部分（位置）の乱数であってあってもよく、あるいは、乱数の先頭から当該部分に相当する長さの乱数を順番に取り出して使用することとしてもよい。また、元データSの閲覧制限をかけない部分に相当する部分を「０」に置換し、元データSの閲覧制限をかけたい部分に相当する部分を乱数のままとしたデータを生成し、当該データを元データSに排他論理和演算することでユーザ秘匿データを生成することとしてもよい。乱数のどの部分を使用してユーザ秘匿データを生成したかについては、各端末６１〜６３は、図示しない記憶部に記憶しておくものとする。
【００５９】
Ｓ３２において、各端末６１〜６３は、ユーザの指示を受け付けて、生成したユーザ秘匿データSR1〜SR3を秘匿装置１に送信（アップロード）する。
【００６０】
Ｓ３３において、秘匿装置１の秘匿データ生成手段１１は、各端末６１〜６３から送信されたユーザ秘匿データSR1〜SR3を受信し、受信した全てのユーザ秘匿データSR1〜SR3を排他論理和演算する。これにより、各ユーザがそれぞれ閲覧制限をかけたいところに閲覧制限をかけた閲覧制限秘匿データSR（＝SR1×SR2×SR3）が生成される。なお、「×」は、排他論理和演算（XOR）を示す。また、排他論理和演算する順番は問わず、どのような順番であってもよい。そして、秘匿データ生成手段１１は、生成した閲覧制限秘匿データSRを秘匿データ記憶手段１９に格納する。
【００６１】
例えば、Ａさん、Ｂさん、Ｃさんの全てのユーザが、自身の各乱数を排他論理和演算した部分のユーザ秘匿データSRは、「S×R1×S×R2×S×R3」であるため、結果として「S×R1×R2×R3」となる。また、ＡさんとＢさんの２人のユーザが、自身の各乱数を排他論理和演算した部分のユーザ秘匿データSRは、「S×R1×S×R2×S」であるため、結果として「S×R1×R2」となる。
【００６２】
なお、排他論理和演算するユーザ秘匿データSRnの数（ユーザの数）が偶数の場合、秘匿データ生成手段１１は、保管サーバ７１にアクセスして元データSを取得し、各端末で生成されたユーザ秘匿データSRnの排他論理和演算に、さらに元データSを排他論理和演算して閲覧制限秘匿データSRを生成する。
【００６３】
Ｓ３１からＳ３３の処理により、複数ユーザによる閲覧制限が掛けられた閲覧制限秘匿データSRが生成され、秘匿装置１の秘匿データ記憶手段１９に格納される。
【００６４】
Ｓ３４において、各端末６１〜６３は、ユーザの指示を受け付けて、秘匿装置１にアクセスして閲覧制限秘匿データSRを取得し、当該閲覧制限秘匿データSRに入手した乱数（自身の乱数および／または他ユーザから入手した乱数）を排他論理和演算することで、所望の部分の元データSを復元する。すなわち、入手した乱数が排他論理和演算された部分の元データSのみが復元可能であり、入手できない他の乱数が排他論理和演算されている部分の元データSについては復元することができない。換言すると、複数のユーザが閲覧制限を掛けた部分の元データSは、閲覧制御秘匿データSRに当該複数のユーザ固有の乱数を排他論理和演算することで復元される。
【００６５】
図７は、図６で説明した閲覧制限秘匿データSRを部分的に復元する場合に必要となる乱数を示す説明図である。ＢさんおよびＣさんが自身の端末６２、６３に格納された乱数R2、R3でそれぞれ排他論理和演算した部分８１の閲覧制限秘匿データSRは、「S×R2×R3」である。したがって、当該部分８１を復元するには、鍵としてＢさんおよびＣさんが保持する乱数R2、R3を入手する必要がある。すなわち、ＢさんおよびＣさんの閲覧許可が必要となる。例えば、Ａさんが当該部分８１を復元および閲覧するには、ＢさんおよびＣさんの許可を得て、各端末６２、６３に格納された乱数R2、R3を取得し、自身の端末６１を用いて、閲覧制限秘匿データSR（＝S×R2×R3）に入手した乱数データR2、R3を排他論理和演算することで、所望の部分８１の元データSを復元する。なお、復元の際においても、排他論理和演算する順番は問わない。
【００６６】
同様に、Ｂさんが自身の端末６２に格納された乱数R2のみで排他論理和演算した部分８２、８９の閲覧制限秘匿データSRは、「S×R2」である。したがって、当該部分８２、８９を復元するには、鍵としてＢさんが保持する乱数R2を入手する必要がある。
【００６７】
なお、図６では、各端末６１〜６３が、各ユーザの乱数を用いてユーザ秘匿データを生成することとしたが、各端末６１〜６３は各ユーザが指定した元データの秘匿箇所を受け付けて、当該秘匿箇所を秘匿装置１に送信し、秘匿装置１側で各ユーザの乱数を用いてユーザ秘匿データを生成することとしてもよい。この場合、秘匿装置１は、各ユーザの乱数R1〜R3を、全て保持しているものとする。
【００６８】
また、図６では、各端末６１〜６３が、必要な乱数データを入手し、元データSの部分的な復元を行うこととしたが、秘匿装置１の元データ復元手段１３が、各ユーザのアクセス権限を管理し、アクセス権限を用いて各ユーザが要求した部分の復元可否を判断し、復元可能であると判断した場合は、閲覧制限秘匿データSRに必要な乱数を排他論理和演算して要求された部分の元データSを復元し、要求元の端末に送信することとしてもよい。この場合、秘匿装置１は、ユーザの端末６１〜６３に保持された乱数R1〜R3を、全て保持しているものとする。
【００６９】
以上説明した複数ユーザによる閲覧制限は、例えば以下のようない利用シーンにおいて適用することができる。
【００７０】
利用シーン１：社内でサービスオーダーなどを流す際に、組織毎に閲覧できる範囲に制限をかけたい場合。
【００７１】
・サービス部では、システム構成を見せたくない。
【００７２】
・営業部では、お客様内部に関する情報を見せたくない。
【００７３】
・設備部では、インフラ情報を見せたくない。
【００７４】
利用シーン２：持ち株会社などで、グループ会社に文書などを配布する際に、部分的かつ各グループ会社に応じた閲覧制限を設けたい場合。
【００７５】
利用シーン３：当初、広告、冒頭部分などの一部のみの閲覧が可能な閲覧制限を設けたデータを、ネットワーク経由フリー提供、ＤＶＤメディアなどで提供し、将来的に課金モデルとして提供したい場合。
【００７６】
＜第２の実施形態＞
次に、第２の実施形態について説明する。第２の実施形態では、第１の実施形態で説明した元データの部分的な復元を、秘密分散に適用した実施形態である。以下に述べる本実施形態では、元データを３つの分割データ（秘匿データ）に分割する場合の秘密分散を例として説明するが、本発明は、分割数が３の場合の秘密分散に限定されるものではない。なお、分割数が３の秘密分散の場合、３つの分割データのうち、いずれか２つの分割データを用いて元データを復元することができる。
【００７７】
図８は、第２の実施形態に係るデータ秘匿システムの構成図である。本実施形態のデータ秘匿システムは、秘匿装置１（データ秘匿装置）と、端末５、複数の保管サーバ７ａ、７ｂ、７ｃとを備える。
【００７８】
秘匿装置１は、ネットワーク３を介してアクセスしてくる端末５からの元データSの分割要求に応じて元データSを複数の分割データD(1),D(2),D(3)に分割し、この分割した複数の分割データをネットワーク３を介して複数の保管サーバ７ａ，７ｂ，７ｃに保管する。
【００７９】
また、秘匿装置１は、ネットワーク３を介してアクセスしてくる端末５からの元データ復元要求に応じて、複数の分割データD(1),D(2),D(3)をネットワーク３を介して各保管サーバ７から取得し、この取得した複数の分割データD(1),D(2),D(3)から元データSを復元し、ネットワーク３を介して端末５に送信する。
【００８０】
本実施形態の秘匿装置１は、秘匿データ生成手段１１と、元データ復元手段１３と、乱数発生手段１５と、データ送受信手段１７と、記憶手段１９と、を備える。
【００８１】
秘匿データ生成手段１１（元部分データ生成手段、乱数部分データ生成手段、秘匿部分データ生成手段、復元ＩＤ付与手段）は、元データSから複数の分割データを生成する。具体的には、秘匿データ生成手段１１は、元データSを所定の処理単位に区切って、元部分データを生成するとともに、元データSと同じ長さまたは元データSより短い長さの乱数を、前記所定の処理単位に区切って、乱数部分データを生成する。そして、秘匿データ生成手段１１は、元部分データと乱数部分データとを、所定数ずつ順番に取り出し、取り出した元部分データと乱数部分データとを用いて排他論理和演算を行うことで、複数の分割部分データを生成し、生成した複数の分割部分データに復元ＩＤを付与し、複数の保管サーバ７ａ，７ｂ，７ｃに保管する。
【００８２】
元データ復元手段１３は、複数の分割データから元データSを復元する。具体的には、元データ復元手段１３は、端末５から復元ＩＤを受け付けて、当該復元ＩＤに対応付けられた複数の分割部分データを保管サーバ７ａ，７ｂ，７ｃから読み出し、読み出した分割部分データを用いて対応する元部分データを復元する。
【００８３】
乱数発生手段１５は、元データSから複数の分割データを生成するために使用される乱数を発生する。データ送受信手段１７は、秘匿データ生成手段１１で生成した複数の分割データをネットワーク３を介して複数の保管サーバ７ａ，７ｂ，７ｃに送信するとともに、また複数の保管サーバ７ａ，７ｂ，７ｃからの複数の分割データをネットワーク３を介して受信する。記憶手段１９には、復元IDと、ビット位置情報とが、対応付けて記憶されている。
【００８４】
なお、以下に説明する本実施形態では、元データSと同じ長さの乱数を用いることとするが、元データSの長さよりも短い乱数を使用して、元データSを秘匿することとしてもよい。すなわち、乱数を元データSの長さより短いものとし、この短い長さの乱数を繰り返し用いることとしてもよい。
【００８５】
また、上記説明した秘匿装置１および端末５には、例えば、ＣＰＵと、メモリと、ハードディスク等の外部記憶装置と、入力装置と、出力装置とを備えた汎用的なコンピュータシステムを用いることができる。このコンピュータシステムにおいて、ＣＰＵがメモリ上にロードされた所定のプログラムを実行することにより、各装置の各機能が実現される。例えば、秘匿装置１および端末５の各機能は、秘匿装置１用のプログラムの場合は秘匿装置１のＣＰＵが、そして、端末５用のプログラムの場合は端末５のＣＰＵがそれぞれ実行することにより実現される。また、秘匿装置１用のプログラムおよび端末５用のプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ−ＲＯＭなどのコンピュータ読取り可能な記録媒体に記憶することも、ネットワークを介して配信することもできる。
【００８６】
次に、本実施形態の処理について説明する。
【００８７】
［分割データの生成処理］
図９は、本実施形態の秘匿装置１の分割データ生成処理を説明するための説明図である。図９では、元データSを秘密分散することにより、３つの分割データD(1)、D(2)、D(3)を生成するものとする。
【００８８】
本実施形態の秘匿装置１の利用者は、端末５からネットワーク３を介して秘匿装置１にアクセスし、秘匿装置１に元データSを送信する。秘匿装置１のデータ送受信手段１７は、端末５からの元データSを受信する。そして、秘匿データ生成手段１１は、元データSを秘密分散するために使用される処理単位ビット長bを決定する。この処理単位ビット長bは、利用者が端末５から秘匿装置１に対して指定してもよいし、または秘匿装置１において予め定められた値を用いてもよい。なお、処理単位ビット長bは、任意のビット数でよい。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、元データSの末尾を０で埋めて、処理単位ビット長bの整数倍の長さにする。そして、秘匿データ生成手段１１は、元データSを処理単位ビット長bに区切って分割し、複数の元部分データS１〜Snを生成する（Ｓ４１）。
【００８９】
また、秘匿データ生成手段１１は、乱数発生手段１５が生成した元データSと同じビット長の乱数Rを取得し、当該乱数Rを処理単位ビット長bに区切って分割し、複数の乱数部分データR１〜Rnを生成する（Ｓ４２）。なお、元データSのビット長が処理単位ビット長bの整数倍でない場合には、処理単位ビット長bの整数倍の長さの乱数Rを生成する。
【００９０】
そして、秘匿データ生成手段１１は、元部分データと乱数部分データとを、先頭から所定数ずつ順番に取り出す（Ｓ４３）。図示する例では、元部分データS１〜S3と乱数部分データR１〜R3とを3つずつ取り出すものとする。
【００９１】
そして、秘匿データ生成手段１１は、取り出した各元部分データと、対応する各乱数部分データとを、秘密分散の論理式に従って排他論理和演算（XOR）をそれぞれ行うことにより、３つの分割部分データを生成する（Ｓ４４）。秘密分散の論理式は、各分割部分データのみからは対応する元部分データは復元できないが、分割数より少ない所定の個数の分割部分データから対応する元部分データが復元可能であるように設定されたものである。この秘密分散の論理式については、後述する。
【００９２】
図示する例では、元部分データS1と対応する乱数部分データR1とを論理式を用いて排他論理和演算を行うことで、３つの分割部分データD(1,1)、D(2,1)、D(3,1)を生成する。また、元部分データS2と対応する乱数部分データR2とを論理式を用いて排他論理和演算を行うことで、３つの分割部分データD(1,2)、D(2,2)、D(3,2)を生成する。また、元部分データS3と対応する乱数部分データR3とを論理式を用いて排他論理和演算を行うことで、３つの分割部分データD(1,3)、D(2,3)、D(3,3)を生成する。
【００９３】
そして、秘匿データ生成手段１１は、生成した各分割部分データに復元IDを付加して、各保管サーバに保存する（Ｓ４５）。本実施形態では、秘匿データ生成部１１は、データ送受信手段１７を用いて、復元IDを付加した分割部分データD(1,1)、D(1,2)、D(1,3)を保管サーバ７ａに送信して保管する。また、秘匿データ生成部１１は、同じ復元IDを付加した分割部分データD(2,1)、D(2,2)、D(2,3)を保管サーバ７ｂに送信して保管し、同じ復元IDを付加した分割部分データD(3,1)、D(3,2)、D(3,3)を保管サーバ７ｃに送信して保管する。図９では、各分割部分データに復元IDとして「001」を付加するものとする。復元IDは、データの順序がわかるものが好ましく、ここでは「001」、「002」、「003」、・・・のように+1ずつ加算した値を復元IDとして用いるものとする。
【００９４】
なお、本実施形態では、秘匿データ生成部１１は、復元IDの他にビット位置情報も付加して各分割部分データを各保管サーバに保管するものとする。ビット位置情報は、元データSの先頭からのビット位置を示すものである。これにより、復元IDを指定して元データSの所望の部分を復元すること、または、ビット位置情報を指定して元データSの所望の部分を復元することもできる。
【００９５】
また、秘匿データ生成部１１は、生成した各分割部分データに付与した復元IDと、ビット位置情報とを対応付けて記憶手段１９に記憶する。
【００９６】
全ての元部分データに対して、Ｓ４３からＳ４５の処理を行うことで全ての元部分データに対応する各分割部分データが生成される。
【００９７】
なお、図９に示す本実施形態では、元データおよび乱数を区切る所定の処理単位として、分割データの生成処理を高速化するために、所定の長さの処理単位ビット長を用いることとしたが、処理単位ビット長以外の処理単位で、元データおよび乱数を区切ることとしてもよい。
【００９８】
例えば、処理単位として、元データのデータ特徴単位を用い、当該データ特徴単位に生成される各秘匿部分データに対してそれぞれ復元IDを付与することが考えられる。データ特徴単位は、例えば、個人情報の各項目（氏名、住所、電話番号など）であって、各項目毎に生成される秘匿部分データに、各復元IDを付与することが考えられる。また、データ特徴単位は、元データが動画の場合、映像のフレーム単位であって、フレーム単位に生成される秘匿部分データに、各復元IDを付与することが考えられる。
【００９９】
以上説明した分割データの生成処理を事前準備として、その後、元データSの部分的な復元処理が行われる。
【０１００】
［元データの一部の復元処理］
次に、元データの一部を復元する処理について説明する。
【０１０１】
まず、秘匿装置１が、端末５からの要求を受け付けて、元データの一部を復元する処理について説明する。秘匿装置１の元データ復元手段１３は、端末５から復元IDを受け付けて、当該復元IDに対応付けられたいずれか２つの分割部分データを保管サーバから読み出す。そして、元データ復元手段１３は、読み出した２つの分割部分データを所定の秘密分散法の論理式に従って排他論理和演算を行うことで、受け付けた復元IDに対応する部分の元データ（元部分データ）を復元し、要求元の端末５に送信する。この秘密分散の論理式については後述する。
【０１０２】
次に、図１０を用いて、あるユーザが、他のユーザに元データの一部を閲覧させる処理について説明する。図１０では、元データの復元処理は、秘匿装置１ではなく、端末で行われる。
【０１０３】
元データの部分閲覧を許可する許可者（例えば、上司）は、元データの中で復元させる部分を自身の端末５１に入力し、指定する（Ｓ５１）。許可者は、例えば、復元させる部分が元データの何ビット目にあたるかを示すビット位置情報を入力することで、元データの中で復元する部分を指定することが考えられる。
【０１０４】
また、図１１に示すように、元データが画像データの場合、端末５のディスプレイ上に元データを表示し、許可者が元データの一部を範囲指定（図１１の斜線部分）することで、元データの中で復元する部分を指定することとしてもよい。この場合、端末５１は、許可者がディスプレイ上で指定した範囲が、元データの何ビット目にあたるかのビット位置情報を取得する。通常、映像ファイル、画像ファイルにおいては、利用者が認識する情報の範囲とデータのビット列とが対応していない。そのため、例えば端末５１に実装されたアプリケーションを用いて任意の解像度を選択し、ピクセル単位に秘匿する表示場所を指定することにより、元のファイル（元データ）のビット列を取得することを可能とする。
【０１０５】
また、元データが動画データの場合、時間（例えば、再生開始から５分〜６分）で範囲指定すること、あるいは元データのデータカラムのセル（データ項目）で範囲指定することとしてもよい。
【０１０６】
そして、端末５１は、許可者が指定した範囲のビット位置情報を秘匿装置１に送信し、当該ビット位置情報に対応する復元IDを要求する（Ｓ５２）。
【０１０７】
秘匿装置１の元データ復元手段１３は、データ送受信手段１７を用いてビット位置情報を受信し、記憶手段１９を参照して、当該ビット位置情報に対応する復元IDを特定する。記憶手段１９には、復元IDと、ビット位置情報とが、対応付けて記憶されている。そして、元データ復元手段１３は、特定した復元IDを、データ送受信手段１７を用いて端末５１に送信する（Ｓ５３）。
【０１０８】
端末５１は、秘匿装置１から取得した復元IDに対応する分割部分データを、いずれか１つの保管サーバから取得する（Ｓ５４）。図示する例では、端末５１は、保管サーバ７ａから分割データD(1)の復元IDに対応する分割部分データを取得する。
【０１０９】
そして、端末５１は、Ｓ５３で秘匿装置から送信された復元IDと、Ｓ５４で取得した分割データD(1)の復元IDに対応する分割部分データと、他のいずれかの分割データの格納場所（例えばURLなどアドレス情報）とを、元データの一部を閲覧させる閲覧者（例えば、部下）の端末５２に送信する（Ｓ５５）。図示する例では、端末５１は、保管サーバ７ｃの分割データD(3)が格納されている格納場所を閲覧者の端末５２に送信する。
【０１１０】
閲覧者の端末５２は、復元ID、分割部分データおよび格納場所を受信し、受信した格納場所を用いて保管サーバ７ｃにアクセスし、受信した復元IDに対応する分割データD(3)の分割部分データを取得する（Ｓ５６）。
【０１１１】
そして、閲覧者の端末５２は、許可者の端末５１から送信された分割データD(1)の分割部分データと、Ｓ５６で保管サーバ７ｃから取得した分割データＤ(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）演算を用いることにより高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを生成することができるとともに、また分割データの保管に必要となる記憶容量も分割数に比例した倍数の容量よりも小さくすることができる。更に、任意に定めた一定の長さ毎にデータの先頭から順に演算処理を行うストリーム処理により分割データが生成される。
【０１１９】
なお、排他的論理和演算（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」からなるビット列を表す。
【０１２３】
次に、フローチャートなどの図面も参照して、秘密分散の作用について説明するが、この説明の前に図１２、図１５、図１８、図１９のフローチャートに示す記号の定義について説明する。
【０１２４】
（１）
【数１】
2015138198.tif 000003
【０１２５】
は、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
ただし、ｍはｍ≧０の整数を表す。
【０１２９】
（３）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
である行列を意味するものとし、「上三角行列」ということとする。具体的には下記のような行列である。
【数２】
2015138198.tif 000004
【０１３０】
（４）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を他の行列に右側から複数回かけると、その回数分だけ各列を右方向へ回転させるように移動させることができる。
【数３】
2015138198.tif 000005
【０１３１】
（５）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
となる性質がある。
【数４】
2015138198.tif 000006
【０１３４】
次に、図１２に示すフローチャートおよび図１３、図１４に示す具体的データなどを参照して、上記実施形態の作用として、まず元データSの分割処理について説明する。
【０１３５】
本実施形態の秘匿装置１の利用者は、端末５からネットワーク３を介して秘匿装置１にアクセスし、秘匿装置１に元データSを送信し、秘匿装置１ではデータ送受信手段１７が端末５からの元データSを受信し、秘匿装置１に供給する（図１２のステップＳ２０１）。なお、本例では、元データSは、１６ビットの「10110010 00110111」とする。
【０１３６】
次に、利用者は端末５から分割数nとして３を秘匿装置１に指示する（ステップＳ２０３）。この分割数nは秘匿装置１において予め定められた値を用いてもよい。なお、この分割数n=3に従って秘匿装置１で生成される３個の分割データをD(1),D(2),D(3)とする。この分割データD(1),D(2),D(3)は、すべて元データのビット長と同じ１６ビット長のデータである。
【０１３７】
それから、元データSを分割するために使用される処理単位ビット長bを８ビットと決定し、また元データと同じビット長である１６ビットの乱数Rを乱数発生手段１５から取得して生成する（ステップＳ２０５）。この処理単位ビット長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」
なお、各分割部分データD(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)を秘匿装置１のデータ送受信手段１７からネットワーク３を介して保管サーバ７ａ，７ｂ，７ｃにそれぞれ送信し、各保管サーバ７に保管し、分割処理を終了する。
【０１４６】
ここで、上述した図１２のフローチャートのステップＳ２１７における定義式による分割データの生成処理、具体的には分割数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のときは
【数５】
2015138198.tif 000007
【０１５１】
j=2のときは
【数６】
2015138198.tif 000008
【０１５２】
これを用いると、各分割部分データ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(3,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の復元を要求する。秘匿装置１は、この元データSの復元要求を受け取ると、この元データSに対応する分割データD(1),D(2),D(3)が保管サーバ７ａ，７ｂ，７ｃに保管されていることを記憶しているので、ネットワーク３を介して保管サーバ７ａ，７ｂ，７ｃから分割データ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)のすべてを用いなくても、３つの分割データのうち、２つの分割データを用いて上述したように元データを復元することができる。
【０１８５】
本発明の他の実施形態として、乱数Rのビット長を元データSのビット長よりも短いものを使用して、元データの分割処理を行うことができる。
【０１８６】
すなわち、上述した乱数RはS,D(1),D(2),D(3)と同じビット長のデータとしたが、乱数Rを元データSのビット長より短いものとし、分割データD(1),D(2),D(3)の生成にこの短いビット長の乱数Rを繰り返し用いるものである。
【０１８７】
なお、分割データD(3)は乱数Rのみから生成されるので、分割データD(3)は乱数Rを繰り返して保管しておく必要はない。例えば、元データSのビット長を１６００ビット（200バイト）としたとき、乱数Rは任意にとった１６０ビット（20バイト）のデータの繰り返しとする。つまり、R(1)〜R(20)はランダムに生成し、R(21)〜R(200)はR(21)=R(1),R(22)=R(2),…,R(40)=R(20),R(41)=R(1),R(42)=R(2),…,R(60)=R(20),R(61)=R(1),R(62)=R(2),…,R(80)=R(20),………,R(181)=R(1),R(182)=R(2),…,R(200)=R(20)とする。
【０１８８】
先の説明では、分割部分データD(3,j)を乱数部分データR(j)と定義してD(3)を生成しているが、D(3,20)まで保管すれば十分である。つまり、D(3)の長さはD(1),D(2)の１０分の１となる。従って、保管すべきデータの総量は先の実施形態では元データSの３倍であるが、この実施形態では２．１倍とすることができる。乱数Rにおける繰り返し部分のデータの長さは、短すぎると、D(1)またはD(2)のみからRが解読されてしまうことも考えられるため、適切な長さを選択することが望ましい。
【０１８９】
この実施形態では例えば乱数Ｒを生成するために疑似乱数生成アルゴリズムを使用する。乱数には自然界の物理現象などを使って乱数を発生させる真性乱数と、コンピュータのアルゴリズムなどで乱数を発生させる疑似乱数がある、真性乱数は、サイコロを何回も振ったり、雑音などの物理現象を利用したりして生成することができるが、手間や装置がたいへんであるため、その代わりに、適当な長さの種（乱数生成の種となる情報（ｓｅｅｄｓ））から決定的なアルゴリズムに基づいて生成される疑似乱数が用いられる。例えば短い乱数を種とすれば長い乱数を得ることができる。種の長さは、例えば１２８ビット、１６０ビットまたはそれ以上のものがある。決定的なアルゴリズムに基づいて生成されるといっても、統計的一様性、無相関性など乱数として必要な性質を一定のレベルで満たしている。具体例としては、ＡＮＳＩ  Ｘ９，４２、ＦＩＰＳ  １８６−２など標準化されたものがある
（http://www.ipa.go.jp/security/enc/CRYPTREC/fy15/cryptrec20030425_spec01.html）。
【０１９０】
これらをもちいれば、乱数生成の種を入力として長い疑似乱数の列を生成することができる。例えば、１６０ビットの種を与えて元データＳのビット長と同じ長さの乱数Ｒを生成し、上述したようにしてＳとＲからD(1),D(2)を生成し、D(3)にはＲを格納するのではなく１６０ビットの種を格納して保管することにより、元データＳのビット長が大きくなってもD(3)に格納して保管すべきビット数は１６０ビットで済み、保管すべきデータの総量を押さえることができる。元データＳを復元する場合には、D(3)に格納された１６０ビットの種から元データＳのビット長と同じ長さの乱数Ｒを再度生成し、上述したようにして、これとD(1)またはD(2)を用いて元データＳを復元することができる。
【０１９１】
上述した各実施形態は、元データを３つに分割し、そのうち２つから元データが復元可能となるものであったが、分割数nを３より大きくとって、n個より少ない個数の分割データから元データを復元することができることは勿論のことである。
【０１９２】
その１つの応用例として、元データを４つの分割データに分割する分割数n=4の場合の分割処理について図１５に示すフローチャートおよび図１６に示す定義式の一般形などを参照して説明する。
【０１９３】
まず、利用者は端末５から秘匿装置１にアクセスして元データSを送信し、秘匿装置１ではデータ送受信手段１７が端末５からの元データSを受信し、秘匿装置１に供給する（ステップＳ３０１）。それから、利用者は端末５から分割数nとして４を秘匿装置１に指示する（ステップＳ３０３）。この分割数nは秘匿装置１において予め定められた値を用いてもよい。また、処理単位ビット長bが一例として８ビットと決定される（ステップＳ３０５）。次に、元データSのビット長が8×3の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を０で埋める（ステップＳ３０７）。また、整数倍を意味する変数mを０に設定する（ステップＳ３０９）。
【０１９４】
次に、元データSの8×3×m+1ビット目から8×3ビット分のデータが存在するか否かが判定される（ステップＳ３１１）。なお、本例では、元データSが8×3=24ビット長のデータの場合について説明している。
【０１９５】
ステップＳ３１１の判定の結果、本例の元データSでは8×3=24ビットのデータであり、変数m=1の場合に相当する8×3×m(=1)+1ビットに相当する２５ビット以降のデータは存在しないので、ステップＳ３１１からステップＳ３２１に進むことになるが、今の場合は、変数mは０であるので、元データSの8×3×m+1ビット目は、8×3×0+1=1となり、元データSの２４ビットの１ビット目から8×3ビット分にデータが存在するため、ステップＳ３１３に進む。
【０１９６】
ステップＳ３１３では、変数jを１から３（=分割数n-1）まで変えて、元データSの8×(3×m+j-1)+1ビット目から８ビット分（=処理単位ビット長）のデータを元部分データS(3×m+j)に設定し、これにより元データSを処理単位ビット長で区分けした３個の元部分データS(1),S(2),S(3)が生成される。
【０１９７】
次に、変数jを１から３まで変えて、乱数部分データR(3×m+j)に乱数発生手段１５から発生する８ビットの長さの乱数を設定し、これにより乱数Rを処理単位ビット長で区分けした３個の乱数部分データR(1),R(2),R(3)が生成される（ステップＳ３１５）。
【０１９８】
次に、ステップＳ３１７において、変数iを１から４(=分割数n)まで変えるとともに、更に各変数iにおいて変数jを１から３(=分割数n-1）まで変えながら、ステップＳ３１７に示す分割データを生成するための定義式により複数の分割データD(i)の各々を構成する各分割部分データD(i,3×m+j)を生成する。この結果、次に示すような分割データDが生成される。
【０１９９】
分割データD
=4個の分割データD(i)=D(1),D(2),D(3),D(4)
第１の分割データD(1)
=3個の分割部分データD(1,j)=D(1,1),D(1,2),D(1,3)
第２の分割データD(2)
=3個の分割部分データD(2,j)=D(2,1),D(2,2),D(2,3)
第３の分割データD(3)
=3個の分割部分データD(3,j)=D(3,1),D(3,2),D(3,3)
第４の分割データD(4)
=3個の分割部分データD(4,j)=D(4,1),D(4,2),D(4,3)
なお、各分割部分データD(i,j)を生成するためのステップＳ３１７に示す定義式は、本例のように分割数n=4の場合には、具体的には図１６に示す表に記載されているものとなる。図１６に示す表から、分割部分データD(1,1)を生成するための定義式はS(1)*R(1)*R(2)*R(3)であり、D(1,2)の定義式はS(2)*R(1)*R(2)*R(3)であり、D(1,3)の定義式はS(3)*R(1)*R(2)*R(3)であり、D(2,1)の定義式はS(1)*R(1)*R(2)であり、D(2,2)の定義式はS(2)*R(2)*R(3)であり、D(2,3)の定義式はS(3)*R(1)*R(3)であり、D(3,1)の定義式はS(1)*R(1)であり、D(3,2)の定義式はS(2)*R(2)であり、D(3,3)の定義式はS(3)*R(3)であり、D(4,1)の定義式はR(1)であり、D(4,2)の定義式はR(2)であり、D(4,3)の定義式はR(3)である。また、図１６に示す表にはm＞0の場合の任意の整数についての一般的な定義式も記載されている。
【０２００】
このように変数m=0の場合について分割データDを生成した後、次に変数mを１増やし（ステップＳ３１９）、ステップＳ３１１に戻り、変数m=1に該当する元データSの２５ビット以降について同様の分割処理を行おうとするが、本例の元データSは２４ビットであり、２５ビット以降のデータは存在しないので、ステップＳ３１１からステップＳ３２１に進み、上述したように生成した分割データD(1),D(2),D(3),D(4)を秘匿装置１のデータ送受信手段１７からネットワーク３を介して保管サーバ７にそれぞれ送信し、各保管サーバ７に保管し、分割処理を終了する。図８では保管サーバは３個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【０２０１】
ここで、上述した図１５のフローチャートのステップＳ３１７における定義式による分割データの生成処理、具体的には分割数n=4の場合の分割データの生成処理について詳しく説明する。
【０２０２】
まず、ステップＳ３１７に示す定義式から各分割データD(i)=D(1)〜D(4)の各々を構成する各分割部分データD(i,3×m+j)は、次のようになる。
【０２０３】
D(1,3×m+1)=S(3×m+1)*Q(1,1,1)*Q(1,1,2)*Q(1,1,3)
D(1,3×m+2)=S(3×m+2)*Q(2,1,1)*Q(2,1,2)*Q(2,1,3)
D(1,3×m+3)=S(3×m+3)*Q(3,1,1)*Q(3,1,2)*Q(3,1,3)
D(2,3×m+1)=S(3×m+1)*Q(1,2,1)*Q(1,2,2)*Q(1,2,3)
D(2,3×m+2)=S(3×m+2)*Q(2,2,1)*Q(2,2,2)*Q(2,2,3)
D(2,3×m+3)=S(3×m+3)*Q(3,2,1)*Q(3,2,2)*Q(3,2,3)
D(3,3×m+1)=S(3×m+1)*Q(1,3,1)*Q(1,3,2)*Q(1,3,3)
D(3,3×m+2)=S(3×m+2)*Q(2,3,1)*Q(2,3,2)*Q(2,3,3)
D(3,3×m+3)=S(3×m+3)*Q(3,3,1)*Q(3,3,2)*Q(3,3,3)
D(4,3×m+1)=R(3×m+1)
D(4,3×m+2)=R(3×m+2)
D(4,3×m+3)=R(3×m+3)
次に、Q(j,i,k)を具体的に求める。これはc(j,i,k)を3×3行列であるU[3,3]×(P[3,3])＾(j-1)のi行k列の値としたとき下記のように定義される。
【０２０４】
c(j,i,k)=1 のとき Q(j,i,k)=R(3×m+k)
c(j,i,k)=0 のとき Q(j,i,k)=0
j=1のときは
【数７】
2015138198.tif 000009
【０２０５】
j=2のときは
【数８】
2015138198.tif 000010
【０２０６】
j=3のときは
【数９】
2015138198.tif 000011
【０２０７】
これを用いると、各分割部分データは次のような定義式により生成される。
【０２０８】
D(1,3×m+1)=S(3×m+1)*Q(1,1,1)*Q(1,1,2)*Q(1,1,3)
=S(3×m+1)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(1,3×m+2)=S(3×m+2)*Q(2,1,1)*Q(2,1,2)*Q(2,1,3)
=S(3×m+2)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(1,3×m+3)=S(3×m+3)*Q(3,1,1)*Q(3,1,2)*Q(3,1,3)
=S(3×m+3)*R(3×m+1)*R(3×m+2)*R(3×m+3)
D(2,3×m+1)=S(3×m+1)*Q(1,2,1)*Q(1,2,2)*Q(1,2,3)
=S(3×m+1)*R(3×m+1)*R(3×m+2)
D(2,3×m+2)=S(3×m+2)*Q(2,2,1)*Q(2,2,2)*Q(2,2,3)
=S(3×m+2)*R(3×m+2)*R(3×m+3)
D(2,3×m+3)=S(3×m+3)*Q(3,2,1)*Q(3,2,2)*Q(3,2,3)
=S(3×m+3)*R(3×m+1)*R(3×m+3)
D(3,3×m+1)=S(3×m+1)*Q(1,3,1)*Q(1,3,2)*Q(1,3,3)
=S(3×m+1)*R(3×m+1)
D(3,3×m+2)=S(3×m+2)*Q(2,3,1)*Q(2,3,2)*Q(2,3,3)
=S(3×m+2)*R(3×m+2)
D(3,3×m+3)=S(3×m+3)*Q(3,3,1)*Q(3,3,2)*Q(3,3,3)
=S(3×m+3)*R(3×m+3)
D(4,3×m+1)=R(3×m+1)
D(4,3×m+2)=R(3×m+2)
D(4,3×m+3)=R(3×m+3)
ここで、上述したように図１２のステップＳ２１７や図１５のステップＳ３１７で示した定義式に基づいて元データを分割する分割規則について一般的な表現で記載する。
【０２０９】
まず、元データ、乱数、分割データ、分割数および処理単位ビット長をそれぞれS,R,D,nおよびbで表すとともに、複数n個のうちの１つを表わす変数としてi(=1〜n)およびj(=1〜n-1)を用いて複数(n-1)個の元部分データ、複数(n-1)個の乱数部分データ、複数(n)個の分割データおよび各分割データの複数(n-1)個の分割部分データのそれぞれのうちの１つをそれぞれS(j),R(j),D(i)およびD(i,j)で表わす。
【０２１０】
それから、上記変数jを１からn-1まで変えて、各元部分データS(j)を元データSのb×(j-1)+1ビット目からbビット分のデータとして作成する。次に、U[n,n]をn×n行列である上三角行列とし、P[n,n]をn×n行列である回転行列としたとき、c(j,i,k)を(n-1)×(n-1)行列であるU[n-1,n-1]×P[n-1,n-1]＾(j-1)のi行k列の値と定義する。そして、c(j,i,k)=1のとき、Q(j,i,k)=R(k), c(j,i,k)=0のとき、Q(j,i,k)=0と定義したとき、変数iを１からnまで変えながら、各変数iにおいて変数jを１からn-1まで変えた場合において、i＜nのとき、各分割部分データD(i,j)を
【数１０】
2015138198.tif 000012
【０２１１】
と設定し、またi=nのとき、各分割部分データD(i,j)を
D(i,j)=R(j)
と設定する。上記処理を元データSの先頭から末尾まで繰り返し行うことにより元データSから分割数nの分割データを生成することができる。
【０２１２】
次に、上述したように元データSを４分割して生成された分割データD(1),D(2),D(3),D(4)から元データSを復元する処理について図１６を参照して説明する。なお、図１６に示す４分割の場合には、変数jを3×m+1(m≧0である任意の整数）として、同図に示す一般的な定義式から次に示すように元データSを生成することができる。
【０２１３】
まず、分割データD(1),D(2)から元データSを求める場合について説明する。
【０２１４】
D(1,j)*D(2,j)=(S(j)*R(j)*R(j+1)*R(j+2))*((S(j)*R(j)*R(j+1))
=(S(j)*S(j))*(R(j)*R(j))*(R(j+1)*R(j+1))*R(j+2)
=0*0*0*R(j+2)
=R(j+2)
従って、D(1,j)*D(2,j)を計算すれば、乱数R(j+2)が求まり、同様にD(1,j+1)*D(2,j+1)を計算すれば、乱数R(j)が求まり、同様にD(1,j+2)*D(2,j+2)を計算すれば、乱数R(j+1)が求まり、これらの得られた乱数R(j),R(j+1),R(j+2)を用いれば、
D(1,j)*R(j)*R(j+1)*R(j+2)
=(S(j)*R(j)*R(j+1)*R(j+2))*(R(j)*R(j+1)*R(j+2))
=S(j)*(R(j)*R(j))*(R(j+1)*R(j+1))*(R(j+2)*R(j+2))
=S(j)*0*0*0
=S(j)
であるから、D(1,j)*R(j)*R(j+1)*R(j+2)を計算して、S(j)を求めてもよいし、D(2,j)*R(j)*R(j+1)からS(j)を求めることもできる。
【０２１５】
同様に、D(1,j+1)*R(j)*R(j+1)*R(j+2)またはD(2,j+1)*R(j+1)*R(j+2)を計算してS(j+1)を求めることができ、また同様にD(1,j+2)*R(j)*R(j+1)*R(j+2)またはD(2,j+2)*R(j)*R(j+2)を計算してS(j+2)を求めることができる。
【０２１６】
更に、上述したと同様に、D(2)とD(3)からSを求めることができる。
【０２１７】
具体的には、まずR(j),R(j+1),R(j+2)を求めてから、D(2,j),D(2,j+1),D(2,j+2)またはD(3,j),D(3,j+1),D(3,j+2)とR(j),R(j+1),R(j+2)のXOR演算によりS(j),S(j+1),S(j+2)を求めることができる。
【０２１８】
また更に、D(1)とD(4)またはD(2)とD(4)またはD(3)とD(4)からSを求めることができる。
【０２１９】
D(4)はRをそのものから定義したものであるから、計算することなくD(4)からR(j),R(j+1),R(j+2)を取得することができ、例えば、D(1,j),D(1,j+1),D(1,j+2)とR(j),R(j+1),R(j+2)のXOR演算によりS(j),S(j+1),S(j+2)を求めることができる。
【０２２０】
上述したように、演算回数の差が１である任意の２つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の１つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、４つの分割データの中から任意に３つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、４つのうち任意の３つの分割データから元データを復元可能である。
【０２２１】
図１７は、５分割の場合の分割データと定義式を示す表である。この５分割の場合は、jを4×m+1(mはm≧0である任意の整数）として、分割データの定義式から、上述した４分割の場合の復元処理と同様のことが言える。従って、演算回数の差が１である任意の２つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(3)とD(4)、または、D(5)と任意の１つの分割データD(1)またはD(2)またはD(3)またはD(4)から元データSが復元可能である。そして、５つの分割データの中から任意に３つの分割データを取得すれば、その中には必ずこのいずれかのケースが含まれるため、５つのうち任意の３つから復元可能であるといえる。
【０２２２】
また、分割数nを５より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に１を加えたものである。つまり、前記最大個数に１を加えれば演算回数の差が１である２つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【０２２３】
次に、図１８に示すフローチャートを参照して、分割数がnで、処理単位ビット長がbである場合の一般的な分割処理について説明する。
【０２２４】
まず、利用者は端末５から秘匿装置１にアクセスして元データSを送信し、秘匿装置１ではデータ送受信手段１７が端末５からの元データSを受信し、秘匿装置１に供給する（ステップＳ４０１）。また、利用者は端末５から分割数n(n≧3である任意の整数）を秘匿装置１に指示する（ステップＳ４０３）。この分割数nは秘匿装置１において予め定められた値を用いてもよい。処理単位ビット長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を秘匿装置１のデータ送受信手段１７からネットワーク３を介して保管サーバ７にそれぞれ送信し、各保管サーバ７に保管し、分割処理を終了する。図８では保管サーバは３個であるが、分割数に応じて保管サーバを増やし、各分割データを異なる保管サーバに保管することが望ましい。
【０２３０】
次に、図１９に示すフローチャートを参照して、分割数nが２の場合の分割処理について説明する。すなわち、上述した各実施形態は図１８のフローチャートのステップＳ４０３に示したように分割数nが３以上(n≧3)の場合についてのものであるので、図１９を用いて分割数nが２の場合について説明する。
【０２３１】
まず、利用者は端末５から秘匿装置１にアクセスして元データSを秘匿装置１に供給する（ステップＳ５０１）。また、利用者は端末５から分割数nとして２を秘匿装置１に指示する（ステップＳ５０３）。この分割数nは秘匿装置１において予め定められた値を用いてもよい。それから処理単位ビット長bとして８ビットを決定する（ステップＳ５０５）。次に、元データSのビット長が８の整数倍であるか否かを判定し、整数倍でない場合には、元データSの末尾を０で埋める（ステップＳ５０７）。また、整数倍を意味する変数mを０に設定する（ステップＳ５０９）。
【０２３２】
次に、元データSの8×m+1ビット目から８ビット分のデータが存在するか否かが判定される（ステップＳ５１１）。この判定の結果、データが存在しない場合は、ステップＳ５２１に進むことになるが、今の場合は、変数mは０に設定されているので、データが存在するため、ステップＳ５１３に進む。
【０２３３】
ステップＳ５１３では、元データSの8×m+1ビット目から８ビット分のデータを元部分データS(m+1)に設定し、これにより元部分データS(1)が生成される。
【０２３４】
次に、乱数部分データR(m+1)に乱数発生手段１５から発生する８ビットの乱数を設定し、これにより乱数部分データR(1)が生成される（ステップＳ５１５）。
【０２３５】
次に、ステップＳ５１７において、同ステップに示す定義式により分割データDの各々を構成する各分割データD(1,m+1),D(2,m+1)が生成される。
【０２３６】
このように変数m=0の場合について分割データDを生成した後、次に変数mを１増やし（ステップＳ５１９）、ステップＳ５１１に戻り、変数m=1に該当する元データSの８ビット以降について同様の分割処理を行う。最後にステップＳ５１１の判定の結果、元データSにデータがなくなった場合、ステップＳ５１１からステップＳ５２１に進み、上述したように生成した分割データD(1)からD(2)を秘匿装置１のデータ送受信手段１７からネットワーク３を介して保管サーバ７にそれぞれ送信し、各保管サーバ７に保管し、分割処理を終了する。図８では保管サーバは３個であるが、このうち２個の保管サーバに各分割データを保管すればよい。
【０２３７】
ここにおいて、上述した図１９のフローチャートのステップＳ５１７における定義式による分割データの生成処理、具体的には分割数n=2の場合の分割データの生成処理について詳しく説明する。
【０２３８】
変数m=0の場合には、ステップＳ５１７に示す定義式から各分割データD(1,1),D(2,1)は、次のようになる。
【０２３９】
D(1,1)=S(1)*Q(1,1,1)
D(2,1)=R(1)
次に、Q(j,i,k)を具体的に求める。ここで、n=2を定義に当てはめると、j,i,kはいずれも１しか値をとらない。
【０２４０】
c(j,i,k)は1×1行列であるU[1,1]×(P[1,1])＾(j-1)のi行k列の値としたとき下記のように定義される。
【０２４１】
c(j,i,k)=1 のとき Q(j,i,k)=R(k)
c(j,i,k)=0 のとき Q(j,i,k)=0
U[1,1]×(P[1,1])＾(j-1)=U[1,1]×(P[1,1])＾0
=(1)×E[1,1]
=(1)×(1)
=(1)
従って、c(1,1,1)は１であるから、Q(1,1,1)はR(1)と定義される。
【０２４２】
以上から定義式は
D(1,1)=S(1)*R(1)
D(2,1)=R(1)
となる。変数mを使用した形式では、
D(1,m+1)=S(m+1)*R(m+1)
D(2,m+1)=R(m+1)
となる。
【０２４３】
なお、分割数n=2の場合には、２個の分割データのうち、どちらか一方を取得しただけでは、元データSを復元することはできず、２個のすべての分割データを取得して元データSを復元することになる。
【０２４４】
さて、上述した実施形態においては、ここの分割データのみから、それを構成する部分データ間の演算を行うことによって乱数成分が失われる場合がある。即ち、例えば３分割の場合、各分割部分データは次のように定義される。
【０２４５】
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(2,j)*D(2,j+1)*D(2,j+2)=S(j)*S(j+1)*S(j+2)である。ここでｊはｊ＝３×ｍ＋１、ｍはｍ≧０の任意の整数である。
【０２４９】
５分割の場合は、図１７より、D(i,j)*D(i,j+1)*D(i,j+2)*D(i,j+3)=S(j)*S(j+1)*S(j+2)*S(j+3)である。ここでiは１または３，ｊはｊ＝４×ｍ＋１、ｍはｍ≧０の任意の整数である。
【０２５０】
分割数が５より大きい場合も同様に演算により、乱数成分が失われる。なお、分割数が２の場合にはこのような、問題は生じない。
【０２５１】
この問題を解決する一つの方法は以下の通りである。これは３分割の場合に適用可能な方法である。図２０における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(i,j)を生成する個々の定義式からＲ(j)を削除したものである。ここでiはn-1>i>0であり、ｊはｊ＝(n-1)×ｍ＋１、ｍはｍ≧０の任意の整数、nは分割数である。これは分割数が５より大きい場合でも同様である。
【０２５４】
この場合も、個々の分割データのみでは、それを構成する分割部分データ間で演算を行っても乱数成分が失われない。これは、図１４、図１６、図１７においては、個々の分割データの分割部分データ間で演算をすると乱数部分が消去されて、３分割の場合にはD(1,j)*D(1,j+1)=S(j)*S(j+1)（ｊはｊ＝2×ｍ＋１、ｍはｍ≧０の任意の整数）となり、４分割の場合にはD(2,j)*D(2,j+1)*D(2,j+2)=S(j)*(S(j+1)*S(j+2)（ｊはｊ＝3×ｍ＋１、ｍはｍ≧０の任意の整数）となり、5分割の場合にはD(i,j)*D(i,j+1)*D(i,j+2)*D(i,j+3)=S(j)*S(j+1)*S(j+2)*S(j+3)（iは１または３，ｊはｊ＝４×ｍ＋１、ｍはｍ≧０の任意の整数）となっていたが、上記の通りD(i,j)を生成する個々の定義式からＲ(j)を削除した（iはn-1>i>0、ｊはｊ＝(n-1)×ｍ＋１、ｍはｍ≧０の任意の整数、nは分割数）ので、一つのＲ(j)が消去されずに残ることになるためである。
【０２５５】
また、この場合も、ｎ個の分割データのうちの所定の個数の分割データから、元データを復元することができるという特性は失われていない。
【０２５６】
まず３分割の場合には、D(1)、D(2)を取得してＳを復元する場合は、上述した通りR(j)（ｊはｊ＝2×ｍ＋１、ｍはｍ≧０の任意の整数）がD(1,j)*D(2,j+1)から求まり、S(j)が  D(2,j)*R(j)=S(j)*R(j)*R(j)
=S(j)*0
=S(j)
から求まり、R(j+1)が
D(1,j)*S(j)=S(j)*R(j+1)*S(j)
=S(j)*S(j)*R(j+1)
=0*R(j+1)
=R(j+1)
から求まり、上述した通りS(j+1)がD(2,j+1)*Ｒ(j+1)から求まる。また、D(1)とD(3)またはD(2)とD(3)を取得してＳを復元する場合には、D(3)は乱数のみからなる分割データであるので、D(1)またはD(2)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができる。
【０２５７】
次に４分割の場合には、D(1)、D(2)を取得してＳを復元する場合は、R(j+2)が
D(1,j)*D(2,j)=(S(j)*R(j+1)*R(j+2))*(S(j)*R(j+1))
=(S(j)*S(j))*(R(j+1)*R(j+1))*R(j+2)
=0*0*R(j+2)
=R(j+2)
から求まり、上述した通りS(j)がD(1,j)*R(j+1)*R(j+2)またはD(2,j)*R(j+1)から求まる。
【０２５８】
また、D(2)とD(3)を取得してＳを復元する場合には、上述した通りR(j+2)がD(2,j+1)*D(3,j+1)から求まり、R(j)がD(2,j+2)*D(3,j+2)から求まり、S(j)が
D(3,j)*R(j)=(S(j)*R(j))*R(j)
=S(j)*(R(j)*R(j))
=S(j)*0
=S(j)
から求まり、R(j+1)が
D(2,j)*S(j)=(S(j)*R(j+1))*S(j)
=(S(j)*S(j))*R(j+1)
=0*R(j+1)
=R(j+1)
から求まり、上述した通りS(j)がD(1,j)*R(j+1)*R(j+2)または D(2,j)*R(j+1)から求まる。
【０２５９】
また、D(4)と任意の一つの分割データD(1)またはD(2)またはD(3)を取得してＳを復元する場合には、D(4)は乱数のみからなる分割データであるので、D(1)またはD(2)またはD(3)の分割部分データ毎に必要な個数の乱数との排他的論理和演算を行うことにより、乱数部分を消去して元データを復元することができる。
【０２６０】
従って、演算回数の差が１である任意の２つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(4)と任意の１つの分割データD(1)またはD(2)またはD(3)からSが復元可能である。すなわち、４つの分割データの中から任意に３つの分割データを取得すれば、その中には必ず上述したいずれかのケースが含まれるため、４つのうち任意の３つの分割データから元データを復元可能である。
【０２６１】
次に５分割の場合については、D(1)とD(2)またはD(2)とD(3)を取得してＳを復元する場合、D(3)とD(4)を取得してＳを復元する場合、D(5)と任意の一つの分割データD(1)またはD(2)またはD(3)またはD(4)を取得してＳを復元する場合のいづれも４分割の場合と同様である。
【０２６２】
従って、演算回数の差が１である任意の２つの分割データD(1)とD(2)、または、D(2)とD(3)、または、D(3)とD(4)、または、D(5)と任意の１つの分割データD(1)またはD(2)またはD(3)またはD(4)から元データSが復元可能である。そして、５つの分割データの中から任意に３つの分割データを取得すれば、その中には必ずこのいずれかのケースが含まれるため、５つのうち任意の３つから復元可能であるといえる。
【０２６３】
また、分割数nを５より大きくとった場合も同様にして分割データを構成すれば、nが奇数である場合は(n+1)/2個、nが偶数である場合は(n/2)+1個の分割データから元データを復元することができる。この個数は、n個の分割データがあったときに、隣り合ったものを選択せず、かつ、n個目の分割データを選択しないような最大個数に１を加えたものである。つまり、前記最大個数に１を加えれば演算回数の差が１である２つの分割データまたはn個目の分割データとその他のデータを必ず含むこととなるため、復元に必要な個数が前記のとおりといえる。
【０２６４】
上述してきたように、本秘密分散によれば、所定の定義式が元部分データと乱数部分データの排他的論理和からなるので、従来のように多項式や剰余演算を行う高速かつ高性能な演算処理能力を必要とせず、大容量のデータに対しても簡単な演算処理を繰り返して分割データを簡単かつ迅速に生成することができる。
【０２６５】
また、生成した複数の分割データのうち分割数よりも少ない数の分割データに対して定義式を適用することにより元データを復元するので、分割数よりも少ない任意の数xの分割データで元データを復元でき、分割数からxを減算した数までの分割データを紛失したり破壊したとしても、元データを復元することができる。
【０２６６】
さらに、元データをネットワークを介して端末から受信し、この元データに対して元部分データ、乱数部分データおよび分割部分データの生成処理を施して生成された複数の分割部分データをネットワークを介して保管サーバに送信して保管するので、多数のユーザが端末からネットワークを介してアクセスして分割処理を依頼することができ、共通化および経済化を図ることができる。
【０２６７】
なお、上述した秘密分散では、分割データは、乱数のみからなる１つの分割データと、１つの元部分データと１つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる１つ以上の分割データを含む場合であるが、上述した実施形態を変形して分割データは、乱数のみからなる１つ以上の分割データと、１つ以上の元部分データと１つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる１つ以上の分割データを含むものとしても良い。また、上述した実施形態を変形して、分割データは、１つ以上の元部分データと１つ以上の乱数部分データの排他的論理和演算によって生成された分割部分データからなる２つ以上の分割データを含むものとしても良い。
【０２６８】
なお、本発明は上記の実施形態に限定されるものではなく、その要旨の範囲内で数々の変形が可能である。例えば、第１および第２の実施形態において、元データSからヘッダ情報を取り出し、ヘッダ情報については秘匿せずにそのまま別に管理し、ヘッダ情報を除いた元データのみから秘匿データ（または分割データ）を生成することとしてもよい。この場合、秘匿装置の秘匿データ生成手段１１は、元データからヘッダ情報を除いたデータを所定の処理単位に区切って、元部分データを生成する。また、秘匿データ生成手段１１は、元データからヘッダ情報を除いたデータと同じ長さまたは当該データより短い長さの乱数を、所定の処理単位に区切って乱数部分データを生成する。これにより、ヘッダ情報を除いた元データの秘匿データ（または分割データ）を生成することができる。
【符号の説明】
【０２６９】
１ ：秘匿装置１
３ ：ネットワーク
５、５１、５２：端末
７、７ａ，７ｂ，７ｃ：保管サーバ
１１：秘匿データ生成手段
１３：元データ復元手段
１５：乱数発生手段
１７：データ送受信手段
１９：秘匿データ記憶手段
【図１】
2015138198.tif 000013
【図２】
2015138198.tif 000014
【図３】
2015138198.tif 000015
【図４】
2015138198.tif 000016
【図５】
2015138198.tif 000017
【図６】
2015138198.tif 000018
【図７】
2015138198.tif 000019
【図８】
2015138198.tif 000020
【図９】
2015138198.tif 000021
【図１０】
2015138198.tif 000022
【図１１】
2015138198.tif 000023
【図１２】
2015138198.tif 000024
【図１３】
2015138198.tif 000025
【図１４】
2015138198.tif 000026
【図１５】
2015138198.tif 000027
【図１６】
2015138198.tif 000028
【図１７】
2015138198.tif 000029
【図１８】
2015138198.tif 000030
【図１９】
2015138198.tif 000031
【図２０】
2015138198.tif 000032
【図２１】
2015138198.tif 000033
【図２２】
2015138198.tif 000034
【図２３】
2015138198.tif 000035