Skip to content

Instantly share code, notes, and snippets.

@cipepser
Last active May 5, 2018 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cipepser/c0dd972e48fe9d68b2509bbf52e8f248 to your computer and use it in GitHub Desktop.
Save cipepser/c0dd972e48fe9d68b2509bbf52e8f248 to your computer and use it in GitHub Desktop.

前提

  • ハッシュ関数H、生成元Gは合意済み
  • m' = LSB(H(m))も合意済み
  • x, x1, x2: 秘密鍵
  • P1, P2の公開鍵は、署名検証で使うため省略

ECDSA

  1. nonce k を生成
  2. R = kG = (rx, ry)を計算
  3. r = rxを得る
  4. s = k^-1 (m' + x * r)を計算  5. 署名(r, s)を出力

Yehudaのプロトコル:

  1. Alice: Bobへckey = Enc_pkA(x1)を渡す

  2. Alice: nonce k1を生成

    Bob: nonce k2を生成

  3. Alice:
    R1 = k1 * G = (r1, _) を計算
    r1 R1をBobへ伝達
    Bob:
    R2 = k2 * G = (r2, _) を計算
    r2 R2をAliceへ伝達

  4. Alice: R = r2 * R1 k1 * R2を計算
    Bob: R = r1 * R2 k2 * R1 を計算

    AliceとBobで同じRを合意できる
    →R = (rx, ry)からr = rxを得る

  5. Bob: 署名sのもとになるc3を計算
    c1 = Enc_pkA(k2^-1 * m' + ρq)
    ※Aliceの公開鍵pkAを使った
    c2 = ckey ⊙ Enc_pkA(x2 * r * k2^-1)
    ※⊙は、乗法準同型性を満たす演算。WP上では、ckey^(x2rk2^-1) c3 = c1 ⊕ c2
    = Enc_pkA (k2^-1 * m' + ρq + x1 * x2 * r * k2^-1)
    ※⊕は、加法準同型性を満たす演算
    Alice: 署名sの計算
    s = k1^-1 * Dec_pkA(c3)
    = k1^-1 * (k2^-1 * m' + ρq + x1 * x2 * r * k2^-1)
    = (k1k2)^-1 (m' + (x1X2) * r)
    ※ECDSAとの対応:
    k = k1k2
    x = x1
    x2

  6. 署名(r, x)を出力