BLS署名について

以下を書いたので、BLS署名についてもまとめておく。

cipepser.hatenablog.com

なお、本内容はブロックチェーン系プロジェクトで着目される暗号技術 のP.22に書かれているBLS署名について自分なりに理解するためのメモである。1

BLS署名はその名の通り、署名をどうやるかという話なので、以下3フェーズで考える。

  • 鍵生成
  • 署名
  • 検証

鍵生成

 G_1, G_2素数位数 pの加法巡回群とする。

ハッシュ関数を以下のように定める。

 H: \lbrace 0, 1 \rbrace^* \to G_1

 \lbrace 0, 1 \rbrace^* は任意長の入力を表している。 後述の双線形写像を使うために、写像した先が G_1になるようにする。

また、公開パラメータとして、 Q \in G_2を選ぶ。

次に有限体 \mathbb{F}_pから秘密鍵を以下のように選ぶ。

 s \in \mathbb{F}_p

公開パラメータ Qを生成元として、公開鍵を sQとする。  sQ \in G_2であることに注意。

署名

メッセージ mに対して、以下のように署名 Signを行う。

 Sign(s, m) = s H(m)

 sH(m) \in G_1であることに注意。

検証

BLS署名における双線形性(ペアリング)について - 逆さまにしたで述べた以下の双線形写像 eを使う。

 e: G_1 \times G_2 \to G_T

ここで G_T素数位数 pの乗法巡回群である。

検証する内容は以下。等号が成り立つなら正当な署名である。

 e(H(m), sQ) = e(Sign(s, m), Q)

補足

署名の検証までであれば、上記で終わりなのでおまけ。  e(H(m), sQ) = e(Sign(s, m), Q)を式展開して、ちゃんと成り立つことを確認する。

署名のところで記載したように Sign(s, m) = s H(m) なので、

 (l.h.s) = e(sH(m), Q)

である。あとは sを第一引数から第二引数に移せることが言えれば、右辺と一致する。これについては、BLS署名における双線形性(ペアリング)について - 逆さまにしたで述べた通りなので、そちら参照(一番最後のところ)。

もうちょっと補足しておくと、 H(m) G_1の元としたことで、 sH(m) \in G_1である。 同様に Q \in G_2としたので、 sQ \in G_2である。 双線形写像 e e: G_1 \times G_2 \to G_Tとなるような写像であることも理解しておくとよいと思う。

References


  1. 今回も記号を自分の理解に合わせて出典元と変えている箇所がある