数字签名
在生活中经常需要我们进行签名,办银行卡,办电话卡等等。签名就是确认我们的身份,标识着这个文件确实是我们自己签署的。那么在计算机的世界中,是如何确认一个软件的身份的呢?如何保证我们下载的是一个约pao软件,而不是一个病毒呢?我们来看看我们的朋友小海遇到什么问题吧。
小海的烦恼
小海是一个忠实的开源软件拥护者,经常开发一些免费的软件给大家使用,网络上聚集了他的一大批粉丝。然而最近小海很是烦恼,因为他的粉丝反应网络上小海开发的软件中包含病毒和流氓程序。小海明白,这是因为自己的程序被黑客修改了。十包泡面之后小海找到了解决办法,对自己的软件进行签名,只有通过签名验证的软件才是他开发的。
小海的解决办法
- 小海对自己的软件进行Hash,得到软件信息摘要
- 小海使用私钥(一串数字)对软件信息摘要进行加密得到签名,私钥要绝对保密,不能泄露
- 将签名附加在软件上
- 小海发布签名的软件并将自己的公钥(一串数字)公布在网络上,并且告诉大家,没有签名的软件不要使用,签名验证错误的软件也不要使用
- 用户得到小海的软件后取出签名,使用公钥进行解密,得到软件摘要1,然后对软件进行Hash得到软件摘要2,对比软件摘要1和2,如果相同则证明软件为小海所写,如果不同则证明软件被修改,不是原始的软件
数字证书
然而好景不长,黑客在网络上冒名小海说已经修改公钥,让粉丝使用新的公钥,网络上出现了好多个小海的公钥,其实那些都是黑客们自己的公钥,他们使用自己的私钥对修改后的软件进行签名,然后冒名小海。又是十包泡面后小海找到了解决办法...小海决定对自己的公钥做认证,世界上有一个组织叫证书中心(CA),它被全世界所信任,它同时也有一个私钥和公钥,我们可以看做这个机构的公钥被预先安装在操作系统上。
- 证书中心(CA)使用自己的私钥对小海的公钥以及其他信息进行加密生成被CA签名的数字证书(实际是对证书信息的Hash值做加密,因为和上面流程相似,所以简化)
- 小海将数字证书和自己的签名附加在自己的软件上,发布软件,并且告诉大家没有数字证书的软件不要使用
- 用户得到小海的软件后取出数字证书,使用CA公钥对CA Sign进行解密,得到的信息和证书上的信息进行对比,如果一致则表示证书是正确的,如果不一致则表示证书是伪造的 4.用户从证书上获取小海的公钥,接下来对软件的签名进行解密和判断,和前面流程一样
后话
公钥和私钥的生成以及加密解密都有特定的算法,会在之后的博客中给大家介绍
NoMoreCynic
发表于: 2017年3月14日
What if the CA organizations were hacked?
burnell_liu (作者)
发表于: 2017年3月15日
哈哈,这就不是我能考虑的事情了,地震、火山、海啸,世界上没有绝对的安全。