21_数字签名、证书

数字签名的概念

数字签名的概念

数字签名其实就是将公钥密码反过来使用,由消息的发送者通过“私钥”生成签名,由消息的接收者通过“公钥”来验证签名。

image.png
  • 在公钥密码中,任何人都可以使用公钥进行加密
  • 在数字签名中,任何人都可以使用公钥验证签名

数字签名的过程

Snip20200817_7.png
  1. 首先用单向散列函数计算消息的散列值,这里最常用的算法是MD5。
  2. 生成一份非对称加密的公钥和私钥,私钥我自己拿着,公钥公布出去。
  3. 用自己的私钥加密这个散列值,得到一份加密后的数据,称为原始数据的签名。把它跟原始数据一起发送给用户。
  4. 用户收到数据和签名后,用公钥解密收到的签名得到散列值。
  5. 用户用同样的算法计算原始数据的散列值,对比这里计算出来的散列值和用公钥解密签名得到的散列值是否相等,若相等则表示这份数据中途没有被篡改过。

PS:之所以要有第一步计算,是因为非对称加密的原理限制可加密的内容不能太大(不能大于上述n的位数,也就是一般不能大于1024位/2048位),于是若要对任意大的数据签名,就需要改成对它的特征值签名,效果是一样的。

数字签名的作用

对某一份数据打个标记,表示认可了这份数据(签了个名),然后发送给其他人,其他人可以知道这份数据是经过我认证的,数据没有被篡改过。如果有人篡改了文件内容或者签名内容,就会导致签名验证失败,证明内容被篡改了。数字签名不能保证机密性。

  • 确认消息的完整性
  • 识别消息是否被篡改
  • 防止消息发送人否认
数字签名存在的问题

要正确使用签名,有一个前提就是用于验证签名的公钥必须属于真正的发送者,如果遭遇了中间人攻击,那么公钥将是伪造的,数字签名将失效,所以在验证签名之前,首先得先验证公钥的合法性。

那么如何验证公钥的合法性?

  • 证书

证书(Certificate)

基本概念

又称公钥证书(Public-key Certificate,PKC),里面有个人信息、此人的公钥,并由权威认证机构(Certificate Authority,CA)对公钥施加的数字签名。CA 是指能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。证书保证公钥合法性。

证书的利用
image.png

你可能感兴趣的:(21_数字签名、证书)