Digital Signature Algorithm (DSA)算法是一种公钥算法。其密钥由如下部分组成:
1)p
一个大素数,长度为L(64的整数倍)比特。
2)q
一个160比特素数。
3)g
g=h(p-1)/q mod p,其中h小于p-1。
4)x
小于q。
5) y
y=gx mod p。
其中x为私钥,y为公钥。p、q和g是公开信息(openssl中称为密钥参数)。
DSA签名包括两部分,如下:
r = (gk mod p) mod q
s = (k-1 (H(m) + xr)) mod q
其中,H(m)为摘要算法;
DSA验签如下:
w = s-1 mod q
u1 = (H(m) * w) mod q
u2 = (rw) mod q
v = ((gu1 * yu2) mod p) mod q
如果v=r,则验证通过。