- 博客(0)
- 资源 (2)
- 收藏
- 关注
数字签名 /C++/源代码
以往的文件或书信可以通过亲笔签名来证明其真实性, 而通过计算机网络传输的信息则可以通过数字签名技术来实现其真实性的验证。
下面就以DSA算法为例,介绍数字签名算法。DSA算法在1991年被美国国家标准与技术局(NIST)采纳为联邦数字签名标准,NIST称之为数字签名标准(DSS)。
(1) DSA中的参数:
全局公钥(p,q,g):
p为512~1024bit的大素数,
q是(p-1)的素因子,为160比特的素数,
g=h(p-1)/q mod p, 且1<h<(p-1),使得 h(p-1)/q mod p >1
用户私钥x:x为0<x<q内的随机数
用户公钥y:y=gx mod p
用户为待签消息选取的秘密数k,k是满足0<k<q的随机数或伪随机数。
(2) 签名过程
用户对消息M的签名为(r, s),其中
r≡(gk mod p) mod q,
s≡[k-1(H(M)+xr)] mod q,
H(M)是由MD4、MD5 或SHA求出的杂凑值。
(3) 验证过程
设接收方收到的消息为M,签名为(r,s)。计算:
w≡(s)-1 mod q,
u1≡[H(M)w] mod q
u2≡r w mod q,
v≡[(gu1yu2) mod p] mod q
检查 v=r′ 是否成立,若成立,则认为签名有效。这是因为若(M′,r′,s′)=(M,r,s),则:
2011-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人