情報処理装置、コード生成方法、コード検証方法およびプログラム
【課題】分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくした情報処理装置を提供する。
【解決手段】入力される秘密情報sを、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、秘密情報sとチェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、秘密情報s'がチェック用データ生成部に入力されたときの出力であるチェック用データv''とv'とが等しいか否かを判定し、チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、を有する。
【解決手段】入力される秘密情報sを、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、秘密情報sとチェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、秘密情報s'がチェック用データ生成部に入力されたときの出力であるチェック用データv''とv'とが等しいか否かを判定し、チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、を有する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データの改ざんを検知するための、情報処理装置、コード生成方法、コード検証方法、およびその方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【0002】
秘密にしておきたい情報(以下、秘密情報と称する)を保管する場合、秘密情報の紛失だけでなく、破壊の脅威、盗難の脅威がある。前者の脅威に対しては秘密情報のコピーを作成することが有効であるが、後者の盗難に対する脅威が増してしまう。
【0003】
このような問題を解決する手段の1つとして、秘密分散法が知られている。秘密分散法の1つである(k,n)閾値法について簡単に説明する。秘密情報をn個の分散情報に符号化する。n個の分散情報のうち任意のk個以上の分散情報を集めれば、秘密情報を完全に復元できるが、k-1個以下の分散情報を集めても、元の秘密情報に関する情報をまったく得られない。したがって、k-1個までの分散情報が盗難にあったとしても秘密情報が他人に漏れることがなく、n-k個までの分散情報が破壊されても、秘密情報を復元できる。
【0004】
(k, n)閾値法の一例が、非特許文献1に開示されている。この非特許文献1に開示された、shamirの提案する方式が効率的であるため、この方式が広く用いられている。
【0005】
非特許文献1の方式は、素数または素数のべき乗pに対する有限体GF(p)を秘密情報のデータ集合として用い、秘密情報sを定数項に持つGF(p)上のランダムな(k-1)次多項式f(x)上の点、(x_1,f(x_1)),...,(x_n,f(x_n))を分散情報とする方式である。k個の分散情報からk-1次の多項式は一意に復元でき、f(0)である秘密情報sを復元することができる。また、k-1個以下の分散情報からはf(0)を定めることはできず、秘密情報sに関する情報は一切漏れない。秘密情報を埋め込む箇所はf(0)以外の任意の箇所でもよい。また、多項式の係数などでもよい。
【0006】
また、xi(i=1,...,n)は互いに異なる値であればよい。
【0007】
このような(k, n)閾値法を用いることで対処できる脅威もあるが、以下に示すような脅威も存在する。
【0008】
(k, n)閾値法において分散情報の作成、配付が正しく行われ、その後、秘密情報を復元するために分散情報を複数集める状況を考える。
【0009】
このとき、分散情報を要求された側が配付された値を改竄することなく渡すとは限らない。また、単純な(k, n)閾値法を用いる場合、改竄された分散情報を用いて復元された値は、秘密情報と異なる値になってしまう可能性を持っている。
【0010】
現実の状況を例示すると、遺言状を分散したデータを作成して複数の子孫に渡しておいたところ、データが改ざんされ、一部の子孫にとって都合のよい内容に書き換えられてしまうということが挙げられる。
【0011】
このような攻撃が非特許文献1の方式に行われた場合、秘密情報をsとし、有限体上の加算を+と書くと、改ざん者は、s+s'が復元されるような改ざんを行うことができることが知られている。そのため、先の遺言状の例のような改ざんが行われた場合には、その事実を検知できるような方式が望ましい。
【0012】
このような機能を、非特許文献1に開示されている(k,n)閾値法に付与する方法は様々知られている。演算処理が効率的な方法としては、以下の方法が知られている。この方法について、秘密情報を分散する分散フェーズと、秘密情報を復元する復元フェーズに分けて概要を記述する。
【0013】
[分散フェーズ]
1.秘密情報になんらかの処理を適用する。なお、処理を適用した後の値をコードと呼ぶ。
2.コードを既存の(k,n)閾値法で分散する。
【0014】
[復元フェーズ]
1.コードを復元する。
2.コードの正当性を調べる。ここで正当でないものであると判明した場合、改ざんがあったものとする。
【0015】
このような構成を採用し、秘密情報を入力としてコードを出力する装置をGenCode()とし、生成されたコードを入力としてそのコードが正当性なものであるかどうかを出力する関数をVerCode()とし、ある秘密情報sについてのコードをcとする。このとき、VerCode(c+c')が正当なものであるという出力を行うようなc'を、改ざん者が生成することができる確率は十分に低い。それだけでなく、コードが正当なときには、必ずコードに対応する秘密情報を出力するものを用いることで、上述の(k,n)閾値法に対する不正が高い確率で検知可能となる。
【0016】
この方法を実行する情報処理装置について説明する。
【0017】
図8Aは関連する分散情報生成装置の一構成例を示すブロック図である。図8Bは関連する復元装置の一構成例を示すブロック図である。
【0018】
図8Aおよび図8Bに示すように、分散情報生成装置700および復元装置800のそれぞれには、分散情報を格納するための複数の保管装置900が接続されている。
【0019】
はじめに、図8Aを参照して、分散情報生成装置700の構成を説明する。
【0020】
分散情報生成装置700は、コード生成部701およびコード分散部702を有する。分散情報生成装置700は、秘密情報用データ集合Sの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、保管先装置指定データの指定するn個の保管装置900のそれぞれに対し、分散コードデータ集合BSの元である分散コード情報を格納する。
【0021】
コード生成部701は、秘密情報用データ集合Sの元sが入力されると、コード情報用データ集合Cの元cを出力する。
【0022】
コード分散部702は、集合Cの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、保管先装置指定データの指定するn個の保管装置900のそれぞれに対して分散コードデータ集合BSの元を格納する。
【0023】
次に、図8Bを参照して、復元装置800の構成を説明する。
【0024】
復元装置800は、コード復元部801およびコード正当性検証部802を有する。復元装置800は、集合Cの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、複数の保管装置900から、それぞれが記憶するBSの元を読み出し、秘密情報用データ集合Sの元のデータ、または、不正の検出を表す記号を出力する。
【0025】
コード復元部801は、集合Cの元と、閾値kと、保管先装置指定データとが入力されると、複数の保管装置900から、それぞれの記憶部901が記憶するBSの元を読み出し、Cの元を出力する。
【0026】
コード正当性検証部802は、Cの元が入力されると、Sの元のデータ、またはコードが不正であったことを表すデータを出力する。なお、保管装置900は、分散コード用データ集合BCの元を記憶する記憶部901を有する。
【0027】
次に、分散情報生成装置700の動作手順を、図9のフローチャートを参照して説明する。
【0028】
閾値kと、分散情報数nと、保管先装置指定データと、秘密情報用データ集合Sの元sが分散情報生成装置700に入力される(ステップA1)。
【0029】
コード生成部701は、入力されたsに対応するコード情報用データ集合Cの元であるcを出力する(ステップA2)。
【0030】
コード分散部702は、閾値kと、分散情報数nと、保管先装置指定データと、コード生成部701の出力であるcとが入力されると、cを(k,n)閾値法で分散符号化し、分散符号化されたcを、保管先装置指定データの指定する保管装置900の記憶部901に格納する(ステップA3)。
【0031】
次に、復元装置800の動作手順を、図10のフローチャートを参照して説明する。
【0032】
閾値kと分散情報数nが復元装置800に入力される(ステップB1)。コード復元部801は、k機以上の複数の保管装置900の記憶部901からデータを読み出す(ステップB2)。続いて、コード復元部801は、読み出したデータと閾値kとから、コード分散部702の分散符号化方法に対応する復元方法を用いて復元処理を行った結果であるCの元c'を出力する(ステップB3)。
【0033】
コード正当性検証部802は、コード復元部801からc'を受け取ると、c'の正当性を検証する処理を行い、正当なコードであった場合には、c'に対応するSの元s'を出力し、それ以外の場合には、不正の検出を表す記号を出力する(ステップB4)。
【0034】
なお、GenCodeの入力には、秘密情報以外の情報を入力する場合もある。また、cは有限体の要素がひとつであるとは限らず、複数の異なる有限体の要素からなる場合もある。例えば、3つの要素からなる場合を考えるとc=(c1,c2,c3)となる場合もある。このとき、c=(c1,c2,c3)とc'=(c1',c2',c3')に対し、+をc1,c2,c3の各要素に対応する有限体上で定義されている加算であるとすると、c+c'は(c1+c1',c2+c2',c3+c3')を表しているものとする。
【0035】
また、コードの集合が小さければ小さいほど分散情報のサイズが小さく、秘密情報を分散して保管する場合に必要とする記憶容量が少なくて済み、好ましい。
【0036】
また、これまで述べた技術を、先に説明したShamirの閾値法以外にも適用可能である。例えば、線形秘密分散法と呼ばれる秘密分散法に対してもこれまでに述べた技術を適用できることが知られている。
【0037】
線形秘密分散法とは,次のような性質を持った秘密分散法である。なお、秘密を復元可能な分散情報の集合を要素とする集合をアクセス構造と呼ぶことにする。秘密情報は有限体Fの元であるとする。
1. 分散情報(v_1,...,v_n) が(v_1, v_2, ... ,v_n)= (s, r_1, ... ,r_{t-1})M のようにF 上の固定のt*n行列Mとランダムに選ばれたF の要素r_i によって生成される。
2. アクセス構造に含まれる分散情報の集合V_i = {v_{i_1},v_{i_2},...,v_{i_j}}から秘密情報を、
s =c_{i_1}*v_{i_1} + c_{i_2}*v_{i_2} + ... + c_{i_j}*v_{i_j}のように計算できる。ただし、c_{i_1},c_{i_2},..,c_{i_j}はV_iによって一意に決定される定数である。
【0038】
先に説明したShamirの閾値法も線形秘密分散法であることが知られている。先に説明した技術を線形秘密分散法に用いる際、閾値kと分散情報数nの情報の代わりにアクセス構造に相当する情報を用いればよい。
【0039】
一方、提案されている方式には、非特許文献1よりも演算処理が効率的な方式として、非特許文献2、非特許文献3および非特許文献4に開示されているものがある。そして、これら3つの文献に開示された方式を2種類に分類すると、非特許文献2および非特許文献3に開示された方式と、非特許文献4に開示された方式とに分けられる。以下にそれぞれの説明を行う。
【0040】
非特許文献2および非特許文献3に開示されている処理装置は、秘密情報と、乱数と、秘密情報およびこれらの乱数をある関数に入力したときの出力とをコードとして生成する処理を行うコード生成装置と、コードを入力としてその正当性を検証するコード正当性検証装置とからなる。
【0041】
これらの方式は、秘密情報そのものの乱数性とは関係なく、乱数Rはそれ自体が選ばれる元の集合から一様にランダムに選ばれることを条件として、秘密情報が選ばれる集合と乱数が選ばれる集合とコードの集合上の加算を+と表し、ある関数をM()と表すと、秘密情報s1と乱数r1について、s1とc1 = M(s1,r1)を取得した改ざん者がM(s1+s1', r1+r1')= M(s1,r1)+c1'を満たすs1',r1',c1'を生成するという改ざんを高い確率で検知可能となっている。
【0042】
このような、秘密情報と一様な乱数の改ざんを検知するためのコード生成装置とコード検証装置の構成の一例を説明する。なお、この方式のコード生成装置を「改ざん検知コード生成装置」と称し、コード検証装置を「改ざん検知コード検証装置」と称する。
【0043】
図11Aは非特許文献2または非特許文献3に開示されたコード生成装置の一構成例を示すブロック図である。図11Bは非特許文献2または非特許文献3に開示されたコード検証装置の一構成例を示すブロック図である。
【0044】
図11Aに示すように、改ざん検知コード生成装置100は、チェック用データ生成部101を有する。改ざん検知コード生成装置100は、秘密情報用データ集合Sの元である秘密情報sと、乱数情報用データ集合Rの元である乱数rとが入力されると、sとrを出力するとともに、sとrをチェック用データ生成部101に入力し、その結果としてチェック用データ集合Cの元であるcをチェック用データとして出力する。
【0045】
また、図11Bに示すように、改ざん検知コード検証装置200は、チェック用データ生成部101および同一性判定部201を有する。
【0046】
改ざん検知コード検証装置200は、秘密情報用データ集合Sの元である秘密情報sと、乱数情報用データ集合Rの元である乱数rと、チェック用データ集合Cの元であるチェック用データcとが入力されると、sとrをチェック用データ生成部101に入力する。チェック用データ生成部101は、sとrが入力されると、c'を生成して出力する。同一判定部201は、チェック用データcと、チェック用データ生成部101の出力であるc'とが入力されると、判定処理を行う。同一判定部201は、判定処理の結果、c'=cである場合にはコードの整合性がとれていたことを表す記号を出力し、それ以外の場合はコードの整合性がとれていないことを表す記号を出力する。また、改ざん検知コード検証装置200は、秘密情報sを出力する。
【0047】
非特許文献2の方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、乱数が要素数1/εの集合の要素、関数の出力が要素数1/εの集合の要素となる。つまりコードはおよそ要素数がs*1/(ε^2)であるような集合の要素となる。この方式はsと1/εがほぼ等しい場合にのみ動作するというパラメータ上の条件がある。これは、εは1/2^80程度で十分であってもsが2^1000であればεも1/2^1000とする必要があることを表す。コードの長さに影響し、これらのパラメータは自由に設定できる方が好ましい。
【0048】
具体的には、以下に説明する通りである。
【0049】
非特許文献2に開示された方式は、pを素数とし、Z/pZを秘密情報の集合Sとしたとき、Sの要素であるsのコードとして、sと、Z/pZから一様ランダムに選択した要素rと、*をZ/pZ上の乗算として、s*r mod pをチェック用データとする方式である。
【0050】
Z/pZの代わりにqを素数のべき乗としたとき、それぞれの集合をガロア体GF(q)の要素として乗算をガロア体上の乗算としてもよい。
【0051】
非特許文献3の方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、乱数が要素数1/εの集合の要素、関数の出力が要素数1/εの集合の要素となる。よって、コードはおよそ要素数がs*1/(ε^2)であるような集合の要素となる。つまり効率は非特許文献2の方式と同程度だが、sと1/εをほぼ独立に設定することができるという特徴がある。そのため、非特許文献2にあった問題が解決された方式であるといえる。
【0052】
具体的には、以下に説明する通りである。
【0053】
非特許文献3に開示された方式は、pを素数とし、Nを正の整数として、(Z/pZ)^Nを秘密情報の集合とする方式である。(Z/pZ)^Nの元をsまたは、(s_1,s_2,...,s_N)と記す。また、(Z/pZ)^Nの代わりにガロア体GF(p^N)を用いてもよい。
【0054】
このとき、(s_1,s_2,...,s_N)のコードとして、sと、Z/pZから一様ランダムに選択した要素rと、*をZ/pZ上の乗算として、s_1*r + s_2*r^2 + ... + s_{N-1}*r^{N-1} + s_{N}*r^{N+1} mod p をチェック用データとする方式である。
【0055】
Z/pZの代わりにqを素数のべき乗としたとき、それぞれの集合をガロア体GF(q)の要素として乗算をガロア体上の乗算としてもよい。
【0056】
一方、非特許文献4に開示されている方式では、秘密情報の集合の要素を入力して秘密情報よりも大きな集合の部分集合の要素を出力する関数であって、異なる値が入力されたときは必ず異なる値が出力される関数を用いる方法である。このような関数をN()と表すとき、コードの生成装置は秘密情報sが入力されると、N(s)をコードとして出力する。コードの検証装置は、コードが入力されると、そのコードに対応する秘密情報の要素があるかどうかを調べ、秘密情報の要素がある場合にはその秘密情報に改ざんがなかったことを表す記号を出力し、それ以外の場合は秘密情報に改ざんがあったことを表す記号を出力する。この方式では、秘密情報が選ばれる集合から一様にランダムに選ばれることを条件としてコードの改ざんを高い確率で検知可能である。
【0057】
具体的には、以下の通りである。
【0058】
秘密情報の集合Sとして要素数がpである集合を用いる場合、N= (p(p-1) +1)としたときの{0,...p(p-1)}の要素数がpである部分集合Bであって、その部分集合の任意の異なる2つの要素s1とs2についてs1-s2 mod Nがすべて異なるという性質をもった部分集合を用いる方式である。
【0059】
より具体的には、SのコードとしてSの要素をBの要素に写像する関数を用いる方式である。この方式の検証方法はSからBに写像を行った際の逆を計算する関数を用いる。このとき、コードに対応するSの元がない場合には改ざんがあるものとみなす方式である。
【0060】
また、非特許文献4に開示された方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、関数の出力は要素数s*(1/ε)の集合の要素となる。また、sと1/εがほぼ等しい場合にのみ動作するというパラメータ上の条件がある。つまり、非特許文献2の方式と同様の課題を持つ方式であるといえる。ただし、非特許文献2や非特許文献3の方式を用いた場合に比べてコードの要素数の集合は1/εだけ少ないため演算処理の効率のよい方式となっていることがわかる。
【0061】
このような、一様な秘密情報の改ざんを検知するためのコード生成装置とコード検証装置の構成の一例を説明する。なお、この方式のコード生成装置を「改ざん検知コード生成装置」と称し、コード検証装置を「改ざん検知コード検証装置」と称する。
【0062】
図12Aは非特許文献4に開示されたコード生成装置の一構成例を示すブロック図である。図12Bは非特許文献4に開示されたコード検証装置の一構成例を示すブロック図である。
【0063】
図12Aに示すように、改ざん検知コード生成装置300は、秘密情報符号化部301を有する。改ざん検知コード生成装置300は、秘密情報用データ集合Sの元である秘密情報sが入力されると、sを秘密情報符号化部301に入力し、その出力のコード用データ集合Cの元であるcをコードとして出力する。
【0064】
図12Bに示すように、改ざん検知コード検証装置400は、秘密情報符号化部301に対応する秘密情報復号化部401と、復号結果判定部402とを有する。
【0065】
改ざん検知コード検証装置400は、コード用データ集合Cの元であるcが入力されると、cを秘密情報復号化部401に入力し、秘密情報復号化部401の出力を復号結果判定部402に入力する。復号結果判定部402は、秘密情報復号化部401から受信した値が秘密情報用データ集合の要素である場合、その値をそのまま出力し、それ以外の場合、改ざんがあったことを表す記号を出力する。
【先行技術文献】
【非特許文献】
【0066】
【非特許文献1】Adi Shamir. How to share a secret. Comm.ACM,22(11) 612-613(1979).
【非特許文献2】Sergio Cabello, Carles Padro', Germa'n Sa'ez: Secret Sharing Schemes with Detection of Cheaters for a General Access Structure. Des. Codes Cryptography 25(2): 175-188 (2002)
【非特許文献3】Toshinori Araki, Satoshi Obana: Flaws in Some Secret Sharing Schemes Against Cheating. ACISP 2007: 122-132
【非特許文献4】Wakaha Ogata. Kaoru Kurosawa. Douglas R Stinson:Optimum Secret Sharing Scheme Secure Against Cheating SIAM J.Discrete Math.,vol.20,no1,pages 79-95,2006
【発明の概要】
【発明が解決しようとする課題】
【0067】
(k,n)閾値法を含む線形秘密分散法を用いて分散情報を生成する際、分散情報の改ざんを高確率で検知可能なコードを生成する方法として、検知性について非特許文献4の方式と同程度の効率であって、パラメータを自由に設定できるものがなかった。
【0068】
本発明の目的は、分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくした情報処理装置、コード生成方法、コード検証方法、およびその方法をコンピュータに実行させるためのプログラムを提供することである。
【課題を解決するための手段】
【0069】
上記目的を達成するための本発明の情報処理装置は、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、
前記秘密情報s'が前記チェック用データ生成部に入力されたときの出力であるチェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、
を有する構成である。
【0070】
また、本発明のコード生成方法は、線形秘密分散法により生成される情報の改ざんを検知するためのコード生成方法であって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するものである。
【0071】
また、本発明のコード検証方法は、線形秘密分散法により生成される情報の改ざんを検知するためのコード検証方法であって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定するものである。
【0072】
また、本発明のプログラムは、線形秘密分散法により生成される情報の改ざんを検知するためのコードを生成するコンピュータに実行させるためのプログラムであって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する処理を前記コンピュータに実行させるものである。
【0073】
さらに、本発明のプログラムは、線形秘密分散法により生成される情報の改ざんを検知するためのコードを検証するコンピュータに実行させるためのプログラムであって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する処理を前記コンピュータに実行させるものである。
【発明の効果】
【0074】
本発明によれば、線形秘密分散法を用いた分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくすることができる。
【図面の簡単な説明】
【0075】
【図1】本実施形態の情報処理装置の一構成例を示すブロック図である。
【図2】図1に示した情報処理装置の具体的構成例を示すブロック図である。
【図3A】本実施形態の情報処理装置に含まれるコード生成装置の一構成例を示すブロック図である。
【図3B】本実施形態の情報処理装置に含まれるコード検証装置の一構成例を示すブロック図である。
【図4】図3Aに示したコード生成装置の動作手順を示すフローチャートである。
【図5】図3Bに示したコード検証装置の動作手順を示すフローチャートである。
【図6】本実施形態による、分散情報を生成する手順を示すフローチャートである。
【図7】本実施形態による、分散情報を復元する手順を示すフローチャートである。
【図8A】関連する分散情報生成装置の一構成例を示すブロック図である。
【図8B】関連する復元装置の一構成例を示すブロック図である。
【図9】図8Aに示した分散情報生成装置の動作手順を示すフローチャートである。
【図10】図8Bに示した復元装置の動作手順を示すフローチャートである。
【図11A】非特許文献2または非特許文献3に開示されたコード生成装置の一構成例を示すブロック図である。
【図11B】非特許文献2または非特許文献3に開示されたコード検証装置の一構成例を示すブロック図である。
【図12A】非特許文献4に開示されたコード生成装置の一構成例を示すブロック図である。
【図12B】非特許文献4に開示されたコード検証装置の一構成例を示すブロック図である。
【発明を実施するための形態】
【0076】
本実施形態について図面を参照して詳細に説明する。図1は本実施形態の情報処理装置の一構成例を示すブロック図である。
【0077】
図1に示すように、本実施形態の情報処理装置10は、記憶部35と、制御部25とを有する。制御部25は、コード分散部702と、コード復元部801と、後述する秘密情報剰余算出部501および同一性判定部601とを有する。
【0078】
図2は図1に示した情報処理装置の具体的構成例を示すブロック図である。
【0079】
図2に示すように、プログラムにしたがって処理を実行するCPU(Central Processing Unit)11と、CPU11に供給するプログラムおよび演算処理過程の情報を一時的に保存するためのRAM(Random Access Memory)13と、プログラムが予め格納された主記憶部12と、秘密情報、閾値および分散情報数などの演算処理に必要な情報が格納されたデータ蓄積部14と、記憶部35の各記憶領域間のデータ転送を制御するメモリ制御インタフェイス部15と、情報を入力するための入力部20と、演算結果を出力するための出力部30と、入力部20および出力部30の入出力制御を行うI/Oインタフェイス部16とを有する。これらの構成は、バス18を介して接続されている。
【0080】
プログラムには、コード分散部702、同一性判定部601、コード復元部801、および秘密情報剰余算出部501の機能をCPU11に実行させるための処理手順が書き込まれている。CPU11がプログラムを実行することで、コード分散部702、同一性判定部601、コード復元部801、および秘密情報剰余算出部501が情報処理装置10に仮想的に構成される。
【0081】
なお、プログラムに、秘密情報符号化部301、秘密情報復号化部401および復号結果判定部402の機能をCPU11に実行させるための処理手順がさらに書き込まれていてもよい。
【0082】
なお、データ蓄積部14は、情報処理装置10内に設けていなくてもよく、情報処理装置10とは別に設けていてもよい。また、データ蓄積部14は、記憶部901を有する保管装置900としてもよい。
【0083】
また、演算処理に必要なプログラムやデータを格納した記憶媒体を入力部20に装着し、それらの情報を入力部20を介して情報処理装置10に入力するようにしてもよい。記憶部媒体には、例えば、磁気ディスク、半導体メモリ、光ディスクなどがあるが、その他の記録媒体であってもよい。
【0084】
次に、チェック用データに相当するコードの生成と検証に注目して、図1に示した情報処理装置10が実行する情報改ざん検知方法を説明する。本実施形態で処理対象となる秘密情報は、例えば、文書の暗号化のための秘密鍵となる素数である。この場合、秘密情報の元の集合は素数の集合となる。また、ここでは、情報処理装置10を、コードの生成処理を行うコード生成装置とコードの検証処理を行うコード検証装置の2つの装置に分けて説明する。
【0085】
秘密情報sは、pを素数としたとき、2以上の整数Nの要素数で{1, ... ,p-1}の要素の列に符号化されて秘密情報剰余算出部501に入力されるものとする。また、チェック用データの集合として{1, ... ,p-1}を用いる。
【0086】
また、素数pはデータ蓄積部14に予め記録されていてもよく、秘密情報剰余算出部501に設けられたメモリ(不図示)に予め記録されていてもよく、秘密情報剰余算出部501に外部から入力されてもよい。秘密情報剰余算出部501への入力は、コード生成装置500への入力で実行される。以下では、説明を省略するが、素数pが秘密情報剰余部501のメモリ(不図示)に記録されているものとする。
【0087】
また、秘密情報の符号化処理はコード生成装置500への入力前に行われてもよく、符号化処理の機能をコード生成装置500に予め備え、コード生成装置500が入力される秘密情報の符号化処理を実行してもよい。以下では、符号化された秘密情報がコード生成装置500に入力される場合で説明する。
【0088】
また、本実施形態では、秘密分散法として非特許文献4に記載されている(k,n)閾値法を適用するが、秘密分散法は線形秘密分散法であれば適用可能である。
【0089】
図3Aは本実施形態の情報処理装置に含まれるコード生成装置の一構成例を示すブロック図である。図3Bは本実施形態の情報処理装置に含まれるコード検証装置の一構成例を示すブロック図である。本実施形態の情報処理装置10は、コード生成装置500およびコード検証装置600を含む構成である。
【0090】
図3Aに示すように、コード生成装置500は、秘密情報剰余算出部501を有する構成である。秘密情報剰余算出部501はチェック用データ生成部に相当する。コード生成装置500は、秘密情報用データ集合Sの元である秘密情報s=(s_1,...,s_N)が入力されると、入力されたsと、秘密情報剰余部501の出力であるチェック用データ集合Cの元を出力する。
【0091】
秘密情報剰余算出部501は、s=(s_1,...,s_N)が入力されると、c = s_1* s_2* ... *s_N mod pを計算し、cを出力する。
【0092】
ここでは、秘密情報s=(s_1,...,s_N)が秘密情報剰余部501に入力される場合としているが、秘密情報sが入力されると、秘密情報剰余部501が、プログラムにしたがって、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列(s_1,...,s_N)で表す処理を実行してもよい。
【0093】
次に、コード検証装置600について説明する。
【0094】
図3Bに示すように、コード検証装置600は、上述した秘密情報剰余算出部501と、同一性判定部601とを有する。コード検証装置600は、秘密情報用データ集合Sの元である秘密情報s'=(s'_1,...,s'_N)とチェック用データ集合Cの元c'が入力されると、同一性判定装置601の出力である検証結果とs'を出力する。
【0095】
秘密情報剰余算出部501は、s' = (s'_1,...,s'_N)が入力されると、上述したように、c'' = s'_1*s'_2*...*s'_N mod pを計算する処理を行い、c''を同一性判定部601に渡す。
【0096】
同一性判定部601は、秘密情報剰余算出部501の出力であるc''を秘密情報剰余算出部501から受け取り、コード検証装置600に入力されたc'を受け取ると、c' = c''が満たされるか否かをチェックする。その結果、c' = c''である場合、同一性判定部601は、データが改ざんされていないと判定し、改ざんが検出されなかったことを表す記号を出力する。その反対に、c' ≠ c''である場合、同一性判定部601は、データが改ざんされていると判定し、改ざんの検出を表す記号を出力する。
【0097】
次に、コード生成装置500の動作手順を、図4のフローチャートを参照して説明する。
【0098】
秘密情報用データ集合Sの元s=(s_1,...,s_N)がコード生成装置500に入力される(ステップC1)。秘密情報剰余算出部501は、s=(s_1,...,s_N)が入力されると、c = s_1* s_2* ... *s_N mod pを算出する(ステップC2)。続いて、コード生成装置500は、秘密情報剰余算出部501の算出結果であるcとコード生成装置500への入力であるsを出力する(ステップC3)。
【0099】
その後、秘密情報sおよびチェック用データcの情報が分散情報に埋め込まれる際には、図1に示したコード分散部702が、秘密情報sとチェック用データcに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するが、ここでは、その詳細な説明を省略する。
【0100】
次に、コード検証装置600の動作手順を、図5のフローチャートを参照して説明する。
【0101】
秘密情報用データ集合Sの元s'=(s'_1,...,s'_N)と、チェック用データ集合Cの元であるc'がコード検証装置600に入力される(ステップD1)。秘密情報剰余算出部501は、s'=(s'_1,...,s'_N)が入力されると、c''=s'_1*s'_2*...*s'_N mod pを算出する(ステップD2)。
【0102】
ステップD1でコード検証装置600に入力されたc'とステップD2で算出されたc''とが同一性判定部601に入力される(ステップD3)。同一性判定部601はc' = c''が満たされるか否かをチェックする(ステップD4)。その結果、c' = c''である場合、同一性判定部601は、データが改ざんされていないと判定し、改ざんが検出されなかったことを表す記号を出力する(ステップD5)。ステップD4でc' ≠ c''である場合、同一性判定部601は、データが改ざんされていると判定し、改ざんの検出を表す記号を出力する(ステップD6)。
【0103】
なお、ステップD1の前に、図1に示したコード復元部801が線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、これらの情報がステップD1でコード検証装置600に入力されるが、ここでは、その詳細な説明を省略している。
【0104】
ここまで、チェック用データのコードに注目して説明したが、図1に示した情報処理装置10による、チェック用データを分散情報に埋め込む場合の処理方法について説明する。
【0105】
ここでは、コード分散部702は分散符号語生成部(不図示)を含み、コード復元部801は符号語復元部(不図示)を含むものとする。これらの構成もCPU11がプログラムを実行することで仮想的に構成されるものである。
【0106】
はじめに、秘密情報に対して分散符号化処理を行って、分散情報を生成する手順を説明する。図6は、本実施形態による、分散情報を生成する手順を示すフローチャートである。
【0107】
図6に示すように、秘密情報剰余算出部501は、秘密情報sが入力されると、秘密情報sをある素数pを用いてsを1からp-1の値の列{s_1,...,s_N}と表し、s_1*...*s_N mod pをチェック用データvとして求める(ステップE1)。
【0108】
その後、分散符号語生成部(不図示)は、秘密情報sとチェック用データvが埋め込まれた(k-1)次多項式Fを生成し、互いに異なるn個の値x1乃至xnを多項式Fに入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成し、分散符号語情報を出力する(ステップE2)。
【0109】
次に、情報処理装置10に復元対象となる情報が入力されたとき、その情報が改ざんされているか否かを判定する手順を説明する。図7は、本実施形態による、分散情報を復元する手順を示すフローチャートである。
【0110】
符号語復元部(不図示)は、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、これらの点を通る(k-1)次多項式F'を生成し、多項式F'に埋め込まれた秘密情報s'={s'_1,...,s'_N}とチェック用データv'を読み出して出力する(ステップF1)。秘密情報剰余算出部501は、s'が入力されると、s'_1*...*s'_N mod pをチェック用データv''として求める(ステップF2)。
【0111】
同一性判定部601は、チェック用データv'とv''が等しいかどうかを判定する(ステップF3)。その結果、v'とv''が等しい場合、同一性判定部601はデータが改ざんされていない旨の検証結果を出力し(ステップF4)、v'とv''が等しくない場合、同一性判定部601はデータが改ざんされている旨の検証結果を出力する(ステップF5)。
【実施例1】
【0112】
本実施例のコード生成装置500は、入力される秘密情報を用いて、分散情報の改ざん検知コードを生成して出力する。本実施例のコード検証装置600は、入力されるコードの正当性を検証する。
【0113】
本実施例では、秘密情報sを複数の要素の組s= (s_{0,1},...,s_{0,N})によって表す。Nは2以上の数であって、各要素s_{0,i}(i = 1,...,N)はpを素数として、1,...,p-1とする。
【0114】
本実施例のコード生成装置500は、秘密情報sが入力されると、実施形態で説明したように演算を行い、秘密情報sを出力するとともに、c= s_{0,1}*s_{0,2}*...+s_{0,N} mod pをコードとして出力する。生成されたコードは分散情報に埋め込まれる。
【0115】
一方、コード検証装置600は、収集された分散情報から読み出された秘密情報s'= (s'_{0,1},...,s'_{0,N})とコードc'が入力されると、c''= s'_{0,1}*s'_{0,2}*...+s'_{0,N} mod pを求める。そして、コード検証装置600は、コードc'とc''が等しいか否かを判定し、c'= c''である場合にはデータが改ざんされていないと判定し、c'≠ c''である場合にはデータが改ざんされていると判定し、検証結果を出力する。
【0116】
ここで改ざん者が秘密情報s'をs_{1,1},...,s_{1,N}だけ、コードcをc'''だけ改ざんする場合を考える。
このとき、(s_{0,1}+s_{1,1})*(s_{0,2}+s_{1,2})*...*(s_{0,N}+s_{1,N}) = s_{0,1}*s_{0,2}*...*s_{0,N} + s_{0,1}*s_{0,2}*...*s_{1,N} + ... + s_{1,1}*s_{1,2}*...*s_{1,N}となっている。
【0117】
つまり、どのように改ざんを行っても、s_{0,1}*s_{0,2}*...*s_{1,N}のように未知の秘密情報を含む項が存在する。
【0118】
そのため、改ざん者は、改ざんの結果がコードc'''に対してどのような影響を及ぼすかは秘密情報の確率分布に従って推測するよりなく、例えば秘密情報が一様な分布に従ってランダムに選ばれる場合には、改ざんした結果が予想した値と等しくなる確率は1/(p-1)となる。
【0119】
この場合、秘密情報の集合の要素数は(p-1)*Nとなり、改ざんの確率は1/p程度となる。
コードの集合の要素数はおよそp*(N+1)であり、検知性について非特許文献4の方式と同程度である。これに加え、素数pのサイズとNをほぼ独立に設定することが可能であるので、パラメータが自由に設定可能である。
【0120】
よって、本実施形態では、(k,n)閾値法を含む線形秘密分散法による分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくすることができる。
【産業上の利用可能性】
【0121】
本発明を秘密鍵などの機密情報の分散管理に利用できる。
【符号の説明】
【0122】
10 情報処理装置
11 CPU
12 主記憶部
13 RAM
14 データ蓄積部
15 メモリ制御インタフェイス部
16 I/Oインタフェイス部
20 入力部
25 制御部
30 出力部
35 記憶部
501 秘密情報剰余算出部
601 同一性判定部
702 コード分散部
801 コード復元部
【技術分野】
【0001】
本発明は、データの改ざんを検知するための、情報処理装置、コード生成方法、コード検証方法、およびその方法をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【0002】
秘密にしておきたい情報(以下、秘密情報と称する)を保管する場合、秘密情報の紛失だけでなく、破壊の脅威、盗難の脅威がある。前者の脅威に対しては秘密情報のコピーを作成することが有効であるが、後者の盗難に対する脅威が増してしまう。
【0003】
このような問題を解決する手段の1つとして、秘密分散法が知られている。秘密分散法の1つである(k,n)閾値法について簡単に説明する。秘密情報をn個の分散情報に符号化する。n個の分散情報のうち任意のk個以上の分散情報を集めれば、秘密情報を完全に復元できるが、k-1個以下の分散情報を集めても、元の秘密情報に関する情報をまったく得られない。したがって、k-1個までの分散情報が盗難にあったとしても秘密情報が他人に漏れることがなく、n-k個までの分散情報が破壊されても、秘密情報を復元できる。
【0004】
(k, n)閾値法の一例が、非特許文献1に開示されている。この非特許文献1に開示された、shamirの提案する方式が効率的であるため、この方式が広く用いられている。
【0005】
非特許文献1の方式は、素数または素数のべき乗pに対する有限体GF(p)を秘密情報のデータ集合として用い、秘密情報sを定数項に持つGF(p)上のランダムな(k-1)次多項式f(x)上の点、(x_1,f(x_1)),...,(x_n,f(x_n))を分散情報とする方式である。k個の分散情報からk-1次の多項式は一意に復元でき、f(0)である秘密情報sを復元することができる。また、k-1個以下の分散情報からはf(0)を定めることはできず、秘密情報sに関する情報は一切漏れない。秘密情報を埋め込む箇所はf(0)以外の任意の箇所でもよい。また、多項式の係数などでもよい。
【0006】
また、xi(i=1,...,n)は互いに異なる値であればよい。
【0007】
このような(k, n)閾値法を用いることで対処できる脅威もあるが、以下に示すような脅威も存在する。
【0008】
(k, n)閾値法において分散情報の作成、配付が正しく行われ、その後、秘密情報を復元するために分散情報を複数集める状況を考える。
【0009】
このとき、分散情報を要求された側が配付された値を改竄することなく渡すとは限らない。また、単純な(k, n)閾値法を用いる場合、改竄された分散情報を用いて復元された値は、秘密情報と異なる値になってしまう可能性を持っている。
【0010】
現実の状況を例示すると、遺言状を分散したデータを作成して複数の子孫に渡しておいたところ、データが改ざんされ、一部の子孫にとって都合のよい内容に書き換えられてしまうということが挙げられる。
【0011】
このような攻撃が非特許文献1の方式に行われた場合、秘密情報をsとし、有限体上の加算を+と書くと、改ざん者は、s+s'が復元されるような改ざんを行うことができることが知られている。そのため、先の遺言状の例のような改ざんが行われた場合には、その事実を検知できるような方式が望ましい。
【0012】
このような機能を、非特許文献1に開示されている(k,n)閾値法に付与する方法は様々知られている。演算処理が効率的な方法としては、以下の方法が知られている。この方法について、秘密情報を分散する分散フェーズと、秘密情報を復元する復元フェーズに分けて概要を記述する。
【0013】
[分散フェーズ]
1.秘密情報になんらかの処理を適用する。なお、処理を適用した後の値をコードと呼ぶ。
2.コードを既存の(k,n)閾値法で分散する。
【0014】
[復元フェーズ]
1.コードを復元する。
2.コードの正当性を調べる。ここで正当でないものであると判明した場合、改ざんがあったものとする。
【0015】
このような構成を採用し、秘密情報を入力としてコードを出力する装置をGenCode()とし、生成されたコードを入力としてそのコードが正当性なものであるかどうかを出力する関数をVerCode()とし、ある秘密情報sについてのコードをcとする。このとき、VerCode(c+c')が正当なものであるという出力を行うようなc'を、改ざん者が生成することができる確率は十分に低い。それだけでなく、コードが正当なときには、必ずコードに対応する秘密情報を出力するものを用いることで、上述の(k,n)閾値法に対する不正が高い確率で検知可能となる。
【0016】
この方法を実行する情報処理装置について説明する。
【0017】
図8Aは関連する分散情報生成装置の一構成例を示すブロック図である。図8Bは関連する復元装置の一構成例を示すブロック図である。
【0018】
図8Aおよび図8Bに示すように、分散情報生成装置700および復元装置800のそれぞれには、分散情報を格納するための複数の保管装置900が接続されている。
【0019】
はじめに、図8Aを参照して、分散情報生成装置700の構成を説明する。
【0020】
分散情報生成装置700は、コード生成部701およびコード分散部702を有する。分散情報生成装置700は、秘密情報用データ集合Sの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、保管先装置指定データの指定するn個の保管装置900のそれぞれに対し、分散コードデータ集合BSの元である分散コード情報を格納する。
【0021】
コード生成部701は、秘密情報用データ集合Sの元sが入力されると、コード情報用データ集合Cの元cを出力する。
【0022】
コード分散部702は、集合Cの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、保管先装置指定データの指定するn個の保管装置900のそれぞれに対して分散コードデータ集合BSの元を格納する。
【0023】
次に、図8Bを参照して、復元装置800の構成を説明する。
【0024】
復元装置800は、コード復元部801およびコード正当性検証部802を有する。復元装置800は、集合Cの元と、閾値kと、分散情報数nと、保管先装置指定データとが入力されると、複数の保管装置900から、それぞれが記憶するBSの元を読み出し、秘密情報用データ集合Sの元のデータ、または、不正の検出を表す記号を出力する。
【0025】
コード復元部801は、集合Cの元と、閾値kと、保管先装置指定データとが入力されると、複数の保管装置900から、それぞれの記憶部901が記憶するBSの元を読み出し、Cの元を出力する。
【0026】
コード正当性検証部802は、Cの元が入力されると、Sの元のデータ、またはコードが不正であったことを表すデータを出力する。なお、保管装置900は、分散コード用データ集合BCの元を記憶する記憶部901を有する。
【0027】
次に、分散情報生成装置700の動作手順を、図9のフローチャートを参照して説明する。
【0028】
閾値kと、分散情報数nと、保管先装置指定データと、秘密情報用データ集合Sの元sが分散情報生成装置700に入力される(ステップA1)。
【0029】
コード生成部701は、入力されたsに対応するコード情報用データ集合Cの元であるcを出力する(ステップA2)。
【0030】
コード分散部702は、閾値kと、分散情報数nと、保管先装置指定データと、コード生成部701の出力であるcとが入力されると、cを(k,n)閾値法で分散符号化し、分散符号化されたcを、保管先装置指定データの指定する保管装置900の記憶部901に格納する(ステップA3)。
【0031】
次に、復元装置800の動作手順を、図10のフローチャートを参照して説明する。
【0032】
閾値kと分散情報数nが復元装置800に入力される(ステップB1)。コード復元部801は、k機以上の複数の保管装置900の記憶部901からデータを読み出す(ステップB2)。続いて、コード復元部801は、読み出したデータと閾値kとから、コード分散部702の分散符号化方法に対応する復元方法を用いて復元処理を行った結果であるCの元c'を出力する(ステップB3)。
【0033】
コード正当性検証部802は、コード復元部801からc'を受け取ると、c'の正当性を検証する処理を行い、正当なコードであった場合には、c'に対応するSの元s'を出力し、それ以外の場合には、不正の検出を表す記号を出力する(ステップB4)。
【0034】
なお、GenCodeの入力には、秘密情報以外の情報を入力する場合もある。また、cは有限体の要素がひとつであるとは限らず、複数の異なる有限体の要素からなる場合もある。例えば、3つの要素からなる場合を考えるとc=(c1,c2,c3)となる場合もある。このとき、c=(c1,c2,c3)とc'=(c1',c2',c3')に対し、+をc1,c2,c3の各要素に対応する有限体上で定義されている加算であるとすると、c+c'は(c1+c1',c2+c2',c3+c3')を表しているものとする。
【0035】
また、コードの集合が小さければ小さいほど分散情報のサイズが小さく、秘密情報を分散して保管する場合に必要とする記憶容量が少なくて済み、好ましい。
【0036】
また、これまで述べた技術を、先に説明したShamirの閾値法以外にも適用可能である。例えば、線形秘密分散法と呼ばれる秘密分散法に対してもこれまでに述べた技術を適用できることが知られている。
【0037】
線形秘密分散法とは,次のような性質を持った秘密分散法である。なお、秘密を復元可能な分散情報の集合を要素とする集合をアクセス構造と呼ぶことにする。秘密情報は有限体Fの元であるとする。
1. 分散情報(v_1,...,v_n) が(v_1, v_2, ... ,v_n)= (s, r_1, ... ,r_{t-1})M のようにF 上の固定のt*n行列Mとランダムに選ばれたF の要素r_i によって生成される。
2. アクセス構造に含まれる分散情報の集合V_i = {v_{i_1},v_{i_2},...,v_{i_j}}から秘密情報を、
s =c_{i_1}*v_{i_1} + c_{i_2}*v_{i_2} + ... + c_{i_j}*v_{i_j}のように計算できる。ただし、c_{i_1},c_{i_2},..,c_{i_j}はV_iによって一意に決定される定数である。
【0038】
先に説明したShamirの閾値法も線形秘密分散法であることが知られている。先に説明した技術を線形秘密分散法に用いる際、閾値kと分散情報数nの情報の代わりにアクセス構造に相当する情報を用いればよい。
【0039】
一方、提案されている方式には、非特許文献1よりも演算処理が効率的な方式として、非特許文献2、非特許文献3および非特許文献4に開示されているものがある。そして、これら3つの文献に開示された方式を2種類に分類すると、非特許文献2および非特許文献3に開示された方式と、非特許文献4に開示された方式とに分けられる。以下にそれぞれの説明を行う。
【0040】
非特許文献2および非特許文献3に開示されている処理装置は、秘密情報と、乱数と、秘密情報およびこれらの乱数をある関数に入力したときの出力とをコードとして生成する処理を行うコード生成装置と、コードを入力としてその正当性を検証するコード正当性検証装置とからなる。
【0041】
これらの方式は、秘密情報そのものの乱数性とは関係なく、乱数Rはそれ自体が選ばれる元の集合から一様にランダムに選ばれることを条件として、秘密情報が選ばれる集合と乱数が選ばれる集合とコードの集合上の加算を+と表し、ある関数をM()と表すと、秘密情報s1と乱数r1について、s1とc1 = M(s1,r1)を取得した改ざん者がM(s1+s1', r1+r1')= M(s1,r1)+c1'を満たすs1',r1',c1'を生成するという改ざんを高い確率で検知可能となっている。
【0042】
このような、秘密情報と一様な乱数の改ざんを検知するためのコード生成装置とコード検証装置の構成の一例を説明する。なお、この方式のコード生成装置を「改ざん検知コード生成装置」と称し、コード検証装置を「改ざん検知コード検証装置」と称する。
【0043】
図11Aは非特許文献2または非特許文献3に開示されたコード生成装置の一構成例を示すブロック図である。図11Bは非特許文献2または非特許文献3に開示されたコード検証装置の一構成例を示すブロック図である。
【0044】
図11Aに示すように、改ざん検知コード生成装置100は、チェック用データ生成部101を有する。改ざん検知コード生成装置100は、秘密情報用データ集合Sの元である秘密情報sと、乱数情報用データ集合Rの元である乱数rとが入力されると、sとrを出力するとともに、sとrをチェック用データ生成部101に入力し、その結果としてチェック用データ集合Cの元であるcをチェック用データとして出力する。
【0045】
また、図11Bに示すように、改ざん検知コード検証装置200は、チェック用データ生成部101および同一性判定部201を有する。
【0046】
改ざん検知コード検証装置200は、秘密情報用データ集合Sの元である秘密情報sと、乱数情報用データ集合Rの元である乱数rと、チェック用データ集合Cの元であるチェック用データcとが入力されると、sとrをチェック用データ生成部101に入力する。チェック用データ生成部101は、sとrが入力されると、c'を生成して出力する。同一判定部201は、チェック用データcと、チェック用データ生成部101の出力であるc'とが入力されると、判定処理を行う。同一判定部201は、判定処理の結果、c'=cである場合にはコードの整合性がとれていたことを表す記号を出力し、それ以外の場合はコードの整合性がとれていないことを表す記号を出力する。また、改ざん検知コード検証装置200は、秘密情報sを出力する。
【0047】
非特許文献2の方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、乱数が要素数1/εの集合の要素、関数の出力が要素数1/εの集合の要素となる。つまりコードはおよそ要素数がs*1/(ε^2)であるような集合の要素となる。この方式はsと1/εがほぼ等しい場合にのみ動作するというパラメータ上の条件がある。これは、εは1/2^80程度で十分であってもsが2^1000であればεも1/2^1000とする必要があることを表す。コードの長さに影響し、これらのパラメータは自由に設定できる方が好ましい。
【0048】
具体的には、以下に説明する通りである。
【0049】
非特許文献2に開示された方式は、pを素数とし、Z/pZを秘密情報の集合Sとしたとき、Sの要素であるsのコードとして、sと、Z/pZから一様ランダムに選択した要素rと、*をZ/pZ上の乗算として、s*r mod pをチェック用データとする方式である。
【0050】
Z/pZの代わりにqを素数のべき乗としたとき、それぞれの集合をガロア体GF(q)の要素として乗算をガロア体上の乗算としてもよい。
【0051】
非特許文献3の方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、乱数が要素数1/εの集合の要素、関数の出力が要素数1/εの集合の要素となる。よって、コードはおよそ要素数がs*1/(ε^2)であるような集合の要素となる。つまり効率は非特許文献2の方式と同程度だが、sと1/εをほぼ独立に設定することができるという特徴がある。そのため、非特許文献2にあった問題が解決された方式であるといえる。
【0052】
具体的には、以下に説明する通りである。
【0053】
非特許文献3に開示された方式は、pを素数とし、Nを正の整数として、(Z/pZ)^Nを秘密情報の集合とする方式である。(Z/pZ)^Nの元をsまたは、(s_1,s_2,...,s_N)と記す。また、(Z/pZ)^Nの代わりにガロア体GF(p^N)を用いてもよい。
【0054】
このとき、(s_1,s_2,...,s_N)のコードとして、sと、Z/pZから一様ランダムに選択した要素rと、*をZ/pZ上の乗算として、s_1*r + s_2*r^2 + ... + s_{N-1}*r^{N-1} + s_{N}*r^{N+1} mod p をチェック用データとする方式である。
【0055】
Z/pZの代わりにqを素数のべき乗としたとき、それぞれの集合をガロア体GF(q)の要素として乗算をガロア体上の乗算としてもよい。
【0056】
一方、非特許文献4に開示されている方式では、秘密情報の集合の要素を入力して秘密情報よりも大きな集合の部分集合の要素を出力する関数であって、異なる値が入力されたときは必ず異なる値が出力される関数を用いる方法である。このような関数をN()と表すとき、コードの生成装置は秘密情報sが入力されると、N(s)をコードとして出力する。コードの検証装置は、コードが入力されると、そのコードに対応する秘密情報の要素があるかどうかを調べ、秘密情報の要素がある場合にはその秘密情報に改ざんがなかったことを表す記号を出力し、それ以外の場合は秘密情報に改ざんがあったことを表す記号を出力する。この方式では、秘密情報が選ばれる集合から一様にランダムに選ばれることを条件としてコードの改ざんを高い確率で検知可能である。
【0057】
具体的には、以下の通りである。
【0058】
秘密情報の集合Sとして要素数がpである集合を用いる場合、N= (p(p-1) +1)としたときの{0,...p(p-1)}の要素数がpである部分集合Bであって、その部分集合の任意の異なる2つの要素s1とs2についてs1-s2 mod Nがすべて異なるという性質をもった部分集合を用いる方式である。
【0059】
より具体的には、SのコードとしてSの要素をBの要素に写像する関数を用いる方式である。この方式の検証方法はSからBに写像を行った際の逆を計算する関数を用いる。このとき、コードに対応するSの元がない場合には改ざんがあるものとみなす方式である。
【0060】
また、非特許文献4に開示された方式は、改ざんを検知できる確率を(1-ε)とすると、秘密情報が要素数sの集合から選ばれるとき、関数の出力は要素数s*(1/ε)の集合の要素となる。また、sと1/εがほぼ等しい場合にのみ動作するというパラメータ上の条件がある。つまり、非特許文献2の方式と同様の課題を持つ方式であるといえる。ただし、非特許文献2や非特許文献3の方式を用いた場合に比べてコードの要素数の集合は1/εだけ少ないため演算処理の効率のよい方式となっていることがわかる。
【0061】
このような、一様な秘密情報の改ざんを検知するためのコード生成装置とコード検証装置の構成の一例を説明する。なお、この方式のコード生成装置を「改ざん検知コード生成装置」と称し、コード検証装置を「改ざん検知コード検証装置」と称する。
【0062】
図12Aは非特許文献4に開示されたコード生成装置の一構成例を示すブロック図である。図12Bは非特許文献4に開示されたコード検証装置の一構成例を示すブロック図である。
【0063】
図12Aに示すように、改ざん検知コード生成装置300は、秘密情報符号化部301を有する。改ざん検知コード生成装置300は、秘密情報用データ集合Sの元である秘密情報sが入力されると、sを秘密情報符号化部301に入力し、その出力のコード用データ集合Cの元であるcをコードとして出力する。
【0064】
図12Bに示すように、改ざん検知コード検証装置400は、秘密情報符号化部301に対応する秘密情報復号化部401と、復号結果判定部402とを有する。
【0065】
改ざん検知コード検証装置400は、コード用データ集合Cの元であるcが入力されると、cを秘密情報復号化部401に入力し、秘密情報復号化部401の出力を復号結果判定部402に入力する。復号結果判定部402は、秘密情報復号化部401から受信した値が秘密情報用データ集合の要素である場合、その値をそのまま出力し、それ以外の場合、改ざんがあったことを表す記号を出力する。
【先行技術文献】
【非特許文献】
【0066】
【非特許文献1】Adi Shamir. How to share a secret. Comm.ACM,22(11) 612-613(1979).
【非特許文献2】Sergio Cabello, Carles Padro', Germa'n Sa'ez: Secret Sharing Schemes with Detection of Cheaters for a General Access Structure. Des. Codes Cryptography 25(2): 175-188 (2002)
【非特許文献3】Toshinori Araki, Satoshi Obana: Flaws in Some Secret Sharing Schemes Against Cheating. ACISP 2007: 122-132
【非特許文献4】Wakaha Ogata. Kaoru Kurosawa. Douglas R Stinson:Optimum Secret Sharing Scheme Secure Against Cheating SIAM J.Discrete Math.,vol.20,no1,pages 79-95,2006
【発明の概要】
【発明が解決しようとする課題】
【0067】
(k,n)閾値法を含む線形秘密分散法を用いて分散情報を生成する際、分散情報の改ざんを高確率で検知可能なコードを生成する方法として、検知性について非特許文献4の方式と同程度の効率であって、パラメータを自由に設定できるものがなかった。
【0068】
本発明の目的は、分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくした情報処理装置、コード生成方法、コード検証方法、およびその方法をコンピュータに実行させるためのプログラムを提供することである。
【課題を解決するための手段】
【0069】
上記目的を達成するための本発明の情報処理装置は、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、
前記秘密情報s'が前記チェック用データ生成部に入力されたときの出力であるチェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、
を有する構成である。
【0070】
また、本発明のコード生成方法は、線形秘密分散法により生成される情報の改ざんを検知するためのコード生成方法であって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するものである。
【0071】
また、本発明のコード検証方法は、線形秘密分散法により生成される情報の改ざんを検知するためのコード検証方法であって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定するものである。
【0072】
また、本発明のプログラムは、線形秘密分散法により生成される情報の改ざんを検知するためのコードを生成するコンピュータに実行させるためのプログラムであって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する処理を前記コンピュータに実行させるものである。
【0073】
さらに、本発明のプログラムは、線形秘密分散法により生成される情報の改ざんを検知するためのコードを検証するコンピュータに実行させるためのプログラムであって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する処理を前記コンピュータに実行させるものである。
【発明の効果】
【0074】
本発明によれば、線形秘密分散法を用いた分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくすることができる。
【図面の簡単な説明】
【0075】
【図1】本実施形態の情報処理装置の一構成例を示すブロック図である。
【図2】図1に示した情報処理装置の具体的構成例を示すブロック図である。
【図3A】本実施形態の情報処理装置に含まれるコード生成装置の一構成例を示すブロック図である。
【図3B】本実施形態の情報処理装置に含まれるコード検証装置の一構成例を示すブロック図である。
【図4】図3Aに示したコード生成装置の動作手順を示すフローチャートである。
【図5】図3Bに示したコード検証装置の動作手順を示すフローチャートである。
【図6】本実施形態による、分散情報を生成する手順を示すフローチャートである。
【図7】本実施形態による、分散情報を復元する手順を示すフローチャートである。
【図8A】関連する分散情報生成装置の一構成例を示すブロック図である。
【図8B】関連する復元装置の一構成例を示すブロック図である。
【図9】図8Aに示した分散情報生成装置の動作手順を示すフローチャートである。
【図10】図8Bに示した復元装置の動作手順を示すフローチャートである。
【図11A】非特許文献2または非特許文献3に開示されたコード生成装置の一構成例を示すブロック図である。
【図11B】非特許文献2または非特許文献3に開示されたコード検証装置の一構成例を示すブロック図である。
【図12A】非特許文献4に開示されたコード生成装置の一構成例を示すブロック図である。
【図12B】非特許文献4に開示されたコード検証装置の一構成例を示すブロック図である。
【発明を実施するための形態】
【0076】
本実施形態について図面を参照して詳細に説明する。図1は本実施形態の情報処理装置の一構成例を示すブロック図である。
【0077】
図1に示すように、本実施形態の情報処理装置10は、記憶部35と、制御部25とを有する。制御部25は、コード分散部702と、コード復元部801と、後述する秘密情報剰余算出部501および同一性判定部601とを有する。
【0078】
図2は図1に示した情報処理装置の具体的構成例を示すブロック図である。
【0079】
図2に示すように、プログラムにしたがって処理を実行するCPU(Central Processing Unit)11と、CPU11に供給するプログラムおよび演算処理過程の情報を一時的に保存するためのRAM(Random Access Memory)13と、プログラムが予め格納された主記憶部12と、秘密情報、閾値および分散情報数などの演算処理に必要な情報が格納されたデータ蓄積部14と、記憶部35の各記憶領域間のデータ転送を制御するメモリ制御インタフェイス部15と、情報を入力するための入力部20と、演算結果を出力するための出力部30と、入力部20および出力部30の入出力制御を行うI/Oインタフェイス部16とを有する。これらの構成は、バス18を介して接続されている。
【0080】
プログラムには、コード分散部702、同一性判定部601、コード復元部801、および秘密情報剰余算出部501の機能をCPU11に実行させるための処理手順が書き込まれている。CPU11がプログラムを実行することで、コード分散部702、同一性判定部601、コード復元部801、および秘密情報剰余算出部501が情報処理装置10に仮想的に構成される。
【0081】
なお、プログラムに、秘密情報符号化部301、秘密情報復号化部401および復号結果判定部402の機能をCPU11に実行させるための処理手順がさらに書き込まれていてもよい。
【0082】
なお、データ蓄積部14は、情報処理装置10内に設けていなくてもよく、情報処理装置10とは別に設けていてもよい。また、データ蓄積部14は、記憶部901を有する保管装置900としてもよい。
【0083】
また、演算処理に必要なプログラムやデータを格納した記憶媒体を入力部20に装着し、それらの情報を入力部20を介して情報処理装置10に入力するようにしてもよい。記憶部媒体には、例えば、磁気ディスク、半導体メモリ、光ディスクなどがあるが、その他の記録媒体であってもよい。
【0084】
次に、チェック用データに相当するコードの生成と検証に注目して、図1に示した情報処理装置10が実行する情報改ざん検知方法を説明する。本実施形態で処理対象となる秘密情報は、例えば、文書の暗号化のための秘密鍵となる素数である。この場合、秘密情報の元の集合は素数の集合となる。また、ここでは、情報処理装置10を、コードの生成処理を行うコード生成装置とコードの検証処理を行うコード検証装置の2つの装置に分けて説明する。
【0085】
秘密情報sは、pを素数としたとき、2以上の整数Nの要素数で{1, ... ,p-1}の要素の列に符号化されて秘密情報剰余算出部501に入力されるものとする。また、チェック用データの集合として{1, ... ,p-1}を用いる。
【0086】
また、素数pはデータ蓄積部14に予め記録されていてもよく、秘密情報剰余算出部501に設けられたメモリ(不図示)に予め記録されていてもよく、秘密情報剰余算出部501に外部から入力されてもよい。秘密情報剰余算出部501への入力は、コード生成装置500への入力で実行される。以下では、説明を省略するが、素数pが秘密情報剰余部501のメモリ(不図示)に記録されているものとする。
【0087】
また、秘密情報の符号化処理はコード生成装置500への入力前に行われてもよく、符号化処理の機能をコード生成装置500に予め備え、コード生成装置500が入力される秘密情報の符号化処理を実行してもよい。以下では、符号化された秘密情報がコード生成装置500に入力される場合で説明する。
【0088】
また、本実施形態では、秘密分散法として非特許文献4に記載されている(k,n)閾値法を適用するが、秘密分散法は線形秘密分散法であれば適用可能である。
【0089】
図3Aは本実施形態の情報処理装置に含まれるコード生成装置の一構成例を示すブロック図である。図3Bは本実施形態の情報処理装置に含まれるコード検証装置の一構成例を示すブロック図である。本実施形態の情報処理装置10は、コード生成装置500およびコード検証装置600を含む構成である。
【0090】
図3Aに示すように、コード生成装置500は、秘密情報剰余算出部501を有する構成である。秘密情報剰余算出部501はチェック用データ生成部に相当する。コード生成装置500は、秘密情報用データ集合Sの元である秘密情報s=(s_1,...,s_N)が入力されると、入力されたsと、秘密情報剰余部501の出力であるチェック用データ集合Cの元を出力する。
【0091】
秘密情報剰余算出部501は、s=(s_1,...,s_N)が入力されると、c = s_1* s_2* ... *s_N mod pを計算し、cを出力する。
【0092】
ここでは、秘密情報s=(s_1,...,s_N)が秘密情報剰余部501に入力される場合としているが、秘密情報sが入力されると、秘密情報剰余部501が、プログラムにしたがって、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列(s_1,...,s_N)で表す処理を実行してもよい。
【0093】
次に、コード検証装置600について説明する。
【0094】
図3Bに示すように、コード検証装置600は、上述した秘密情報剰余算出部501と、同一性判定部601とを有する。コード検証装置600は、秘密情報用データ集合Sの元である秘密情報s'=(s'_1,...,s'_N)とチェック用データ集合Cの元c'が入力されると、同一性判定装置601の出力である検証結果とs'を出力する。
【0095】
秘密情報剰余算出部501は、s' = (s'_1,...,s'_N)が入力されると、上述したように、c'' = s'_1*s'_2*...*s'_N mod pを計算する処理を行い、c''を同一性判定部601に渡す。
【0096】
同一性判定部601は、秘密情報剰余算出部501の出力であるc''を秘密情報剰余算出部501から受け取り、コード検証装置600に入力されたc'を受け取ると、c' = c''が満たされるか否かをチェックする。その結果、c' = c''である場合、同一性判定部601は、データが改ざんされていないと判定し、改ざんが検出されなかったことを表す記号を出力する。その反対に、c' ≠ c''である場合、同一性判定部601は、データが改ざんされていると判定し、改ざんの検出を表す記号を出力する。
【0097】
次に、コード生成装置500の動作手順を、図4のフローチャートを参照して説明する。
【0098】
秘密情報用データ集合Sの元s=(s_1,...,s_N)がコード生成装置500に入力される(ステップC1)。秘密情報剰余算出部501は、s=(s_1,...,s_N)が入力されると、c = s_1* s_2* ... *s_N mod pを算出する(ステップC2)。続いて、コード生成装置500は、秘密情報剰余算出部501の算出結果であるcとコード生成装置500への入力であるsを出力する(ステップC3)。
【0099】
その後、秘密情報sおよびチェック用データcの情報が分散情報に埋め込まれる際には、図1に示したコード分散部702が、秘密情報sとチェック用データcに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するが、ここでは、その詳細な説明を省略する。
【0100】
次に、コード検証装置600の動作手順を、図5のフローチャートを参照して説明する。
【0101】
秘密情報用データ集合Sの元s'=(s'_1,...,s'_N)と、チェック用データ集合Cの元であるc'がコード検証装置600に入力される(ステップD1)。秘密情報剰余算出部501は、s'=(s'_1,...,s'_N)が入力されると、c''=s'_1*s'_2*...*s'_N mod pを算出する(ステップD2)。
【0102】
ステップD1でコード検証装置600に入力されたc'とステップD2で算出されたc''とが同一性判定部601に入力される(ステップD3)。同一性判定部601はc' = c''が満たされるか否かをチェックする(ステップD4)。その結果、c' = c''である場合、同一性判定部601は、データが改ざんされていないと判定し、改ざんが検出されなかったことを表す記号を出力する(ステップD5)。ステップD4でc' ≠ c''である場合、同一性判定部601は、データが改ざんされていると判定し、改ざんの検出を表す記号を出力する(ステップD6)。
【0103】
なお、ステップD1の前に、図1に示したコード復元部801が線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、これらの情報がステップD1でコード検証装置600に入力されるが、ここでは、その詳細な説明を省略している。
【0104】
ここまで、チェック用データのコードに注目して説明したが、図1に示した情報処理装置10による、チェック用データを分散情報に埋め込む場合の処理方法について説明する。
【0105】
ここでは、コード分散部702は分散符号語生成部(不図示)を含み、コード復元部801は符号語復元部(不図示)を含むものとする。これらの構成もCPU11がプログラムを実行することで仮想的に構成されるものである。
【0106】
はじめに、秘密情報に対して分散符号化処理を行って、分散情報を生成する手順を説明する。図6は、本実施形態による、分散情報を生成する手順を示すフローチャートである。
【0107】
図6に示すように、秘密情報剰余算出部501は、秘密情報sが入力されると、秘密情報sをある素数pを用いてsを1からp-1の値の列{s_1,...,s_N}と表し、s_1*...*s_N mod pをチェック用データvとして求める(ステップE1)。
【0108】
その後、分散符号語生成部(不図示)は、秘密情報sとチェック用データvが埋め込まれた(k-1)次多項式Fを生成し、互いに異なるn個の値x1乃至xnを多項式Fに入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成し、分散符号語情報を出力する(ステップE2)。
【0109】
次に、情報処理装置10に復元対象となる情報が入力されたとき、その情報が改ざんされているか否かを判定する手順を説明する。図7は、本実施形態による、分散情報を復元する手順を示すフローチャートである。
【0110】
符号語復元部(不図示)は、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、これらの点を通る(k-1)次多項式F'を生成し、多項式F'に埋め込まれた秘密情報s'={s'_1,...,s'_N}とチェック用データv'を読み出して出力する(ステップF1)。秘密情報剰余算出部501は、s'が入力されると、s'_1*...*s'_N mod pをチェック用データv''として求める(ステップF2)。
【0111】
同一性判定部601は、チェック用データv'とv''が等しいかどうかを判定する(ステップF3)。その結果、v'とv''が等しい場合、同一性判定部601はデータが改ざんされていない旨の検証結果を出力し(ステップF4)、v'とv''が等しくない場合、同一性判定部601はデータが改ざんされている旨の検証結果を出力する(ステップF5)。
【実施例1】
【0112】
本実施例のコード生成装置500は、入力される秘密情報を用いて、分散情報の改ざん検知コードを生成して出力する。本実施例のコード検証装置600は、入力されるコードの正当性を検証する。
【0113】
本実施例では、秘密情報sを複数の要素の組s= (s_{0,1},...,s_{0,N})によって表す。Nは2以上の数であって、各要素s_{0,i}(i = 1,...,N)はpを素数として、1,...,p-1とする。
【0114】
本実施例のコード生成装置500は、秘密情報sが入力されると、実施形態で説明したように演算を行い、秘密情報sを出力するとともに、c= s_{0,1}*s_{0,2}*...+s_{0,N} mod pをコードとして出力する。生成されたコードは分散情報に埋め込まれる。
【0115】
一方、コード検証装置600は、収集された分散情報から読み出された秘密情報s'= (s'_{0,1},...,s'_{0,N})とコードc'が入力されると、c''= s'_{0,1}*s'_{0,2}*...+s'_{0,N} mod pを求める。そして、コード検証装置600は、コードc'とc''が等しいか否かを判定し、c'= c''である場合にはデータが改ざんされていないと判定し、c'≠ c''である場合にはデータが改ざんされていると判定し、検証結果を出力する。
【0116】
ここで改ざん者が秘密情報s'をs_{1,1},...,s_{1,N}だけ、コードcをc'''だけ改ざんする場合を考える。
このとき、(s_{0,1}+s_{1,1})*(s_{0,2}+s_{1,2})*...*(s_{0,N}+s_{1,N}) = s_{0,1}*s_{0,2}*...*s_{0,N} + s_{0,1}*s_{0,2}*...*s_{1,N} + ... + s_{1,1}*s_{1,2}*...*s_{1,N}となっている。
【0117】
つまり、どのように改ざんを行っても、s_{0,1}*s_{0,2}*...*s_{1,N}のように未知の秘密情報を含む項が存在する。
【0118】
そのため、改ざん者は、改ざんの結果がコードc'''に対してどのような影響を及ぼすかは秘密情報の確率分布に従って推測するよりなく、例えば秘密情報が一様な分布に従ってランダムに選ばれる場合には、改ざんした結果が予想した値と等しくなる確率は1/(p-1)となる。
【0119】
この場合、秘密情報の集合の要素数は(p-1)*Nとなり、改ざんの確率は1/p程度となる。
コードの集合の要素数はおよそp*(N+1)であり、検知性について非特許文献4の方式と同程度である。これに加え、素数pのサイズとNをほぼ独立に設定することが可能であるので、パラメータが自由に設定可能である。
【0120】
よって、本実施形態では、(k,n)閾値法を含む線形秘密分散法による分散情報の改ざんを高確率および効率的に検知可能とし、かつ、パラメータ設定の自由度を大きくすることができる。
【産業上の利用可能性】
【0121】
本発明を秘密鍵などの機密情報の分散管理に利用できる。
【符号の説明】
【0122】
10 情報処理装置
11 CPU
12 主記憶部
13 RAM
14 データ蓄積部
15 メモリ制御インタフェイス部
16 I/Oインタフェイス部
20 入力部
25 制御部
30 出力部
35 記憶部
501 秘密情報剰余算出部
601 同一性判定部
702 コード分散部
801 コード復元部
【特許請求の範囲】
【請求項1】
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、
前記秘密情報s'が前記チェック用データ生成部に入力されたときの出力であるチェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、
を有する情報処理装置。
【請求項2】
前記コード分散部は、
前記チェック用データ生成部で前記チェック用データvが生成されると、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成し、
前記コード復元部は、
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、該(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する、請求項1記載の情報処理装置。
【請求項3】
線形秘密分散法により生成される情報の改ざんを検知するためのコード生成方法であって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する、コード生成方法。
【請求項4】
前記チェック用データ生成部で前記チェック用データvを求めた後、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、
互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成する、請求項3記載のコード生成方法。
【請求項5】
線形秘密分散法により生成される情報の改ざんを検知するためのコード検証方法であって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する、コード検証方法。
【請求項6】
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、
前記(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する、請求項5記載のコード検証方法。
【請求項7】
線形秘密分散法により生成される情報の改ざんを検知するためのコードを生成するコンピュータに実行させるためのプログラムであって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する処理を前記コンピュータに実行させるためのプログラム。
【請求項8】
前記チェック用データ生成部で前記チェック用データvを求めた後、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、
互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成する処理をさらに有する請求項7記載のプログラム。
【請求項9】
線形秘密分散法により生成される情報の改ざんを検知するためのコードを検証するコンピュータに実行させるためのプログラムであって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する処理を前記コンピュータに実行させるためのプログラム。
【請求項10】
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、
前記(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する処理をさらに有する請求項9記載のプログラム。
【請求項1】
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求めるチェック用データ生成部と、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成するコード分散部と、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元するコード復元部と、
前記秘密情報s'が前記チェック用データ生成部に入力されたときの出力であるチェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する同一性判定部と、
を有する情報処理装置。
【請求項2】
前記コード分散部は、
前記チェック用データ生成部で前記チェック用データvが生成されると、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成し、
前記コード復元部は、
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、該(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する、請求項1記載の情報処理装置。
【請求項3】
線形秘密分散法により生成される情報の改ざんを検知するためのコード生成方法であって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する、コード生成方法。
【請求項4】
前記チェック用データ生成部で前記チェック用データvを求めた後、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、
互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成する、請求項3記載のコード生成方法。
【請求項5】
線形秘密分散法により生成される情報の改ざんを検知するためのコード検証方法であって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する、コード検証方法。
【請求項6】
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、
前記(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する、請求項5記載のコード検証方法。
【請求項7】
線形秘密分散法により生成される情報の改ざんを検知するためのコードを生成するコンピュータに実行させるためのプログラムであって、
秘密情報sが入力されると、素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s_1,...,s_N}で該秘密情報sを表し、s_1*...*s_N mod pをチェック用データvとして求め、
前記秘密情報sと前記チェック用データvに対して線形秘密分散法を用いてそれぞれの分散符号化した値を生成する処理を前記コンピュータに実行させるためのプログラム。
【請求項8】
前記チェック用データ生成部で前記チェック用データvを求めた後、前記秘密情報sと該チェック用データvが埋め込まれた(k-1)次多項式Fを生成し、
互いに異なるn個の値であるx1乃至xnを前記F(k-1)次多項式に入力したときの、入力と出力との組である(x1, F(x1))乃至(xn, F(xn))を分散符号語情報として生成する処理をさらに有する請求項7記載のプログラム。
【請求項9】
線形秘密分散法により生成される情報の改ざんを検知するためのコードを検証するコンピュータに実行させるためのプログラムであって、
線形秘密分散法のアクセス構造に対応する秘密情報とチェック用データの符合語を含む復元対象の情報から秘密情報s'およびチェック用データv’を復元し、
素数pと2以上の整数Nを用いて、1からp-1の値を要素とする列{s'_1,...,s'_N}で前記秘密情報s'を表し、s'_1*...*s'_N mod pをチェック用データv''として求め、
前記チェック用データv''と前記チェック用データv'とが等しいか否かを判定し、該チェック用データv'とv''が等しい場合にはデータが改ざんされていないと判定し、該チェック用データv'とv''が等しくない場合にはデータが改ざんされていると判定する処理を前記コンピュータに実行させるためのプログラム。
【請求項10】
復元対象の情報として、k組分の分散符号語情報として(x1', F_1')乃至(xk', F_k')が入力されると、該(x1', F_1')から該(xk', F_k')の点を通る(k-1)次多項式F'を生成し、
前記(k-1)次多項式F'に埋め込まれた前記秘密情報s'および前記チェック用データv'を復元する処理をさらに有する請求項9記載のプログラム。
【図1】
【図2】
【図3A】
【図3B】
【図4】
【図5】
【図6】
【図7】
【図8A】
【図8B】
【図9】
【図10】
【図11A】
【図11B】
【図12A】
【図12B】
【図2】
【図3A】
【図3B】
【図4】
【図5】
【図6】
【図7】
【図8A】
【図8B】
【図9】
【図10】
【図11A】
【図11B】
【図12A】
【図12B】
【公開番号】特開2011−35809(P2011−35809A)
【公開日】平成23年2月17日(2011.2.17)
【国際特許分類】
【出願番号】特願2009−182303(P2009−182303)
【出願日】平成21年8月5日(2009.8.5)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
【公開日】平成23年2月17日(2011.2.17)
【国際特許分類】
【出願日】平成21年8月5日(2009.8.5)
【出願人】(000004237)日本電気株式会社 (19,353)
【Fターム(参考)】
[ Back to top ]