DSA流程和正确性证明

DSA 数字签名算法的流程和原理

算法流程

密钥生成

  1. 选取质数\(q\)(较大)
  2. 选取质数\(p\)满足\(p | (q - 1)\)
  3. 选取\(g := h^\frac{p-1}{q} \bmod p, 1 \lt g \lt p-1\)。通常取\(h = 2\)

此时,根据费马小定理有\(g^q \equiv 1\pmod p\)

  • \((p, q, g)\)为双方共享的算法参数
  1. 选取私钥\(x\)满足\(0 \lt x \lt q\)
  2. 计算公钥\(y := g^x \bmod p\)

签名过程

设原消息为\(m_0\),接收到的消息为\(m\)

  1. 选取随机数\(k, 0 \lt k \lt q\)
  2. 计算\(r := (g^k \bmod p) \bmod q\)
  3. 计算\(s := k^{-1}(H(m_0) + xr) \bmod p\)
  • \((r, s)\)为生成的签名

验证签名

  1. 计算\(w := s^{-1} \pmod q\)
  2. 计算\(u_1 := H(m) \cdot w \bmod q \\ \quad \ \ \ u_2: = r \cdot w \bmod q\)
  3. 计算\(v := (g^{u_1} \cdot y^{u_2} \bmod p) \bmod q\)
  4. 验证若\(v = r\)则签名有效

算法的正确性证明

我们要证\(v = r\), 只需证明\(g^{u_1} \cdot y ^ {u_2} \equiv g^k \pmod p\)

\(\because g^q \equiv 1 \pmod p\\ \therefore \forall a \in N, g^a \equiv g^{a \bmod q} \pmod p\)

\(\because y = g^x \bmod p \\ \therefore g^{u_1} \cdot y^{u_2} \equiv g^{u_1} \cdot g^{x \cdot u_2} \pmod p \\ \quad g^{u_1} \cdot g^{x \cdot u_2} \pmod p\\ = g^{u_1 + x \cdot u_2} \pmod p\\ = g^{(H(m) + xr) \cdot w \bmod q} \pmod p\\ = g^{\frac{H(m) + xr}{H(m_0) + xr}\cdot k \bmod q} \pmod p\)

\(m == m_0 \iff g^{\frac{H(m) + xr}{H(m_0) + xr}\cdot k \bmod q} \bmod p = g^k \bmod p \iff v == r\)

\(m == m_0 \iff v == r\)

总结

以下是我对DSA的直观理解

可以看到,DSA通过将私钥\(x\)与秘密随机数\(k\)结合产生\(s\),使得外界不可能解\(k = \log{g}{r}\pmod q\)获得随机数,从而分析私钥\(x\)

在验证签名时,我们其实是在计算\(H(m) + xr\),但是\(x\cdot r\)通过\(y = g^x\)在指数的位置绑定。\(r = g^k\)又保护了\(k\),阻断了通过分解\(s=k^{-1}(H(m_0) + xr)\)破解\(H(m_0) + xr\)的路径。

参考链接:Digital Signature Algorithm - Wikipedia

posted @ 2021-04-01 19:17  BadPlayer  阅读(810)  评论(0编辑  收藏  举报