秘密分散装置、方法及びプログラム
【課題】 多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現する。
【解決手段】 閾値4以上の(k,n)閾値法の秘密分散装置であって、n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成し、秘密情報Sをn−1個に分割して分割秘密データK(1),…,K(n−1)を生成し、乱数データU(0,1),…,U(k−2,n−1)を生成し、分割秘密データ及び乱数データと生成行列Gとの行列の積を算出し、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、分散部分データD(j,i)を算出し、ヘッダ情報H(j)を生成し、ヘッダ情報H(j)及び分散部分データD(j,i)からなるn個の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布する。
【解決手段】 閾値4以上の(k,n)閾値法の秘密分散装置であって、n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成し、秘密情報Sをn−1個に分割して分割秘密データK(1),…,K(n−1)を生成し、乱数データU(0,1),…,U(k−2,n−1)を生成し、分割秘密データ及び乱数データと生成行列Gとの行列の積を算出し、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、分散部分データD(j,i)を算出し、ヘッダ情報H(j)を生成し、ヘッダ情報H(j)及び分散部分データD(j,i)からなるn個の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、(k,n)閾値法を用いた秘密分散装置、方法及びプログラムに係り、例えば多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現し得る秘密分散装置、方法及びプログラムに関する。
【背景技術】
【0002】
一般に、暗号化鍵などの秘密情報を紛失した場合の対策としては、予め秘密情報のコピーを作成しておくことが有効である。しかしながら、秘密情報のコピーを作成すると、盗難のリスクが高くなるという問題が生じる。このような問題を解決する手法として、1979年にシャミア(Shamir)が(k,n)閾値法と呼ばれる秘密分散法を提案している(例えば、非特許文献1参照)。
【0003】
(k,n)閾値法では、秘密情報をn個の分散情報に分割し、n個の分散情報の中から任意のk個を集めれば元の秘密情報を復元できるが、k−1個の分散情報からでは、元の秘密情報に関する情報を全く得られない。すなわち、(k,n)閾値法は、閾値kを境にした秘密情報の復元特性をもっている(なお、1<k<n)。
【0004】
このため、(k,n)閾値法によれば、k−1個以下の分散情報が漏洩しても元の秘密情報が安全であり、n−k個以下の分散情報を紛失しても元の秘密情報を復元できるといった管理を実現できる。
【0005】
しかしながら、シャミアの(k,n)閾値法では、秘密情報の分散や復元の処理を、多くの計算量を要する多項式補間により実現するので、大量のデータを秘密分散するためには、高速な計算機を必要とする不都合がある。
【0006】
一方、このような不都合を解決し、計算量を大幅に削減し得る(k,n)閾値法として、藤井らの方式と栗原らの方式が知られている(例えば、非特許文献2、非特許文献3参照)。ここで、藤井らの方式と栗原らの方式は、秘密情報の分散処理や復元処理を排他的論理和演算のみで実現するので、高速に実行可能となっている。
【0007】
しかしながら、藤井らの方式と栗原らの方式は、閾値kが2又は3に限定されるという不都合がある。
【非特許文献1】A. Shamir: “How to share a secret", Communications of the ACM, 22, 11, pp.612-613 (1979)
【非特許文献2】藤井吉弘,多田美奈子,保坂範和,栃窪孝也,加藤岳久: “高速な(2,n)閾値法の構成とシステムへの応用", CSS2005予稿集, (2005)
【非特許文献3】栗原淳,清本晋作,福島和英,田中俊昭: “XORを用いた(3,n)閾値秘密分散法", SCIS2007予稿集, (2007)
【発明の開示】
【発明が解決しようとする課題】
【0008】
以上説明したように、シャミアによる(k,n)閾値法では、多項式補間を用いるため、高速な計算機が必要となる不都合がある。一方、藤井らの方式と栗原らの方式は、閾値kが2又は3に限定されるという不都合がある。
【0009】
本発明は上記実情を考慮してなされたもので、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現し得る秘密分散装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
第1の発明は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置であって、1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段と、前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段と、前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段と、前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段とを備えた秘密分散装置である。
【0011】
第2の発明は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置であって、前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段と、前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段と、前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段と、前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段と、前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段とを備えた秘密分散装置である。
【0012】
なお、第1及び第2の各発明は、「装置」として表現したが、これに限らず、「プログラム」、「プログラムを記憶した記憶媒体」又は「方法」として表現してもよい。
【0013】
(作用)
第1の発明は、生成行列Gを用いて分散部分データを生成する構成により、秘密情報の分散や復元の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【0014】
第2の発明は、前述した生成行列Gと同様に分散部分データを生成する構成により、秘密情報の分散の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【発明の効果】
【0015】
以上説明したように本発明によれば、多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現することができる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の各実施形態について図面を用いて説明する。なお、以下の各装置は、装置毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置のコンピュータにインストールされ、対応する装置の機能を実現させるためのプログラムが用いられる。
【0017】
(第1の実施形態)
図1は本発明の第1の実施形態に係る秘密分散システムの構成を示す模式図である。この秘密分散システムは、1台のクライアント装置100及びn−1台の保管サーバ装置200,300,…,n00が互いにインターネット等のネットワークNWを介して接続されている。
【0018】
これら合計n台の装置100,200,300,…,n00は、(k,n)閾値法におけるn人のメンバに対応する。特に、n台の装置100,200,…,n00が個別に有するn個の保存部101,201,…,n01は、n人のメンバが個別に有するn個の記憶装置に対応する。各装置100,200,300,…,n00には、それぞれ分散情報の配布順番を示すj番号(行番号)が割当てられている。例えば、クライアント装置100には、j=0番目が割り当てられており、保管サーバ装置200にはj=1番目が割り当てられている。保管サーバ装置300にはj=2番目が割り当てられ、…、保管サーバ装置n00にはj=n−1番目が割り当てられている。
【0019】
ここで、クライアント装置100は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn台の装置100,200,…,n00に配布し、且つ、n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置を実現するものである。なお、分散情報の個数はk個以上であればよい。この閾値kは2以上が使用可能であるが、非特許文献2,3との相違を明確にする観点から、本実施形態では4以上を用いている。例えばk=4,n=4とし、秘密情報Sをn−1(=3)個に分割して後述するK(1),K(2),K(3)とし、配布した4個の分散情報D(0),D(1),D(2),D(3)から秘密情報Sを復元してもよい。
【0020】
クライアント装置100は、保存部101、入力部102、生成行列生成部103、逆行列生成部104、分散部分データ生成部105、ハッシュ値生成部106、元データ復元部107、ハッシュ値検証部108、制御部109、出力部110及び通信部111が互いにバスを介して接続されている。
【0021】
保存部101は、制御部109から読出/書込可能なハードウェア資源としての記憶装置であり、後述する分散情報D(0)〜D(n−1)が配布される前に、秘密情報Sが一時的に記憶される。また、保存部101は、分散情報D(0)〜D(n−1)が作成されると、分散情報作成情報が記憶され、分散情報が配布された後、j=0番目の分散情報D(0)が記憶されると共に、秘密情報Sが削除される。ここで、分散情報作成情報は、分散情報D(j)の識別情報jと、分散情報D(j)の配布先識別情報(装置ID、装置のアドレス情報等)とが互いに関連付けられた情報である。
【0022】
入力部102は、キーボード又はマウス等の通常の入力デバイスであり、操作者の操作により、分散処理又は復号処理の開始等の命令や、秘密情報S等の情報をクライアント装置100内に入力する機能をもっている。
【0023】
生成行列生成部103は、制御部109により制御され、図2にk=4,n=5とした(4,5)閾値法の例を示す如き、1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する機能をもっている。但し、生成行列Gのサイズはk(n−1)行×n(n−1)列である。GF(2)は位数2の有限体である。フルランクとは、行列の基本変形を施して得られるランク(rank:階数)がフル(full:満杯)(=k(n−1))であり、線形独立であることを意味している。
【0024】
具体的には、生成行列生成部103は、入力された分散数n及び閾値kが保存部101に記憶されたとき、保存部101内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、第0行の下の(n−1)行×(n−1)列が単位行列とは左右対称な行列であるn行×(n−1)列の第1小行列を生成する処理と、最も左側の第1小行列の各列を上に1回巡回シフトさせたn行×(n−1)列の新たな第1小行列を当該巡回シフト前の第1小行列の左側に隣接させる第1隣接処理と、第1隣接処理をn−1回実行し、n行×n(n−1)列の第1部分行列を生成する処理と、この第1部分行列の第1行目から第n−1行目を生成行列Gの第0行目から第n-2行目に割り当てて、生成行列Gの第0行目から第n−2行目までの部分行列を生成する第1部分行列割当て処理と、第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する処理と、最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接処理(但し、j=0,1,…,k−2)と、第2隣接処理をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成処理と、この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目に割り当てて、生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目までの部分行列を生成する第2部分行列割当て処理(但し、j=0,1,…,k−2)と、第2隣接処理及び第2部分行列割当て処理におけるjの値が初期値0から最終値k−2までの間、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理を実行する毎に当該jの値を1だけ増加させつつ、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理をk−1回実行する処理と、第1部分割当て処理により割り当てられた第0行目から第n−2行目までの部分行列と、k−1回の第2部分割当て処理により割り当てられた第n−1行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、k(n−1)行×n(n−1)列の生成行列Gを得る処理とを実行する機能をもっている。
【0025】
逆行列生成部104は、制御部109により制御され、生成行列Gの逆行列を生成するものであり、例えば図3にk=4,n=5とした(4,5)閾値法の例を示す如き、収集されたk個の列ベクトルから形成される生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))の逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’を算出する機能をもっている。
【0026】
ここで、g(D(*))は、*個目の分散情報D(*)を算出するのに使用した生成行列Gの部分行列であり、列ベクトルともいう。また、(i_1)の表記は、任意の1個目を表し、(i_j)の表記は任意のj個目を表し、(i_k)の表記は任意のk個目を表している。すなわち、カッコ内の左側のiと下線“i_”は、“任意の”を表している(表記“i_”のiは行番号ではない)。また、例えばD(i_1)は、任意の1個目のD(*)なので、D(0)〜D(4)のいずれでもよい。
【0027】
分散部分データ生成部105は、制御部109により制御され、保存部101に一時的に記憶された秘密情報Sに基づいて、図4、図5に一例(k=4,n=5の例)を示すように、n(n−1)個の分散部分データD(j,i)を生成する機能をもっている。具体的には、分散部分データ生成部105は、以下の各機能(f105−1)〜(f105−3)をもっている。
【0028】
(f105−1) 保存部101に記憶された秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する機能。
【0029】
(f105−2) 各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、1≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する機能。なお、各乱数U(h,g)は、互いに独立である。
【0030】
(f105−3) 分割秘密データK(1),…,K(j),…,K(n−1)、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)、生成行列Gに基づいて、行列(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と生成行列Gの積を算出し(但し、GF(2)上の演算)、計算結果のj×(n−1)+i列目のデータをD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)を算出する(但し、0≦j≦n−1,0≦i≦n−2)機能。
【0031】
ハッシュ値生成部106は、制御部109により制御され、制御部109からバスを介してヘッダ情報H(j)が入力されると、ヘッダ情報H(j)のハッシュ値h(H(j))を生成し、得られたハッシュ値h(H(j))をバスに出力する機能をもっている。なお、ハッシュ値生成部106は、ヘッダ情報H(j)を検証しない場合、省略可能である。
【0032】
元データ復元部107は、制御部109に制御され、n台の装置100,…,n00に配布されたn個の分散情報D(0)〜D(n−1)のうち、任意のk個の分散情報D(i_1),…,D(i_j),…,D(i_k)(但し、0≦i_j≦n−1)に基づいて、秘密情報Sを復元する秘密情報復元機能をもっている。具体的には元データ復元部107は、以下の各機能(f107−1)〜(f107−2)をもっている。
【0033】
(f107−1) 収集されたk個の分散情報D(i_1),…,D(i_j),…,D(i_k)及び生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’に基づき、行列(D(i_1),…,D(i_j),…,D(i_k))と逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’の積を算出し、計算結果のi列目のデータをK(i+1)に割り当てて、分割秘密データK(1),…,K(n−1)とする機能。
【0034】
(f107−2) 復元されたn−1個の分割秘密データK(1),…,K(n−1)を互いに連接することにより、秘密情報S=K(1)‖K(2)‖…‖K(n−1)を復元する機能(但し、‖は連接を表す記号)。
【0035】
ハッシュ値検証部108は、制御部109により制御され、制御部109からバスを介してヘッダ情報H(j)及びそのハッシュ値h(H(j))が入力されると、ハッシュ値h(H(j))に基づいてヘッダ情報H(j)を検証し、検証結果をバスに出力する機能をもっている。検証内容は、ヘッダ情報H(j)から計算したハッシュ値と、入力されたハッシュ値h(H(j))との一致により、ヘッダ情報H(j)を正当と判定する方式である。なお、ハッシュ値検証部108は、ヘッダ情報H(j)を検証しない場合、省略可能である。
【0036】
ここで、ヘッダ情報H(j)は、図6の上方に一例を示すように、行番号jを示すデータ識別子、ヘッダのサイズを表すヘッダーサイズ、元データのサイズを表す元データサイズm、元の秘密情報Sの分割数を示す分割数n−1、分散部分データD(j,i)の処理単位ビットを示す処理単位ビット長a、乱数R(j,i)のデータサイズを示す乱数データサイズa、分割秘密データK(j)のサイズを表す分割データサイズa、パディングの有無やアルゴリズムを表すパディングアルゴリズム、ハッシュアルゴリズム情報(オプション)、生成行列Gの部分行列g(D(j))(オプション)、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’(オプション)(但し、必ずg(D(j))を含む)などが考えられる。
【0037】
ハッシュアルゴリズム情報は、ヘッダ情報のハッシュ値を算出し、ヘッダ情報の原本性を保証する場合などに追加される。すなわち、ハッシュアルゴリズム情報は、セキュリティの要件などに応じて追加又は省略される。但し、セキュリティの要件として予めシステムでハッシュアルゴリズムを決めている場合には、ハッシュアルゴリズム情報は、ヘッダ情報から省略可能である。
【0038】
なお、分散情報D(j)のデータフォーマットは、図6の下方に一例を示すように、ヘッダ情報H(j)、そのハッシュ値h(H(j))、n−1個の分散部分データD(j,0),D(j,1),…,D(j,n-2)から構成されている。ここで、ハッシュ値h(H(j))は、オプション(option)であり、ヘッダ情報H(j)内のハッシュアルゴリズム情報と同様に、セキュリティの要件に応じて省略可能となっている。
【0039】
制御部109は、入力部102から入力される命令に基づいて、後述する図7、図8及び図17のフローチャートに基づいて、各部101,103〜108,110,111を制御する機能をもっている。また、制御部109は、例えば、以下の機能(f109−1)〜(f109−2)をもっている。
【0040】
(f109−1) 分散部分データ生成部105により生成された各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する機能。
【0041】
(f109−2) 互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を通信部111を介して個別にn台の装置100,200,…,n00に配布する機能。なお、制御部109は、分散情報D(0)〜D(n−1)の漏洩防止の観点から、分散情報D(0)〜D(n−1)を暗号化した状態で配布してもよい。
【0042】
出力部110は、ディスプレイ装置やプリンタ装置等の通常の出力デバイスであり、制御部109により制御され、命令等の入力画面や、復元後の秘密情報S等の出力画面等を出力する機能をもっている。
【0043】
通信部111は、制御部109により制御され、クライアント装置100とネットワークNWとの間の通信インターフェイス機能をもっている。
【0044】
一方、各保管サーバ装置200〜n00について説明する。
各保管サーバ装置200〜n00は、記憶する分散情報D(1)〜D(n−1)が互いに異なる他は互いに同一構成のため、ここではn=2の保管サーバ装置200を代表例に挙げて説明する。
【0045】
保管サーバ装置200は、保存部201及び通信部202を備えている。
【0046】
保存部201は、通信部202から読出/書込可能なハードウェア資源としての記憶装置であり、クライアント装置100から配布された分散情報D(1)(=D(n−1)でn=2)が記憶される。
【0047】
通信部202は、クライアント装置100から配布された分散情報D(1)を保存部201に書き込む機能と、クライアント装置100から要求された分散情報D(1)を保存部201から読み出してこの分散情報D(1)をクライアント装置100に返信する機能とをもっている。
【0048】
なお、通信部202は、分散情報D(1)の漏洩防止の観点から、クライアント装置100の認証機能を有してもよく、この場合、クライアント装置100の認証の後、分散情報D(1)を返信する構成として設けられる。
【0049】
ここで、各保管サーバ装置200,300,…,n00は、他のクライアント装置や、USB(Universal Serial Bus)メモリ、携帯電話、PDA(Personal Digital Assistants:携帯情報端末)に置き換え可能であり、あるいは外付けHDD(Hard Disc Drive: 固定磁気ディスク装置)などのように、コンピュータ以外の他の装置と置き換えることも可能である。
【0050】
なお、各保管装置200,300,…,n00は、他のクライアント装置に置き換えられる場合、前述同様に、分散部分データ生成部105や元データ復元部107などの機能を保持していてもよい。すなわち、秘密情報を復元できる装置は、クライアント装置100以外にあってもよい。例えば、各保管装置200,300,…,n00のうちの任意の台数の装置j00,…が秘密情報を復元できる構成としてもよい。
【0051】
なお、分散の場合も同様に、秘密情報を分散できる装置は、クライアント装置100以外にあってもよい。例えば、各保管装置200,300,…,n00のうちの任意の台数の装置j00,…が分散情報を配布できる構成としてもよい。
【0052】
また、各保管装置200,300,…,n00がUSBメモリや携帯電話などのように物理的な接続手段又は無線通信手段を有する装置に置き換えられる場合、ネットワークNWを省略してもよい。上述した各保管装置200,300,…,n00を他の装置に置き換えた変形例は、以下の各実施形態でも同様に適用可能である。
【0053】
次に、以上のように構成された秘密分散システムの動作を説明する。
始めに、n人のメンバ(初期メンバ)に、秘密情報Sを(k,n)閾値法で分散した分散情報D(j)を配布する場合を考える。このときnは素数を選ばなければならない。従って、合成数のn人に分散情報を配布したい場合は、n<n’でありかつn’が素数となるようなn’について秘密分散法を適用することになる。以下では(k,n)閾値法についての一例を示す。
【0054】
(分散処理の動作)
クライアント装置100においては、分散情報D(0)〜D(n−1)を配布する前に、ビット長mの秘密情報Sが一時的に保存部101に記憶されているとする。
【0055】
このとき、クライアント装置100においては、図7に示すように、操作者の操作により、分散処理の開始命令が入力部102から入力されたとする(ST1)。
【0056】
クライアント装置100は、この開始命令に基づいて、分散処理を開始する。制御部109は、分散数をn、閾値をk、秘密情報Sのビット長をm、処理単位ビットをaと定める(ST1)。なお、秘密情報Sのビット長mは、保存部101内の秘密情報Sから分かる。処理単位ビットaは、分散データ生成部13の仕様により予め定まっている。
【0057】
続いて、制御部109は、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaを超える(m/(n−1)>a)か否かを判定し(ST2)、処理単位ビットaを超える場合、nより大きい素数n’を探索し、得られた素数n’を分散数nと置き換えて(ST3)、ステップST1に戻る。
【0058】
一方、ステップST2の判定結果が否の場合、制御部109は、分散数n及び閾値kを生成行列生成部103に入力する。
【0059】
生成行列生成部103は、分散数n、閾値kの生成行列G(但し、任意のk個の列ベクトルがフルランク、行列Gのサイズはk(n−1)×n(n−1)、列ベクトルのサイズはk(n−1)×(n−1))を制御部109に出力する(ST4)。
【0060】
以下、ステップST4における生成行列Gの生成処理の手順を図8〜図15を用いて説明する。
【0061】
図8に示すように、生成行列生成部103は、分散数n、閾値kの生成行列Gを保存部101から検索する(ST4−1)。該当する生成行列Gが存在する場合、ST4−8へ進む。該当する生成行列Gが存在しない場合、図9に示すように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列と左右対称な行列((0,n-2)−要素,(1,n-3)−要素,…,(n-3,1)−要素,(n-2,0)−要素が全て1で、他の要素は全て0の行列)から構成されるn行×(n−1)列の第1小行列iを生成する(ST4−2)。
【0062】
続いて、図10に示すように、(最も左側の)第1小行列iの各列を上に1回巡回シフトさせたn×(n−1)行列を新たな第1小行列i−1として、当該巡回シフト前の第1小行列iの左側に隣接させる(ST4−3)。iがn−1から1までST4−3を繰り返して、n×n(n−1)の第1部分行列を生成する。この第1部分行列の第1行目から第n−1行目を生成行列Gの第0行目から第n-2行目に割り当てる(ST4−4)。(4,5)閾値法の例では、生成行列Gの0行目から3行目までの部分行列が生成される。
【0063】
生成行列生成部103は、図11に示すように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列から構成されるn行×(n−1)列の第2小行列iを生成する(ST4−5)。
【0064】
続いて図12〜図15に示すように、(最も右側の)第2小行列iの各列を下にj回巡回シフトさせたn×(n−1)行列を新たな第2小行列i+1として、当該巡回シフト前の第2小行列iの右側に隣接させる(ST4−6)。iが1からn−1までST4−6を繰り返して、n×n(n−1)の第2部分行列を生成する。この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)(j+1)行目から(n−1)(j+1)+n−2行目に割り当てて、jをインクリメントする(ST4−7)。jが0からk−2までST4−6〜ST4−7を繰り返して生成行列Gを生成する。(4,5)閾値法の例では、生成行列Gは図2に示すような構成となる。
【0065】
しかる後、生成行列生成部103は、得られた生成行列Gを制御部109に出力する(ST4−8)。
【0066】
以上により生成行列Gの生成処理が完了する。
【0067】
ステップST4の完了後、制御部109は、秘密情報S、生成行列G、分散数n及び閾値kを分散部分データ生成部105に入力する。
【0068】
分散部分データ生成部105は、図7に示すように、秘密情報S及び分散数nに基づいて、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaと等しいか(m/(n−1)=a)か否かを判定する(ST5)。
【0069】
ステップST4の判定結果が否の場合、分散部分データ生成部105は、秘密情報Sをn−1個の分割秘密データK(1)〜K(n−1)に分割した際の末尾の分割秘密データK(n−1)をパディングする(パディング有)とし(ST6)、ステップST7に進む。
【0070】
なお、パディングは、必ずしも末尾の分割秘密データK(n-2)に行わなくても良く、他の分割秘密データK(j)に行っても良い。但し、本実施形態では、秘密情報Sは4個にちょうど分割できた場合(パディング無し)を例に挙げて述べる。また、図2に示した如き、分散数n=5,閾値k=4の(4,5)閾値法を例に挙げて述べる。
【0071】
ステップST5の判定の結果、処理単位ビットaと等しい場合、分散部分データ生成部105は、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する(ST7)。(4,5)閾値法の例では、分割秘密データK(1),…,K(4)が生成される。
【0072】
次に、各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦g≦k−2)と列番号(但し、1≦h≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する(ST7)。(4,5)閾値法の例では、乱数データU(0,1),…,U(2,4)が生成される。
【0073】
分割秘密データK(1),…,K(j),…,K(n−1)、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)及び生成行列Gに基づいて、n(n−1)個の分散部分データ(D(0,0),…,D(j,i),…,D(n−1,n−2))=(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))Gを算出する(ST8)。なお、処理単位ビットaにあわせて、生成行列Gの要素が1の場合はa×aのGF(2)上の単位行列、0の場合はa×aのGF(2)上のゼロ行列として扱う。(4,5)閾値法の例では、図4、図5に示したように、20個の分散部分データD(j,i)が生成される。例えば、分散部分データD(0,0)の算出過程を図16に示す。
【0074】
しかる後、分散部分データ生成部105は、得られた分散部分データn(n−1)個の分散部分データD(j,i)を制御部109に出力する。
【0075】
制御部109は、各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する(ST9)。ヘッダ情報H(j)には、K(n−1)に対するパディングの有無、元データのサイズなどの情報が含まれる。
【0076】
制御部109は、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別にn個の保存部101,201,…,n01に配布するように、分散情報D(0)を保存部101に書き込み、分散情報D(1),…,D(n−1)を個別に保管サーバ装置200,…,n00に配布する(ST10)。(4,5)閾値法の例では、5個の分散情報D(0),…,D(4)が配布される。各保管サーバ装置200〜500では、配布された分散情報D(1),…,D(4)を保存部201〜501に記憶する。
【0077】
以上により、秘密情報の分散処理が完了する。
【0078】
なお、(4,5)閾値法において、必ずしも5個の分散情報D(0)〜D(4)を配布する必要は無い。例えば4個の分散情報D(0)〜D(3)を配布しておき、残り1個の分散情報D(4)を新メンバが追加されたときに新メンバに配布してもよい。
【0079】
(復元処理の動作)
クライアント装置100においては、操作者の操作により、復元処理の開始命令が入力部102から入力されたとする。
【0080】
クライアント装置100は、この開始命令に基づいて、図17に示すように、復元処理を開始する。制御部109は、n台の装置100,…,n00に配布したn個の分散情報D(0)〜D(n−1)のうち、任意のk個の分散情報D(i_1),…,D(i_j),…,D(i_k)(但し、0≦i_j≦n−1)を収集する(ST11)。
【0081】
制御部109は、分散情報D(i_1),…,D(i_j),…,D(i_k)のヘッダ情報H(i_1),…,H(i_j),…,H(i_k)から生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を取得する(ST12)。取得できた場合は、ST15へ進む。取得できなかった場合は、H(i_1),…,H(i_j),…,H(i_k)から生成行列Gのk個の列ベクトルg(D(i_1)),…,g(D(i_j)),…,g(D(i_k)を得ると、このk個の列ベクトルから生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))を形成して取得する(ST13)。
【0082】
次に、制御部109は、生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))を逆行列生成部104に入力する。
【0083】
逆行列生成部104は、生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))から生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を算出する(ST14)。
【0084】
(4,5)閾値法の例では、分散情報D(1),D(2),D(3),D(4)に対応する生成行列Gの部分行列((g(D(1)),g(D(2)),g(D(3)),g(D(4)))は図2に示したような行列になり、分散情報D(1),D(2),D(3),D(4)に対応する生成行列Gの部分逆行列((g(D(1)),g(D(2)),g(D(3)),g(D(4)))−1は図3に示したような行列となる。
【0085】
逆行列生成部104は、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を出力する(ST15)。
【0086】
制御部109は、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1と分散情報D(i_1),…,D(i_j),…,D(i_k)を元データ復元部107に入力する。
【0087】
元データ復元部107は、分散情報D(i_1),…,D(i_j),…,D(i_k)のヘッダ情報H(i_1),…,H(i_j),…,H(i_k)から、図17に示すように、分散情報D(i_1),…,D(i_j),…,D(i_k)であることを解析する(ST16)。(4,5)閾値法の例では、例えば分散情報D(1),D(2),D(3),D(4)であることを確認する。
【0088】
次に、分散情報からなる行列(D(i_1),…,D(i_j),…,D(i_k))と生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))−1の行列の積を算出する(ST17)。なお、処理単位ビットaにあわせて、生成行列Gの要素が1の場合はa×aのGF(2)上の単位行列、0の場合はa×aのGF(2)上のゼロ行列として扱う。
【0089】
次に、計算結果のi+1列目のデータをK(i)に割り当てて、分割秘密データK(1),…,K(n−1)を算出する。(4,5)閾値法の例では、分散情報D(1),D(2),D(3),D(4)から復元した場合、図18〜図22に示したように、分割秘密データK(1),K(2),K(3),K(4)が算出される。
【0090】
制御部109は、分割秘密データK(1),…,K(n−1)に対して、ヘッダ情報H(i),H(j)に基づいて、パディングなどの処理があれば除去する。
【0091】
しかる後、制御部109は、分割秘密データK(1),…,K(n−1)を互いに連接することにより、秘密情報S=K(1)‖K(2)‖…‖K(n−1)を復元する(ST18)。この例では、秘密情報S=K(1)‖K(2)‖…‖K(4)が復元される。
【0092】
上述したように本実施形態によれば、生成行列Gを用いて分散部分データを生成する構成により、秘密情報の分散や復元の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【0093】
また、本実施形態は、非特許文献2,3との相違を明確にする観点から閾値4以上として述べたが、閾値が2又は3でも実施できることはいうまでもない。このように本実施形態は、分散数n及び閾値kが限定されないので、各種のシステムへの応用範囲を広げることができる。
【0094】
また、本実施形態の分散・復元処理は、多項式補間が不要であり、XORのみで実行するため、前述した高速に実行可能なことに加え、大容量データを扱うのに好適であり、低スペック機器でも秘密分散を実行できる利点を有する。
【0095】
なお、本実施形態は、生成行列生成部103により生成行列Gを生成し、逆行列生成部104により逆行列を生成した場合について説明したが、これに限らず、分散数n及び閾値kが予め分かっていれば、図23に示すように、生成行列生成部103及び逆行列生成部104に代えて、予め生成行列G及びGの逆行列のデータが保存された読出/書込可能な記憶装置としての行列保存部112を備えた構成に変形してもよい。このように変形しても、生成行列G及び逆行列による(k,n)閾値法を実現することができる。
【0096】
また同様に、分散数nと閾値kとの組合せ毎に、予め生成行列G及びGの逆行列のデータを行列保存部112に保存しておき、入力されたn,kの値を検索キーにして、行列保存部112から生成行列G及びGの逆行列のデータを読み出す構成に変形してもよいことはいうまでもない。
【0097】
(第2の実施形態)
図24は本発明の第2の実施形態に係る秘密分散システムの構成を示す模式図である。
【0098】
本実施形態は、第1の実施形態の変形例であり、分散アルゴリズムにより分散可能な(k,n)閾値法の秘密分散システムとなっている。これに伴い、前述した生成行列生成部103及び逆行列生成部104が省略され、分散部分データ生成部105a及び制御部109aの機能が変更されている。
【0099】
分散部分データ生成部105aは、制御部109aにより制御され、保存部101に一時的に記憶された秘密情報Sに基づいて、図4、図5に一例(k=4,n=5の例)を示すように、n(n−1)個の分散部分データD(j,i)を生成する機能をもっている。具体的には、分散部分データ生成部105aは、以下の各機能(f105a−1)〜(f105a−6)をもっている。
【0100】
(f105a−1) 保存部101に記憶された秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する機能。
【0101】
(f105a−2) 各分割秘密データのサイズと同一サイズのゼロ値データを作成し、作成結果に行番号j=0を割り当てて分割秘密データK(0)を生成する機能。
【0102】
(f105a−3) 各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する機能。
【0103】
(f105a−4) 各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する機能。なお、各乱数U(h,g)は、互いに異なる値である。
【0104】
(f105a−5) 乱数データU(0,0),…,U(h,g),…,U(k−2,n−1)に基づいて、n×(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する機能(但し、(+)は排他的論理和を表す記号)。
【0105】
なお、U(h,h×j+i+1(mod n))=U(h,0)(=0)の場合、必ずしもU(h,0)の項を計算する必要はなく、例えばU(0,3)(+)U(1,4)(+)U(2,0)をU(0,3)(+)U(1,4)としてもよい。このように、U(h,0)(=0)の場合、U(g,0)の項を計算する必要が無いことは、本明細書中の他の箇所でも同様である。
【0106】
(f105a−6) 分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する機能(但し、(+)は排他的論理和を表す記号)。
【0107】
なお、K(j−i(mod n))=K(0)(=0)の場合、必ずしもK(0)の項を計算する必要は無く、例えばK(0)の項の計算無しにD(j,i)=R(j,i)としてもよい。このように、K(0)(=0)の場合、必ずしもK(0)の項を計算する必要が無いことは、本明細書中の他の箇所でも同様である。
【0108】
制御部109aは、入力部102から入力される命令に基づいて、後述する図25及び図26に示すフローチャートに基づいて、各部101,105a〜108,110,111を制御する機能をもっている。
【0109】
次に、以上のように構成された秘密分散システムの動作を説明する。ここでは(k,n)閾値法を例に挙げて述べる。
【0110】
始めに、n人のメンバ(初期メンバ)に、秘密情報Sを(k,n)閾値法で分散した分散情報D(j)を配布する場合を考える。このときnは素数を選ばなければならない。従って、合成数のn人に分散情報を配布したい場合は、n<n’でありかつn’が素数となるようなn’について秘密分散法を適用することになる。以下では(k,n)閾値法についての一例を示す。
【0111】
(分散処理の動作)
クライアント装置100においては、分散情報D(0)〜D(n−1)を配布する前に、ビット長mの秘密情報Sが一時的に保存部101に記憶されているとする。
【0112】
このとき、クライアント装置100においては、図25に示すように、操作者の操作により、分散処理の開始命令が入力部102から入力されたとする。
【0113】
クライアント装置100は、この開始命令に基づいて、分散処理を開始する。制御部109aは、秘密情報Sのビット長をm、分散数をn、処理単位ビットをaと定める(ST21)。なお、秘密情報Sのビット長mは、保存部101内の秘密情報Sから分かる。処理単位ビットaは、分散データ生成部13の仕様により予め定まっている。
【0114】
続いて、制御部109aは、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaを超える(m/(n−1)>a)か否かを判定し(ST22)、処理単位ビットaを超える場合、nより大きい素数n’を探索し、得られた素数n’を分散数nと置き換えて(ST23)、ステップST21に戻る。
【0115】
一方、ステップST22の判定の結果が否の場合、制御部109aは、秘密情報S及び分散数nを分散部分データ生成部105aに入力する。
【0116】
分散部分データ生成部105aは、秘密情報S及び分散数nに基づいて、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaと等しいか(m/(n−1)=a)か否かを判定する(ST24)。
【0117】
ステップST24の判定結果が否の場合、分散部分データ生成部105aは、秘密情報Sをn−1個の分割秘密データK(1)〜K(n−1)に分割した際の末尾の分割秘密データK(n−1)をパディングする(パディング有)とし(ST25)、ステップST26に進む。
【0118】
なお、パディングは、必ずしも末尾の分割秘密データK(n-2)に行わなくても良く、他の分割秘密データK(j)に行っても良い。但し、本実施形態では、秘密情報Sは4個にちょうど分割できた場合(パディング無し)を例に挙げて述べる。また、図4、図5に示した如き、分散数n=5,閾値k=4の(4,5)閾値法を例に挙げて述べる。
【0119】
ステップST24の判定の結果、処理単位ビットaと等しい場合、分散部分データ生成部105aは、図26に示すように、ステップST26を開始する。
【0120】
すなわち、分散部分データ生成部105aは、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する。(4,5)閾値法の例では、分割秘密データK(1),…,K(4)が生成される。
【0121】
また、分散部分データ生成部105aは、各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて分割秘密データK(0)を生成する(ST26−1)。
【0122】
さらに、分散部分データ生成部105aは、各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する。
【0123】
次に、各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する(ST26−2)。
【0124】
そして、乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、乱数データR(j,i)=0としつつ(ST26−3)、hを0からk−2まで繰り返してn(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する(ST26−4)。(4,5)閾値法の例では、乱数データR(0,0),…,R(4,3)が生成される。
【0125】
次に、分散部分データ生成部105aは、分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び乱数データR(0,0),…,R(j,i),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する(ST27)。この算出は、行番号jを0からn−1まで繰り返すと共に、列番号iを0からn-2まで繰り返すことにより行う。(4,5)閾値法の例では、図4、図5に示したように、20個の分散部分データD(j,i)が生成される。
【0126】
しかる後、分散部分データ生成部105aは、得られた分散部分データn(n−1)個の分散部分データD(j,i)を制御部109aに出力する。
【0127】
制御部109aは、各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する(ST28)。ヘッダ情報H(j)には、K(n−1)に対するパディングの有無、元データのサイズなどの情報が含まれる。
【0128】
制御部109aは、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別にn個の保存部101,201,…,n01に配布するように、分散情報D(0)を保存部101に書き込み、分散情報D(1),…,D(n−1)を個別に保管サーバ装置200,…,n00に配布する(ST29)。
【0129】
(4,5)閾値法の例では、5個の分散情報D(0),…,D(4)が配布される。各保管サーバ装置200〜500では、配布された分散情報D(1),…,D(4)を保存部201〜501に記憶する。
【0130】
以上により、秘密情報の分散処理が完了する。
【0131】
なお、(4,5)閾値法において、必ずしも5個の分散情報D(0)〜D(4)を配布する必要は無い。例えば4個の分散情報D(0)〜D(3)を配布しておき、残り1個の分散情報D(4)を新メンバが追加されたときに新メンバに配布してもよい。
【0132】
上述したように本実施形態によれば、第1の実施形態の生成行列Gと同様の結果を得るアルゴリズムを用いて分散部分データを生成する構成により、秘密情報の分散の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現することができる。
【0133】
すなわち、本実施形態によれば、生成行列Gを用いずに、第1の実施形態と同様の作用効果を得ることができる。
【0134】
(第3の実施形態)
次に、本発明の第3の実施形態に係る秘密分散システムについて説明する。
本実施形態は、第1の実施形態の変形形態であり、第1の実施形態とは異なるビットパターンの生成行列Gと、その生成行列Gを利用した分散処理とに関する。
【0135】
ここで、生成行列Gは、図27にk=4,n=5とした(4,5)閾値法の例を示すように、図11〜図15に示したj=0〜2の場合の第4〜15行目と同じ値の第0〜11行目を有し、図28及び図29に示す如きj=3の場合と同じ値の第12〜15行目を有している。
【0136】
この生成行列Gは、図30に示すように、図8の第1小行列iに関するステップST4−2〜ST4−4を省略し、図8の第2小行列iに関するステップST4−1,ST4−5,ST4−6と同様の各ステップST4−1,ST4−5及びST4−6と、図8のステップST4−7に代えて割当て行をGの第(n−1)j行目から第(n−1)j+n−2行目としたステップST4−7’とを備え、且つjが0からk−1までステップST4−6及びST4−7’を繰り返し実行する生成方法により生成される。
【0137】
すなわち、生成行列生成部103は、入力された分散数n及び閾値kが保存部101に記憶されたとき、保存部101内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する処理と、最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接処理(但し、j=0,1,…,k−1)と、第2隣接処理をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成処理と、この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)j行目から第(n−1)j+n−2行目に割り当てて、生成行列Gの第(n−1)j行目から第(n−1)j+n−2行目までの部分行列を生成する第2部分行列割当て処理(但し、j=0,1,…,k−1)と、第2隣接処理及び第2部分行列割当て処理におけるjの値が初期値0から最終値k−1までの間、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理を実行する毎に当該jの値を1だけ増加させつつ、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理をk回実行する処理と、k回の第2部分割当て処理により割り当てられた第0行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、k(n−1)行×n(n−1)列の生成行列Gを得る処理とを実行する機能をもっている。
【0138】
なお、本実施形態においては、第1小行列に関するステップST4−2〜ST4−4を省略したため、上述した第2小行列、第2部分行列、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理から「第2」の語句を省略してもよい。
【0139】
また、生成行列Gの変更に伴い、図31のステップST8’及び図32に示すように、分散部分データ算出時の生成行列Gに左側から積算される行列において、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)の右側に分散秘密データK(1)〜K(n−1)が配置される。この配置は、前述した図7のステップST8とは逆の配置となっている。
【0140】
分散部分データD(j,i)は、図33及び図5に一例(n=4,n=5)を示すように、n(n−1)個が分散部分データ生成部105により生成される。
【0141】
ここで、分散部分データ生成部105の機能(f105−3)は、以下の機能(f105−3’)のようになる。
【0142】
(f105−3’) 乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)、分割秘密データK(1),…,K(j),…,K(n−1)、生成行列Gに基づいて、行列(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と生成行列Gの積を算出し(但し、GF(2)上の演算)、計算結果のj×(n−1)+i列目のデータをD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)を算出する(但し、0≦j≦n−1,0≦i≦n−2)機能。
【0143】
次に、以上のように構成された秘密分散システムの動作を説明する。
【0144】
(分散処理の動作)
いま、前述同様に、図31に示すステップST1〜ST3が実行され、ステップST4’に進むとする。
【0145】
生成行列生成部103は、分散数n、閾値kの生成行列G(但し、任意のk個の列ベクトルがフルランク、行列Gのサイズはk(n−1)×n(n−1)、列ベクトルのサイズはk(n−1)×(n−1))を制御部109に出力する(ST4’)。
【0146】
以下、ステップST4’における生成行列Gの生成処理の手順を図28〜図30を用いて説明する。
【0147】
図30に示すように、生成行列生成部103は、分散数n、閾値kの生成行列Gを保存部101から検索する(ST4−1)。該当する生成行列Gが存在する場合、ST4−8へ進む。該当する生成行列Gが存在しない場合、図11に示したように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列から構成されるn行×(n−1)列の第2小行列iを生成する(ST4−5)。
【0148】
続いて図12〜図14の上方及び図28に示したように、(最も右側の)第2小行列iの各列を下にj回巡回シフトさせたn×(n−1)行列を新たな第2小行列i+1として、当該巡回シフト前の第2小行列iの右側に隣接させる(ST4−6)。iが1からn−1までST4−6を繰り返して、n×n(n−1)の第2部分行列を生成する。この第2部分行列の第1行目から第n−1行目を図29に示すように生成行列Gの第(n−1)j行目から(n−1)j+n−2行目に割り当てて、jをインクリメントする(ST4−7’)。jが0からk−1までST4−6〜ST4−7’を繰り返して生成行列Gを生成する。(4,5)閾値法の例では、生成行列Gは図27に示すような構成となる。
【0149】
しかる後、生成行列生成部103は、得られた生成行列Gを制御部109に出力する(ST4−8)。
【0150】
以上により生成行列Gの生成処理が完了する。
【0151】
ステップST4の完了後、前述同様に、図31に示すステップST5〜ST7が実行され、ステップST8’に進むとする。
【0152】
分散部分データ生成部105は、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)及び分割秘密データK(1),…,K(j),…,K(n−1)からなる行列(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と生成行列Gの積を算出し(ST8’)、n(n−1)個の分散部分データD(j,i)を算出する。(4,5)閾値法の例では、図33及び図5に示したように、20個の分散部分データD(j,i)が生成される。例えば、分散部分データD(0,0)の算出過程を図32に示す。
【0153】
以下、前述同様に、ステップST9及びST10が実行され、分散処理が完了する。
【0154】
(復元処理の動作)
復元処理の動作は、図17を用いて前述同様に実行される。厳密には、前述とは異なる生成行列Gのビットパターンに伴い、生成行列Gの任意のk個の列ベクトルからなる部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))のビットパターンと、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1のビットパターンとが、前述とは異なるものとなる。但し、ビットパターンが異なっても、復元処理の動作が前述同様に実行されることに変わりはない。
【0155】
上述したように本実施形態によれば、第1の実施形態とは異なるビットパターンの生成行列Gを生成する構成としても、第1の実施形態と同様の効果を得ることができる。
【0156】
また、第1の実施形態のステップST4−2〜ST4−4を省略した構成により、生成行列Gの生成アルゴリズムを簡素化することができる。補足すると、ステップST4−2〜ST4−4を省略したことにより、ステップST4−6〜ST4−7’の繰り返し回数jが1回増えているが、同様なステップの繰り返しなので、生成アルゴリズムは簡素化されている。
【0157】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0158】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0159】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0160】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0161】
また、記憶媒体は1つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0162】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0163】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0164】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【0165】
【図1】本発明の第1の実施形態に係る秘密分散システムの構成を示す模式図である。
【図2】同実施形態における生成行列の一例を示す模式図である。
【図3】同実施形態における逆行列の一例を示す模式図である。
【図4】同実施形態における分散部分データの一例を示す模式図である。
【図5】同実施形態における乱数データの一例を示す模式図である。
【図6】同実施形態におけるヘッダ情報及び分散情報の一例を示す模式図である。
【図7】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図8】同実施形態における生成行列生成処理の動作を説明するためのフローチャートである。
【図9】同実施形態における生成行列の生成動作を説明するための模式図である。
【図10】同実施形態における生成行列の生成動作を説明するための模式図である。
【図11】同実施形態における生成行列の生成動作を説明するための模式図である。
【図12】同実施形態における生成行列の生成動作を説明するための模式図である。
【図13】同実施形態における生成行列の生成動作を説明するための模式図である。
【図14】同実施形態における生成行列の生成動作を説明するための模式図である。
【図15】同実施形態における生成行列の生成動作を説明するための模式図である。
【図16】同実施形態における分散部分データの算出過程を説明するための模式図である。
【図17】同実施形態における復元処理の動作を説明するためのフローチャートである。
【図18】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図19】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図20】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図21】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図22】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図23】同実施形態における変形例を説明するための模式図である。
【図24】本発明の第2の実施形態に係る秘密分散システムの構成を示す模式図である。
【図25】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図26】同実施形態における分割秘密データ及び乱数の生成動作を説明するためのフローチャートである。
【図27】本発明の第3の実施形態における生成行列の一例を示す模式図である。
【図28】同実施形態における生成行列の生成動作を説明するための模式図である。
【図29】同実施形態における生成行列の生成動作を説明するための模式図である。
【図30】同実施形態における生成行列生成処理の動作を説明するためのフローチャートである。
【図31】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図32】同実施形態における分散部分データの算出過程を説明するための模式図である。
【図33】同実施形態における分散部分データの一例を示す模式図である。
【符号の説明】
【0166】
100…クライアント装置、101〜n01…保存部、102…入力部、103…生成行列生成部、104…逆行列生成部、105,105a…分散部分データ生成部、106…ハッシュ値生成部、107…元データ復元部、108…ハッシュ値検証部、109,109a…制御部、110…出力部、111,202〜n02…通信部、200,300,…,n00…保管サーバ装置、NW…ネットワーク。
【技術分野】
【0001】
本発明は、(k,n)閾値法を用いた秘密分散装置、方法及びプログラムに係り、例えば多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現し得る秘密分散装置、方法及びプログラムに関する。
【背景技術】
【0002】
一般に、暗号化鍵などの秘密情報を紛失した場合の対策としては、予め秘密情報のコピーを作成しておくことが有効である。しかしながら、秘密情報のコピーを作成すると、盗難のリスクが高くなるという問題が生じる。このような問題を解決する手法として、1979年にシャミア(Shamir)が(k,n)閾値法と呼ばれる秘密分散法を提案している(例えば、非特許文献1参照)。
【0003】
(k,n)閾値法では、秘密情報をn個の分散情報に分割し、n個の分散情報の中から任意のk個を集めれば元の秘密情報を復元できるが、k−1個の分散情報からでは、元の秘密情報に関する情報を全く得られない。すなわち、(k,n)閾値法は、閾値kを境にした秘密情報の復元特性をもっている(なお、1<k<n)。
【0004】
このため、(k,n)閾値法によれば、k−1個以下の分散情報が漏洩しても元の秘密情報が安全であり、n−k個以下の分散情報を紛失しても元の秘密情報を復元できるといった管理を実現できる。
【0005】
しかしながら、シャミアの(k,n)閾値法では、秘密情報の分散や復元の処理を、多くの計算量を要する多項式補間により実現するので、大量のデータを秘密分散するためには、高速な計算機を必要とする不都合がある。
【0006】
一方、このような不都合を解決し、計算量を大幅に削減し得る(k,n)閾値法として、藤井らの方式と栗原らの方式が知られている(例えば、非特許文献2、非特許文献3参照)。ここで、藤井らの方式と栗原らの方式は、秘密情報の分散処理や復元処理を排他的論理和演算のみで実現するので、高速に実行可能となっている。
【0007】
しかしながら、藤井らの方式と栗原らの方式は、閾値kが2又は3に限定されるという不都合がある。
【非特許文献1】A. Shamir: “How to share a secret", Communications of the ACM, 22, 11, pp.612-613 (1979)
【非特許文献2】藤井吉弘,多田美奈子,保坂範和,栃窪孝也,加藤岳久: “高速な(2,n)閾値法の構成とシステムへの応用", CSS2005予稿集, (2005)
【非特許文献3】栗原淳,清本晋作,福島和英,田中俊昭: “XORを用いた(3,n)閾値秘密分散法", SCIS2007予稿集, (2007)
【発明の開示】
【発明が解決しようとする課題】
【0008】
以上説明したように、シャミアによる(k,n)閾値法では、多項式補間を用いるため、高速な計算機が必要となる不都合がある。一方、藤井らの方式と栗原らの方式は、閾値kが2又は3に限定されるという不都合がある。
【0009】
本発明は上記実情を考慮してなされたもので、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現し得る秘密分散装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0010】
第1の発明は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置であって、1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段と、前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段と、前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段と、前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段とを備えた秘密分散装置である。
【0011】
第2の発明は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置であって、前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段と、前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段と、前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段と、前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段と、前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段とを備えた秘密分散装置である。
【0012】
なお、第1及び第2の各発明は、「装置」として表現したが、これに限らず、「プログラム」、「プログラムを記憶した記憶媒体」又は「方法」として表現してもよい。
【0013】
(作用)
第1の発明は、生成行列Gを用いて分散部分データを生成する構成により、秘密情報の分散や復元の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【0014】
第2の発明は、前述した生成行列Gと同様に分散部分データを生成する構成により、秘密情報の分散の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【発明の効果】
【0015】
以上説明したように本発明によれば、多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現することができる。
【発明を実施するための最良の形態】
【0016】
以下、本発明の各実施形態について図面を用いて説明する。なお、以下の各装置は、装置毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置のコンピュータにインストールされ、対応する装置の機能を実現させるためのプログラムが用いられる。
【0017】
(第1の実施形態)
図1は本発明の第1の実施形態に係る秘密分散システムの構成を示す模式図である。この秘密分散システムは、1台のクライアント装置100及びn−1台の保管サーバ装置200,300,…,n00が互いにインターネット等のネットワークNWを介して接続されている。
【0018】
これら合計n台の装置100,200,300,…,n00は、(k,n)閾値法におけるn人のメンバに対応する。特に、n台の装置100,200,…,n00が個別に有するn個の保存部101,201,…,n01は、n人のメンバが個別に有するn個の記憶装置に対応する。各装置100,200,300,…,n00には、それぞれ分散情報の配布順番を示すj番号(行番号)が割当てられている。例えば、クライアント装置100には、j=0番目が割り当てられており、保管サーバ装置200にはj=1番目が割り当てられている。保管サーバ装置300にはj=2番目が割り当てられ、…、保管サーバ装置n00にはj=n−1番目が割り当てられている。
【0019】
ここで、クライアント装置100は、秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn台の装置100,200,…,n00に配布し、且つ、n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置を実現するものである。なお、分散情報の個数はk個以上であればよい。この閾値kは2以上が使用可能であるが、非特許文献2,3との相違を明確にする観点から、本実施形態では4以上を用いている。例えばk=4,n=4とし、秘密情報Sをn−1(=3)個に分割して後述するK(1),K(2),K(3)とし、配布した4個の分散情報D(0),D(1),D(2),D(3)から秘密情報Sを復元してもよい。
【0020】
クライアント装置100は、保存部101、入力部102、生成行列生成部103、逆行列生成部104、分散部分データ生成部105、ハッシュ値生成部106、元データ復元部107、ハッシュ値検証部108、制御部109、出力部110及び通信部111が互いにバスを介して接続されている。
【0021】
保存部101は、制御部109から読出/書込可能なハードウェア資源としての記憶装置であり、後述する分散情報D(0)〜D(n−1)が配布される前に、秘密情報Sが一時的に記憶される。また、保存部101は、分散情報D(0)〜D(n−1)が作成されると、分散情報作成情報が記憶され、分散情報が配布された後、j=0番目の分散情報D(0)が記憶されると共に、秘密情報Sが削除される。ここで、分散情報作成情報は、分散情報D(j)の識別情報jと、分散情報D(j)の配布先識別情報(装置ID、装置のアドレス情報等)とが互いに関連付けられた情報である。
【0022】
入力部102は、キーボード又はマウス等の通常の入力デバイスであり、操作者の操作により、分散処理又は復号処理の開始等の命令や、秘密情報S等の情報をクライアント装置100内に入力する機能をもっている。
【0023】
生成行列生成部103は、制御部109により制御され、図2にk=4,n=5とした(4,5)閾値法の例を示す如き、1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する機能をもっている。但し、生成行列Gのサイズはk(n−1)行×n(n−1)列である。GF(2)は位数2の有限体である。フルランクとは、行列の基本変形を施して得られるランク(rank:階数)がフル(full:満杯)(=k(n−1))であり、線形独立であることを意味している。
【0024】
具体的には、生成行列生成部103は、入力された分散数n及び閾値kが保存部101に記憶されたとき、保存部101内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、第0行の下の(n−1)行×(n−1)列が単位行列とは左右対称な行列であるn行×(n−1)列の第1小行列を生成する処理と、最も左側の第1小行列の各列を上に1回巡回シフトさせたn行×(n−1)列の新たな第1小行列を当該巡回シフト前の第1小行列の左側に隣接させる第1隣接処理と、第1隣接処理をn−1回実行し、n行×n(n−1)列の第1部分行列を生成する処理と、この第1部分行列の第1行目から第n−1行目を生成行列Gの第0行目から第n-2行目に割り当てて、生成行列Gの第0行目から第n−2行目までの部分行列を生成する第1部分行列割当て処理と、第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する処理と、最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接処理(但し、j=0,1,…,k−2)と、第2隣接処理をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成処理と、この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目に割り当てて、生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目までの部分行列を生成する第2部分行列割当て処理(但し、j=0,1,…,k−2)と、第2隣接処理及び第2部分行列割当て処理におけるjの値が初期値0から最終値k−2までの間、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理を実行する毎に当該jの値を1だけ増加させつつ、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理をk−1回実行する処理と、第1部分割当て処理により割り当てられた第0行目から第n−2行目までの部分行列と、k−1回の第2部分割当て処理により割り当てられた第n−1行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、k(n−1)行×n(n−1)列の生成行列Gを得る処理とを実行する機能をもっている。
【0025】
逆行列生成部104は、制御部109により制御され、生成行列Gの逆行列を生成するものであり、例えば図3にk=4,n=5とした(4,5)閾値法の例を示す如き、収集されたk個の列ベクトルから形成される生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))の逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’を算出する機能をもっている。
【0026】
ここで、g(D(*))は、*個目の分散情報D(*)を算出するのに使用した生成行列Gの部分行列であり、列ベクトルともいう。また、(i_1)の表記は、任意の1個目を表し、(i_j)の表記は任意のj個目を表し、(i_k)の表記は任意のk個目を表している。すなわち、カッコ内の左側のiと下線“i_”は、“任意の”を表している(表記“i_”のiは行番号ではない)。また、例えばD(i_1)は、任意の1個目のD(*)なので、D(0)〜D(4)のいずれでもよい。
【0027】
分散部分データ生成部105は、制御部109により制御され、保存部101に一時的に記憶された秘密情報Sに基づいて、図4、図5に一例(k=4,n=5の例)を示すように、n(n−1)個の分散部分データD(j,i)を生成する機能をもっている。具体的には、分散部分データ生成部105は、以下の各機能(f105−1)〜(f105−3)をもっている。
【0028】
(f105−1) 保存部101に記憶された秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する機能。
【0029】
(f105−2) 各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、1≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する機能。なお、各乱数U(h,g)は、互いに独立である。
【0030】
(f105−3) 分割秘密データK(1),…,K(j),…,K(n−1)、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)、生成行列Gに基づいて、行列(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と生成行列Gの積を算出し(但し、GF(2)上の演算)、計算結果のj×(n−1)+i列目のデータをD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)を算出する(但し、0≦j≦n−1,0≦i≦n−2)機能。
【0031】
ハッシュ値生成部106は、制御部109により制御され、制御部109からバスを介してヘッダ情報H(j)が入力されると、ヘッダ情報H(j)のハッシュ値h(H(j))を生成し、得られたハッシュ値h(H(j))をバスに出力する機能をもっている。なお、ハッシュ値生成部106は、ヘッダ情報H(j)を検証しない場合、省略可能である。
【0032】
元データ復元部107は、制御部109に制御され、n台の装置100,…,n00に配布されたn個の分散情報D(0)〜D(n−1)のうち、任意のk個の分散情報D(i_1),…,D(i_j),…,D(i_k)(但し、0≦i_j≦n−1)に基づいて、秘密情報Sを復元する秘密情報復元機能をもっている。具体的には元データ復元部107は、以下の各機能(f107−1)〜(f107−2)をもっている。
【0033】
(f107−1) 収集されたk個の分散情報D(i_1),…,D(i_j),…,D(i_k)及び生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’に基づき、行列(D(i_1),…,D(i_j),…,D(i_k))と逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’の積を算出し、計算結果のi列目のデータをK(i+1)に割り当てて、分割秘密データK(1),…,K(n−1)とする機能。
【0034】
(f107−2) 復元されたn−1個の分割秘密データK(1),…,K(n−1)を互いに連接することにより、秘密情報S=K(1)‖K(2)‖…‖K(n−1)を復元する機能(但し、‖は連接を表す記号)。
【0035】
ハッシュ値検証部108は、制御部109により制御され、制御部109からバスを介してヘッダ情報H(j)及びそのハッシュ値h(H(j))が入力されると、ハッシュ値h(H(j))に基づいてヘッダ情報H(j)を検証し、検証結果をバスに出力する機能をもっている。検証内容は、ヘッダ情報H(j)から計算したハッシュ値と、入力されたハッシュ値h(H(j))との一致により、ヘッダ情報H(j)を正当と判定する方式である。なお、ハッシュ値検証部108は、ヘッダ情報H(j)を検証しない場合、省略可能である。
【0036】
ここで、ヘッダ情報H(j)は、図6の上方に一例を示すように、行番号jを示すデータ識別子、ヘッダのサイズを表すヘッダーサイズ、元データのサイズを表す元データサイズm、元の秘密情報Sの分割数を示す分割数n−1、分散部分データD(j,i)の処理単位ビットを示す処理単位ビット長a、乱数R(j,i)のデータサイズを示す乱数データサイズa、分割秘密データK(j)のサイズを表す分割データサイズa、パディングの有無やアルゴリズムを表すパディングアルゴリズム、ハッシュアルゴリズム情報(オプション)、生成行列Gの部分行列g(D(j))(オプション)、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))’(オプション)(但し、必ずg(D(j))を含む)などが考えられる。
【0037】
ハッシュアルゴリズム情報は、ヘッダ情報のハッシュ値を算出し、ヘッダ情報の原本性を保証する場合などに追加される。すなわち、ハッシュアルゴリズム情報は、セキュリティの要件などに応じて追加又は省略される。但し、セキュリティの要件として予めシステムでハッシュアルゴリズムを決めている場合には、ハッシュアルゴリズム情報は、ヘッダ情報から省略可能である。
【0038】
なお、分散情報D(j)のデータフォーマットは、図6の下方に一例を示すように、ヘッダ情報H(j)、そのハッシュ値h(H(j))、n−1個の分散部分データD(j,0),D(j,1),…,D(j,n-2)から構成されている。ここで、ハッシュ値h(H(j))は、オプション(option)であり、ヘッダ情報H(j)内のハッシュアルゴリズム情報と同様に、セキュリティの要件に応じて省略可能となっている。
【0039】
制御部109は、入力部102から入力される命令に基づいて、後述する図7、図8及び図17のフローチャートに基づいて、各部101,103〜108,110,111を制御する機能をもっている。また、制御部109は、例えば、以下の機能(f109−1)〜(f109−2)をもっている。
【0040】
(f109−1) 分散部分データ生成部105により生成された各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する機能。
【0041】
(f109−2) 互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を通信部111を介して個別にn台の装置100,200,…,n00に配布する機能。なお、制御部109は、分散情報D(0)〜D(n−1)の漏洩防止の観点から、分散情報D(0)〜D(n−1)を暗号化した状態で配布してもよい。
【0042】
出力部110は、ディスプレイ装置やプリンタ装置等の通常の出力デバイスであり、制御部109により制御され、命令等の入力画面や、復元後の秘密情報S等の出力画面等を出力する機能をもっている。
【0043】
通信部111は、制御部109により制御され、クライアント装置100とネットワークNWとの間の通信インターフェイス機能をもっている。
【0044】
一方、各保管サーバ装置200〜n00について説明する。
各保管サーバ装置200〜n00は、記憶する分散情報D(1)〜D(n−1)が互いに異なる他は互いに同一構成のため、ここではn=2の保管サーバ装置200を代表例に挙げて説明する。
【0045】
保管サーバ装置200は、保存部201及び通信部202を備えている。
【0046】
保存部201は、通信部202から読出/書込可能なハードウェア資源としての記憶装置であり、クライアント装置100から配布された分散情報D(1)(=D(n−1)でn=2)が記憶される。
【0047】
通信部202は、クライアント装置100から配布された分散情報D(1)を保存部201に書き込む機能と、クライアント装置100から要求された分散情報D(1)を保存部201から読み出してこの分散情報D(1)をクライアント装置100に返信する機能とをもっている。
【0048】
なお、通信部202は、分散情報D(1)の漏洩防止の観点から、クライアント装置100の認証機能を有してもよく、この場合、クライアント装置100の認証の後、分散情報D(1)を返信する構成として設けられる。
【0049】
ここで、各保管サーバ装置200,300,…,n00は、他のクライアント装置や、USB(Universal Serial Bus)メモリ、携帯電話、PDA(Personal Digital Assistants:携帯情報端末)に置き換え可能であり、あるいは外付けHDD(Hard Disc Drive: 固定磁気ディスク装置)などのように、コンピュータ以外の他の装置と置き換えることも可能である。
【0050】
なお、各保管装置200,300,…,n00は、他のクライアント装置に置き換えられる場合、前述同様に、分散部分データ生成部105や元データ復元部107などの機能を保持していてもよい。すなわち、秘密情報を復元できる装置は、クライアント装置100以外にあってもよい。例えば、各保管装置200,300,…,n00のうちの任意の台数の装置j00,…が秘密情報を復元できる構成としてもよい。
【0051】
なお、分散の場合も同様に、秘密情報を分散できる装置は、クライアント装置100以外にあってもよい。例えば、各保管装置200,300,…,n00のうちの任意の台数の装置j00,…が分散情報を配布できる構成としてもよい。
【0052】
また、各保管装置200,300,…,n00がUSBメモリや携帯電話などのように物理的な接続手段又は無線通信手段を有する装置に置き換えられる場合、ネットワークNWを省略してもよい。上述した各保管装置200,300,…,n00を他の装置に置き換えた変形例は、以下の各実施形態でも同様に適用可能である。
【0053】
次に、以上のように構成された秘密分散システムの動作を説明する。
始めに、n人のメンバ(初期メンバ)に、秘密情報Sを(k,n)閾値法で分散した分散情報D(j)を配布する場合を考える。このときnは素数を選ばなければならない。従って、合成数のn人に分散情報を配布したい場合は、n<n’でありかつn’が素数となるようなn’について秘密分散法を適用することになる。以下では(k,n)閾値法についての一例を示す。
【0054】
(分散処理の動作)
クライアント装置100においては、分散情報D(0)〜D(n−1)を配布する前に、ビット長mの秘密情報Sが一時的に保存部101に記憶されているとする。
【0055】
このとき、クライアント装置100においては、図7に示すように、操作者の操作により、分散処理の開始命令が入力部102から入力されたとする(ST1)。
【0056】
クライアント装置100は、この開始命令に基づいて、分散処理を開始する。制御部109は、分散数をn、閾値をk、秘密情報Sのビット長をm、処理単位ビットをaと定める(ST1)。なお、秘密情報Sのビット長mは、保存部101内の秘密情報Sから分かる。処理単位ビットaは、分散データ生成部13の仕様により予め定まっている。
【0057】
続いて、制御部109は、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaを超える(m/(n−1)>a)か否かを判定し(ST2)、処理単位ビットaを超える場合、nより大きい素数n’を探索し、得られた素数n’を分散数nと置き換えて(ST3)、ステップST1に戻る。
【0058】
一方、ステップST2の判定結果が否の場合、制御部109は、分散数n及び閾値kを生成行列生成部103に入力する。
【0059】
生成行列生成部103は、分散数n、閾値kの生成行列G(但し、任意のk個の列ベクトルがフルランク、行列Gのサイズはk(n−1)×n(n−1)、列ベクトルのサイズはk(n−1)×(n−1))を制御部109に出力する(ST4)。
【0060】
以下、ステップST4における生成行列Gの生成処理の手順を図8〜図15を用いて説明する。
【0061】
図8に示すように、生成行列生成部103は、分散数n、閾値kの生成行列Gを保存部101から検索する(ST4−1)。該当する生成行列Gが存在する場合、ST4−8へ進む。該当する生成行列Gが存在しない場合、図9に示すように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列と左右対称な行列((0,n-2)−要素,(1,n-3)−要素,…,(n-3,1)−要素,(n-2,0)−要素が全て1で、他の要素は全て0の行列)から構成されるn行×(n−1)列の第1小行列iを生成する(ST4−2)。
【0062】
続いて、図10に示すように、(最も左側の)第1小行列iの各列を上に1回巡回シフトさせたn×(n−1)行列を新たな第1小行列i−1として、当該巡回シフト前の第1小行列iの左側に隣接させる(ST4−3)。iがn−1から1までST4−3を繰り返して、n×n(n−1)の第1部分行列を生成する。この第1部分行列の第1行目から第n−1行目を生成行列Gの第0行目から第n-2行目に割り当てる(ST4−4)。(4,5)閾値法の例では、生成行列Gの0行目から3行目までの部分行列が生成される。
【0063】
生成行列生成部103は、図11に示すように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列から構成されるn行×(n−1)列の第2小行列iを生成する(ST4−5)。
【0064】
続いて図12〜図15に示すように、(最も右側の)第2小行列iの各列を下にj回巡回シフトさせたn×(n−1)行列を新たな第2小行列i+1として、当該巡回シフト前の第2小行列iの右側に隣接させる(ST4−6)。iが1からn−1までST4−6を繰り返して、n×n(n−1)の第2部分行列を生成する。この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)(j+1)行目から(n−1)(j+1)+n−2行目に割り当てて、jをインクリメントする(ST4−7)。jが0からk−2までST4−6〜ST4−7を繰り返して生成行列Gを生成する。(4,5)閾値法の例では、生成行列Gは図2に示すような構成となる。
【0065】
しかる後、生成行列生成部103は、得られた生成行列Gを制御部109に出力する(ST4−8)。
【0066】
以上により生成行列Gの生成処理が完了する。
【0067】
ステップST4の完了後、制御部109は、秘密情報S、生成行列G、分散数n及び閾値kを分散部分データ生成部105に入力する。
【0068】
分散部分データ生成部105は、図7に示すように、秘密情報S及び分散数nに基づいて、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaと等しいか(m/(n−1)=a)か否かを判定する(ST5)。
【0069】
ステップST4の判定結果が否の場合、分散部分データ生成部105は、秘密情報Sをn−1個の分割秘密データK(1)〜K(n−1)に分割した際の末尾の分割秘密データK(n−1)をパディングする(パディング有)とし(ST6)、ステップST7に進む。
【0070】
なお、パディングは、必ずしも末尾の分割秘密データK(n-2)に行わなくても良く、他の分割秘密データK(j)に行っても良い。但し、本実施形態では、秘密情報Sは4個にちょうど分割できた場合(パディング無し)を例に挙げて述べる。また、図2に示した如き、分散数n=5,閾値k=4の(4,5)閾値法を例に挙げて述べる。
【0071】
ステップST5の判定の結果、処理単位ビットaと等しい場合、分散部分データ生成部105は、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する(ST7)。(4,5)閾値法の例では、分割秘密データK(1),…,K(4)が生成される。
【0072】
次に、各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦g≦k−2)と列番号(但し、1≦h≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する(ST7)。(4,5)閾値法の例では、乱数データU(0,1),…,U(2,4)が生成される。
【0073】
分割秘密データK(1),…,K(j),…,K(n−1)、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)及び生成行列Gに基づいて、n(n−1)個の分散部分データ(D(0,0),…,D(j,i),…,D(n−1,n−2))=(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))Gを算出する(ST8)。なお、処理単位ビットaにあわせて、生成行列Gの要素が1の場合はa×aのGF(2)上の単位行列、0の場合はa×aのGF(2)上のゼロ行列として扱う。(4,5)閾値法の例では、図4、図5に示したように、20個の分散部分データD(j,i)が生成される。例えば、分散部分データD(0,0)の算出過程を図16に示す。
【0074】
しかる後、分散部分データ生成部105は、得られた分散部分データn(n−1)個の分散部分データD(j,i)を制御部109に出力する。
【0075】
制御部109は、各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する(ST9)。ヘッダ情報H(j)には、K(n−1)に対するパディングの有無、元データのサイズなどの情報が含まれる。
【0076】
制御部109は、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別にn個の保存部101,201,…,n01に配布するように、分散情報D(0)を保存部101に書き込み、分散情報D(1),…,D(n−1)を個別に保管サーバ装置200,…,n00に配布する(ST10)。(4,5)閾値法の例では、5個の分散情報D(0),…,D(4)が配布される。各保管サーバ装置200〜500では、配布された分散情報D(1),…,D(4)を保存部201〜501に記憶する。
【0077】
以上により、秘密情報の分散処理が完了する。
【0078】
なお、(4,5)閾値法において、必ずしも5個の分散情報D(0)〜D(4)を配布する必要は無い。例えば4個の分散情報D(0)〜D(3)を配布しておき、残り1個の分散情報D(4)を新メンバが追加されたときに新メンバに配布してもよい。
【0079】
(復元処理の動作)
クライアント装置100においては、操作者の操作により、復元処理の開始命令が入力部102から入力されたとする。
【0080】
クライアント装置100は、この開始命令に基づいて、図17に示すように、復元処理を開始する。制御部109は、n台の装置100,…,n00に配布したn個の分散情報D(0)〜D(n−1)のうち、任意のk個の分散情報D(i_1),…,D(i_j),…,D(i_k)(但し、0≦i_j≦n−1)を収集する(ST11)。
【0081】
制御部109は、分散情報D(i_1),…,D(i_j),…,D(i_k)のヘッダ情報H(i_1),…,H(i_j),…,H(i_k)から生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を取得する(ST12)。取得できた場合は、ST15へ進む。取得できなかった場合は、H(i_1),…,H(i_j),…,H(i_k)から生成行列Gのk個の列ベクトルg(D(i_1)),…,g(D(i_j)),…,g(D(i_k)を得ると、このk個の列ベクトルから生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))を形成して取得する(ST13)。
【0082】
次に、制御部109は、生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))を逆行列生成部104に入力する。
【0083】
逆行列生成部104は、生成行列Gの部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))から生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を算出する(ST14)。
【0084】
(4,5)閾値法の例では、分散情報D(1),D(2),D(3),D(4)に対応する生成行列Gの部分行列((g(D(1)),g(D(2)),g(D(3)),g(D(4)))は図2に示したような行列になり、分散情報D(1),D(2),D(3),D(4)に対応する生成行列Gの部分逆行列((g(D(1)),g(D(2)),g(D(3)),g(D(4)))−1は図3に示したような行列となる。
【0085】
逆行列生成部104は、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1を出力する(ST15)。
【0086】
制御部109は、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1と分散情報D(i_1),…,D(i_j),…,D(i_k)を元データ復元部107に入力する。
【0087】
元データ復元部107は、分散情報D(i_1),…,D(i_j),…,D(i_k)のヘッダ情報H(i_1),…,H(i_j),…,H(i_k)から、図17に示すように、分散情報D(i_1),…,D(i_j),…,D(i_k)であることを解析する(ST16)。(4,5)閾値法の例では、例えば分散情報D(1),D(2),D(3),D(4)であることを確認する。
【0088】
次に、分散情報からなる行列(D(i_1),…,D(i_j),…,D(i_k))と生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k)))−1の行列の積を算出する(ST17)。なお、処理単位ビットaにあわせて、生成行列Gの要素が1の場合はa×aのGF(2)上の単位行列、0の場合はa×aのGF(2)上のゼロ行列として扱う。
【0089】
次に、計算結果のi+1列目のデータをK(i)に割り当てて、分割秘密データK(1),…,K(n−1)を算出する。(4,5)閾値法の例では、分散情報D(1),D(2),D(3),D(4)から復元した場合、図18〜図22に示したように、分割秘密データK(1),K(2),K(3),K(4)が算出される。
【0090】
制御部109は、分割秘密データK(1),…,K(n−1)に対して、ヘッダ情報H(i),H(j)に基づいて、パディングなどの処理があれば除去する。
【0091】
しかる後、制御部109は、分割秘密データK(1),…,K(n−1)を互いに連接することにより、秘密情報S=K(1)‖K(2)‖…‖K(n−1)を復元する(ST18)。この例では、秘密情報S=K(1)‖K(2)‖…‖K(4)が復元される。
【0092】
上述したように本実施形態によれば、生成行列Gを用いて分散部分データを生成する構成により、秘密情報の分散や復元の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な閾値4以上の(k,n)閾値法を実現することができる。
【0093】
また、本実施形態は、非特許文献2,3との相違を明確にする観点から閾値4以上として述べたが、閾値が2又は3でも実施できることはいうまでもない。このように本実施形態は、分散数n及び閾値kが限定されないので、各種のシステムへの応用範囲を広げることができる。
【0094】
また、本実施形態の分散・復元処理は、多項式補間が不要であり、XORのみで実行するため、前述した高速に実行可能なことに加え、大容量データを扱うのに好適であり、低スペック機器でも秘密分散を実行できる利点を有する。
【0095】
なお、本実施形態は、生成行列生成部103により生成行列Gを生成し、逆行列生成部104により逆行列を生成した場合について説明したが、これに限らず、分散数n及び閾値kが予め分かっていれば、図23に示すように、生成行列生成部103及び逆行列生成部104に代えて、予め生成行列G及びGの逆行列のデータが保存された読出/書込可能な記憶装置としての行列保存部112を備えた構成に変形してもよい。このように変形しても、生成行列G及び逆行列による(k,n)閾値法を実現することができる。
【0096】
また同様に、分散数nと閾値kとの組合せ毎に、予め生成行列G及びGの逆行列のデータを行列保存部112に保存しておき、入力されたn,kの値を検索キーにして、行列保存部112から生成行列G及びGの逆行列のデータを読み出す構成に変形してもよいことはいうまでもない。
【0097】
(第2の実施形態)
図24は本発明の第2の実施形態に係る秘密分散システムの構成を示す模式図である。
【0098】
本実施形態は、第1の実施形態の変形例であり、分散アルゴリズムにより分散可能な(k,n)閾値法の秘密分散システムとなっている。これに伴い、前述した生成行列生成部103及び逆行列生成部104が省略され、分散部分データ生成部105a及び制御部109aの機能が変更されている。
【0099】
分散部分データ生成部105aは、制御部109aにより制御され、保存部101に一時的に記憶された秘密情報Sに基づいて、図4、図5に一例(k=4,n=5の例)を示すように、n(n−1)個の分散部分データD(j,i)を生成する機能をもっている。具体的には、分散部分データ生成部105aは、以下の各機能(f105a−1)〜(f105a−6)をもっている。
【0100】
(f105a−1) 保存部101に記憶された秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する機能。
【0101】
(f105a−2) 各分割秘密データのサイズと同一サイズのゼロ値データを作成し、作成結果に行番号j=0を割り当てて分割秘密データK(0)を生成する機能。
【0102】
(f105a−3) 各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する機能。
【0103】
(f105a−4) 各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する機能。なお、各乱数U(h,g)は、互いに異なる値である。
【0104】
(f105a−5) 乱数データU(0,0),…,U(h,g),…,U(k−2,n−1)に基づいて、n×(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する機能(但し、(+)は排他的論理和を表す記号)。
【0105】
なお、U(h,h×j+i+1(mod n))=U(h,0)(=0)の場合、必ずしもU(h,0)の項を計算する必要はなく、例えばU(0,3)(+)U(1,4)(+)U(2,0)をU(0,3)(+)U(1,4)としてもよい。このように、U(h,0)(=0)の場合、U(g,0)の項を計算する必要が無いことは、本明細書中の他の箇所でも同様である。
【0106】
(f105a−6) 分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する機能(但し、(+)は排他的論理和を表す記号)。
【0107】
なお、K(j−i(mod n))=K(0)(=0)の場合、必ずしもK(0)の項を計算する必要は無く、例えばK(0)の項の計算無しにD(j,i)=R(j,i)としてもよい。このように、K(0)(=0)の場合、必ずしもK(0)の項を計算する必要が無いことは、本明細書中の他の箇所でも同様である。
【0108】
制御部109aは、入力部102から入力される命令に基づいて、後述する図25及び図26に示すフローチャートに基づいて、各部101,105a〜108,110,111を制御する機能をもっている。
【0109】
次に、以上のように構成された秘密分散システムの動作を説明する。ここでは(k,n)閾値法を例に挙げて述べる。
【0110】
始めに、n人のメンバ(初期メンバ)に、秘密情報Sを(k,n)閾値法で分散した分散情報D(j)を配布する場合を考える。このときnは素数を選ばなければならない。従って、合成数のn人に分散情報を配布したい場合は、n<n’でありかつn’が素数となるようなn’について秘密分散法を適用することになる。以下では(k,n)閾値法についての一例を示す。
【0111】
(分散処理の動作)
クライアント装置100においては、分散情報D(0)〜D(n−1)を配布する前に、ビット長mの秘密情報Sが一時的に保存部101に記憶されているとする。
【0112】
このとき、クライアント装置100においては、図25に示すように、操作者の操作により、分散処理の開始命令が入力部102から入力されたとする。
【0113】
クライアント装置100は、この開始命令に基づいて、分散処理を開始する。制御部109aは、秘密情報Sのビット長をm、分散数をn、処理単位ビットをaと定める(ST21)。なお、秘密情報Sのビット長mは、保存部101内の秘密情報Sから分かる。処理単位ビットaは、分散データ生成部13の仕様により予め定まっている。
【0114】
続いて、制御部109aは、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaを超える(m/(n−1)>a)か否かを判定し(ST22)、処理単位ビットaを超える場合、nより大きい素数n’を探索し、得られた素数n’を分散数nと置き換えて(ST23)、ステップST21に戻る。
【0115】
一方、ステップST22の判定の結果が否の場合、制御部109aは、秘密情報S及び分散数nを分散部分データ生成部105aに入力する。
【0116】
分散部分データ生成部105aは、秘密情報S及び分散数nに基づいて、ビット長mの秘密情報Sをn−1個に分割した際のビット長(m/(n−1))が処理単位ビットaと等しいか(m/(n−1)=a)か否かを判定する(ST24)。
【0117】
ステップST24の判定結果が否の場合、分散部分データ生成部105aは、秘密情報Sをn−1個の分割秘密データK(1)〜K(n−1)に分割した際の末尾の分割秘密データK(n−1)をパディングする(パディング有)とし(ST25)、ステップST26に進む。
【0118】
なお、パディングは、必ずしも末尾の分割秘密データK(n-2)に行わなくても良く、他の分割秘密データK(j)に行っても良い。但し、本実施形態では、秘密情報Sは4個にちょうど分割できた場合(パディング無し)を例に挙げて述べる。また、図4、図5に示した如き、分散数n=5,閾値k=4の(4,5)閾値法を例に挙げて述べる。
【0119】
ステップST24の判定の結果、処理単位ビットaと等しい場合、分散部分データ生成部105aは、図26に示すように、ステップST26を開始する。
【0120】
すなわち、分散部分データ生成部105aは、この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、0≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する。(4,5)閾値法の例では、分割秘密データK(1),…,K(4)が生成される。
【0121】
また、分散部分データ生成部105aは、各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて分割秘密データK(0)を生成する(ST26−1)。
【0122】
さらに、分散部分データ生成部105aは、各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する。
【0123】
次に、各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する(ST26−2)。
【0124】
そして、乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、乱数データR(j,i)=0としつつ(ST26−3)、hを0からk−2まで繰り返してn(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する(ST26−4)。(4,5)閾値法の例では、乱数データR(0,0),…,R(4,3)が生成される。
【0125】
次に、分散部分データ生成部105aは、分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び乱数データR(0,0),…,R(j,i),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する(ST27)。この算出は、行番号jを0からn−1まで繰り返すと共に、列番号iを0からn-2まで繰り返すことにより行う。(4,5)閾値法の例では、図4、図5に示したように、20個の分散部分データD(j,i)が生成される。
【0126】
しかる後、分散部分データ生成部105aは、得られた分散部分データn(n−1)個の分散部分データD(j,i)を制御部109aに出力する。
【0127】
制御部109aは、各分散部分データのうち、同一の行番号jを有するn−1個の分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する(ST28)。ヘッダ情報H(j)には、K(n−1)に対するパディングの有無、元データのサイズなどの情報が含まれる。
【0128】
制御部109aは、互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別にn個の保存部101,201,…,n01に配布するように、分散情報D(0)を保存部101に書き込み、分散情報D(1),…,D(n−1)を個別に保管サーバ装置200,…,n00に配布する(ST29)。
【0129】
(4,5)閾値法の例では、5個の分散情報D(0),…,D(4)が配布される。各保管サーバ装置200〜500では、配布された分散情報D(1),…,D(4)を保存部201〜501に記憶する。
【0130】
以上により、秘密情報の分散処理が完了する。
【0131】
なお、(4,5)閾値法において、必ずしも5個の分散情報D(0)〜D(4)を配布する必要は無い。例えば4個の分散情報D(0)〜D(3)を配布しておき、残り1個の分散情報D(4)を新メンバが追加されたときに新メンバに配布してもよい。
【0132】
上述したように本実施形態によれば、第1の実施形態の生成行列Gと同様の結果を得るアルゴリズムを用いて分散部分データを生成する構成により、秘密情報の分散の処理を排他的論理和により非常に高速に実現し、多項式補間を用いずに高速に実行可能な(k,n)閾値法を実現することができる。
【0133】
すなわち、本実施形態によれば、生成行列Gを用いずに、第1の実施形態と同様の作用効果を得ることができる。
【0134】
(第3の実施形態)
次に、本発明の第3の実施形態に係る秘密分散システムについて説明する。
本実施形態は、第1の実施形態の変形形態であり、第1の実施形態とは異なるビットパターンの生成行列Gと、その生成行列Gを利用した分散処理とに関する。
【0135】
ここで、生成行列Gは、図27にk=4,n=5とした(4,5)閾値法の例を示すように、図11〜図15に示したj=0〜2の場合の第4〜15行目と同じ値の第0〜11行目を有し、図28及び図29に示す如きj=3の場合と同じ値の第12〜15行目を有している。
【0136】
この生成行列Gは、図30に示すように、図8の第1小行列iに関するステップST4−2〜ST4−4を省略し、図8の第2小行列iに関するステップST4−1,ST4−5,ST4−6と同様の各ステップST4−1,ST4−5及びST4−6と、図8のステップST4−7に代えて割当て行をGの第(n−1)j行目から第(n−1)j+n−2行目としたステップST4−7’とを備え、且つjが0からk−1までステップST4−6及びST4−7’を繰り返し実行する生成方法により生成される。
【0137】
すなわち、生成行列生成部103は、入力された分散数n及び閾値kが保存部101に記憶されたとき、保存部101内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する処理と、最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接処理(但し、j=0,1,…,k−1)と、第2隣接処理をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成処理と、この第2部分行列の第1行目から第n−1行目を生成行列Gの第(n−1)j行目から第(n−1)j+n−2行目に割り当てて、生成行列Gの第(n−1)j行目から第(n−1)j+n−2行目までの部分行列を生成する第2部分行列割当て処理(但し、j=0,1,…,k−1)と、第2隣接処理及び第2部分行列割当て処理におけるjの値が初期値0から最終値k−1までの間、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理を実行する毎に当該jの値を1だけ増加させつつ、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理をk回実行する処理と、k回の第2部分割当て処理により割り当てられた第0行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、k(n−1)行×n(n−1)列の生成行列Gを得る処理とを実行する機能をもっている。
【0138】
なお、本実施形態においては、第1小行列に関するステップST4−2〜ST4−4を省略したため、上述した第2小行列、第2部分行列、第2隣接処理、第2部分行列生成処理及び第2部分行列割当て処理から「第2」の語句を省略してもよい。
【0139】
また、生成行列Gの変更に伴い、図31のステップST8’及び図32に示すように、分散部分データ算出時の生成行列Gに左側から積算される行列において、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)の右側に分散秘密データK(1)〜K(n−1)が配置される。この配置は、前述した図7のステップST8とは逆の配置となっている。
【0140】
分散部分データD(j,i)は、図33及び図5に一例(n=4,n=5)を示すように、n(n−1)個が分散部分データ生成部105により生成される。
【0141】
ここで、分散部分データ生成部105の機能(f105−3)は、以下の機能(f105−3’)のようになる。
【0142】
(f105−3’) 乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)、分割秘密データK(1),…,K(j),…,K(n−1)、生成行列Gに基づいて、行列(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と生成行列Gの積を算出し(但し、GF(2)上の演算)、計算結果のj×(n−1)+i列目のデータをD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)を算出する(但し、0≦j≦n−1,0≦i≦n−2)機能。
【0143】
次に、以上のように構成された秘密分散システムの動作を説明する。
【0144】
(分散処理の動作)
いま、前述同様に、図31に示すステップST1〜ST3が実行され、ステップST4’に進むとする。
【0145】
生成行列生成部103は、分散数n、閾値kの生成行列G(但し、任意のk個の列ベクトルがフルランク、行列Gのサイズはk(n−1)×n(n−1)、列ベクトルのサイズはk(n−1)×(n−1))を制御部109に出力する(ST4’)。
【0146】
以下、ステップST4’における生成行列Gの生成処理の手順を図28〜図30を用いて説明する。
【0147】
図30に示すように、生成行列生成部103は、分散数n、閾値kの生成行列Gを保存部101から検索する(ST4−1)。該当する生成行列Gが存在する場合、ST4−8へ進む。該当する生成行列Gが存在しない場合、図11に示したように、第0行がゼロベクトル、下(n−1)×(n−1)行列が単位行列から構成されるn行×(n−1)列の第2小行列iを生成する(ST4−5)。
【0148】
続いて図12〜図14の上方及び図28に示したように、(最も右側の)第2小行列iの各列を下にj回巡回シフトさせたn×(n−1)行列を新たな第2小行列i+1として、当該巡回シフト前の第2小行列iの右側に隣接させる(ST4−6)。iが1からn−1までST4−6を繰り返して、n×n(n−1)の第2部分行列を生成する。この第2部分行列の第1行目から第n−1行目を図29に示すように生成行列Gの第(n−1)j行目から(n−1)j+n−2行目に割り当てて、jをインクリメントする(ST4−7’)。jが0からk−1までST4−6〜ST4−7’を繰り返して生成行列Gを生成する。(4,5)閾値法の例では、生成行列Gは図27に示すような構成となる。
【0149】
しかる後、生成行列生成部103は、得られた生成行列Gを制御部109に出力する(ST4−8)。
【0150】
以上により生成行列Gの生成処理が完了する。
【0151】
ステップST4の完了後、前述同様に、図31に示すステップST5〜ST7が実行され、ステップST8’に進むとする。
【0152】
分散部分データ生成部105は、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)及び分割秘密データK(1),…,K(j),…,K(n−1)からなる行列(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と生成行列Gの積を算出し(ST8’)、n(n−1)個の分散部分データD(j,i)を算出する。(4,5)閾値法の例では、図33及び図5に示したように、20個の分散部分データD(j,i)が生成される。例えば、分散部分データD(0,0)の算出過程を図32に示す。
【0153】
以下、前述同様に、ステップST9及びST10が実行され、分散処理が完了する。
【0154】
(復元処理の動作)
復元処理の動作は、図17を用いて前述同様に実行される。厳密には、前述とは異なる生成行列Gのビットパターンに伴い、生成行列Gの任意のk個の列ベクトルからなる部分行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))のビットパターンと、生成行列Gの部分逆行列(g(D(i_1)),…,g(D(i_j)),…,g(D(i_k))−1のビットパターンとが、前述とは異なるものとなる。但し、ビットパターンが異なっても、復元処理の動作が前述同様に実行されることに変わりはない。
【0155】
上述したように本実施形態によれば、第1の実施形態とは異なるビットパターンの生成行列Gを生成する構成としても、第1の実施形態と同様の効果を得ることができる。
【0156】
また、第1の実施形態のステップST4−2〜ST4−4を省略した構成により、生成行列Gの生成アルゴリズムを簡素化することができる。補足すると、ステップST4−2〜ST4−4を省略したことにより、ステップST4−6〜ST4−7’の繰り返し回数jが1回増えているが、同様なステップの繰り返しなので、生成アルゴリズムは簡素化されている。
【0157】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスクなど)、光ディスク(CD−ROM、DVDなど)、光磁気ディスク(MO)、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【0158】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【0159】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているOS(オペレーティングシステム)や、データベース管理ソフト、ネットワークソフト等のMW(ミドルウェア)等が上記実施形態を実現するための各処理の一部を実行しても良い。
【0160】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、LANやインターネット等により伝送されたプログラムをダウンロードして記憶または一時記憶した記憶媒体も含まれる。
【0161】
また、記憶媒体は1つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【0162】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の1つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【0163】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【0164】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【0165】
【図1】本発明の第1の実施形態に係る秘密分散システムの構成を示す模式図である。
【図2】同実施形態における生成行列の一例を示す模式図である。
【図3】同実施形態における逆行列の一例を示す模式図である。
【図4】同実施形態における分散部分データの一例を示す模式図である。
【図5】同実施形態における乱数データの一例を示す模式図である。
【図6】同実施形態におけるヘッダ情報及び分散情報の一例を示す模式図である。
【図7】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図8】同実施形態における生成行列生成処理の動作を説明するためのフローチャートである。
【図9】同実施形態における生成行列の生成動作を説明するための模式図である。
【図10】同実施形態における生成行列の生成動作を説明するための模式図である。
【図11】同実施形態における生成行列の生成動作を説明するための模式図である。
【図12】同実施形態における生成行列の生成動作を説明するための模式図である。
【図13】同実施形態における生成行列の生成動作を説明するための模式図である。
【図14】同実施形態における生成行列の生成動作を説明するための模式図である。
【図15】同実施形態における生成行列の生成動作を説明するための模式図である。
【図16】同実施形態における分散部分データの算出過程を説明するための模式図である。
【図17】同実施形態における復元処理の動作を説明するためのフローチャートである。
【図18】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図19】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図20】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図21】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図22】同実施形態における分割秘密データの算出動作を説明するための模式図である。
【図23】同実施形態における変形例を説明するための模式図である。
【図24】本発明の第2の実施形態に係る秘密分散システムの構成を示す模式図である。
【図25】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図26】同実施形態における分割秘密データ及び乱数の生成動作を説明するためのフローチャートである。
【図27】本発明の第3の実施形態における生成行列の一例を示す模式図である。
【図28】同実施形態における生成行列の生成動作を説明するための模式図である。
【図29】同実施形態における生成行列の生成動作を説明するための模式図である。
【図30】同実施形態における生成行列生成処理の動作を説明するためのフローチャートである。
【図31】同実施形態における分散処理の動作を説明するためのフローチャートである。
【図32】同実施形態における分散部分データの算出過程を説明するための模式図である。
【図33】同実施形態における分散部分データの一例を示す模式図である。
【符号の説明】
【0166】
100…クライアント装置、101〜n01…保存部、102…入力部、103…生成行列生成部、104…逆行列生成部、105,105a…分散部分データ生成部、106…ハッシュ値生成部、107…元データ復元部、108…ハッシュ値検証部、109,109a…制御部、110…出力部、111,202〜n02…通信部、200,300,…,n00…保管サーバ装置、NW…ネットワーク。
【特許請求の範囲】
【請求項1】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置であって、
1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段と、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、
この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段と、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段と、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段と
を備えたことを特徴とする秘密分散装置。
【請求項2】
請求項1に記載の秘密分散装置において、
前記算出する手段は、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積に代えて、
前記乱数データ及び前記分割秘密データ(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と前記生成行列Gとの行列の積を算出することを特徴とする秘密分散装置。
【請求項3】
請求項1又は請求項2に記載の秘密分散装置において、
前記配布する手段は、前記n個の列ベクトルにおける各々の列ベクトルを前記n個の分散情報D(0),…,D(n−1)に個別に含めており、
前記n個の記憶装置のうち、任意のk個の記憶装置から収集されたk個の分散情報からk個の列ベクトルを得る手段と、
このk個の列ベクトルから前記生成行列の部分行列を形成し、この部分行列の逆行列を算出する手段と、
前記収集されたk個の分散情報と前記逆行列との行列の積を演算し(但し、GF(2)上の演算)、前記分割秘密データK(1),…,K(j),…,K(n−1)を得る手段と、
得られた分割秘密データK(1),…,K(j),…,K(n−1)から前記秘密情報Sを復元する手段と
を備えたことを特徴とする秘密分散装置。
【請求項4】
請求項1に記載の秘密分散装置が実行する秘密分散方法であって、
入力された分散数n及び閾値kを前記記憶手段に記憶する工程と、
前記記憶手段内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、前記第0行の下の(n−1)行×(n−1)列が単位行列とは左右対称な行列であるn行×(n−1)列の第1小行列を生成する工程と、
最も左側の第1小行列の各列を上に1回巡回シフトさせたn行×(n−1)列の新たな第1小行列を当該巡回シフト前の第1小行列の左側に隣接させる第1隣接工程と、
前記第1隣接工程をn−1回実行し、n行×n(n−1)列の第1部分行列を生成する工程と、
この第1部分行列の第1行目から第n−1行目を前記生成行列Gの第0行目から第n-2行目に割り当てて、前記生成行列Gの第0行目から第n−2行目までの部分行列を生成する第1部分行列割当て工程と、
第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する工程と、
最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接工程(但し、j=0,1,…,k−2)と、
前記第2隣接工程をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成工程と、
この第2部分行列の第1行目から第n−1行目を前記生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目に割り当てて、前記生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目までの部分行列を生成する第2部分行列割当て工程(但し、j=0,1,…,k−2)と、
前記第2隣接工程及び前記第2部分行列割当て工程におけるjの値が初期値0から最終値k−2までの間、前記第2隣接工程、前記第2部分行列生成工程及び前記第2部分行列割当て工程を実行する毎に当該jの値を1だけ増加させつつ、前記第2隣接工程、前記第2部分行列生成工程及び前記第2部分行列割当て工程をk−1回実行する工程と、
前記第1部分割当て工程により割り当てられた第0行目から第n−2行目までの部分行列と、前記k−1回の第2部分割当て工程により割り当てられた第n−1行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、前記k(n−1)行×n(n−1)列の生成行列Gを得る工程と
を備えたことを特徴とする秘密分散方法。
【請求項5】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置であって、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、
この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、
前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段と、
前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、
前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段と、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段と
を備えたことを特徴とする秘密分散装置。
【請求項6】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置のプログラムであって、
前記秘密分散装置のコンピュータを、
1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sを一時的に前記コンピュータのメモリに書き込む手段、
前記メモリ内の秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段、
として機能させるためのプログラム。
【請求項7】
請求項6に記載のプログラムにおいて、
前記配布する手段は、前記n個の列ベクトルにおける各々の列ベクトルを前記n個の分散情報D(0),…,D(n−1)に個別に含める手順を含んでおり、
前記コンピュータを、
前記n個の記憶装置のうち、任意のk個の記憶装置から収集されたk個の分散情報からk個の列ベクトルを得る手段、
このk個の列ベクトルから前記生成行列の部分行列を形成し、この部分行列の逆行列を算出する手段、
前記収集されたk個の分散情報と前記逆行列との行列の積を演算し(但し、GF(2)上の演算)、前記分割秘密データK(1),…,K(n−1)を得る手段、
得られた分割秘密データK(1),…,K(n−1)から前記秘密情報Sを復元する手段、
として機能させるためのプログラム。
【請求項8】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置のプログラムであって、
前記秘密分散装置のコンピュータを、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sを一時的に前記コンピュータのメモリに書き込む手段、
前記メモリ内の秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段、
前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段、
前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段、
前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、
前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段、
として機能させるためのプログラム。
【請求項1】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置であって、
1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段と、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、
この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段と、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段と、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段と
を備えたことを特徴とする秘密分散装置。
【請求項2】
請求項1に記載の秘密分散装置において、
前記算出する手段は、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積に代えて、
前記乱数データ及び前記分割秘密データ(U(0,1),…,U(h,g),…,U(k−2,n−1),K(1),…,K(j),…,K(n−1))と前記生成行列Gとの行列の積を算出することを特徴とする秘密分散装置。
【請求項3】
請求項1又は請求項2に記載の秘密分散装置において、
前記配布する手段は、前記n個の列ベクトルにおける各々の列ベクトルを前記n個の分散情報D(0),…,D(n−1)に個別に含めており、
前記n個の記憶装置のうち、任意のk個の記憶装置から収集されたk個の分散情報からk個の列ベクトルを得る手段と、
このk個の列ベクトルから前記生成行列の部分行列を形成し、この部分行列の逆行列を算出する手段と、
前記収集されたk個の分散情報と前記逆行列との行列の積を演算し(但し、GF(2)上の演算)、前記分割秘密データK(1),…,K(j),…,K(n−1)を得る手段と、
得られた分割秘密データK(1),…,K(j),…,K(n−1)から前記秘密情報Sを復元する手段と
を備えたことを特徴とする秘密分散装置。
【請求項4】
請求項1に記載の秘密分散装置が実行する秘密分散方法であって、
入力された分散数n及び閾値kを前記記憶手段に記憶する工程と、
前記記憶手段内の分散数n及び閾値kに基づいて、第0行がゼロベクトルであり、前記第0行の下の(n−1)行×(n−1)列が単位行列とは左右対称な行列であるn行×(n−1)列の第1小行列を生成する工程と、
最も左側の第1小行列の各列を上に1回巡回シフトさせたn行×(n−1)列の新たな第1小行列を当該巡回シフト前の第1小行列の左側に隣接させる第1隣接工程と、
前記第1隣接工程をn−1回実行し、n行×n(n−1)列の第1部分行列を生成する工程と、
この第1部分行列の第1行目から第n−1行目を前記生成行列Gの第0行目から第n-2行目に割り当てて、前記生成行列Gの第0行目から第n−2行目までの部分行列を生成する第1部分行列割当て工程と、
第0行がゼロベクトルであり、この第0行の下の(n−1)行×(n−1)列が単位行列であるn行×(n−1)列の第2小行列を生成する工程と、
最も右側の第2小行列の各列を下にj回巡回シフトさせたn行×(n−1)列の新たな第2小行列を当該巡回シフト前の第2小行列の右側に隣接させる第2隣接工程(但し、j=0,1,…,k−2)と、
前記第2隣接工程をn−1回実行し、n行×n(n−1)列の第2部分行列を生成する第2部分行列生成工程と、
この第2部分行列の第1行目から第n−1行目を前記生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目に割り当てて、前記生成行列Gの第(n−1)(j+1)行目から第(n−1)(j+1)+n−2行目までの部分行列を生成する第2部分行列割当て工程(但し、j=0,1,…,k−2)と、
前記第2隣接工程及び前記第2部分行列割当て工程におけるjの値が初期値0から最終値k−2までの間、前記第2隣接工程、前記第2部分行列生成工程及び前記第2部分行列割当て工程を実行する毎に当該jの値を1だけ増加させつつ、前記第2隣接工程、前記第2部分行列生成工程及び前記第2部分行列割当て工程をk−1回実行する工程と、
前記第1部分割当て工程により割り当てられた第0行目から第n−2行目までの部分行列と、前記k−1回の第2部分割当て工程により割り当てられた第n−1行目から第(n−1)(k−1)+n−2行目までの部分行列とにより、前記k(n−1)行×n(n−1)列の生成行列Gを得る工程と
を備えたことを特徴とする秘密分散方法。
【請求項5】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置であって、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sが一時的に記憶される記憶手段と、
この秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段と、
前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段と、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段と、
前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、
前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段と、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段と、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段と
を備えたことを特徴とする秘密分散装置。
【請求項6】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)閾値法の秘密分散装置のプログラムであって、
前記秘密分散装置のコンピュータを、
1個あたりk(n−1)行×(n−1)列のサイズをもつn個の列ベクトルからなり、前記n個の列ベクトルのうちの任意のk個の列ベクトルがフルランクとなるGF(2)の生成行列Gを生成する(但し、前記生成行列Gのサイズはk(n−1)行×n(n−1)列、GF(2)は位数2の有限体)手段、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sを一時的に前記コンピュータのメモリに書き込む手段、
前記メモリ内の秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k−2,n−1)を生成する手段、
前記分割秘密データ及び前記乱数データ(K(1),…,K(j),…,K(n−1),U(0,1),…,U(h,g),…,U(k−2,n−1))と前記生成行列Gとの行列の積を算出し(但し、GF(2)上の演算)、この算出結果のj×(n−1)+i列目を分散部分データD(j,i)に割り当てて、n(n−1)個の分散部分データD(j,i)(但し、0≦j≦n−1、0≦i≦n−2)を算出する手段、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n−2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n−2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段、
として機能させるためのプログラム。
【請求項7】
請求項6に記載のプログラムにおいて、
前記配布する手段は、前記n個の列ベクトルにおける各々の列ベクトルを前記n個の分散情報D(0),…,D(n−1)に個別に含める手順を含んでおり、
前記コンピュータを、
前記n個の記憶装置のうち、任意のk個の記憶装置から収集されたk個の分散情報からk個の列ベクトルを得る手段、
このk個の列ベクトルから前記生成行列の部分行列を形成し、この部分行列の逆行列を算出する手段、
前記収集されたk個の分散情報と前記逆行列との行列の積を演算し(但し、GF(2)上の演算)、前記分割秘密データK(1),…,K(n−1)を得る手段、
得られた分割秘密データK(1),…,K(n−1)から前記秘密情報Sを復元する手段、
として機能させるためのプログラム。
【請求項8】
秘密情報Sが分散されてなるn個(但し、n≧k≧4)の分散情報D(0),…,D(n−1)を個別にn個の記憶装置に配布し、且つ、前記n個の分散情報のうち、任意のk個の分散情報から秘密情報Sを復元可能な(k,n)型の秘密分散装置のプログラムであって、
前記秘密分散装置のコンピュータを、
前記分散情報D(0)〜D(n−1)が配布される前に、前記秘密情報Sを一時的に前記コンピュータのメモリに書き込む手段、
前記メモリ内の秘密情報Sをn−1個に分割すると共に、分割結果に1からn−1までの行番号j(但し、1≦j≦n−1)を割り当てることにより、互いに同一サイズのn−1個の第1分割秘密データK(1),…,K(j),…,K(n−1)を生成する手段、
前記各分割秘密データのサイズと同一サイズのゼロ値を作成し、作成結果に行番号j=0を割り当てて第2分割秘密データK(0)を生成する手段、
前記各分割秘密データのサイズと同一のサイズのゼロ値データをk−1個作成し、行番号h(但し、0≦h≦k−2)と列番号g=0を割り当てて、乱数データU(0,0),…,U(h,0),…,U(k−2,0)を生成する手段、
前記各分割秘密データのサイズと同一のサイズの乱数を(k−1)(n−1)個生成し、行番号h(但し、0≦h≦k−2)と列番号g(但し、1≦g≦n−1)を割り当てて、乱数データU(0,1),…,U(h,g),…,U(k-2,n−1)を生成する手段、
前記乱数データU(0,0),…,U(h,g),…,U(k-2,n−1)に基づいて、n(n−1)個の乱数データR(j,i)=U(0,h×j+i+1(mod n))(+)… (+)U(h,h×j+i+1(mod n))(+)… (+)U(k−1,h×j+i+1(mod n))を算出する手段と(但し、(+)は排他的論理和を表す記号)、
前記分割秘密データK(0),K(1),…,K(j),…,K(n−1)及び前記乱数データR(0,0),…,R(i,j),…,R(n−1,n-2)に基づいて、n(n−1)個の分散部分データD(j,i)=K(j−i(mod n))(+)R(j,i)を算出する手段、
前記各分散部分データのうち、同一の行番号jを有するn−1個の前記分散部分データD(j,0)〜D(j,n-2)毎に、行番号jを割り当ててn個のヘッダ情報H(0),…,H(j),…,H(n−1)を生成する手段、
互いに同一の行番号jを有するヘッダ情報H(j)及び分散部分データD(j,0)〜D(j,n-2)からなるn個の分散情報D(0),…,D(j),…,D(n−1)を個別に前記n個の記憶装置に配布する手段、
として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【公開番号】特開2008−233823(P2008−233823A)
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願番号】特願2007−77421(P2007−77421)
【出願日】平成19年3月23日(2007.3.23)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】
【公開日】平成20年10月2日(2008.10.2)
【国際特許分類】
【出願日】平成19年3月23日(2007.3.23)
【出願人】(000003078)株式会社東芝 (54,554)
【出願人】(301063496)東芝ソリューション株式会社 (1,478)
【Fターム(参考)】
[ Back to top ]