数字签名技术(密码技术之数字签名)

数字签名技术
前面我们总结过:
密码技术之消息认证码
密码技术之单向散列函数
我们知道,散列函数解决了消息的完整性防止篡改,消息认证码解决的是消息发送者是否被伪装的问题,但是消息的防抵赖性如何保证呢?因为发送接收双方都共享一个密钥,因为对于第三方来说,无法防止信息发送者的否认!那怎么办呢?引出本节主题:数字签名。
数字签名用一句话来说,只有用你自己独一无二的别人不知道的密钥签名,代表了一种只有持有该密钥的人才能够生成的信息,才能防抵赖。甲发送信息的时候用自己的私钥进行签名,乙接收信息的时候用甲的公钥进行验证,这就是数字签名。公钥密码和数字签名的密钥使用如下:

私钥 公钥              
公钥密码 接收者解密时使用 发送者加密时使用
数字签名 签名者生成签名时使用 验证者验证签名时使用
密钥在哪? 私有 公开

数字签名的方法有直接对消息签名的方法和对消息散列值签名的方法。因为对整个消息进行签名效率低下,特别是公钥密码算法计算效率不高,实际使用后者,也就是对消息的散列值进行签名。因为前面说过,单向散列函数能对无论多长的消息生成固定的散列值,因此对其签名效率很高。

数字签名不能保证消息机密性!
数字签名的作用本来就不是信息机密性的保证,有一种攻击“请对消息签名”等同于“请解密消息“,我们要记住,绝对不要对意思不清楚的消息进行签名,从签名的目的来说,这一点应该是理所当然的,因为谁也不会在自己看不懂的合同上签字盖章!  
数字签名可以随意复制吗?
数字签名可以随意复制。签名可以复制并不意味着签名就没有意义,因为签名表达的意义是特定的签名者对特定的消息进行的签名,即使被复制也并不会改变签名者和消息的内容。无论将签名复制了多少份,都不会改变“是谁对这条消息进行了签名”这一事实!

消息内容会不会被修改?
数字签名是识别消息被修改并不防止被修改,修改后,验证签名失败。

签名会不会被重复利用?
不会,数字签名是消息和签名相对应,将签名部分提取出来附加到别的消息后面,验证签名会失败。
删除签名也无法“作废合同”吗?
的确,删除了带有数字签名的借据也无法保证确实已经作废,因为你不知道是否还保留有副本,那么要作废带有数字签名的借据,可以重新创建一份相当于收据的文书,并让对方在这份文书上数字签名。或者在消息中声明该消息的有效期并加上数字签名,证书部分内容就是如此。

数字签名能够替代签名吗?
当然,我国《中华人民共和国电子签名法》,美国也有E-SIGN法案,日本有《电子签名及其认证业务的相关法律》,这些法律为将电子手段实现的签名与手写的签名和盖章同等处理提供了法律基础。

数字签名的应用实例
安全信息公告,比如一些信息安全组织会发布一些漏洞警告,通过数字签名确认是否是该组织发布的漏洞。
比如软件下载能够检测软件是否被篡改。
以及在公钥证书中,我们要获取合法的公钥,使用公钥+数字签名,后面会介绍。
SSL/TLS服务器认证时也会用到。

对数字签名的攻击
除了之前介绍的利用数字签名攻击公钥密码之外,对单向散列函数的攻击,以及中间人攻击。
中间人攻击,就是对发送者伪装成接收者,对接收者伪装成发送者,如何对公钥进行认证,这就引出即将介绍的“证书”。
潜在伪造:在用RSA来解密的数字签名算法中,潜在伪造时可能的,用随机比特序列S用RSA的公钥进行加密生成密文M,那么S就是M的合法数字签名,由于攻击者是可以获取公钥的,因此对数字签名进行潜在伪造就可以实现了。为了应对人们改进成了RSA-PSS签名算法。
数字签名可以识别出篡改和伪装还可以防止否认,然而,这一切是在一个大前提下的,那就是用于验证签名的公钥必须属于真正的发送者。为了确认自己得到的公钥是否合法,我们需要使用证书。
所谓证书,就是将公钥当成一条消息,由一个可信的第三方对其签名后所得到的公钥。为了对证书施加的数字签名进行验证,我们必定需要另一个公钥,那么如何才能构筑一个可信的数字签名链条呢?又由谁来颁发可信的证书呢?我们必须用社会学的领域思考,需要让公钥及其数字签名技术成为一种社会性的基础设施,也就是PKI公钥基础设施。

数字签名技术相关文章

版权声明