---
title: DSA
tags: crypto
lang: zh_tw
---
* [筆記總覽](https://hackmd.io/@LJP/rkerFdnqS)
[TOC]
# DSA
Digital Signature Algorithm
基於 Elgamal Signature scheme
以下先講如何簽章、驗章
再講這些過程中用到的 key 怎麼生
最後證明這樣簽這樣驗 是否是對的
## Sign
$m$: 欲簽章的訊息
$d$: 私鑰
$p, q, \alpha$: 公鑰
1. 隨機選一個 $k, 0 < k < q$
2. 計算 $r \equiv (\alpha^k\ mod\ p)\ mod\ q$
3. 計算 $k^{-1}, k^{-1} \times k \equiv 1\ mod\ q$
4. 計算 $s \equiv (H(m) + d \times r) \times k^{-1}\ mod\ q$
這邊的 $H()$ 是 SHA-1 Hash, 算出 160 bit 的 hash 值
$r, s$ 兩者一起就是 Signature 的部分
## Verification
$m$: 欲驗章的訊息
$r, s$: Signature
$p, q, \alpha, \beta$: 公鑰
1. 計算 $w \equiv s^{-1}\ mod\ q$
2. 計算 $u_1 \equiv w \times H(m)\ mod\ q$
這邊的 $H()$ 也是 SHA-1 Hash
3. 計算 $u_2 \equiv w \times r\ mod\ q$
4. 計算 $v \equiv ((\alpha^{u_1} \times \beta^{u_2})\ mod\ p)\ mod\ q$
若 $v \equiv r$ 表示 Signature 正確, 反之 GG
## Key generation
1. 首先產生 $q, 2^{159} < q < 2^{160}$
2. 隨機挑一個 $k$, 使得 $p = kq + 1, 2^{1023} < p < 2^{1024}$ 且 $p$ 要是質數
3. 挑一個 $h, 1 < h < p$, 算出 $\alpha \equiv h^{(p-1)/q}\ (mod\ p)$
$\alpha$ 主要是要滿足 $\alpha^q \equiv 1\ (mod\ p)$
根據[Fermat’s Little Theorem](https://hackmd.io/@LJP/ry_Ei3L8Y)
可以將上式改寫成 $\alpha^q \equiv h^{p-1}\ (mod\ p), 1 < h < p$
進而得到 $\alpha \equiv h^{(p-1)/q}\ (mod\ p)$
4. 挑一個 $d, 0 < d < q$
5. 計算 $\beta \equiv \alpha^d\ mod\ p$
公鑰的部分: $p, q, \alpha, \beta$
私鑰的部分: $d$
## Proof
這邊需要證明的是 $r \equiv v\ mod\ q$
先從 sign 時產生 $s$ 的方式推導一下
$$
\begin{split}
s &\equiv (H(m) + d \times r) \times k^{-1}\ (mod\ q) \\
s^{-1} \times s \times k &\equiv s^{-1} \times (H(m) + d \times r) \times k^{-1} \times k\ (mod\ q) \\
k &\equiv s^{-1} \times (H(m) + d \times r)\ (mod\ q) \\
k &\equiv s^{-1} \times H(m) + s^{-1} \times d \times r\ (mod\ q) \\
\end{split}
$$
配合 Verification 對於 $u_1, u_2$ 的定義
$$
w \equiv s^{-1}\ mod\ q
$$
$$
u_1 \equiv w \times H(m)\ mod\ q
$$
$$
u_2 \equiv w \times r\ mod\ q
$$
可以繼續推導
$$
\begin{split}
k &\equiv s^{-1} \times H(m) + s^{-1} \times d \times r\ (mod\ q) \\
k &\equiv u_1 + d \times u_2\ (mod\ q) \\
\end{split}
$$
$$
\begin{split}
\alpha^{k\ mod\ q} &\equiv \alpha^{(u_1 + d \times u_2)\ mod\ q}\ (mod\ p) \\
\alpha^{k} &\equiv \alpha^{u_1 + d \times u_2}\ (mod\ p) \\
\alpha^k &\equiv \alpha^{u_1} \times \alpha^{d \times u_2}\ (mod\ p) \\
\end{split}
$$
上面這區的證明參考[這篇](http://mercury.webster.edu/aleshunas/COSC%205130/K-DSA.pdf)
這部分的證明放到[DSA Lemma1](#DSA-Lemma1)
配合 key generation 生出 $\beta$ 的方式
$$
\beta \equiv \alpha^d\ mod\ p
$$
繼續推
$$
\begin{split}
\alpha^k &\equiv \alpha^{u_1} \times \alpha^{d \times u_2}\ (mod\ p) \\
\alpha^k &\equiv \alpha^{u_1} \times \beta^{u_2}\ (mod\ p) \\
(\alpha^k\ mod\ p)mod\ q &\equiv ((\alpha^{u_1} \times \beta^{u_2})\ mod\ p)mod\ q \\
\end{split}
$$
配合 Sing 產生 $r$ 的方式
- $r \equiv (\alpha^k\ mod\ p)\ mod\ q$
以及 Verification 產生 $v$ 的方式
- $v \equiv ((\alpha^{u_1} \times \beta^{u_2})\ mod\ p)\ mod\ q$
$$
\begin{split}
(\alpha^k\ mod\ p)mod\ q &\equiv ((\alpha^{u_1} \times \beta^{u_2})\ mod\ p)mod\ q \\
r &\equiv v \\
\end{split}
$$
得證經過以上簽、驗章流程, $r$ 的確會與 $v$ 相同
### DSA Lemma1
參考[這篇](http://mercury.webster.edu/aleshunas/COSC%205130/K-DSA.pdf)
Lemma1 是說
如果 $\alpha \equiv h^{(p-1)/q}\ (mod\ p)$ 成立
則 $\alpha^t \equiv \alpha^{t\ mod\ q}\ mod\ p$ 成立
那麼以下的式子
$$
\begin{split}
\alpha^{k\ mod\ q} &\equiv \alpha^{(u_1 + d \times u_2)\ mod\ q}\ (mod\ p) \\
\alpha^{k} &\equiv \alpha^{u_1 + d \times u_2}\ (mod\ p) \\
\end{split}
$$
就沒有錯
那麼開始證明囉
$$
\alpha \equiv h^{(p-1)/q}\ (mod\ p)
$$
以上式子是 key generation 中生出 $\alpha$ 的方式
可以回去 [Key generation](#Key-generation) Check 一下
推導以下式子
$$
\begin{split}
\alpha &\equiv h^{(p-1)/q}\ (mod\ p) \\
\alpha^{nq} &\equiv (h^{(p-1)/q})^{nq}\ (mod\ p) \\
&\equiv h^{((p-1)/q) \times nq}\ (mod\ p) \\
&\equiv h^{(p-1) \times n}\ (mod\ p) \\
\end{split}
$$
套用 [Fermat’s Little Theorem](https://hackmd.io/@LJP/ry_Ei3L8Y)
$$
\begin{split}
\alpha^{nq} &\equiv h^{(p-1) \times n}\ (mod\ p) \\
&\equiv (h^{(p-1)})^n\ (mod\ p) \\
&\equiv (1)^n\ (mod\ p) \\
&\equiv 1\ (mod\ p) \\
\alpha^{nq+z} &\equiv \alpha^z\ (mod\ p) \\
\end{split}
$$
其中 $0 < z < q$, 超過就被 $n$ 吸收了
令 $t = nq + z$, 則 $z = t\ mod\ q$
$$
\begin{split}
\alpha^{nq+z} &\equiv \alpha^z\ (mod\ p) \\
\alpha^t &\equiv \alpha^{t\ mod\ q}\ (mod\ p) \\
\end{split}
$$
得證
## 安全性
回顧一下 key generation
>5. 計算 $\beta \equiv \alpha^d\ mod\ p$
>
>公鑰的部分: $p, q, \alpha, \beta$
>私鑰的部分: $d$
>
$$
\beta \equiv \alpha^d\ mod\ p
$$
這個式子中唯一未公開的是 $d$
所以 DSA 的安全性建立在
即使得知 $\beta, \alpha, p$, 仍然破不出 $d$
屬於[離散對數難題](https://hackmd.io/@LJP/HJL5anU8F)