一.数字签名的基本概念
- 在人们的工作和生活中,许多事物的处理需要当事者签名。
- 签名起到确认,核准,生效和负责人等多种作用。
- 签名是证明当事者的身份和数据真实性的一种信息。
- 签名可以用不同的形式来表示。
- 在传统的以书面文文件为基础的事物处理中,采用书面签名的形式:手签,印章,手印等等。
- 书面签名得到司法部门的支持。
- 在以计算机文件为基础的现代事物处理中,应采用电子数字形式的签名,即数字签名(Digital Signature)。
- 数字签名已经得到中国和其他一些国家的法律支持。
- 一种完善的数字签名应该满足以下三个条件:
签名者事后不能抵赖自己的签名;
任何其他人不能伪造签名;
如果当事的双方关于签名的真伪发生争执,能够在公共的仲裁者面前通过验证确认其真伪。 - 数字签名基于密码技术,其形式是多种多样的:
通用签名,仲裁签名,盲签名,群签名,门限签名,代理签名等。
1994年美国政府正式颁布了美国数字签名标准DSS(Digital Signature Standard)。
1995年我国也制定了自己的数字签名标准(GB15851-1995)。
2004年我国颁布了《中华人民共和国电子签名法》。
数字签名和信息加密的区别
- 数字签名大多采用非对称密钥加密算法,它能保证发送信息的完整性,身份的真实性和不可否认性,而数字加密采用了对称密钥加密算法和非对称密钥加密算法相结合的方法,它能保证发送信息的保密性。
- 数字签名和信息加密过程的区别比较明显(如下图)
- 注意:二者的区别在于使用密钥顺序的不同。数字签名在进行签名时,使用的是发送者的私钥,验证的时候用的是公钥,目的是私钥具有唯一性且保密,能够证明发送者 的身份。而信息加密则需要用公钥加密和私钥解密。
二.数字签名的模型
- 一个数字签名体制包括两个方面的处理:
- 施加处理
- 验证签名
- 设施加签名的算法是SIG,产生签名的密钥为K,被签名的数据是M,产生的签名信息为S,则有
- S=SIG(M,K)
- 设验证签名的算法是VER,用VER对签名进行验证,可以鉴别S的真假。即
- 2.签名S只能由签名者产生,否则别人便可以伪造,于是签名者也就可以抵赖。
- 3.收信者可以验证签名S的真伪。这使得当签名为假时收信者不至于上当。
- 4.签名者也应该有办法辨别收信者所出示的签名是否是自己的签名。这就给签名者以自卫的能力。
三.利用公钥密码实现数字签名
1.一般方法
- 对于一个公钥密码,如果满足
- 则可以确保数据的真实性。
- 凡是能够确保数据真实性的公钥密钥都可以用来实现数字签名。例如:
- RSA
- EIGamal
- 椭圆曲线
- 其他密码
- 为了实施数字签名,应该成立管理机构:
- 制定规章制度
- 统一技术标准
- 用户登记注册
- 纠纷的仲裁
- 其他
- 直接方式的数字签名:
- 一个典型的由公开密钥密码体制实现的,带有加密功能的数字签名过程如下图:
Hash函数辅助数字签名
- 数字签名的主要方式是:报文的发送方利用单项散列函数从报文文本中生成一个固定长度(例如128位)的散列值(或信息摘要)。发送方用自己的私人密钥对这个散列值进行加密来形成发送方的数字签名。然后,该数字签名将作为报文的附件和报文一起发送给报文的接收方。
- 报文的接收方首先从接收到的原始报文中计算出128位的散列值(或者信息摘要),接着再用发送方的公开密钥来对报文附加的数字签名进行解密得到原散列值。如果这两个散列值相同,则接收方就能确认该数字签名是发送方的。通过数字签名能够实现对原始报文的鉴别。
- 发送方选择一个会话密钥对原报文进行加密,并把加密后的文件通过网络传输到接收方,再用接收方的公开密钥对会话密钥进行加密,并通过网络把加密后会话密钥传输到接收方。
- 接收方使用自己的私有密钥对会话密钥信息进行解密,得到会话密钥的明文;
- 接收方再用会话密钥对加密了的报文进行解密,得到原报文。
2.利用RSA密码实现数字签名
(1).签名算法
(2).对RSA数字签名的攻击
- 结论:不能直接对数据M签名,而是对HASH(M)签名。
- 使用时间戳
- 对于同时确保秘密性和真实性的通信,应当先签名后加密。
(3).RSA数字签名的应用:PGP