【文献】
石津晴崇,荻原利彦,電子データの長期保管に関する一考察,電子情報通信学会2004年総合大会講演論文集 情報・システム1 PROCEEDINGS OF THE 2004 IEICE GENERAL CONFERENCE,2004年 4月 1日,p.125
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0023】
以下、図面を参照して本発明の実施形態を説明する。
図1は、本発明の一実施形態によるシステムの構成図である。本システムは、データ処理装置10、データ保管装置31、32、33、これらを接続する回線21、22、23を備える。
図1は、秘密情報Sから3個のシェアを生成し、3つのデータ保管装置に保管する場合を示す。災害対策のためには、生成されたシェアを異なる場所に保管することが望ましい。従って、生成されたシェアがn個の場合、データ保管装置はn個設置することが望ましい。
【0024】
データ処理装置10は、分散手段11、復元手段12、再生成手段13、再構成手段14を備える。分散手段11は、秘密情報Sおよびそれと同じ長さの乱数Rからn(n≧3)個のシェアを生成する。復元手段12は、分散手段11によって生成されたn個のシェアのうち所定の個数のシェアから秘密情報Sを復元する。再生成手段13は、分散手段11によって生成された1個のシェアを他の2個のシェアから再生成する。再構成手段14は、分散手段11によって生成されたn個のシェアと、それらの生成に使用された乱数Rとは別の乱数R
’とを用いて、新たなn個のシェアを生成する。
【0025】
ここで、本明細書で用いる記号を説明する。ビット列aとbを結合したビット列がcであるとき、これを、
【0027】
と表わす。また、同じ長さのビット列aおよびbに対して、それぞれのビット毎に排他的論理和を施したビット列をcとすると、これを、
【0029】
と表わす。排他的論理和は、次の演算規則が成り立つ。
【0031】
<秘密情報の分散(シェアの生成)>
次に、分散手段11について詳細に説明する。分散手段11は、秘密情報Sと乱数Rからn個(n≧3)のシェアD
1〜D
nを生成する。
【0032】
一実施形態として、分散手段11は、コンピュータとプログラムを用いて実現することができる。
図2は、コンピュータ1の構成の一例を表わす。コンピュータ1は、中央演算処理装置(CPU)2、メモリ3、ディスク装置4、入出力インタフェース5を備える。メモリ3は一次記憶装置または主記憶装置と呼ばれる記憶装置、ディスク装置4は二次記憶装置または補助記憶装置と呼ばれる記憶装置に該当する。ディスク装置4には、プログラム6が記憶されている。入出力インタフェース5は、ディスプレイ、キーボード、通信回線等とのインタフェースの役割を果たす。プログラム6は、以下に述べる分散処理をCPU2に実行させるためのプログラムを含むものとする。
【0033】
例えば、ユーザがコンピュータ1に分散処理の実行を指示すると、ディスク装置4から分散処理プログラムがメモリ3に読み込まれ、このプログラムに含まれる命令に従って、CPU2は処理を実行する。
【0034】
ここでは、秘密情報S、同じ長さの乱数Rがメモリ3に格納されているものとする。秘密情報Sは、コンピュータ1が入出力インタフェース5を介して接続された外部記憶装置からコンピュータ1のメモリ3に読み込んでもよいし、通信回線を介して接続された他のコンピュータからコンピュータ1のメモリ3に読み込んでもよい。乱数Rは、擬似乱数生成アルゴリズムを用いて生成されたものでもよいし、自然界の物理現象を利用した乱数発生器を用いて生成されたものでもよい。後述するように、事前にまとめて生成してディスク装置に書き込んでおき、そこから読み出してもよい。
【0035】
ビット列である秘密情報Sをn−1等分し、順に、S
1、S
2、・・・、S
n−1と表わし、ビット列である乱数Rをn−1等分し、順に、R
1、R
2、・・・、R
n−1と表わすと、n=3のとき、
【0042】
n=3の場合、CPU2は、次式の右辺の演算により、シェアD
1〜D
3を生成する(以下、「分散処理(基本型)」と呼ぶ)。
【0044】
すなわち、CPU2は、メモリ3からS
1、R
1、R
2を読み出し、これらの排他的論理和演算の結果を、メモリ3内のシェアD
1用の格納領域のうち前半部分に格納し、メモリ3からS
2、R
2を読み出し、これらの排他的論理和演算の結果を、メモリ3内のシェアD
1用の格納領域のうち後半部分に格納する。
次に、CPU2は、メモリ3からS
1、R
1を読み出し、これらの排他的論理和演算の結果を、メモリ3内のシェアD
2用の格納領域のうち前半部分に格納し、メモリ3からS
2、R
1、R
2を読み出し、これらの排他的論理和演算の結果を、メモリ3内のシェアD
2用の格納領域のうち後半部分に格納する。
次に、CPU2は、メモリ3からR
1を読み出し、メモリ3内のシェアD
3用の格納領域のうち前半部分に格納し、メモリ3からR
2を読み出し、メモリ3内のシェアD
3用の格納領域のうち後半部分に格納する。
このようにしてメモリ3内に格納されたシェアD
1〜D
3は、入出力インタフェース5から
図1に示す回線21〜23を介してそれぞれデータ保管装置31〜33に送信され保管される。
【0045】
上記の演算におけるD
1,2とD
2,2を次式のように入れ替えてもよい。この場合、CPU2は、次式の右辺の演算により、シェアD
1〜D
3を生成する(以下、「分散処理(変形3型)」と呼ぶ)。
【0047】
分散処理(変形3型)をシェア数が3より大きい場合に拡張すると以下の通りである。
n=4の場合、CPU2は、次式の右辺の演算により、シェアD
1〜D
4を生成する(以下、「分散処理(変形4型)」と呼ぶ)。
【0049】
n=5の場合、CPU2は、次式の右辺の演算により、シェアD
1〜D
5を生成する(以下、「分散処理(変形5型)」と呼ぶ)。
【0051】
一般に、シェア数nの場合、シェアD
i(i=1〜n,n≧3)を区分したシェア部分データD
i,j(i=1〜n,j=1〜n−1)は、i=1〜n−1,j=1〜n−1の各i,jについてD
i,jが、第m列(m=1〜n−i)の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj−1回巡回させたとき成分が1である列の番号に対応する乱数部分データと、S
jとの排他的論理和で構成され、j=1〜n−1の各jについてD
n,jがR
jで構成されたものであると言える(以下、「分散処理(変形n型)」と呼ぶ)。
【0052】
なお、上記の分散処理を行う前に、秘密情報Sを任意の整数個に分け、それぞれについて分散処理を行ってもよい。この場合、乱数は、秘密情報Sを整数個に分けた単位で異なるものを使用してもよいし、同じものを繰り返し使用してもよい。秘密情報Sを整数個に分ける場合のそれぞれの長さは、同じでもよいし、異なってもよい。
【0053】
分散処理(基本型)は、分散処理(変形n型)と比較して次の利点がある。分散処理(変形n型)によって生成されたシェアは、個々のシェアのみから、それを構成するシェア部分データ間の演算によって乱数成分が失われる場合がある。例えば、n=3(分散処理(変形3型))の場合、D
1,1とD
1,2の排他的論理和演算を行うと、上述した演算規則によれば次の通りである。
【0055】
このように乱数成分が失われると、例えば、シェア部分データS
2の一部が既知である場合(例えば、S
2が標準フォーマットのヘッダ情報あるいはパディングを含む場合)にはS
1の一部が復元可能となる。一方、分散処理(基本型)によって生成されたシェアは、次式のように、シェアD
1、D
2それぞれを構成するシェア部分データ間で演算を行っても乱数成分が失われないため、元の秘密情報Sの一部も復元されることはない。
【0057】
以上のように、分散処理の過程で使われる演算は、排他的論理和演算のみであり、多項式を用いる分散方式に比べ、アルゴリズムが単純で実装が容易かつ高速である。また、n個のシェアのうちのいずれについても、1個のシェアのみからでは秘密情報に関する情報が全く得られない情報量的安全性を有している。
【0058】
シェア数3の場合で説明すると、シェアD
1〜D
3のうちシェアD
3は、分散処理に使用した乱数Rそのものであり、秘密情報Sを含んでいないため、シェアD
3だけでは、秘密情報Sに関する情報を全く得ることができない。シェアD
1、D
2については、秘密情報Sと、乱数R
1、R
2の一方または両方との排他的論理和の結果となっており、バーナム暗号による暗号文と等価である。したがって、乱数Rとして物理乱数を用いれば、シェアD
1またはD
2と秘密情報Sとは互いが確率的に独立となり、シェアD
1またはD
2だけでは、秘密情報Sに関する情報を全く得られない。
【0059】
このように、シェアD
1〜D
3のうち1個のシェアだけでは秘密情報Sに関する情報は全く得られない。それぞれのシェアD
1〜D
3を結託のない独立した管理主体において保管すれば、1個のシェア(例えば、シェアD
1)を管理している管理主体が、他のシェア(例えば、シェアD
3)の一部でも知ることは無いため、秘密情報Sの長期的な機密性を保つことができる。つまり、データ保管装置31〜33の管理主体は、結託の無い物理的にも独立したデータセンタなどが望ましい。
【0060】
<秘密情報の復元>
次に、
図1の復元手段12について詳細に説明する。復元手段12は、n=3の場合、上述した分散処理によって生成された3個のシェアのうち任意の2個から秘密情報Sを復元する。nが奇数のとき(n+1)/2個、nが偶数のとき(n/2)+1個あれば復元できる。
【0061】
一実施形態として、復元手段12は、コンピュータとプログラムを用いて実現することができる。
図2のプログラム6は、以下に述べる復元処理をCPU2に実行させるためのプログラムを含むものとする。例えば、ユーザがコンピュータ1に復元処理の実行を指示すると、ディスク装置4から復元処理プログラムがメモリ3に読み込まれ、このプログラムに含まれる命令に従って、CPU2は処理を実行する。
【0062】
分散処理(基本型)によるシェアの場合、CPU2は、入出力インタフェース5を制御し、回線21〜23を介して、データ保管装置31、32、33のうち2つからシェアを取得してメモリ3に格納する。
【0063】
取得したシェアがD
1、D
2である場合、D
1、D
2のシェア部分データについて次式が成り立つので、CPU2は次式の左辺の演算によりS
1、S
2を算出する。
【0065】
取得したシェアがD
1、D
3である場合、D
1、D
3のシェア部分データについて次式が成り立つので、CPU2は次式の左辺の演算によりS
1、S
2を算出する。
【0067】
取得したシェアがD
2、D
3である場合、D
2、D
3のシェア部分データについて次式が成り立つので、CPU2は次式の左辺の演算によりS
1、S
2を算出する。
【0069】
分散処理(変形n型)のシェアの場合、まず、次のようにして乱数Rを取得する。
n=3の場合、次式が成り立つので、シェアD
1、D
2が取得できた場合、左辺の演算を行い、その結果を2等分することによりR
1、R
2を取得する。
【0071】
n=4の場合、次式が成り立つので、シェアD
1とD
2、または、D
2とD
3が取得できた場合、それぞれ左辺の演算を行い、その結果を3等分することによりR
1〜R
3を取得する。
【0073】
n=5の場合、次式が成り立つので、シェアD
1とD
2、または、D
2とD
3、または、D
3とD
4が取得できた場合、それぞれ左辺の演算を行い、その結果を4等分することによりR
1〜R
4を取得する。
【0075】
すなわち、D
1〜D
n−1のうち番号が連続した2個のシェアが取得できれば(ケース1)、その2個の排他的論理和演算によりR
1〜R
n−1を取得することができる。この乱数部分データR
1〜R
n−1と、取得できたシェアのうちいずれかを用いれば、シェア部分データを生成した計算式において用いたのと同じ乱数部分データを用いた排他的論理和演算により、S
1〜S
n−1を復元することができる。
また、D
1〜D
n−1のうちいずれか1つとD
nが取得できれば(ケース2)、D
nから直接にR
1〜R
n−1を取得することができるので、取得できたD
1〜D
n−1のうちいずれか1つを用いてS
1〜S
n−1を復元することができる。
nが奇数のとき(n+1)/2個、nが偶数のとき(n/2)+1個のシェアが取得できれば、必然的に上記のケース1または2のいずれかに該当する。
【0076】
このように、復元処理の過程で使われる演算は、分散処理と同様に排他的論理和演算のみである。また、任意の1個のシェアが消失しても他の2個のシェアから秘密情報Sが復元されるため、復元に関してバックアップと同等な可用性を確保できる。
【0077】
<シェアの再生成>
次に、
図1の再生成手段13について詳細に説明する。再生成手段13は、上述した分散処理によって生成された1個のシェアを、他の2個のシェアから、秘密情報Sを復元することなく再生成する。再生成によって得られるシェアは、分散処理によって生成された元のシェアと全く同じであるので、再生成によって得られたシェアとその他のシェアとの組み合わせにより秘密情報を復元することが可能である。機器の障害や災害などで1個のシェアが消失しても、残りの2個から当該シェアを再生成することで、長期にわたって可用性を確保することができる。
2個のシェアから秘密情報を一旦復元し、改めて分散処理を行えば、任意のシェアを生成することは可能であるが、このようにすると秘密情報が一時的に復元される。以下の再生成処理においては、1個のシェアを他の2個のシェアから直接かつ高速に生成することができ、秘密情報が処理中に復元されない。
【0078】
一実施形態として、再生成手段13は、コンピュータとプログラムを用いて実現することができる。
図2のプログラム6は、シェアの再生成処理をCPU2に実行させるためのプログラムを含むものとする。例えば、ユーザがコンピュータ1に再生成処理の実行を指示すると、ディスク装置4から再生成処理プログラムがメモリ3に読み込まれ、このプログラムに含まれる命令に従って、CPU2は次の処理を実行する。
【0079】
分散処理(基本型)によるシェアの場合、CPU2は、入出力インタフェース5を制御し、回線21〜23を介して、データ保管装置31、32、33のうち2つからシェアを取得してメモリ3に格納する。
【0080】
データ保管装置33のシェアD
3が消失した場合、CPU2は、データ保管装置31、32からそれぞれシェアD
1、D
2を取得する。次式が成り立つので、CPU2は左辺の演算を行い、その結果を結合することによりD
3を再生成する。
【0082】
データ保管装置32のシェアD
2が消失した場合、CPU2は、データ保管装置31、33からそれぞれシェアD
1、D
3を取得する。次式が成り立つので、CPU2は左辺の演算を行い、その結果を結合することによりD
2を再生成する。
【0084】
データ保管装置31のシェアD
1が消失した場合、CPU2は、データ保管装置32、33からそれぞれシェアD
2、D
3を取得する。次式が成り立つので、CPU2は左辺の演算を行い、その結果を結合することによりD
1を再生成する。
【0086】
分散処理(変形3型)のシェアの場合は次の通りである。
シェアD
3が消失した場合、D
1、D
2を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
3を再生成する。
【0088】
シェアD
2が消失した場合、D
1、D
3を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
2を再生成する。
【0090】
シェアD
1が消失した場合、D
2、D
3を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
1を再生成する。
【0092】
分散処理(変形4型)のシェアの場合は次の通りである。
シェアD
1が消失した場合、D
2、D
4を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
1を再生成する。
【0094】
このように、右辺のD
1,1、D
1,2、D
1,3を得るために、順に、乱数部分データR
3、R
1、R
2が使用される。j=1〜3の各jについてD
1,jを生成するために使用される乱数部分データの番号3、1、2は「第3列の成分が1で他の成分が0である1行3列の行列(0,0,1)の成分を右方向にj−1回巡回させたとき成分が1である列の番号」と表わすことができる。D
1,jをこの乱数部分データとD
2,jとの排他的論理和によって生成する。
【0095】
シェアD
2が消失した場合、D
3、D
4を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
2を再生成する。
【0097】
このように、右辺のD
2,1、D
2,2、D
2,3を得るために、順に、乱数部分データR
2、R
3、R
1が使用される。j=1〜3の各jについてD
2,jを生成するために使用される乱数部分データの番号2、3、1は「第2列の成分が1で他の成分が0である1行3列の行列(0,1,0)の成分を右方向にj−1回巡回させたとき成分が1である列の番号」と表わすことができる。D
2,jをこの乱数部分データと、D
3,jとの排他的論理和によって生成する。
【0098】
シェアD
2が消失した場合のもう1つの方法として、D
1、D
4を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
2を再生成する。
【0100】
このように、右辺のD
2,1、D
2,2、D
2,3を得るために、順に、乱数部分データR
3、R
1、R
2が使用される。j=1〜3の各jについてD
2,jを生成するために使用される乱数部分データの番号3、1、2は「第3列の成分が1で他の成分が0である1行3列の行列(0,0,1)の成分を右方向にj−1回巡回させたとき成分が1である列の番号」と表わすことができる。D
2,jをこの乱数部分データと、D
1,jとの排他的論理和によって生成する。
【0101】
シェアD
3が消失した場合、D
2、D
4を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
3を再生成する。
【0103】
このように、右辺のD
3,1、D
3,2、D
3,3を得るために、順に、乱数部分データR
2、R
3、R
1が使用される。j=1〜3の各jについてD
3,jを生成するために使用される乱数部分データの番号2、3、1は「第2列の成分が1で他の成分が0である1行3列の行列(0,1,0)の成分を右方向にj−1回巡回させたとき成分が1である列の番号」と表わすことができる。D
3,jをこの乱数部分データと、D
2,jとの排他的論理和によって生成する。
【0104】
シェアD
4が消失した場合、D
1、D
2を取得する。次式が成り立つので、左辺の演算を行い、その結果を結合することによりD
4を再生成する。
【数31】
【0105】
このように、シェアD
1、D
2それぞれの1番目のシェア部分データD
1,1とD
2,1、2番目のシェア部分データD
1,2とD
2,2、3番目のシェア部分データD
1,3とD
2,3を使用して、順に、D
4,3、D
4,1、D
4,2、すなわち、乱数部分データR
3、R
1、R
2が生成される。この乱数部分データの番号3、1、2は「第3列の成分が1で他の成分が0である1行3列の行列(0,0,1)の成分を右方向にj−1回巡回させたとき成分が1である列の番号」と表わすことができる。
【0106】
シェア数が5以上の場合も同様に考えることができ、分散処理(変形n型)のシェアの場合、シェアD
p(1≦p≦n)の再生成は、p=1のときD
pはD
p+1とD
nから再生成でき、1<p<n−1のときD
pはD
p+1とD
n、または、D
p−1とD
nから再生成でき、p=n−1のときD
pはD
p−1とD
nから再生成でき、p=nのときD
pはD
1とD
2から再生成できる。すなわち、
p=1のとき、j=1〜n−1の各jについてD
1,jを、第n−1列の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj−1回巡回させたとき成分が1である列の番号に対応する乱数部分データと、D
2,jとの排他的論理和によって再生成し、
1<p<n−1のとき、j=1〜n−1の各jについてD
p,jを、第n−p列の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj−1回巡回させたとき成分が1である列の番号に対応する乱数部分データと、D
p+1,jとの排他的論理和によって再生成するか、または、第n−p列の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj回巡回させたとき成分が1である列の番号に対応する乱数部分データと、D
p−1,jとの排他的論理和によって再生成し、
p=n−1のとき、j=1〜n−1の各jについてD
n−1,jを、第2列の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj−1回巡回させたとき成分が1である列の番号に対応する乱数部分データと、D
n−2,jとの排他的論理和によって再生成し、
p=nのとき、j=1〜n−1の各jについて第n−1列の成分が1で他の成分が0である1行n−1列の行列の成分を右方向にj−1回巡回させたとき成分が1である列の番号に対応するD
nのシェア部分データを、D
1,jとD
2,jとの排他的論理和によって再生成する。
【0107】
上記のいずれの処理においても、秘密情報Sを復元する必要がなく、処理の過程で計算機内のCPUやメモリなどからも秘密情報Sが漏洩する恐れがない。また、シェア数3でそのうち1個を失った状態では可用性が確保されていないため、再生成に要する時間を極力短縮する必要がある。各シェアを再生成する操作は、独立した2つのステップで構成されており、並列処理が可能な環境において、1回の排他的論理和演算の時間のみで完了することが期待される。
【0108】
<シェアの再構成>
次に、
図1の再構成手段14について詳細に説明する。再構成手段14は、分散処理によって生成されたn個のシェアD
1〜D
nと、それらを生成する際に使用した乱数Rとは別の同じ長さの乱数R
’とを用いて、新たなn個のシェアD
1’〜D
n ’を生成する。新たなシェアは、元のシェアの算出に用いられたRをR
’で置換して算出されたものに等しい。
【0109】
一実施形態として、再構成手段14は、コンピュータとプログラムを用いて実現することができる。
図2のプログラム6は、以下に述べる再構成処理をCPU2に実行させるためのプログラムを含むものとする。例えば、ユーザがコンピュータ1に再構成処理の実行を指示すると、ディスク装置4から再構成処理プログラムがメモリ3に読み込まれ、このプログラムに含まれる命令に従って、CPU2は処理を実行する。
【0110】
分散処理(基本型)の場合、CPU2は、入出力インタフェース5を制御し、回線21〜23を介して、データ保管装置31、32、33からそれぞれシェアD
1、D
2、D
3を取得してメモリ3に格納する。メモリ3には、シェアD
1〜D
3を生成する際に使用した乱数Rではない別の同じ長さの乱数R
’が格納されているものとする。乱数R
’は、擬似乱数生成アルゴリズムを用いて生成されたものでもよいし、自然界の物理現象を利用した乱数発生器を用いて生成されたものでもよい。
【0113】
とし、再構成によって得られる新たなシェアを
【0117】
とする。例えば、D
2,1はS
1とR
1の排他的論理和として生成されたので、D
2,1とR
1の排他的論理和演算を行えばR
1が打ち消されてS
1が得られ、次にこれとR
’1との排他的論理和演算を行えばD
2,1’が得られる。このように計算すると処理中にS
1が復元されてしまうが、D
2,1とR
1*との排他的論理和演算を行えば、処理中にS
1が復元されることはない。そこで、CPU2は、新たなシェアのそれぞれを次式の右辺の演算によって生成する。
【0119】
この再構成処理によって生成される新たなシェアが、秘密情報Sと乱数R
’を用いて上述した分散処理(基本型)によって生成されるものと同じであることは、上記の各式がそれぞれ次のように変形できることから確認できる。
【0121】
従って、新たなシェアについても、上述した復元処理および再生成処理を行うことができる。
【0122】
確認のため、再構成前のシェアのうち1個と再構成後のシェアのうち1個とで秘密情報の復元を試みる。例えば、シェアD
1とシェアD
3’を用いると、上述した分散処理(基本型)によるシェアD
1とD
3から秘密情報を復元する演算式のD
3をD
3’で置換して演算を行うと次式の通りである。
【0124】
これらの演算結果には、元の乱数成分と再構成の際に用いた乱数成分とが含まれるため、秘密情報Sを得ることはできない。他の組み合わせについても同様である。このことから、再構成前のシェアのうち1個が漏洩した可能性がある場合でも、再構成を行い、再構成前の残りの2個のシェアを全て消去すれば、第三者が復元のために必要な残りのシェアを入手して秘密情報を復元する可能性を排除し、機密性を回復することができる。
【0125】
分散処理(変形n型)によるシェアの再構成処理も同様である。
【0126】
このように、再生成処理と同様、再構成処理の過程で秘密情報は復元されず、また、分散処理とほぼ同じ処理時間で新しいシェアを再構成することができる。
【0127】
<秘密情報の完全性確保>
上述した復元処理では、シェアの保管中に生じた機器の故障や改ざんなどにより、シェアに誤りが生じていたとしても、それを検出することができない。これに対して、次に示すように、ハッシュ値を併用することによって完全性を確保することができる。
【0128】
xを保管する場合、以下の手順を行う。ここで、ハッシュ関数をHとする。
(1)xのハッシュ値をh=H(x)とする。
(2)分散する秘密情報Sを
【0130】
とする。
(3)上述した分散処理により分散を行う。
【0131】
xを復元する場合、以下の手順を行う。
(1)上述した復元処理により秘密情報を復元し、これをS’とおく。
(2)
【0133】
とみなし, S’からx’とh’を取り出す。
(3)H(x’)とh’を比較する。H(x’)とh’が一致すればx=x’であり、x’が復元の結果として得られる情報の本体である。
【0134】
復元処理の(3)において、ハッシュ値が一致しなければ,復元処理に使用した2個のシェアのうちいずれか一方または両方に誤りが発生していることを示している。
シェア数3の場合、他の2通りの組み合わせによる復元を行い、どちらかの組み合わせで正しく復元されれば、そのときに使用しなかったシェアに誤りがあることがわかる。その際には,上述した再生成処理により、正しいシェアを回復することができる。どちらの組み合わせでも正しく復元されなければ、2個以上のシェアに誤りが発生していることになり、本方式では対処できない。
【0135】
上記のハッシュ値を用いた手順以外に、異なる2つのシェアの組み合わせにより、それぞれの組合せで復元した結果を突合することでも完全性を確認可能である。
【0136】
<保管容量の削減>
一般に、重要な情報を長期保管する場合、そのバックアップをとっておくのが通例であるため、可用性のみを確保する目的のために、合計で元の情報に対して2倍の容量を保管することになる。一方、上述した分散処理を行うと、機密性と可用性および完全性を同時に満たすが、シェア数3の場合、秘密情報と同じ長さの3個のシェアが生成されるので、秘密情報に対して3倍の容量を保管する必要がある。これは、バックアップにより可用性のみを確保した場合の1.5倍にあたる。ここでは、本発明におけるシェアの総容量を削減する方式について述べる。
【0137】
<擬似乱数の利用>
シェア数3の場合、シェアD
3は、分散処理に使用した乱数Rそのものである。そこで、物理乱数の代わりに計算量的安全性に基づき適切な擬似乱数を利用し、シェアD
3として擬似乱数のシードのみを保存する方法が考えられる。シードは、それから生成される擬似乱数系列に比べて十分に小さい容量であるため、この方法ではシェアの総容量を秘密情報Sの2倍程度に抑えることができる。
【0138】
<擬似乱数を使用した長期的な機密性の確保>
本発明において擬似乱数を使用し、長期にわたって機密性を確保するには、擬似乱数生成アルゴリズムの危殆化に対する考慮が必要である。本発明では、上述した再構成処理を以下のように利用することにより、危殆化への対応が可能である。
【0139】
まず、擬似乱数生成アルゴリズムF
r1とそのシードseed
r1を使用して擬似乱数系列r1を生成する。次に、秘密情報Sとr1を用いて、上述した分散処理に従ってシェアD
1およびD
2を生成する。最後に、r1ではなくseed
r1をシェアD
3とする。
ある期間経過後F
r1が危殆化する前に、その時点で十分に安全なF
r2とseed
r2を新たに用意し、これらを用いて擬似乱数系列r2を生成する。また、シェアD
1とD
2から、
【0143】
を得る。シェアの再構成を行うために与える新たな疑似乱数を
【0145】
とし、上述した再構成処理により新たなシェアD
1’およびシェアD
2’を求める。その結果、
【0147】
であり、以降、シェアD
1’およびシェアD
2’を保管する。一方、新たなシェアD
3’としては、seed
r1を破棄してseed
r2のみを保管する。
このように、擬似乱数生成アルゴリズムF
r1が危殆化する前に、F
r(i+1)を用いてシェアの再構成処理を行うことで、シェアの総容量を抑えつつ、長期的な安全性を確保することができる。
【0148】
なお、この方法では、シェアD
3’はF
r2のシードであるため、上述した再生成処理を適用しても、シェアD
3’だけはシェアD
1’とシェアD
2’から再生成することができない。仮に、シェアD
3’が消失した場合、擬似乱数生成アルゴリズムが危殆化した場合と同様にシェアD
1’およびシェアD
2’の再構成処理を行い、その時に使用した擬似乱数生成アルゴリズムのシードを新たなシェアD
3’とすればよい。
【0149】
<ディザスタリカバリシステムへの適用>
上述した復元処理により、3個のシェアのうち任意の2個のシェアで秘密情報を復元でき、かつ、上述した再生成処理により、任意の2個のシェアから秘密情報を復元することなく、他の1個のシェアを迅速に再生成することができる。この特長を利用し、ディザスタリカバリシステムを容易に構築可能である。
【0150】
図1に示すデータ保管装置31〜33は、それぞれ距離が離れた地点X、Y、Zにあるデータセンタに設置され、シェアを1個ずつ格納する。分散処理や復元処理などは自社に設置されたデータ処理装置10で行うこととし、各データセンタとの間は個別の回線21〜23で接続する。仮に、1つのデータセンタが災害に見舞われても、残りの2つのデータセンタに保管されたシェアから被災したデータセンタのシェアの再生成が可能である。
このようなディザスタリカバリシステムにおいて実装を効率化するための方式を述べる。
【0151】
<乱数の事前生成>
上述した分散処理では、秘密情報と同じサイズの乱数を生成する必要がある。良質な乱数を生成する装置は、ディスク装置のアクセス速度に比べて低速であり、多量の乱数を生成する場合、その生成時間が上述した分散処理の処理速度を抑える要因となる可能性がある。
上述した分散処理においてシェアD
3は、分散時に使用する乱数そのものであり、秘密情報Sには依存していない。このため、事前に乱数を生成してシェアD
3を作成しておくことが可能である。
【0152】
例えば、地点Zにあるディスク装置の全セクタに予め生成した乱数を書き込んでおく。また、秘密情報を保管する際、秘密情報をディスクのセクタサイズに分割し、その単位で分散処理を行うこととする。このとき、必要なセクタ番号の乱数を地点Zから読み出し、シェアD
1およびシェアD
2を生成し、使用した乱数が書かれていたセクタ番号に対応する地点Xおよび地点Yのディスク装置のセクタに書き込む。シェアD
3は、分散処理の前後で変化しないため、分散処理後にシェアD
3を書き込む必要はない。復元処理の際には、任意の2地点の対応するセクタを読み出し、セクタごとに復元処理を行い、その結果を結合することで秘密情報を得ることができる。
【0153】
一般に、ディスク装置に保管する情報とそれを記録するためのセクタ番号との対応は、ファイルシステムが管理する。このことを利用すれば、セクタ単位での分散処理および復元処理をディスクアクセスのためのデバイスドライバの機能の一部として実装することで、上述の方式を実現することができる。
【0154】
このように、乱数を事前に生成しておくことで、上述した分散処理の処理速度が乱数の生成速度により抑えられる事態を避けることが可能となる。
【0155】
<乱数からなるシェアを平時に使用しない分散方式>
図1に示したシェア数3のディザスタリカバリシステムを構築する場合、データ処理装置10を自社に設置し、データ保管装置31〜33をそれぞれ異なる地点X、Y、Zのデータセンタに設置すると、自社と各データセンタの間には、想定されるディスクへのアクセス頻度などに応じた帯域の回線を用意する必要がある。しかし、コスト面で既存の回線と共用せざるを得ず、十分な帯域を確保できないなどの場合も考えられる。ここでは、上述した乱数の事前生成がなされていることを前提として、シェアD
1やシェアD
2に誤りが発生しない限り、シェアD
3に対してアクセスする必要がない実装方式を示す。
【0156】
事前準備として、上述した乱数の事前生成を行った後、何らかの意味のない情報(例えば、擬似乱数など)を秘密情報として、地点Xおよび地点Yのディスク装置全体にシェアが書き込まれるように分散処理を行っておく。すなわち、地点X、Y、Zのディスク装置の対応するセクタには、何らかの意味のない情報を秘密情報として分散処理によって生成された対応するシェアが予め書き込まれ、このうち地点Zのディスク装置には事前生成された乱数が書き込まれた状態となっている。この後、次の手順により秘密情報Sを保管する。上記で乱数の事前生成に関して述べたのと同様に、分散処理によって生成されたシェアを保管するときには、地点X、Y、Zのディスク装置の対応するセクタを使用するものとする。
【0157】
まず、分散処理によって生成されるシェアD
1、D
2を書き込むために使用されることになる地点X、Yのディスク装置のセクタから書き込まれている情報を読み出す。この情報は、そのセクタが直前に使用された際(そのセクタが初めて使用される場合は、事前準備として書き込みを行った際)に書き込まれたものである。これらのシェアから、上述した再生成処理を適用して乱数
【0159】
を得る。この乱数は、事前生成により地点Zのディスク装置の対応するセクタに書かれている乱数に等しい。この乱数を用い、上述した分散処理によってシェアD
1、D
2を生成し、それぞれ地点X、Yのディスク装置に書き込む。シェアD
1とD
2のみを用いた復元処理は、上述したとおりである。
【0160】
この方式によれば,通常はシェアD
3にアクセスする必要はない。シェアD
1またはシェアD
2に誤りが生じたり、災害などで消失したりした場合のみ、シェアD
3を用いて復元処理や再生成処理を行えばよい。
【0161】
上述したシェアD
1とD
2から乱数Rを導出する処理も、排他的論理和のみで構成されており、シェアへのアクセスに要する時間に比べ、十分に短い時間で完了することが期待できる。自社と地点Xおよび地点Yを結ぶ回線が十分広帯域で、かつ、シェアD
1とシェアD
2が同時にアクセスできるならば、この分散処理に要する時間は、ほぼ、シェアの読み出しに要する時間と書き込みに要する時間との和となる。上述した乱数を事前生成する方法でも、分散処理に要する時間は、ほぼ、シェアD
3の読み出しに要する時間とシェアD
1およびシェアD
2の書き込みに要する時間との和となる。このことから、この方式を用いても分散処理に要する時間は、乱数を事前生成する方法と大差ないことがわかる。復元処理に要する時間は、どちらの方法においても、ほぼシェアの読み出しに要する時間となる。
【0162】
このように、この方式を用いれば、通常はシェアD
3にアクセスする必要がなく、自社と地点Zとの間における回線の帯域が十分に確保できない場合に有効である。
【0163】
<秘密情報の通信への適用>
これまで、秘密情報の長期的な安全性を確保する保管への適用を述べた。ここでは、
図3に示す本発明の秘密情報の通信への適用例に関して述べる。例えば、基地局40と移動端末41の無線によるリアルタイムな音声通信を想定する。
【0164】
まず、シェア数3の場合において、シェアD
3が秘密情報Sから全く独立に構成されている点に着目する。つまり、シェアD
3が乱数のみにより構成されており、秘密情報が発生するタイミングとは、完全に非同期なタイミングで生成可能である。よって、シェアD
3を基地局40と移動端末41との間で事前に共有しておくことが可能である。具体的には、基地局40においてシェアD
3を生成し、電気通信に依存しない方法により、例えば、郵便などによりSDXCカードなどメモリーカードの格納媒体を送付して、移動端末41との間でシェアD
3を共有しておく。
図3の点線はシェアD
3が基地局40から移動端末41へオフラインで渡されることを示す。シェアD
1はオンラインで送受信される。
【0165】
ここで注意を要するのは、シェアD
3を確実に1回のみの使用に留める制御である。つまり、移動端末41において音声を秘密情報Sとして、上述した分散処理を用い、例えば、シェアD
1を生成したタイミングにおいて、これに用いたシェアD
3を使い捨てとする。移動端末41においては、勿論、シェアD
2も生成可能であるが、この例では当該シェアを敢えて生成しない。
【0166】
移動端末41からシェアD
1のみを基地局40へ送ることにより、通信路上において、これ以外のシェアが出現することは無い。よって、音声は情報量的安全性を確保した状態で通信される。
【0167】
なお、移動端末41の紛失などが発生し、事前共有したシェアD
3の危殆化が懸念される場合、単に、基地局40にて保有している同一のシェアD
3を破棄するのみである。
移動端末41において生成しなかったシェアD
2は、シェアD
3を保有している基地局40において、シェアD
1が到着したタイミングで、上述した再生成処理を適用してリアルタイムに生成可能である。この際、基地局40においても、秘密情報である音声を復元する必要がない。
【0168】
また、通信相手が接続されている基地局40において、通信相手のシェアD
3を用い、上述した再構成処理を行うことにより通信相手のシェアD
1を生成することができる。この時、基地局40においても通信相手のシェアD
3を使い捨てとする必要がある。これにより、移動端末41において発生された秘密情報は、情報量的安全性を常時維持した状態で相手と通信される。
【0169】
一方、基地局40と移動端末41の間においては、秘密情報の可用性が担保されていない。しかし、一般にはパケット通信が利用されており、必要に応じてパケットの再送を行うことにより、実質的な問題は生じないと考えられる。なお、パケット再送時においても、シェアD
3の使い捨てに十分留意する必要がある。
【0170】
本発明の通信への適用には、シェアD
3の安全な事前共有が必須であるため、この事前共有の頻度を考察する。例えば、256GBのSDXCカードを利用し、音楽CDと同等な音声品質の確保を想定する。音声は、サンプリング周波数を44.1kHzとし、1回のサンプリングで16ビットの量子化を行う。また、移動端末41においては送信と受信が同量とする。この条件下では、少なく見積もっても約400時間の連続音声通信が可能となる。つまり、シェアD
3の事前共有間隔は、最大400時間あけることが可能となる。この時間は、移動端末41の個人的な利用において、特段の制限となるものでは無いと考えられる。