属性ベース暗号(attribute-basedencryption)
従来の公開鍵暗号に属性を付与し、その属性を持った人物しか復号できないようにする仕組み。
属性の条件を任意に組み合わせることなどもできる
1. 最初のパラメータ設定をするセットアップアルゴリズム.
指定された属性集合のうち何個属性を持っていると復号できるかという下限を $ kとする.
楕円曲線$ Eと位数 $ p の巡回群 $ G とペアリング $ e : E × E → Gを用意する.
$ P,Q ∈ Eと $ y ∈ \mathbb{F}p をとり,$ R := yP とする.
$ y が秘密鍵で $ P, Q,R が公開鍵
秘密鍵はDKGで準備する
属性を「コントラクトアドレス」などの文字列とし,属性の集合から$ E へのハッシュ関数を $ H とする.
2. 属性集合 $ ω_u を持つユーザ$ uに対して秘密鍵 $ K_{ω_u} を生成する鍵生成アルゴリズム.
まず$ U_iは 以下の式を満たすk-1次多項式を作る
$ q_u(x)=y+a_1x+a_2x^2+...+a_{k-1}x^{k-1}
$ q_u(0) = y
$ ω_u の j 番目の属性 $ a_j に対して $ r_j ∈ F_p をランダムに選び,$ P_j:= r_jP,$ D_j:= q_u(j)Q + r_jH(a_j) とする
$ K_{ω_u}:= {\{ P_j, D_j \} }_{\{ i=j,..., | ω_u| \}}だけをユーザ $ u に渡す
3. 平文$ mを属性集合 $ ω で暗号化するアルゴリズム $ Enc(m, ω)
属性集合 $ ω を選び,平文 $ m ∈ G を暗号化する.
$ s ∈ Fp をランダムに選び
$ Enc(m, ω) := (ω, t := m · e(R, Q)s, T := sP, Ei:= sH(a_i)_{\{ i=1,...,|ω| \}})
と暗号化する.
これにより$ ω の中のどれか $ k 個の属性を持っている人だけが復号できる
4. ユーザ$ uの属性集合 $ ω_u と暗号化に使われた属性集合 $ ω に対して $ |ω_u ∩ ω| ≥ kならば復号するアルゴリズム.
属性集合 $ ω_u を持つユーザ $ u は $ |ω ∩ ω_u| ≥ k を確認する
成立しなければ復号できない
成立する場合は共通部分の中から $ k 個適当に属性を選びその集合を $ S とする.($ S ⊆ ω ∩ ω_u, |S| = k )
復号は以下のペアリング計算になる
$ z =∏_{a_i∈S} (\frac{e(T, D_i)}{e(P_i, E_i)})^{∆_i,S (0)}$ =∏_{a_i∈S}(\frac{e(sP, q_u(i)Q + r_iH(a_i))}{e(r_iP, sH(a_i))})^{∆_i,S (0)}$ =∏_{a_i∈S}(\frac{e(P,Q)^{sq_u(i)}e(P, H(a_i))^{sr_i}}{e(P, H(a_i))^{sr_i}})^{∆_i,S (0)}$ =∏_{a_i∈S}(e(P, Q)^{sq_u(i)})^{∆_i,S (0)}$ = e(P, Q)^{(∑_{{a_i}∈S}q_u(i)∆i,S (0))s}
Lagrange の補間多項式を使って
$ = e(P, Q)^{q_u(0)s} = e(P, Q)^{ys}
$ t = m · e(yP, Q)^s = m · e(P, Q)^{ys} = mz
なので$ t/z = m
と復号できる
一般化すると$ Dec(Enc(m, ω), ωu) = m
参考文献