密码技术-数字签名

一、数字签名

用私钥生成数字签名,用公钥验证签名

数字签名的方法
① 直接对消息签名(很少用这个)
(1)Alice 用自己的私钥对消息进行加密
(2)Alice 将消息和签名发送给 Bob
(3)Bob 用 Alice 的公钥对收到的签名进行解密
(4)Bob 将签名解密后得到的消息与 Alice 直接发送的消息进行对比
对比一致,签名验证成功,不一致,签名验证失败
② 对消息的散列值签名(通常用这个)
为什么实际中不直接对消息本身进行数字签名呢?这是因为公钥密码算法本来就非常慢,还要对消息全文进行加解密,因此如果能够有一个很短的数据替代消息本身是再好不过的了,而单项散列函数就很适合
(1)Alice 用单项散列函数计算消息的散列值
(2)Alice 用自己的私钥对散列值进行加密
(3)Alice 将消息和前面发送给 Bob
(4)Bob 用 Alice 对收到的签名进行解密
(5)Bob 将签名解密后得到的散列值与 Alice 直接发送的消息的散列值进行对比
数字签名流程

二、对数字签名的疑问

1.密文为什么能够作为签名使用,意义在哪
数字签名的操作是使用私钥对消息进行加密,但这里的加密并非是为了保密,而是用于生成一种只有持有该密钥的人才能够生成的信息(即私钥本身是保密的,那么私钥加密生成信息自然保证了唯一性)

2.能否同时修改消息和签名,使得验证签名能够成功
这是做不到的,不管是直接对消息签名的方式还是对消息的散列值签名的方式,对发送的消息进行修改后,在不知道密钥的情况下需要对修改后的消息进行修改,使得签名可以被验签,这是不可能的

3.签名不能否认,那如何使之作废
重新创建一份文书,让对方在文书上加上数字签名,或者一开始就在消息中写明有效期,然后再进行数字签名

4.如何防止否认
防止否认和谁持有密钥密切相关,就是说能够生成签名的密钥只有密钥持有者持有,因此谁持有密钥就是谁的签名,因此无法否认

三、数字签名的应用

1.网站公告
网站消息目的是让更多人看到,所以不需要加密,但是需要保证消息不被篡改,对明文消息进行数字签名,利用数字签名完成对消息的认证

2.软件下载
数字签名只能保证软件内容是否被篡改,无法判断软件是否是恶意软件

3.公钥证书
为了保证公钥的合法性,不是伪造的(防止中间人攻击),一般需要权威的第三方对公钥进行数字签名,签名后得到的就是公钥证书,再使用权威的第三方的公钥对公钥证书进行数字验签就能确定公钥的合法性

那么问题来了,权威的第三方的公钥就一定是真的?如果被纂改了怎么办?只要存在密钥发送,那么一定存在被纂改的可能,一级一级向上进行的验签,到顶的话就是操作系统预装的根证书

四、对数字签名的攻击

1.中间人攻击
通过伪装身份,对发送者伪装成接收者,对接收者伪装成发送者,就可以在不知道签名密钥的前提下完成攻击,可以使用公钥证书对公钥进行认证(公钥证书中可以写明目标网站,只要后续验证证书合法,就表明公钥合法,就确定了要访问的目标网站本身,别人就不可能再仿冒)

2.单向散列函数攻击
数字签名中使用的单向散列函数必须具有抗碰撞性(碰撞率低),如果存在很多不同的输入有相同的输出(碰撞率高),攻击者就可以生成一个不同的消息,但是消息的散列值和签名绑定的消息的散列值相同

单向散列函数

  • 消息完整性:有一个输入和一个输出,输入称为消息,输出称为散列值,根据消息的内容可以计算出散列值,不同的消息对应不同的散列值,因此可以用散列值检查消息的完整性(也称一致性)
  • 不可逆:任意长度的消息计算得到的散列值的长度都是固定的,如 SHA-256 单向散列函数计算出的散列值的长度永远是 32 字节,且是不可逆的(不能由输出得到输入)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值