Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FROST

 FROST

GBECの解説動画の資料です。
https://goblockchain.network/2023/02/frost/

shigeyuki azuchi

February 21, 2023
Tweet

More Decks by shigeyuki azuchi

Other Decks in Technology

Transcript

  1. FROST

    Flexible Round-Optimized Schnorr Threshold Signatures 


    View full-size slide

  2. 1
    FROST

    https://eprint.iacr.org/2020/852.pdf

    通信ラウンドの効率性を重視したSchnorr署名の閾値署名方式 


    ● 従来の閾値署名方式 

    ある参加者が不正な振る舞いをしても、 

    残りの参加者が不正を検出し、閾値分の参加者が 

    正しい振る舞いをする限り、署名を完成できる。 


    → 堅牢性のあるプロトコル 


    ● FROST

    不正を行う参加者がいた場合、プロトコルを中断し、 

    その参加者を除いてプロトコルを 再実行することで

    署名を完成させる。


    → 通信ラウンドを削減し、通信効率を向上 


    ※ Zcashではシールドトランザクションで、マルチパーティの資金を

     管理できるようにするために採用を進めている模様

    View full-size slide

  3. 2
    ラグランジュ補間

    【シャミアの秘密分散法】 

    t-1次の多項式 f(x) = a
    t-1
    xt-1 + a
    t-2
    xt-2 + … + a
    0
    を生成し、a
    0
    をシークレット値とした場合、 

    シェア(i, f(i))をt個集めると、多項式を再構築でき、シークレット値 a
    0
    が分かる秘密共有の仕組み 


    【ラグランジュ補間公式】 





    を利用して、t個シェアが集まると、 a
    0
    を計算可能

    (x - j) は除く
    (i
    j
    - i
    j
    )は除く
    i
    j
    は除く
    (i
    j
    - i
    j
    )は除く
    ※ λ
    j
    (0)はiが事前に分かれば事前に計算可能


    View full-size slide

  4. 3
    分散鍵生成(DKG)

    n人の参加者のうち、t人の参加者が協力すればSchnorr署名を完成させられるユースケースを想定 

    n人の参加者(各参加者の IDを1..nとする)は、それぞれ以下のプロトコルを実行 

    【第1ラウンド】

    1. t個のランダムなシークレット
    a
    0
    , a
    1
    , …, a
    t-1
    を生成

    2. 1のシークレットを係数とした
    t-1次の多項式を作成

    f(x) = a
    t-1
    xt-1 + a
    t-2
    xt-2 + … + a
    0

    3. a
    0
    の知識を証明をするためのSchnorr署名を生成

    a. ランダムなnonce kを選択し、R = kGとする

    b. c = H(ID || a
    0
    G || R)を計算

    c. s = k + ca
    0
    を計算

    d. (R, s)がSchnorr署名

    4. 各係数のコミットメントを計算(
    C
    i
    = a
    i
    G)

    5. 4のリストと、3のSchnorr署名を他の参加者に送信

    6. 受信したコミットメント(=公開鍵)のリストとSchnorr署名から、署名の有効性を検証

    View full-size slide

  5. 4
    分散鍵生成(DKG)

    【第2ラウンド】

    1. 自分が作成した多項式 f(x) = a
    t-1
    xt-1 + a
    t-2
    xt-2 + … + a
    0
    を使って、

    n人の各参加者のシェア(ID, f(ID))を計算し、各参加者に送信する。

    2. シェアを受信した参加者は、シェア
    (ID, f(ID))が正しいか検証する。

    ※ 多項式の各係数は不明だが、共有されたコミットメント(
    C
    i
    = a
    i
    G)を使って検証可能

    f(ID) = C
    t-1
    ・IDt-1+ C
    t-2
    ・IDt-2 + … C
    0
    ・ID0
    3. 全参加者からシェアを受信したら、集約鍵のシェアを計算

    s
    ID
    = f
    1
    (ID) + f
    2
    (ID) + … f
    n
    (ID)

    4. 3から自分の公開シェアP
    ID
    = s
    ID
    Gを計算

    他の参加者の公開シェアについても、全参加者のコミットメントとIDが分かるので計算可能

    5. 各参加者のC
    ID, 0
    = a
    ID,0
    Gを合算して、集約公開鍵P = a
    1,0
    G + a
    2,0
    G + … a
    n,0
    Gを導出


    集約公開鍵Pに対応する秘密鍵は、各参加者の係数
    a
    0
    の合算値

    各参加者は集約秘密鍵のシェアを持っている状態

    View full-size slide

  6. 5
    署名の生成

    【前処理ラウンド】

    各参加者は、

    1. 一度だけ使用するnonceのペア(
    d
    ID
    , e
    ID
    )を生成

    2. nonceに対応する公開鍵のペアを生成(
    D
    ID
    = d
    id
    G, E
    ID
    = e
    id
    G)


    ↑をπ個生成して、他の参加者に送信


    ● 1回の署名ラウンドで使用するのは1つのみ

    ● 最初は、DKGラウンドで一緒にやってもOK

    ● π個すべて使用したら、前処理ラウンドを再実行

    View full-size slide

  7. 6
    署名の生成

    【署名ラウンド】

    ● 最初に参加者の中から、署名の集約を行う
    Signature Aggregator(SA)を選択する

    ● SAは参加者の中からt人選び、未使用のnonceのペア(
    D
    ID
    G, E
    ID
    G)をピックアップ

    ● SAはピックアップしたnonceのリストと署名対象のメッセージ
    mをt人の参加者に送信


    t人の参加者は、

    1. nonceのリストが以前受信したものか検証

    2. 参加者全員分のp
    ID
    = H(ID || m || (nonceのリスト))
    を計算

    3. 署名に使用する集約nonceを計算 

    4. 署名のチャレンジ c = H(P || R || m)を計算

    5. 自身のシェアs
    ID
    を使って部分署名を計算し

    z
    ID
    = d
    ID
    + p
    ID
    e
    ID
    + c s
    ID
    λ
    ID

    6. 部分署名をSAに送信

    ※ s
    ID
    λ
    ID
    は多項式補間で復元される秘密鍵のシェアとして機能する


    View full-size slide

  8. 7
    署名の生成

    【署名ラウンド】

    1. SAはt人の参加者から受信した部分署名について、以下が成立するか検証

    z
    ID
    G = R
    ID
    + c λ
    ID
    P
    ID

    成立しなかった場合、不正な振る舞いをする参加者が特定され、その参加者を除いて署名ラウンドを再実行

    2. t個の部分署名を合算して、集約署名を完成させる

    z = z
    1
    + … z
    t

    3. (R, z)が集約公開鍵Pとメッセージmに対して有効なSchnorr署名


    各参加者は、署名ラウンドで実行したnonceのペア(
    D
    ID
    G, E
    ID
    G)を削除


    ※ 署名ラウンドは、SAと各参加者間で1ラウンド(1往復)の通信で完了する

    nonceのコミットメントの交換を署名ラウンドに含める場合は、2ラウンド


    View full-size slide

  9. 8
    IETFでの標準化作業進行中

    2ラウンド型のFROSTの標準化提案

    https://datatracker.ietf.org/doc/draft-irtf-cfrg-frost/

    ※ 分散鍵生成はスコープ外


    現在定義されている暗号スイート

    
 楕円曲線
 ハッシュ関数

    Ed25519
 SHA-512

    ristretto255
 SHA-512

    Ed448
 SHAKE256

    P-256
 SHA-256

    secp256k1
 SHA-256


    View full-size slide