实验1-5 数字签名算法 DSS
一.实验目的
通过对数字签名算法DSS的实际操作,理解DSS的基本工作原理。
二.实验原理
以往的文件或书信可以通过亲笔签名来证明其真实性,而通过计算机网络传输的信息则通过数字签名技术实现其真实性的验证。
数字签名目前采用较多的是非对称加密技术,其实现原理简单的说,就是由发送方利用哈希算法对要传送的信息计算得到一个固定位数的消息摘要值,用发送者的私有密钥加密此消息的哈希值所产生的密文即数字签名。
然后数字签名和消息一同发给接收方。
接收方收到消息和数字签名后,用同样的哈希算法对消息进行计算得出新的哈希值,然后用发送者的公开密钥对数字签名解密,将解密后的结果与新的哈希值相比较,如相等则说明报文确实来自发送方。
下面我们以DSA(Digital Signature Algorithm)为例,介绍数字签名算法。
DSA源于ElGamal和Schnorr签名算法,被美国NIST采纳作为DSS(Digital Signature Standard)数字签名标准。
DSS数字签名算法的具体实现过程课参见图1-5。
比较
a 签名过程
b 验证过程
图1-5 DSS算法的实现过程
首先介绍DSS算法的主要参数:
1. 全局公开密钥分量
1)素数p, 2511<p<2512;
2)q是(p-1)的一个素因子, 2159<q<2160;
3)g=h(p-1)/q mod p, 其中h是一整数,1<h<(p-1)
2. 私钥
私钥x是随机或伪随机整数, 其中0<x<q;
3.公钥
y=g x mod p,(p,q,g,y)为公钥;
4.用户的随机选择数
为随机或伪随机整数, 其中0<k<q
k
基于以上参数,DSS的签名过程如下:
k mod p)mod q
r=(g
-1(H(M)+xr)] mod q
s=[k
则形成了对信息M的数字签名(r,s),数字签名和信息M一同发送给接收方。
接收方接收到信息M’和数字签名(r’,s’)后,对数字签名的验证过程如下:
-1 mod q
w=(s’)
u1=[H(M’)w] mod q, u2=( r’) w mod q
u1 y u2)mod p] mod q
v=[(g
如果 v= r’,则说明信息确实来自发送方。
三.实验环境:
运行windows或linux操作系统的PC机,具有gcc(linux)、VC(windows)等C语言编译环境。
四.实验内容和步骤
在光盘中给出了一个可运行的DSA对话框程序。
运行这个程序,对一段文字进行签名和验证,了解DSA算法的签名和验证过程。
五.实验报告要求
1.在光盘中附加的密码算法库中也有DSA的内容,找出相关部分,自己写一段基于标准输入输出的程序,要求可以对一段指定的字符进行签名和验证。
2.多种非对称加密算法都可以用来设计签名算法。
查阅相关资料,列出现有的签名算法,并对其进行比较。