Fast Multiparty Threshold ECDSA with Fast Trustless Setup
2019-03-13
Rosario Gennaro, Steven Goldfeder. 2018. 論文。
著者のイニシャルと発表年をとって GG18 と呼称しているようなので倣う。
離散対数暗号の DSA 形式の署名における多人数の threshold signatures の問題への解法が述べられている。
DSA の threshold signatures
threshold signing / threshold signatures とは、n人で秘密鍵を分割保有し、そのうち t+1 人集まれば署名を作成できるというシステム。いわゆるマルチシグ。
離散対数の DSA は一般的に
Rrs=gk1=H′(R)=k(H(m)+xr)
と表される。
ここで、
- x は秘密鍵
- k,r,s は署名に用いる一時的な値
- M は署名対象のメッセージ
- H はメッセージのダイジェストを得る関数
- H′ は巡回群 G からスカラ Zq へ変換する関数
たとえば ECDSA なら座標 P の x 座標を得る関数
である。
threshold signing のためには、x,k を分散して保有し、r,s を生成できればよいのだが、分散保有した値から、kの逆数の指数演算と、二つの秘密数 x,k の積を求めるのが難しい。
MtA
この問題を解決するため、GG18 論文では Multitive to Addaptive というテクニックを適用している。積和変換とでも訳せばよいか。
Alice, Bob がそれぞれ秘密数 a,b を持っているとする。
- Alice は自身の公開鍵 A で a を加法準同型暗号化した値 cA=EA(a) を Bob へ送る
- Bob はランダムな値 β′ を選び、 cB=b×EcA+EEA(β′) を計算して Alice へ送る。
ここで、 ×E,+E は、暗号化された値に対する演算。
- Alice は得た cA を秘密鍵で複合し、α′ を得る。
- それぞれ β=−β′ (mod q),α=α′ (mod q) を計算する。
- ab=α+β である。
途中に出てきた cB を展開すると、
cBEは加法で準同型なので、cB=b×EcA=b×EEA(a)=EA(ab+β′)+EEA(β′)+EEA(β′)
cB を複合した値が α′ であるから、
α′ab=ab+β′=α′−β′=α+β
MtA を用いた秘密数の積の分散
k の加法分散 k1,k2,...,kn を n人のプレーヤー P0,P1,...Pn それぞれに秘密共有する。 同様に γ も秘密共有する。
kγ=k1+k2+...+kn=γ1+γ2+...+γn
k と γ の積を計算すると、
k×γ===++++(k1+...kn)×(γ1+...+γn) k1γ1+k1γ2+...+k1γn k2γ1+k2γ2+...+k2γn ... knγ1+k2γ2+...+knγni,j∑nkiγj
ここで、 kirj=αij+βij として、上の式を展開すると、
k×γ右の総和をδiと置くと、k×γδiを展開して、δi=======i,j∑n(αij+βij)j∑ni∑n(αij+βji)j∑n(αij+βji)i∑nδij∑n(αij+βji)(αii+βii)+j=i∑n(αij+βji)ki×γi++j=i∑n(αij+βji)
すべてのプレーヤー同士 Pi,Pj で ki×γj と kj×γi を MtA すると、プレーヤー Pi は、αij;j=i と βji;j=i を所有する。Pi は当然 ki,γi も保有しているので、δiを計算できる。
つまり、二つの秘密数の加法分散共有から、その積の加法分散共有へと変換できる。
分散鍵生成
論文ではよく分からないが、joint-Feldman VSS を用いていると思われる。
ここでは鍵生成は省略し、以下の性質の秘密分散が出来ているとして進める。
-
秘密鍵を x とし、各パーティ Pi はその加法分散 ui を持つ。
x=i∑nui
-
公開鍵 y は、
y=gx=g∑inui=i∏ngui
署名生成プロトコル
以上を踏まえて署名生成プロトコルを説明する。
論文では悪意あるプレーヤーへの耐性や、一般的な (t,n) threshold signining について述べているが、ここでは善意のパーティによる (n-1,n) threshold signing に簡略化する。
Phase 1
各プレーヤー Pi はランダムな値 ki,γi を選ぶ。
さらに、 gui および gγi をブロードキャストする。
Phase 2
全てのプレーヤーのペア Pi,Pj で ki,γj の MtA を行い、
δi=kiγi+j=i∑n(αij+βji)
を計算する。
同様に、kiui=μij+νij の MtA を行い、
σi=kiui+j=i∑n(μij+νji)
を計算する。
Phase 3
各プレーヤー Pi は、 δi をブロードキャストする。
自身の持つ δi と、受け取った δj を足して、
δ=kγ=i∑δiを計算し、その巡回群上の逆数も計算する。
Phase 4
各プレーヤー Pi は、R=(∏ingγi)δ−1 を計算する。なお、gγi は Phase1 で受け取っている。
この式を展開すると、
R=(i∏ngγi)δ−1=(g∑inγi)(kγ)−1=gγ×(kγ) −1=gk−1
になる。
H′ 関数を用いて、
r=H′(R)
も計算する。これが署名の一つ r の値である。
Phase 5
各プレーヤー Pi は si=mki+rσi を計算する。
さらに、計算した si をブロードキャストし、受け取った sj を用いて総和を計算する。この総和は、
s=i∑nsi=i∑n(mki+rσi)=mi∑nki+ri∑nσi=mk+rkx=k(m+rx)
であり、署名の s 値に一致する。
検証
DSA と同じく
gsm+ysr=R
を確認すればよい。
gsm+ysr=gsm+(gx)sr=gsm+rx=gk1=R
リンク