密码学工具5——数字签名

数字签名介绍

数字签名,又称公钥数字签名,是指只有信息发送者才能产生的别人无法伪造的一串数字串,这段数字串是对信息发送者真实性的一个有效证明。数字签名类似于现实世界的盖章,签字功能,数字签名可以实现以下功能:

  • 报文鉴别:用于证明信息来源
  • 防止抵赖:防止发送者否认信息
  • 防止伪造:防止非发送者伪造签名

数字签名的应用场景:

  • 安全信息公告:确保公告的来源
  • 软件下载:软件下载放病毒
  • 公钥整数:对公钥签名,确保公钥合法与来源正确
  • SSL/TLS:服务器认证

之前的文章介绍过消息认证码,可以用消息认证码识别出消息是否被篡改或者验证发送者身份,但是在部分高可信确认的场景中,无法使用消息认证码,因为消息认证码无法防否认。消息认证码无法防止否认的原因在于,发送者和接收者双方使用的是共享密钥,使用共享密钥,所以当密钥被窃取,其他人也就可以生成消息确认码,无法鉴别信息来源。

在之前的文章中,介绍过公钥密码技术,可以不使用共享密钥,使用私钥进行签名生成,使用公钥进行签名验证,这样就可以识别篡改、伪装还有防否认就可以实现了,这种技术就是数字签名。

数字签名方法

数字签名技术分为两部分

  • 生成消息签名,由发送者操作
  • 验证消息签名,由接收者操作

数字签名的流程如下图所示:

与公钥密码使用公钥加密消息,私钥密码解密消息刚好相反,数字签名是私钥密码生成签名,公钥密码验证签名,目的是在数字签名的应用场景中,是希望发送者进行签名,任何接收者都可以验证签名。

直接对消息进行签名

直接对消息进行签名可以参考下图流程

发送者将消息和使用消息生成的签名都发送给接收者,接收者使用签名解密出消息,再和收到的消息进行对比,确认消息的完成性与是否进行篡改。

这种方法的缺点就在于,需要对整个消息进行公钥加密,因为公钥加密算法非常慢,所以这个步骤会非常耗时,为了提高计算速率,则引入了单向散列函数。

对消息散列值进行签名

对消息散列值进行签名的流程如下图所示:

通过引入单向散列函数,将无论多长的消息先求出一个固定长度的散列值,再对散列值使用公钥密码算法处理,这样效率就会非常高。


数字签名是一种认证符号,虽然使用密文发送,但是密文并不是机密性的体现,而是只是为了让具有私钥的人加密,有公钥的人可以解密这一认证机制而设计的,只是一种认证符号

数字签名算法中,消息是明文发送的,数字签名并不是用来保护消息机密性的,而是用来确保消息来源的算法。如果有机密性需求,则可以配合之前的加解密算法,对消息进行处理。

数字签名和现实签名一样,是可以被复制的,数字签名的特性是针对特定消息的签名,需要绑定发送,并不是所有的签名都是一样的

数字签名实现

基于RSA实现数字签名

RSA算法在公钥密码的文章中详细进行了描述,下图只展示一下算法简析,具体内容可以查看之前文章。

RSA应用在数字签名中,先生成秘钥对,然后发送者使用私钥对消息内容(这个消息内容,不一定是指原消息,也可以针对原消息经过单向散列函数处理后得到散列值)进行签名:

其中D和N是签名者的私钥,签名是对消息D次方求mod N的结果,得到签名后将消息和签名发送给接收者即可。

接收者收到后对签名按照下列公式处理:

其中E和N是接收者的公钥,对接收到的签名的E次方就mod N求得接受的消息,再将求得的消息和接收到消息进行对比,判断签名是否验证成功。

基于ElGamal实现数字签名

ElGamal方式是Taher ElGamal设计的公钥算法,利用在mod N中求离散数对的困难度,ElGamal方式可以被用于公钥密码和数字签名。

基于DSA实现数字签名

DSA,Digital Signature Algorithm,由美国国家标准技术研究所提出的数字签名规范,DSA是Schnors算法与ElGammal方式的变体,只能用于数字签名。

基于ECDSA实现数字签名

ECDSA,Elliptic Curve Digital Signature Algorithn,是一种利用椭圆曲线来实现数字的签名算法,椭圆曲线算法之前已有介绍。

基于Rabin实现数字签名

Rabin方式,是M.O.Rabin设计的公钥算法,利用mod N中求平方根的困难度,Rabin方式可以被用于公钥密码和数字签名

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值