数字签名

在生活中经常需要我们进行签名,办银行卡,办电话卡等等。签名就是确认我们的身份,标识着这个文件确实是我们自己签署的。那么在计算机的世界中,是如何确认一个软件的身份的呢?如何保证我们下载的是一个约pao软件,而不是一个病毒呢?我们来看看我们的朋友小海遇到什么问题吧。

小海的烦恼

小海是一个忠实的开源软件拥护者,经常开发一些免费的软件给大家使用,网络上聚集了他的一大批粉丝。然而最近小海很是烦恼,因为他的粉丝反应网络上小海开发的软件中包含病毒和流氓程序。小海明白,这是因为自己的程序被黑客修改了。十包泡面之后小海找到了解决办法,对自己的软件进行签名,只有通过签名验证的软件才是他开发的。

小海的解决办法

  1. 小海对自己的软件进行Hash,得到软件信息摘要
  2. 小海使用私钥(一串数字)对软件信息摘要进行加密得到签名,私钥要绝对保密,不能泄露
  3. 将签名附加在软件上
  4. 小海发布签名的软件并将自己的公钥(一串数字)公布在网络上,并且告诉大家,没有签名的软件不要使用,签名验证错误的软件也不要使用
  5. 用户得到小海的软件后取出签名,使用公钥进行解密,得到软件摘要1,然后对软件进行Hash得到软件摘要2,对比软件摘要1和2,如果相同则证明软件为小海所写,如果不同则证明软件被修改,不是原始的软件

数字证书

然而好景不长,黑客在网络上冒名小海说已经修改公钥,让粉丝使用新的公钥,网络上出现了好多个小海的公钥,其实那些都是黑客们自己的公钥,他们使用自己的私钥对修改后的软件进行签名,然后冒名小海。又是十包泡面后小海找到了解决办法...小海决定对自己的公钥做认证,世界上有一个组织叫证书中心(CA),它被全世界所信任,它同时也有一个私钥和公钥,我们可以看做这个机构的公钥被预先安装在操作系统上。

  1. 证书中心(CA)使用自己的私钥对小海的公钥以及其他信息进行加密生成被CA签名的数字证书(实际是对证书信息的Hash值做加密,因为和上面流程相似,所以简化)
  2. 小海将数字证书和自己的签名附加在自己的软件上,发布软件,并且告诉大家没有数字证书的软件不要使用
  3. 用户得到小海的软件后取出数字证书,使用CA公钥对CA Sign进行解密,得到的信息和证书上的信息进行对比,如果一致则表示证书是正确的,如果不一致则表示证书是伪造的 4.用户从证书上获取小海的公钥,接下来对软件的签名进行解密和判断,和前面流程一样

后话

公钥和私钥的生成以及加密解密都有特定的算法,会在之后的博客中给大家介绍


赞助作者写出更好文章


您还未登录,登录GitHub账号发表精彩评论

 GitHub登录


最新评论

  • NoMoreCynic

    发表于: 2017年3月14日  

    回复@burnell_liu

    What if the CA organizations were hacked?

  • burnell_liu (作者)

    发表于: 2017年3月15日  

    回复@NoMoreCynic

    哈哈,这就不是我能考虑的事情了,地震、火山、海啸,世界上没有绝对的安全。

 

 

刘杰

29岁, 现居苏州

微信:

CoderJieLiu

邮箱:

coderjie@outlook.com

Github:

https://github.com/BurnellLiu

简介:

弱小和无知不是生存的障碍,傲慢才是!

Think Twice, Code Once!

本站: 登录 注册

苏ICP备16059872号-1 苏ICP备16059872号-2 . Copyright © 2017. http://www.coderjie.com. All rights reserved.

账号登录

注册 忘记密码