

DSA的系统参数选择如下:
p:512的素数,其中2L-1<p<2L,512≤L≤1024,且L是64的倍数,即L的位长在512至1024之间并且其增量为64位。
q:160位的素数且q|p-1。
g:满足g = h(p-1)/q mod p
H:为散列函数
x:用户的私钥,0<x<q
y:用户的公钥,y = gx mod p
p、q、g为系统发布的公共参数,与公钥y公开;私钥x保密。
签名
设要签名的消息为M,0<M<p。签名者随机选择一整数k,0<k<q,并计算:
r = (gk mod p) mod q
s = [k-1 (H(M) + xr)] mod q
(r, s)即为M的签名。签名者将M 连同(r, s)一起存放,或发送给验证者。
验证
验证者获得M和(r, s),需要验证(r, s)是否是M的签名。
首先检查r和s是否属于[0, q],若不是,则(r, s)不是签名值。
否则,计算:
w = s-1 mod q
u1 = (H(M)w) mod q
u2 = rw mod q
v = ((gu1yu2 ) mod p) mod q
如果v = r,则所获得的(r, s)是M的合法签名。
| 各省软考办 | ||||||||||