Logo

Nola's Backyard

Digital Signature Algorithm

離散対数問題を安全性の根拠にするデジタル署名。

Note

現在の新規用途では、ECDSA や EdDSA の方が一般的。


署名者 A と検証者 B の間のやり取りを考える。

  1. 素数 p,qp,q と g∈Fpg\in\mathbb{F}_{p} を固定し、A と B で共有する
q∣p−1,gq≡1 mod p q\mid p-1,\quad g^{q}\equiv 1\bmod{p}
  1. A 秘密鍵 x∈{1,…,q−1}x\in\{1,\dots,q-1\} を決め、公開鍵 yy を共有する
y≡gx(modp) y\equiv g^x\pmod p
  1. A はメッセージ mm に署名 (r,s)(r,s) を作り、B に送る
k∈{1,…,q−1},r=(gk mod p) mod q,s≡k−1(H(m)+xr)(modq) \begin{aligned} k&\in\{1,\dots,q-1\}, \\ r&=(g^k\bmod p)\bmod q, \\ s&\equiv k^{-1}(H(m)+xr)\pmod q \end{aligned}
Note

r=0r=0 または s=0s=0 の場合、この後に困るので、nonce kk を選び直す。

  1. B は (r,s)(r,s) を検証する
w≡s−1(modq)u1≡H(m)w(modq)u2≡rw(modq)v=(gu1yu2 mod p) mod q \begin{aligned} w&\equiv s^{-1}\pmod q \\ u_1&\equiv H(m)w\pmod q \\ u_2&\equiv rw\pmod q \\ v&=(g^{u_1}y^{u_2}\bmod p)\bmod q \end{aligned}

v=rv=r なら正しい署名