ホワイトペーパー

ZILLIQAテクニカルホワイトペーパー日本語訳13

更新日:

本稿について

本稿では、The ZILLIQA Technical Whitepaper Version0.1の「Appendix A」の日本語訳を掲載します。やや数学的要素が入ります。

原文はこちらになります。

スポンサードサーチ

Appendix A シュノア電子署名アルゴリズム

A EC-Schnorrスキーム(署名者が一人の場合)

EC-Schnorrはある群について取り組む。ここで、ある群とは、離散対数問題を解くのが難しい群である。ZILLIQAは有名なsecp256k1曲線上に定義される楕円曲線上の群を用いる。C := (p, G, n)は群を定義するパラメータの集合である。ここで、pは素数で体Fpを定めるもの、Gはsecp256k1曲線上のベースポイント、n(素数)Gの位数である。また、EC-Schnorrには暗号学的ハッシュ関数Hが必要で、SHA3-256を用いる[6]。

EC-Schnorrは3つのアルゴリズム、KeyGen、Sign、Verifyの集合で、このセクションで説明する。以下のアルゴリズムにおいて、任意のスカラーxと点Qについて、スカラー倍を[x]Qで表す。

  1. KeyGen(C):このアルゴリズムは曲線のパラメータCを引数として公開鍵(pk)と秘密鍵(sk)の鍵ペアを返す。
  2. Sign(C, pk, sk ,m):このアルゴリズムは署名者により実行される。曲線のパラメータCと公開鍵・秘密鍵のペア(pk, sk)、並びに署名するメッセージm ∈ {0, 1}をとる。戻り値は署名σである。
  3. Verify(C, σ, pk, m):このアルゴリズムは署名の有効性を確認したいと思う検証者により実行される。曲線のパラメータCと署名σ、並びに公開鍵pk、メッセージmをとる。公開鍵pkのもとでメッセージmに関する署名が有効であれば1を、それ以外の場合は0を返す。

B EC-Schnorrマルチシグスキーム

1)設定と仮定

EC-Schnorrはマルチシグスキームとしても利用できる[11]。マルチシグスキームでは、T人の署名者P1, ..., PTと、1人の集約者、1人の検証者がいる。署名者は連帯してメッセージmに署名したいと考えている。集約者はファシリテーターの役割を果たし、個々の署名者から送信される署名を集約する。検証者は集約された署名を検証する。集約者と検証者の役割を同一のエンティティが果たすことができる。

各署名者Piは、EC-Schnorrの署名者が一人の場合のスキームに関して自らの公開鍵と秘密鍵のペア(pki, ski)を持つ。全公開鍵の集合をP = {pk1, ..., pkT}で表す。 また、全てのエンティティに分かるパブリックなメッセージmpを仮定する。メッセージmpはアプリケーションシナリオに特有のものの可能性があり、次の形式:I know the private key for my public key for the session id: XXXX.(筆者注:セッションID XXXXに関する私の公開鍵に対応する秘密鍵を私は知っています。)をとらせる。このメッセージの目的はこのスキームに対するある既知の攻撃を無効化することである[26]。

2)マルチシグプロトコル

マルチシグは署名者・集約者・検証者間のインタラクティブなプロトコルである(図2の模式図を参照)。プロトコルには以下に示す6つのステップがある。

1.アイデンティティのセットアップ(1度限り)

このステップは各参加者と検証者の間で行われる。プロトコルの開始時に、各署名者Piはその時点で別の署名プロトコルに関連していなければ、メッセージmpに対するEC-Schnorr署名σiを生成する。次にPiは(σi, pki)を検証者に送信する。続いて検証者は次の2つの検証を行う。

  1. pki ∈ Pであるかをチェックする。偽であれば、検証者はアボートする。
  2. Verify(C, σi, pki, mp)を呼び出すことにより、各署名σipkiに関してmpに対する有効なEC-Schnorr署名であることをチェックする。これらの署名の検証が1つでも0を返した場合、検証者はアボートする。全ての署名が有効であればプロトコルは次のステップに進む。

また、Pに含まれる各pkiに関するσiを受け取らない場合もアボートする。Piからの署名を受け取ったか否かを記録するため、ビットマップZ[1, ..., |P|]を用いる。アイデンティティのセットアップは一度限りのプロセスでこの後に次なるステップが続く。セットアップが正常に終了した場合に限り、プロトコルの次のステップを開始することができる。

2.コミットメント生成

各署名者Piは乱数ki$ー [1, n - 1]を選び、Qi = [ki]Gを計算する。Gは楕円曲線上のベースポイントであり、nGの位数であることを思い出してほしい。次に、PiQiを集約者に送信する。

3.試行生成

まず、集約者はP内の鍵について集約鍵pk = ∑pkiP pkiを計算する。また、ステップ2で受け取ったQiについて∑i Qiを計算する。次に r ← H(Q||pk||m) mod nを計算して(r, Q, pk)を各Piに送信する。

4.応答生成

まず、各署名者Piはステップ3で受け取ったrの完全性を確認する。これは、H(Q||pk||m)をもう一度計算して受信したrと等しいかをチェックすることでなされる。偽である場合、Piはプロトコルをアボートするか、あるいはsi ← (ki - rski) mod nを生成してsiを集約者に送信する。

5.応答集約

集約者は集約応答s = ∑i si mod nを計算し、集約署名σ = (r, s)を構築する。次に、集約者は検証者に(m, σ)を送信する。

6.署名検証

検証者は署名が有効か否かを検証する。次のステップを行う。

  1. P内の公開鍵をpk'として集約する。
  2. Verify(C, σ, pk', m)を呼び出すことにより、各署名σが公開鍵pk'に関してmに対する有効なEC-Schnorr署名であることをチェックする。Verify関数のアウトプットを返す。

ZILLIQAホワイトペーパー日本語訳12 ←← 前)|(次 →→ ZILLIQAホワイトペーパー日本語訳14

免責

邦訳には誤りがある場合がございます。予めご承知おき下さい。

確実な情報を知るためには冒頭に示した原文をご参照くださいますようお願いいたします。

-ホワイトペーパー
-, , , , , , , ,

Copyright© 暗号通貨界隈のメモ書きなど。 , 2019 All Rights Reserved Powered by STINGER.

%d人のブロガーが「いいね」をつけました。