聊聊数字签名(上)

对称加密和非对称加密

Posted by 邬俊杰 on September 1, 2019

为什么要加密

假设你是一个公司的老板,由于公司发展良好,所以成立了很多分公司,你需要和分公司使用信件通信,信件需要通过多个站点才能送到对方手中,你们寄的信件有这样两个特点:

1:你给分部写的信是发号施令,内容是可以公开的;

2:分部给你写的信是汇报工作,内容是需要保密的。

在初期信件一直可以安全送达,直到有一天,有个站点混入了一个坏人,这个坏人经常偷偷的看你们的信件,甚至还恶作剧修改你们的信件的内容。

1909010101

于是你们就想了一个办法,和分部约定了一个密钥,以后分部在寄信之前先用这把约定的密钥加密信件,这样即使坏人拆开了信件也不知道信件的内容。

1909010102

对称密钥的缺点

随着公司的发展,成立的分部越来越多,拥有这把钥匙的人也越来越多,由于某个分部安全意识不足,没有妥善的保管这把钥匙,被坏人通过某种途径他偷偷的配了这把钥匙,这时由于一个人的过失导致了坏人可以看到所有人的信件。

1909010103

于是你想了一个办法,你准备了很多这样的钥匙,与不同的分部约定不同的钥匙,可是随着时间的推移分部越来越多,你要管理的钥匙也越来越多,你需要耗费精力来记录这些钥匙,而且各个分部安全意识参差不齐,你很难保证与他们约定的密钥不被泄漏

1909010104

小结:对称加密的密钥至少有两个人持有,任何一方泄漏密钥都会导致安全问题,我们知道保守秘密最妥善的方式就是只有自己知道;而且为了提高安全性,我们会与不同的人约定不同的密钥,随着密钥的增多管理成本随之增大

非对称加密

老板不愧是老板,于是你做了一套神奇的钥匙,这套钥匙分两类,一类称为公钥,一类你称为私钥,这两把钥匙有这样两个特性:1)公钥加密的内容有且仅有私钥能解开;2)私钥加密的内容有且仅有公钥能解开;你把公钥分发给你下属公司,告诉他以后给你写信用公钥加密,而私钥只有你一个人持有。

然而好景不长,由于你给下属发的信件是命令,是可以公开的,为了提高效率你并没有对信件加密,坏人此时虽然没有办法看到你的分部寄给你的信,但是却可以假冒你发布命令。

于是你想了个办法,说我以后再给分部发命令时会在信件里附个签名,签名生成步骤如下:1)对整封信求hash形成摘要;2)然后用私钥对摘要加密。分部收到命令后先用公钥解密,然后再把信的内容做hash求个摘要,和签名中的摘要做对比,如果一致就是老板发出的命令。这样有两个好处:1)不需要对整封信加密,你的分部不需要再解密,效率高;2)坏人没有的私钥,是没办法仿冒签名,一旦修改了信的内容就会导致签名的摘要和信件的摘要不一致。

1909010105

小结:一般公钥用来加密,私钥用来签名,签名除了防篡改以外还可以防抵赖

为什么需要证书

道高一尺,魔高一丈,坏人又想到办法了,坏人也做了两把钥匙,通过各种途径偷偷的把你分部的公钥替换成了自己的公钥,而你的分公司并不知道自己的公钥是坏人的。于是坏人就用自己的私钥解密分部的信件偷看内容,并用自己的私钥给你的分部发送假的命令。

1909010106

终于有一天你发现了这个问题,但你实在想不到办法解决这个问题,于是你寻求政府的帮助,政府最终给出了解决方案:政府来做一套公钥和私钥,然后用私钥加密你的公钥和其他信息做成证书颁发给你,把公钥给你的分部。当你和分部要写信时会带上证书和签名,你的分部拿到后用政府的公钥解密证书得到你的公钥,然后使用你的公钥验证信件是否被修改。这样你的分部无论和谁通信,只要验证一次政府的公钥是合法的并且信任后,就确保从证书中拿出的是真正的公钥

1909010107

对称加密和非对称加密正确的使用姿势

随着公司发展,你想秘密的让A分部启动一个机密项目,这个命令不再是公开给所有的分部,由于公钥任何人都可以拿到,你的命令也就无法通过私钥加密达到只让A分部可以解密的目标。

于是你想到一个办法,你告诉A部门”我有一个命令要给你”,你的分部就会用你的公钥加密了一把对称密钥。其他人没有你的私钥,无法获取这把对称密钥。而你收到信件后用私钥解密,拿出对称密钥,对发布的命令内容进行对称加密,你分部用对称密钥解密查看命令,甚至为了提高安全性,这把对称密钥使用一次后即废弃,下次使用分部给你的新的密钥。(这其实也就是https的基本原理)

小结:通过非对称密钥传递对称密钥,保证安全性的同时兼顾了性能

总结

对称加密

采用了对称密码编码技术,特点是文件加密和解密使用相同的密钥加密,对称加密算法使用起来简单快捷,密钥较短,破译困难,但当对称加密算法应用在微信支付这样的电子商务过程中存在几个问题: 1)平台方和商户之间不可能线下面对面协商密钥,这就要求提供一条安全的渠道使通讯双方在首次通讯时协商一个共同的密钥,而这在开放的互联网中是不现实的;密钥的分发是一件潜在危险的事情,并且其安全的前提是平台和商户均能够妥善的保管密钥。

2)为保证安全平台方需要对于每一个合作者都使用不同的密钥,需要管理大量的密钥;

3)对称加密算法不能防抵赖,能够实现加密但无法验证发送者身份;

非对称加密

非对称加密算法的典型应用是数字签名,需要公开密钥和私有密钥两个密钥,他们总是成对存在。公钥加密的数据只有用对应的私钥才能解密;同样私钥加密的数据也只有对应的公钥才能解密。由于非对称加密的这种特性,平台方不需要考虑密钥分发的安全性,可以将公钥任意公开,同时也不需要管理大量的密钥,只需要保管私钥即可。其缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。一般和对称加密结合起来使用

Hash算法

Hash算法特别的地方在于它是一种单向算法,通过hash算法可以对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息,因此Hash算法可以用来计算摘要,校验信息完整性等。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=14cllga0n32k1