开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7天,点击查看活动详情
数字签名-确认身份,防止抵赖
hash是可以被破解的,那么怎么样才能确定是真正的客户端发过来的数据而不是攻击者呢?
公钥加密,私钥解密是为了保证数据安全性
为什么呢?因为私钥只有服务端自己知道其他人不知道,也就是其他人不知道你发的内容是什么。
这么淦确实没问题,但是如果内容是使用非对称加密的话速度慢体积也会大,所以只进行加密对称加密的密钥。这个密钥呢同样也只有服务端的私钥才能解开,所以也可以保护数据安全性
但是他只是不知道内容是什么,如果攻击者也使用公钥进行加密服务端也可以得到数据,但是此时的数据已经被修改过了。
私钥加密,公钥解密为了确认身份
只要你给我的公钥能解开,就说明是你发送过来的数据
私钥只有自己有,只有自己有权限对其进行加密,那么这个公钥就不能泄漏是吧,如果公钥泄漏了的话你的hash就可以被解密出来,因此早期的时候公钥是直接发送的,把对称加密后的数据和私钥加密hash得到的签名信息和接下来要解密签名信息所需要的公钥一起传递给服务端
- 服务端利用传递过来的解密签名信息所需要的公钥进行解密得到hash值
- 接下来就是上面的过程使用服务端私钥进行解密服务端公钥加密后的对称加密数据的密钥,然后利用对称加密的密钥进行解密数据
- 再把解密数据后得到的客户端内容进行hash,观察这个hash和公钥解密后的签名信息的hash值是否一样
通过hash就可以确认你的文件是不是完整的。,但是如果保证hash传递过程中不会泄露呢?因此也需要对hash进行加密
客户端发送:
- 先把数据进行hash
- 再用客户端自己本地的私钥对hash进行签名得到一个签名数据。(这个就是非对称加密的签名验签过程了,私钥加密,公钥解密)
- 吧数据和签名数据还有客户端的公钥发送到服务端
签名数据是用私钥来加密的,响应的你要用公钥去解密
防止抵赖:
你只要传过来了,我用你的公钥解开了的话,那么肯定就是你发送的,如果是别人发送的那么我肯定解不出来