(57)【要約】【課題】ある鍵生成局が異なるタイミングで発行した２つの秘密鍵を組み合わせることによりユーザが正統性を有しない鍵を構成する攻撃である鍵再発行攻撃を防ぐ関数型暗号技術を提供する。【解決手段】GIDの他に、鍵生成局毎に局所的に決定される識別子、すなわち局所識別子(LID:Local IDentier)を導入する。異なるLID同士を組み合わせる事が出来ないように暗号が構成出来れば鍵再発行攻撃を防御することができる。ただし、他の鍵生成局が作成した述語変数に関しては異なるLID同士を組み合わせても復号可能とならなければならない。そこで、関数型暗号の線形秘密分散を用いた述語記述機構を巧妙に利用する。【選択図】図１
2014139623.tif 000002
【特許請求の範囲】
【請求項１】
単調回路構成法による線形秘密分散を用いた関数型暗号システムにおいて、
上記線形秘密分散において用いられる述語Ｓを表現する木を構成する複数の葉のそれぞれには、そのそれぞれの葉に対応するリテラル述語に対応する鍵生成局装置が対応付けされており、
ある鍵生成局装置に対応する縮退木を、上記複数の葉の中のその鍵生成局装置に対応する葉で構成される少なくとも１つの木とし、
各鍵生成局装置に対応する各縮退木の葉に対応する乱数を用いて上記述語Ｓの中の上記各縮退木の部分の述語により計算される上記各縮退木の根の値が０となるように、上記複数の葉に対応する乱数を生成し、これらの生成された乱数を用いて平文を暗号化する暗号化装置と、
を含む関数型暗号システム。
【請求項２】
請求項１の関数型暗号システムにおいて、
上記暗号化装置は、上記複数の葉に対応する乱数を用いて上記述語Ｓにより計算される上記木の根の値が０となるように、上記複数の葉に対応する乱数を更に生成し、これらの生成された乱数を更に用いて平文を暗号化する、
関数型暗号システム。
【請求項３】
単調回路構成法による線形秘密分散を用いた関数型暗号方法において、
上記線形秘密分散において用いられる述語Ｓを表現する木を構成する複数の葉のそれぞれには、そのそれぞれの葉に対応するリテラル述語に対応する鍵生成局装置が対応付けされており、
ある鍵生成局装置に対応する縮退木を、上記複数の葉の中のその鍵生成局装置に対応する葉で構成される少なくとも１つの木とし、
暗号化装置が、各鍵生成局装置に対応する各縮退木の葉に対応する乱数を用いて上記述語Ｓの中の上記各縮退木の部分の述語により計算される上記各縮退木の根の値が０となるように、上記複数の葉に対応する乱数を生成し、これらの生成された乱数を用いて平文を暗号化する暗号化ステップと、
を含む関数型暗号方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ネットワーク上の認証において、複数のサーバが同時にユーザをセキュアに認証する技術に関する。
【背景技術】
【０００２】
以下、関数型暗号について説明する。そのために、まずIDベース暗号について説明する。
【０００３】
(狭義の)IDベース暗号とは、公開鍵の照会といった予備通信を必要とせず、受信者識別子(ID)を公開鍵として暗号化が可能な公開鍵暗号系のことである。IDベース暗号は、一般に以下の４つのアルゴリズムから構成される。
【０００４】
Setup(1k)→(pk,sk):セットアップ―セキュリティパラメータ1kを入力とし公開パラメタpkとマスター鍵skを出力する確率的多項式時間アルゴリズム。
【０００５】
KeyGen(sk,i)→ski:鍵生成―マスター鍵skと鍵識別子iを入力とし、その鍵識別子iに対応する秘密鍵skiを出力する確率的多項式時間アルゴリズム。
【０００６】
Enc(pk,j,m)→cj:暗号化―公開パラメータpkと受信者識別子jと平文mを入力とし、暗号文cjを出力する確率的多項式時間アルゴリズム。
【０００７】
Dec(ski,cj)→m’:復号―秘密鍵skiと暗号文cjとを入力とし、平文m’を出力する確率的多項式時間アルゴリズム。
【０００８】
関数型暗号(functional encryption)はIDベース暗号の拡張であり、両者に構文的な違いは無い。すなわち、関数型暗号も上記の４つのアルゴリズムから構成される。
【０００９】
m’=Dec(pk,KeyGen(sk,i),Enc(pk,j,m))
とすると、IDベース暗号では鍵識別子iと受信者識別子jが一致した時、すなわちi=jの時、圧倒的確率でm’=mとなり復号できる。IDベース暗号では公開鍵(受信者識別子) と秘密鍵(鍵識別子)は必ず1:1に対応している。
【００１０】
一般化された暗号系ではこの1:1の関係は無く、鍵識別子iと受信者識別子jが何らかの特別な関係を満たす場合に復号できるよう拡張される。例えば一般的な識別子の代わりに、顔写真のような曖昧なデータを使用したいとする。このような時はi=jという等式の代わりにi≒j(何らかの意味で識別子が近い)という関係が満たされる場合に復号できる事が望まれる。このとき、鍵識別子iに対応する受信者識別子jは必ずしも一意ではない。
【００１１】
拡張された暗号では１つの秘密鍵がいろいろな公開鍵(受信者識別子)に対応したり、１つの公開鍵(受信者識別子)がいろいろな秘密鍵に対応して、暗号系が構成される。このような一般化を進めていくと、鍵識別子iと受信者識別子jとの間に、ある特別な関係Rが満たされる場合、すなわちR(i,j)=Trueなる場合にのみ復号できる暗号の概念が生まれる。関係とは２つの文字列を入力とし、真理値を出力する関数の事である。関係Rはアプリケーション毎に異なる関数であり、アプリケーションを設計する度に暗号を設計し直す事は現実的ではないので、さまざまな目的に応用可能な万能のRを実現する暗号、すなわち関数型暗号の概念に到達する。関数型暗号では、上記i,jの一方をプログラム(述語)、もう一方をそのプログラム用の入力データ(述語変数の値)と見なし、入力データがプログラムによって受理されるか否かを判定するR を実現する。鍵識別子iを述語変数、受信者識別子jを述語とするような関数型暗号を暗号文ポリシー関数型暗号(CP-FE:Ciphertext Policy Functional Encryption)と呼ぶ。
【００１２】
以下、分権複数局関数型暗号について説明する。
【００１３】
上記の関数型暗号(IDベース暗号)の模型では、単一の鍵生成局があらゆるユーザに共通の変数を定義し、全ての受信者がその鍵生成局を照会して、変数の値を決定してもらう。もし仮に世界中のユーザが利用可能な暗号システムを構築しようと考えると、世界で唯一の鍵生成局が存在し、世の中の全ての鍵を握りしめ、政治、経済、軍事といった国家の重要機密から、だれか個人の銀行口座や逢瀬の履歴といったありとあらゆる秘密に自由にアクセス可能な超権力を握ってしまう事になる。このような世界観に基づき設計された暗号アプリケーションは現実世界を無理なく抽象しているとは言い難く、超権力の成立を避けるために暗号プロトコルの適用領域が自ずと狭まってしまう。
【００１４】
現実世界では、政府当局、外国政府、軍当局、通貨当局、法務当局、外務当局、自治体、公安、郵便局、電話局、銀行、大学、信販会社、ネットワーク事業者、SNS事業者、といった具合に複数の権力機関が勝手バラバラに成立し、それぞれが独立に秘密を管理している。こうした世界観に基づき暗号プロトコルを設計できれば超権力の成立を心配せずに適用領域を拡大できる。
【００１５】
すなわち分権複数局関数型暗号を考える必要がある。分権複数局関数型暗号は暗号文ポリシー関数型暗号の拡張概念である。分権複数局関数型暗号ではユーザに対し鍵生成局はその鍵生成局が管理する述語変数の値に基づいて秘密鍵を発行する。鍵生成局は独立に複数存在し、暗号化時は複数の鍵生成局がそれぞれ独立に定義した述語変数を組み合わせて使用して述語を定義し、それを受信者識別子として暗号化する。
【００１６】
例えば武蔵野市役所、三鷹市役所、東京都公安委員会がそれぞれ鍵生成局を運営していると仮定する。武蔵野市在住のアリスは武蔵野市役所から武蔵野市在住属性を持つ秘密鍵を与えられているとする。三鷹市在住のボブは三鷹市役所から三鷹市在住属性を持つ秘密鍵を与えられているとする。また、アリスは東京都公安委員会から運転免許証所有属性を持つ秘密鍵を与えられているとする。
【００１７】
仮に、三鷹市在住かつ運転免許所有者にのみ復号可能な暗号文を作成したい場合、暗号文作成者は三鷹市役所の公開パラメータ及び東京都公安委員会の公開パラメータを用いて、該当する述語の暗号文を作成する。アリスやボブはこの述語を満足する秘密鍵を持たないので、暗号文を復号する事はできない。
【００１８】
一般に各鍵生成局が、全く予備連絡を行なわない独立な組織であるとき、アリスとボブが結託して、それぞれの鍵を持ち寄ると、実際にはそのような属性は持たないにも関わらず三鷹市在住でかつ運転免許証所を持っているような秘密鍵の組を構成する事ができてしまう。
【００１９】
安全な分権複数局関数型暗号では、このような結託攻撃を防御するため、鍵生成局は大域検証可能識別子(GID:Globally veriable IDentier)と呼ばれる、ユーザ固有の識別子を用いて秘密鍵を発行する。そして秘密鍵が異なるGID を持つとき、組み合わせて利用する事ができないよう方式が設計される（例えば、非特許文献１参照。）。
【００２０】
分権複数局関数型暗号は次の5 つのアルゴリズム(GSetup; ASetup; AttrGen; Enc; Dec)から構成される。
【００２１】
GSetup(1λ)→$gparam:大域セットアップ―セキュリティパラメータ1kを入力とし共通参照文字列gparamを出力する確率的多項式時間アルゴリズム。「→$」「←$」は、ランダムに選択することを表す。
【００２２】
ASetup(gparam,aparam)→$(ask,apk):局セットアップ―共通参照文字列gparam及び局パラメータaparamを入力とし局公開パラメータapkと局マスター鍵askを出力する確率的多項式時間アルゴリズム。
【００２３】
AttrGen(ask,gid,i)→$ski:属性生成―共通参照文字列gparam及び局マスター鍵ask及びGID gid及び鍵識別子(述語変数の値)iを入力とし、gid,iに対応する秘密鍵skiを出力する確率的多項式時間アルゴリズム。
【００２４】
Enc({apk1,…,apkn},j,m)→$cj:暗号化―局公開パラメータapk1,…,apkn及び受信者識別子j及び平文mを入力とし、暗号文cjを出力する確率的多項式時間アルゴリズム。
【００２５】
Dec({ski1,…,skin’},cj)→$m’:復号―秘密鍵ski1,…,skin’及び暗号文cjを入力とし、平文m’を出力する確率的多項式時間アルゴリズム。分権複数局関数型暗号では暗号文の受信者は鍵識別子(述語変数の値)i1,…,in’を持つ秘密鍵の集合{ski1,…,skin’}を所有しており、述語変数の値i1,…,in’が述語jを満足するなら圧倒的確率でm=m’となる。
【先行技術文献】
【非特許文献】
【００２６】
【非特許文献１】Tatsuaki Okamoto and Katsuyuki Takashima, ”Decentralized Attribute-Based Signatures”, 2011,
【発明の概要】
【発明が解決しようとする課題】
【００２７】
ところで、一般に、ある鍵生成局が２つ以上の属性を管理する事がある。例えば東京都公安委員会が運転免許証所有属性の他に無事故属性も管理しているとする。
【００２８】
さらに、ある鍵生成局が単一のユーザに２回以上秘密鍵を発行する事がある。例えば東京都公安委員会が運営する鍵生成局は免許が更新される際には秘密鍵も更新するであろう。このとき、アリスに対して元のGIDと同じGIDで秘密鍵を発行すると仮定すると、アリスは自分１人で２つの秘密鍵を持っているので結託攻撃のように２つの秘密鍵を組み合わせて実際には正しくない属性の鍵を構成できてしまうという問題がある。
【００２９】
もし、このような鍵再発行攻撃を防御する為にアリスに対して元のGIDと異なるGIDを用いて鍵発行を行なうと、新たな秘密鍵はアリスが既に持っている武蔵野市在住属性の秘密鍵と組み合わせて使用する事ができなくなってしまう。
【００３０】
この発明は、ある鍵生成局が異なるタイミングで発行した２つの秘密鍵を組み合わせることによりユーザが正統性を有しない鍵を構成する攻撃である鍵再発行攻撃を防ぐ関数型暗号システム及び方法を提供することを目的とする。
【課題を解決するための手段】
【００３１】
この発明の一態様による関数型暗号システムは、単調回路構成法による線形秘密分散を用いた関数型暗号システムにおいて、上記線形秘密分散において用いられる述語Ｓを表現する木を構成する複数の葉のそれぞれには、そのそれぞれの葉に対応するリテラル述語に対応する鍵生成局装置が対応付けされており、ある鍵生成局装置に対応する縮退木を、上記複数の葉の中のその鍵生成局装置に対応する葉で構成される少なくとも１つの木とし、各鍵生成局装置に対応する各縮退木の葉に対応する乱数を用いて上記述語Ｓの中の上記各縮退木の部分の述語により計算される上記各縮退木の根の値が０となるように、上記複数の葉に対応する乱数を生成し、これらの生成された乱数を用いて平文を暗号化する暗号化装置と、を備える。
【発明の効果】
【００３２】
鍵生成局毎に局所的に決定される識別子、すなわち局所識別子(LID:Local IDentier)を導入することにより、異なるLID同士を組み合わせる事ができないように暗号が構成でき、鍵再発行攻撃を防御することができる。
【図面の簡単な説明】
【００３３】
【図１】関数型暗号システム装置の例を説明するためのブロック図。
【図２】関数型暗号システム方法の例を説明するためのフローチャート。
【図３】GIDの実現の例を説明するための図。
【図４】LIDの実現の例を説明するための図。
【図５】LIDの実現の例を説明するための図。
【図６】LIDの実現の例を説明するための図。
【図７】データ構造の例を説明するための図。
【発明を実施するための形態】
【００３４】
以下、図面を参照して、関数型暗号システムの実施形態を説明する。
【００３５】
まず、関数型暗号の述語記述機構について説明する。
【００３６】
背景技術の欄では、関数型暗号が、プログラム(述語)とデータ(述語変数の値)を入力とし、1bitの出力を持つある種のプログラム評価機械として機能し、出力がTrue の場合に暗号が復号できる事を説明した。ここでは、関数型暗号の実装において、プログラム(述語)やデータ(述語変数の値) がどのようなデータ構造を持つかについて説明する。
関数型暗号の述語記述機構は、
(1) 内積ベクトル空間に基づく原始述語(リテラル述語)記述機構
(2) 線形秘密分散に基づく論理式記述機構
の二種類の機構によって構成されている。(1)は(2)より低位のレイヤーに位置し、(1)で記述された複数の述語を(2)で合成して１つの大きな述語を構成する。図７にデータ構造を例示する。
【００３７】
以下、(1)内積ベクトル空間に基づく原始述語記述機構について説明する。
【００３８】
X1,X2をそれぞれ変数の集合とする。述語Q(X1),R(X2)及び多項式g(X1),h(X2)がそれぞれ
{Q(X1)=True}⇔{g(X1)=0},{R(X2)=True}⇔{h(X2)=0}
なる関係を持つとき、rを十分大きい乱数として、多項式の値域や定義域に関する妥当な仮定の下で、
{Q(X1)∨R(X2)=True}⇔{g(X1)h(X2)=0},{Q(X1)∧R(X2)=True}⇔{g(X1)+rh(X2)=0}
が成り立つ。したがって、述語Q(X1),R(X2)の単調合成(∨と∧だけからなる合成)は妥当な仮定の下でg(X1),h(X2)の積と線形和による合成多項式と同一視できる。さらに、述語変数xに対してx∈{I0,I1}と仮定して良い場合は、より強い事が言える。
【００３９】
P(x)=(x=I1),N(x)=(x=I0)
なる述語P(x)及びN(x)を考える。任意のb∈{0,1}についてP(Ib)=bであるから、変数xと述語P(x)を同一視すればxを1bitの論理変数と見なす事ができる。この時、任意のb∈{0,1}についてN(Ib)=¬P(Ib)であるから、論理式¬xと述語N(x)を同一視できる。ところで、
p(x)=(x-I1),n(x)=(x-I0)
なる多項式p(x)及びn(x)を考えると、
{P(x)=True}⇔{p(x)=0},{N(x)=True}⇔{n(x)=0}
であるから論理式{xi,¬xi}i=1,…,nの単調合成は妥当な仮定の下で{p(xi),n(xi)}i=1,…,nの積と線形和による合成多項式と同一視できる。{xi}i=1,…,nの任意の樹状論理回路はド・モルガンの法則を再帰的に用いて{xi,¬xi}i=1,…,nの単調合成で表現できる。したがって、{xi}i=1,…,nの任意の論理式は妥当な仮定の下で{p(xi),n(xi)}i=1,…,nの積と線形和による合成多項式と同一視できる。
【００４０】
ところでKを体とすれば、多項式環K[x1,…,xn]は一般にx1,…,xnの単項式を基底とす
るK上ベクトル空間であるから、述語変数の集合{x1,…,xn}と、このベクトル空間を同一視すれば、x1,…,xnの多項式で表現される述語はベクトル空間の元と見なすこと事ができる。単項式を基底とするベクトル空間は、一般には無限次元なので計算機向きではないが、記述可能な述語の範囲に制限を設ければ述語を有限次元部分空間上の元とする事ができる。例えば１変数述語F(x)がn次多項式f(x)と同一視できるとする。f(x)は単項式基底x→=(x0,x1,…,xn)と係数ベクトルf→=(f0,f1,…,fn)を使って、f(x)=f→・x→と記述できる。この時、n+1次以上の多項式と同一視できる述語は記述できない。(x1=I1)∨…∨(xn=In)型の述語をこの形式で表現する場合、ベクトルの次元が変数の数に対して指数的に大きくなってしまうので、そのような場合は(2)線形秘密分散に基づく述語記述機構を用いる。非特許文献１の関数型暗号でも、この方法を用いて大きな述語を構成している。
【００４１】
内積ベクトル空間に基づく述語記述機構においては、ベクトル空間(単項式基底)を指定することによって、述語変数(x1,…,xn)を指定する。述語変数の具体的な値(x1,…,xn)=(I1,…,In)は、上記で指定された単項式基底に変数の値を代入したベクトルで指定する。例えば、上記の1変数の例の場合x=2なるインスタンスは(x0,x1,…,xn)=(20,21,…,2n)となる。述語は係数のベクトルで指定する。多項式表現が指定した部分空間に収まらないような述語は記述不可能とする。
【００４２】
以下、(2) 線形秘密分散に基づく論理式記述機構について説明する。
【００４３】
ここでは、内積ベクトル空間に基づく述語記述機構で記述された述語(ベクトル)を、「原始述語(primitive predicate)」と呼ぶことにし、原始述語及びその否定を「リテラル述語(literal predicate)」と呼ぶことにする。関数型暗号では、複数のリテラル述語を線形秘密分散に基づく述語記述機構で単調合成して一つの述語を構成する。原始述語の任意の論理式はド・モルガンの法則を再帰的に用いてリテラル述語の樹状単調合成で表現できる。
【００４４】
線形秘密分散に基づく述語記述機構では、述語の合成は線形秘密分散の考え方に基づいて行われる。例えば、秘密f1がf2,f3という分散値に2-out-of-2秘密分散されているとき、即ちs1+f2+f3=0の時はf2とf3の両方の変数の値が揃わないとf1の値を復元できない。f2,f3がそれぞれ何らかの意味で暗号化されているとき。秘密f1を復元する為にはその両方の暗号を復号する必要がある。これは述語の∧を実現しているのに等しい。あるいは、秘密f1がf2,f3という分散値に1-out-of-2秘密分散されているとき、すなわちf1=f2=f3の時は、どちらか一方の変数が揃えばf1を復元できる。f2,f3がそれぞれ暗号化されているとき、秘密f1を復元する為にはそのどちらか一方の暗号を復号すれば良い。これは述語の∨を実現しているのに等しい。このような方法は、単純な∧や∨だけでなく任意の単調述語について構成する事ができる。例えば、図４から６に示すように、ANDやOR等のゲートを節とする樹表現で述語を記述したとき、根から葉に向かって下り、ゲートに当たる度に線形秘密分散で必要な独立変数を各枝に導入して行けば、葉を独立変数の線形和で記述できる。葉変数の幾つかが利用可能で、残りが利用不可能な場合に、利用可能な葉変数の線形和で根変数を記述できるならその単調回路は受理を出力し、記述できないなら拒絶を出力すると解釈すると、この葉変数を独立変数で記述する行列はANDやORの木構造と同一視できる。この方法を用いると任意の述語は幾つかのリテラル述語と線形秘密分散を表現する行列によって記述できる。関数型暗号の述語とはこの線形秘密分散行列とリテラル述語の組である。
【００４５】
以下、線形秘密分散を用いたLIDの実現について説明する。
【００４６】
参考文献１では関数型暗号でGIDを実現する為に、上記の単調回路構成法で求めた行列を用い、もし、述語で使用している全ての鍵のGIDが一致しているなら、回路を評価すると最終的に上手く消去されるような乱数を用いて暗号文を構成している。これについては、例えば図３を参照のこと。
【００４７】
〔参考文献２〕David Freeman, Michael Scott and Edlyn Teske, ”taxonomy of pairing-friendly elliptic curves”, 2006,
【００４８】
図３において、s’1,…,s’7はGIDに対応する乱数である。これらの乱数s’1,…,s’7に基づいて述語Sに対応する木の根の値を求めたときに０となるように、乱数s’1,…,s’7を定める。例えば、f’1=0とし、f’2,f’3,f’4,f’5,f’6をランダムに定める。そして、(f’1,f’2,f’3,f’4,f’5,f’6)Tに、述語Sを表す行列Mを乗算することにより、(s’1,…,s’7)Tを求める。言い換えれば、(f’1,f’2,f’3,f’4,f’5,f’6)Tから(s’1,…,s’7)Tを求めることができるように、行列Mは定義される。
【００４９】
単純回路構成による線形秘密分散を用いた関数型暗号システムにおいては、復号時に復号装置が有する秘密鍵（述語変数の値）に基づいてf’1に対応する値が計算され、この計算されたf’1が平文m’のノイズとなるように構成されている。GIDが一致している場合には、換言すればf’1=0となるように設定されたs’1,…,s’7に基づいて平文m’を復号することができる場合には、f’1=0となりノイズが０となるため、正しく平文m’を復号することができる。GIDが一致しない場合は、換言すればf’1=0となるように設定されたs’1,…,s’7に基づいて平文m’を復号することができない場合には、f’1≠0となりノイズが０とならないため、正しく平文m’を復号することができない。
【００５０】
このGIDの仕組みと似た仕組みを用いてLIDを実現する。LIDを実現する為に、図４から図６に例示するように、回路を評価している途中で上手く消去されるような乱数を使用して暗号を構成する。図４から図６では同じ鍵生成局装置によって作成された述語変数で定義されたリテラル述語が接合される葉をグループ化している。
【００５１】
線形秘密分散において用いられる述語Ｓを表現する木を構成する複数の葉のそれぞれには、そのそれぞれの葉に対応するリテラル述語に対応する鍵生成局装置が対応付けされている。図４から図６では、(s”1,s”2,s”4,s”7)がそれぞれ対応付けされている葉に対応するリテラル述語には鍵生成局装置２−１が対応付けされており、(s”3,s”5,s”6)がそれぞれ対応付けされている葉に対応するリテラル述語には鍵生成局装置２−２が対応付けされている。
【００５２】
ここで、述語Ｓを表現する木は、鍵生成局装置２−１に対応する葉で構成される少なくとも１つの縮退木と、鍵生成局装置２−２に対応する葉で構成される少なくとも１つの縮退木とに分けることができる。図５に記載されているように、(1)注目している鍵生成局装置の変数を使用する葉は有効、(2)それ以外の鍵生成局装置の変数を使用する葉は無効
(3)１個でも有効な子ノードがあるＡＮＤノードは有効、(4)１個でも無効な子ノードがあるＯＲノードは無効、(5)子ノードが全部無効なＡＮＤノードは無効、(6)子ノードが全部有効なＯＲノードは有効という(1)から(6)のステップにより、縮退木を決めることができる。
【００５３】
図５に鍵生成局装置２−１に対応する縮退木を示す。鍵生成局装置２−１に対応する縮退木は、乱数s”1,s”2,s”4がそれぞれ対応付けられている葉から構成される縮退木、及び、乱数s”7が対応付けられている構成される縮退木である。同様に、図６に鍵生成局装置２−２に対応する縮退木を示す。図６に鍵生成局装置２−２に対応する縮退木は、乱数s”3,s”5がそれぞれ対応付けられている葉から構成される縮退木、及び、乱数s”6が対応付けられている構成される縮退木である。
【００５４】
このように、ある鍵生成局装置に対応する縮退木を、述語Sを表す木を構成する複数の葉の中のその鍵生成局装置に対応する葉で構成される少なくとも１つの木とする。
【００５５】
そして、それらの縮退木の根に注目する。縮退木の根に相当する部分の値が０となるよう葉の乱数を決定する為、図Ｇ５、図Ｇ６に示すように、上記の単調回路構成法を縮退木毎に実行する。求めた行列を用い乱数s”1,…,s”7を決定する。
【００５６】
すなわち、各鍵生成局に対応する各縮退木の葉に対応する乱数を用いて述語Ｓの中の上記各縮退木の部分の述語により計算される上記各縮退木の根の値が０となるように、上記複数の葉に対応する乱数を生成する。
【００５７】
図５の例では、鍵生成局装置２−１に対応する、乱数s”1,s”2,s”4がそれぞれ対応付けられている葉から構成される縮退木は、f”1,f”2を乱数として、s”1=f”2, s”2=f”1-f”2, s”1=-f”2とすれば、その縮退木の根の値を０とすることができる。また、鍵生成局装置２−１に対応する、乱数s”7が対応付けられている構成される縮退木はs”7=0とすることにより、その縮退木の根の値を０とすることができる。
【００５８】
図６の例では、鍵生成局装置２−２に対応する、乱数s”3,s”5がそれぞれ対応付けられている葉から構成される縮退木は、f”3を乱数として、s”3=f”3,s”5=-f”3とすることにより、その縮退木の根の値を０とすることができる。また、鍵生成局装置２−２に対応する、乱数s”6が対応付けられている構成される縮退木は、s”6=0とすることにより、その縮退木の根の値を０とすることができる。
【００５９】
GIDのときと同様に、単純回路構成による線形秘密分散を用いた関数型暗号システムにおいては、復号時に復号装置が有する秘密鍵（述語変数の値）に基づいて各縮退木に対応する根の値が計算され、この計算された根の値が平文m’のノイズとなるように構成されている。LIDが一致している場合には、換言すれば各縮退木の根の値=0となるように設定された乱数（例えばs”1,…,s”7）に基づいて平文m’を復号することができる場合には、各縮退木の根の値=0となりノイズが０となるため、正しく平文m’を復号することができる。LIDが一致しない場合は、換言すれば各縮退木の根の値=0となるように設定された乱数（例えばs”1,…,s”）に基づいて平文m’を復号することができない場合には、各縮退木の根の値≠0となりノイズが０とならないため、正しく平文m’を復号することができない。
【００６０】
このよういに、縮退木の中でLID が一致しない場合は回路を最後まで評価しても乱数が消去されずに暗号が復号できない。一方、違うグループでは異なるLIDでも、乱数が消去され暗号が復号できる。
【００６１】
関数型暗号システムは、図１に示すように、標準化機関装置１、鍵生成局装置２、暗号化装置３、復号装置４を例えば含む。鍵生成局装置２及び復号装置４は複数存在してもよい。
【００６２】
標準化機関装置１は、セキリュティパラメータ１λから共通参照文字列gparamを生成する（ステップＳ１）。標準化機関装置１は、例えば以下に例示するGSetupアルゴリズムにより、共通参照文字列gparamを生成する。生成された共通参照文字列gparamは、誰でも参照可能な形で公開される。共通参照文字列gparamに何らかの落し戸が仕掛けられることを避けるため、共通参照文字列gparamはその生成過程が公開検証可能であることが望ましい。
【００６３】
GSetupは、セキュリティパラメータ1λを入力とし、共通参照文字列gparam1を出力する確率的多項式時間アルゴリズムである。GSetupアルゴリズムにおいて、λは所定の正の整数であり、1λはセキュリティパラメータであり、qは所定の素数であり、G1,GTは位数qの巡回群であり、eはペアリング関数であり、Gは、gbpg(1λ)はセキュリティパラメータ1λからq,G1,GT,G,eを生成するための関数である。
GSetup(1λ){
paramG:=(q,G1,GT,G,e)←$gbpg(1λ);
H←${RandomOracle:{0,1}*→G1};
g0←H(0λ);
g1←H(0λ-11);
gT←e(g0,g1);
gparam←(paramG,H,g0,g1,gt);
return gparam;
}
【００６４】
鍵生成局装置２は、共通参照文字列gparamを用いて、局公開パラメータapkとマスター鍵askを生成する（ステップＳ２）。生成されたマスター鍵askはその鍵生成局装置２に秘密に保持され、生成された局公開パラメータapkは誰でも参照可能な形で公開される。鍵生成局装置２が複数ある場合には、複数の鍵生成局装置２のそれぞれが、局公開パラメータapkとマスター鍵askを生成する処理を行う。
【００６５】
鍵生成局装置２は、例えば以下に例示するASetupアルゴリズムにより、局公開パラメータapkとマスター鍵askを生成する。ASetupは、共通参照文字列gparamを入力とし、局公開パラメータapkとマスター鍵askを出力する確率的多項式時間アルゴリズムである。ASetupアルゴリズムにおいて、dはその鍵生成局装置２が管理する述語変数の数であり、niはi番目の述語変数の次元である。
ASetup(gparam){
for i∈{1,…,d} do {
(vski,vari)←GenerateVar(gparam,ni);
}
ask←(vsk1,…,vskd);
apk←(var1,…,vard);
return (ask,apk)
}
【００６６】
ASetupアルゴリズムのサブルーチンであるGenerateVarは例えば以下のように示される。nは、上記のASetupアルゴリズムにおけるniを意味する。このように、サブルーチンの中では、i,j等のインデックスを省略することがある点に留意する。他のアルゴリズムのサブルーチンにおいても同様である。
【００６７】
nは所定の正の整数である。GLは各要素がFqであり逆行列を有するN×Nの正則行列である。i=1,…,Nとして、Biは、行列Bを構成するi番目の列ベクトルのことである。
GenerateVar(gparam,n){
(paramG,H,g0,g1,gt)←gparam;
N←7n+1;
X←$GL(N,Fq);
B←X・g0;
B^←(B1,…,B3n,BN);
Y←(X-1)T;
var←(B^,n,gparam);
vsk←(Y,var);
}
【００６８】
鍵生成局装置２は、マスター鍵ask、GID gid及び鍵識別子（述語変数への値の割り当て）xに基づいて、対応する秘密鍵skxを生成する（ステップＳ３）。生成された秘密鍵skxは、gidに対応するユーザが有するコンピュータである復号装置４に送信される。鍵生成局装置２及びユーザが複数ある場合には、各鍵生成局装置２が各ユーザに対して、秘密鍵skxを生成する処理を行う。
【００６９】
鍵生成局装置２は、例えば以下に例示するAttrGenアルゴリズムにより、秘密鍵skxを生成する。AttrGenは、マスター鍵ask、GID gid及び鍵識別子（述語変数への値の割り当て）xに基づいて、対応する秘密鍵skxを生成する確率的多項式時間アルゴリズムである。x:=((t1,x→1),…,(ta,x→a))は、述語変数への値の割り当てリストである。i=1,…,aとして、tiはリストのインデックス（代入されるべき述語変数の添え字）であり、xiはそのインデックスで表される述語変数に割り当てられる値又はベクトルである。このように、鍵生成局装置２は、秘密鍵生成の度に異なる局所識別子Glidを発行し、その発行された局所識別子Glidについての情報を含む秘密鍵を生成する。また、鍵生成局装置２は、生成する秘密鍵を送信するユーザの大域検証可能識別子Ggidを更に発行し、その発行された大域検証可能識別子Ggidについての情報を更に含む秘密鍵を生成する。
AttrGen(ask,gid,x){
(vsk1,…,vskd)←ask;
((t1,x→1),…,(ta,x→a))←x;
Ggid←H(gid);
Glid←$G1;
for i∈{1,…,a} do {
j←ti;
ki←$AssignVar(vskj,Ggid,Glid,x→i);
}
skx←(k1,…,ka)
return skx
}
【００７０】
AttrGenアルゴリズムのサブルーチンであるAssignVarは例えば以下のように示される。0は無限遠点である。
AssignVar(vsk,Ggid,Glid,x→){
(Y,var)←vsk;
(B^,n,gparam)←var;
(paramG,H,g0,g1,gt)←gparam;
φ→→$Fqn;
k*←Y・(x→・g1,x→・Ggid,x→・Glid,O3n,φ→・g1,0);
k←(k*,x→,var);
return k;
}
【００７１】
暗号化装置３は、各鍵生成局装置２の局公開パラメータapkを用いて記述した受信者識別子（述語ともいう。）S及び平文mに基づいて、暗号文cSを生成する（ステップＳ４）。生成された暗号文cSは、その受信者識別子Sのユーザが保有する復号装置４に送信される。暗号化装置３は、例えば以下に例示するEncアルゴリズムにより暗号文cSを生成する。
【００７２】
Encアルゴリズムは、述語S及び平文mを入力として、暗号文cSを生成する確率的多項式時間アルゴリズムである。述語Sは、M,M”,ρから構成される。Mは述語Sを表す秘密分散生成行列であり、M”は述語Sの縮退木の述語を表す同調秘密分散生成行列である。ρは、リテラル述語のリストである。ρiは、i番目のリテラル述語であり、Neg,var,v→から構成される。Negはそのリテラル述語が肯定(Neg=0)か否定(Neg=1)かを表す情報であり、varは述語変数であり、v→は述語変数の値を示す条件式であり、varとv→は合わせて原始述語である。e1→は、(1,0,…,0)である。
Enc(S,m){
(M,M”,ρ)←S;
f←$Fqr; f’←${0}×Fqr-1; f”←$Fqr”;
s←M・f; s’←M・f’; s”←M”・f”;
s0←f1;
for i∈{1,…,l} do{
(Neg, var, v→)=ρi;
(B^,n,gparam)←var;
N←7n+1;
η←$Fq;
if Neg=0 then{
(θ,θ’,θ”)←$Fq3;
ci←(sie1→+θv→,si’e1→+θ’v→,si”e1→+θ”v→,η)B^;
} else {
ci←(siv→,si’v→,si”v→,η)B^;
}
};
cl+1←mgTs0;
cs←(S,c1,…,cl,cl+1);
return cs;
}
【００７３】
復号装置４は、秘密鍵skx1,…,skxn’及び暗号文cSを用いて、平文m’を生成する。n’は用いられる秘密鍵の数である（ステップＳ５）。復号装置４は、例えば以下に例示されるDecアルゴリズムにより平文m’を生成する。復号装置４は、例えばこのようにして、平文を復号するための秘密鍵に含まれる局所識別子が同じ場合のみ正しい平文が生成されるように、上記平文を復号する。
【００７４】
Decアルゴリズムは、秘密鍵skx1,…,skxn’及び暗号文cSを入力とし、平文m’を出力する確率的多項式時間アルゴリズムである。accは、正しく平文m’を復号することができるかどうかを表す変数であり、acc=Trueの場合には正しく平文m’を復号することができることを表し、acc≠Trueの場合には正しく平文m’を復号することができないことを表す。acc≠Trueの場合には正しく平文m’を復号することができないことを表す情報であるNGが出力される。βは修正因子であり、Ｊはリテラルインデックスから鍵のインデックスへの写像である。
Decアルゴリズム
Dec({skx1,…,skxn’},cs){
{k1,…,ka}←Uiskxi;
(S,c1,…,cl,cl+1)←cs;
(acc,β,J)←Accept(S,{k1,…,ka});
if acc=True then {
K=1;
for i∈{1,…,l} do{
if βi≠0 then {
j←Ji;
(k*,x→,var)←kj;
K←×e(ci,k*)βi;
}
}
m’←cl+1/K;
return m’;
} else {
return NG;
}
}
【００７５】
DecアルゴリズムのサブルーチンであるAcceptアルゴリズムは例えば以下のように表される。
Accept(S,k){
(M,M”,ρ)←S;
for i∈{1,…,l} do {
(Neg,var,v→)←ρi;
if (∃j s.t. kj=(k*,var,x→) s.t.(
((Neg=0)∧(x→・v→=0))∨
((Neg≠0)∧(x→・v→≠0))) then {
Ji←j;
γi←x→・v→;
} else {
Ji←NG;
Mi←0→;
}
}
(M’,V,w,l’)←GaussianElimination(M);
σ←(1,0,…,0)
α←0→; //(α1,…,αl)←(0,…,0)初期化
for i∈{1,…,l’} do {
t←wi;
α←+σt・Vi; σ←+σt・Mi’;
}
acc←(σ=?0→);
//Miの線形結合でσをゼロにできるならTrue
β←α;
for i∈{1,…,l} do {
(Neg,var,v→)→ρi;
if (βi≠0)∧(Neg≠0)∧（γi≠0） then βi→÷γi;
}
return (acc,β,J);
}
【００７６】
AcceptアルゴリズムのサブルーチンであるGaussianElimination(M)は例えば以下のように表される。Ilはl×lの単位行列である。GaussianElimination(M)は、MをMの階段行列であるM’に変換するアルゴリズムである。VはMを階段行列化するためのｌ×l行列である。すなわち、M’=V・Mである。wは、wiがMi’の先頭非ゼロ成分要素のインデックスである。l’はM’の非ゼロ行の個数である。
GaussianElimination(M){
V←Il;
t←０;
l’←0;
for i∈{1,…,l} do {
//部分ピボット選択開始
t++;if t>r then goto last;
j←i;
while Mj,t=0 do {
j++;
if j>l then {
t++; if t>r then goto last;
j←i;
}
}
swap(Mi,Mj);swap(Vi,Vj); //行の入れ替え
//部分ピボット選択終了
l’←I;
w’←t;
Vi←÷Mi,t;Mi←÷Mi,t;
for j∈{i+1,…,l} do {
if Mj,t≠0 then {
Vj←-Mj,t・Vi;Mj←Mj,t・Mi;
}
}
}
last:return (M,V,w,l’);
}
【００７７】
以下、Acceptアルゴリズムについての説明をする。
【００７８】
暗号が正しい手順によって復号できるとき、すなわちDecアルゴリズム中の
(acc,β,J)←Accept(S,{k1,…,ka});
にてaccにTrueが返る場合、鍵（変数の具体的な割り当て）{k1,…,ka}は述語Sを満足する。
【００７９】
このことは、述語Sの中に含まれるリテラル述語（treeの葉の部分）のリストρのうち{k1,…,ka}によって満足される部分のみを使って、treeの根の部分に相当する情報を復元できることを意味する。
【００８０】
鍵（変数の具体的な割り当て）{k1,…,ka}が述語Sを満足するか否かを判定するためには、使用可能なtreeの葉の部分のみを利用して、treeの根の部分の情報が復元できるか否かを判定できればよい。
【００８１】
今、線形秘密分散によってtreeの葉の部分の情報s1,…,slは独立変数f1,…,frによって以下のように記述されているとする。
【００８２】
【数１】
2014139623.tif 000003
【００８３】
一般には鍵{k1,…,ka}が満足するリテラル述語は{ρ1,…,ρl}の中の一部のみであるから、実際に復号に利用できる葉の情報はs1,…,slの中の一部の情報のみである。l×l行列Zを、鍵{k1,…,ka}がi番目のリテラル述語ρiを満足するときZi,i=1それ以外はZi,j=1なる対角行列と定義すると、実際に復号に利用できる葉変数siと独立変数fiの関係式は以下のように記述できる。
【００８４】
【数２】
2014139623.tif 000004
【００８５】
Acceptアルゴリズムの前半で行列Mの一部の行を0→で上書きしているのはM←Z・Mを計算している。そして、s1,…,slの部分情報Z・(s1,…,sl)Tから、treeの根の情報s0=f1=(1,0,…,0)・(f1,…,fr)Tが計算可能であることと、行列Z・Mの行の線形結合により(1,0,…,0)なる行ベクトルが生成可能であることは同値である。
【００８６】
したがって、鍵（変数の具体的な割り当て）{k1,…,ka}が述語Sを満足するか否かを判定するためには、行列Z・Mの行の線形結合にょり(1,0,…,0)なる行ベクトルが生成可能であるか否かを判定すればよい。
【００８７】
そのために、まずGaussの消去法を用いZ・Mの行基本変形により階段型行列M’を作成する。この階段型行列M’の作成を行うのが、AcceptアルゴリズムのサブルーチンであるGaussianEliminationアルゴリズムである。このとき、正則行列VによりM’=V・Z・Mと記述できる。
【００８８】
Vは正則行列であるから、行列Z・Mの行の線形結合により(1,0,…,0)なる行ベクトルが生成可能であることと、M’=V・Z・Mの行の線形結合により(1,0,…,0)なる行ベクトルが生成可能であることとは同値である。
【００８９】
M’は階段行列であるので、M’の行の線形結合により(1,0,…,0)なる行ベクトルが生成できるか否かはAcceptアルゴリズムの真ん中のforループのようにM’の階段行列の要素に着目しながらM’の各行を(1,0,…,0)より次々引いてゆき、(0,…,0)に変形できるか否かを判定すればよい。もし、M’の行の線形結合(ζ1,…,ζl)・M’が
(ζ1,…,ζl)・M’=(1,0,…,0)
を満たすなら、
(ζ1,…,ζl)・V・Z・M=(1,0,…,0)
であるから、
(α1,…,αl)=(ζ1,…,ζl)・V・Z
と定義すると、(α1,…,αl)・M=(1,0,…,0)であるから、
【００９０】
【数３】
2014139623.tif 000005
【００９１】
となる。すなわち鍵{k1,…,ka}が述語Sを満足するなら、
【００９２】
【数４】
2014139623.tif 000006
【００９３】
となる。Acceptアルゴリズムの真ん中のforループでこのαiが計算されている。同様に、
【００９４】
【数５】
2014139623.tif 000007
【００９５】
となる。また、縮退木がn個ありji∈{1,…,n}としてi番目の葉とi’番目の葉が同じ縮退木に含まれるときはji=ji’と定義する。χjを不定元とし、Σi=1lαisi”χjiなる和を考え不定元毎に係数をまとめると、
【００９６】
【数６】
2014139623.tif 000008
【００９７】
となる。縮退木内での元の秘密分散と同じ復元過程を経ると根の根が０となる同調秘密分散の定義により、
【００９８】
【数７】
2014139623.tif 000009
【００９９】
が成立するので、不定元χjに関して恒等的に、
【０１００】
【数８】
2014139623.tif 000010
【０１０１】
となる。
【０１０２】
Acceptアルゴリズムの最後のforループは否定のリテラル述語からsiに関する情報を計算する際、計算が単純になるようαiを補正した値であるβiを求めている。詳細は、下記を参照のこと。
【０１０３】
Decアルゴリズムにおいて最初のfor文で計算しているKはδgid及びδjlidを
【０１０４】
【数９】
2014139623.tif 000011
【０１０５】
と定義すると、
【０１０６】
【数１０】
2014139623.tif 000012
【０１０７】
となるので、Correctnessが満たされる。上記の説明のχjiにδjilidが代入された形になっている。B*はいわゆるBの双対基底であり、B*=Y・g0=(X-1)T・g0である。
【０１０８】
最後に攻撃者の攻撃によってノイズが消えない理由について説明する。今、攻撃者の立場に立って、ある縮退木に対して異なるlidを持ついくつかの鍵を組み合わせて適用し、本来復号できないはずの暗号文を、何とか復号することを考える。
【０１０９】
このとき、i番目の葉とi’番目の葉が同じ縮退木に含まれていても、ji≠ji’となるようなi,i’が存在することとなり、恒等式(1)を使用することができない。したがって、攻撃者は
【０１１０】
【数１１】
2014139623.tif 000013
【０１１１】
を成立させる都合の良いχjiの組み合わせを暗号文毎に見つける必要がある。しかし、χjiの具体的な値はAttrGenアルゴリズムの中のGlidの離散対数によって決定され、対象となる鍵生成局装置が正しくAttrGenを行う限りχjiはランダムに選ばれてしまい、攻撃者は圧倒的に低い確率でしか都合が良いχjiを引き出すことはできない。
【０１１２】
［変形例］
上記装置及び方法において説明した処理は、記載の順にしたがって時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。
【０１１３】
また、関数型暗号システム方法における各処理をコンピュータによって実現する場合、関数型暗号システム方法が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、関数型暗号システム方法における処理手段がコンピュータ上で実現される。
【０１１４】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【０１１５】
また、各処理手段は、コンピュータ上で所定のプログラムを実行させることにより構成することにしてもよいし、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【０１１６】
その他、この発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【符号の説明】
【０１１７】
１      標準化機関装置
２      鍵生成局装置
３      暗号化装置
４      復号装置
【図１】
2014139623.tif 000014
【図２】
2014139623.tif 000015
【図３】
2014139623.tif 000016
【図４】
2014139623.tif 000017
【図５】
2014139623.tif 000018
【図６】
2014139623.tif 000019
【図７】
2014139623.tif 000020