证书服务(二)加密通信的进化


四:证书

窃听与劫持

虽然现在已经有个公钥和私钥,非对称加密解密工具,但是仍然有被黑客攻击的可能,如果黑客监听网络,还是可以在握手阶段窃听或篡改密钥。

那么我们如何继续加强安全呢?

如何确认自己拿到的公钥是指定服务器的公钥而不是被篡改过的呢?找个警察来查身份证吧。

在使用证书前:

A拿着公钥给了B,说这是我的公钥。我们之间的通信都用这个加密。

黑客攻击的情况,黑客偷偷的把B手上的A公钥,换成了黑客的公钥。拿到A发给B的加密信息后,用从B偷到的A公钥解密,然后用黑客的私钥加密,发给B。B也不知道手上的公钥被黑客替换了,用假的A公钥(黑客公钥)解密,一切正常。

在使用证书后:

A拿着公钥找警察,办了个身份证(警察私钥加密的A公钥),用私钥加密数据后和证书一起发给了B,并没有给B公钥。

B一看有身份证一起来的信息,那就先看看身份证是不是真的,身份证是公安局(ca)发的,就拿CA的公钥解密,获取A的公钥,再解密信息,正常。

看看黑客,现在已经无法再伪造信息了,因为CA公钥是公开的,B拿CA公钥解密A的公钥,黑客没有CA的私钥,也就无法伪造这个信息了。

加密通信的进化

来源:https://zhuanlan.zhihu.com/p/354439233

背景

小明和小红是笔友,住在不同的城市,会互相写信。

不巧的是,小明的妈妈在邮局工作,能窃听/拦截/伪造信件。而且她禁止小明谈恋爱,一旦发现,原地处决。

小明很喜欢小红,想向她表白,但又很怕被他妈发现。快来帮帮他吧!

(小明是你的浏览器,小红是你想访问的网页,告白是你的账号密码,妈是想知道你账号密码的黑客)

无加密

最开始,小明和小红之间的通信没有加密。

[通信方式]
小明->小红: 做我女友
小明<-小红: 好

小明的明文直接被窃听了。

[破解方法]
小明->小红: 做我女友    # 被窃听
小明<-妈:滚

(早期的网页就是这样的,现在偶尔也有年久失修的网页在用。

对称加密

小明想着不行,我们之间的通信要加密才可以。小明试图用对称加密保证文本不被窃听

[通信方式]
小明->小红:对称密钥
小明->小红:对称加密(做我女友,对称密钥)
小明<-小红:对称加密(好,对称密钥)

小红拿到密钥以后,所有的信件都被加密了。但问题是发给小红的第一封信,也就是装着密钥的那封信,没法被加密。妈窃听了这封信,拿到了密钥,解开了密文。

[破解方法]
小明->小红:对称密钥                   # 被窃听
小明->小红:对称加密(做我女友,对称密钥)   # 被窃听
小明<-妈:滚

RSA密钥交换+对称加密

小明思考许久,开始尝试用非对称加密来保证对称密钥不被窃听

[通信方式]
小明<-小红:RSA公钥
小明->小红:非对称加密(对称密钥,RSA公钥)
# 小红用RSA私钥解密,得到对称密钥
小明->小红:对称加密(做我女友,对称密钥)
小明<-小红:对称加密(好,对称密钥)

看起来很完美了。妈虽然窃听到了非对称公钥,但她没有私钥,解不开密文。

[破解方法]
# 小明<-小红:非对称公钥                        # 被拦截
小明<-妈:妈的非对称公钥                        # 被伪造
小明->小红:非对称加密(对称密钥,妈的RSA公钥)    # 被窃听
# 妈用妈的RSA私钥解密,得到对称密钥
小明->小红:对称加密(做我女友,对称密钥)           # 被窃听
小明<-妈:滚

但妈心生一计。她拦截小红发公钥的信,伪造了另一封信,在信中附上了自己的公钥。这样她就可以用自己的私钥解开小明的信,从而获得对称密钥,并一直伪装成小红和他通信了。

数字证书+RSA密钥交换+对称加密

小明怒了,他去找了恋爱联盟 (CA)。联盟全国连锁,电话联络。妈能窃听到电话,但没法伪装成联盟员工。他请求联盟用数字证书保证小红的非对称公钥不被伪造

联盟给了小明CA公钥。

联盟给了小红数字证书。证书里有小红的名字,照片,小红的非对称公钥,和证书签名。

[通信方式]
小明<-恋爱联盟: 联盟的证书公钥
小红->恋爱联盟: 小红的名字,照片,小红的RSA公钥
小红<-恋爱联盟: 小红的数字证书

小明<-小红:小红的数字证书
# 小明用联盟的证书公钥验证数字证书上的证书签名,并从中获得小红的RSA公钥
小明->小红:非对称加密(对称密钥,RSA公钥)
# 小红用RSA私钥解密,得到对称密钥
小明->小红:对称加密(做我女友,对称密钥)
小明<-小红:对称加密(好,对称密钥)

这样就非常安全了。

妈能窃听到联盟公钥 (印章照片),但没什么用。妈又不会伪造印章。

妈能窃听到数字证书,但她没法伪造数字证书。如果她自己写了封数字证书,上面只能盖自己的私钥 (印章)。小明看看手上的联盟公钥 (印章照片),就能知道证书不是CA发的。这样妈就没法假扮小红,给小明发自己的非对称公钥了。

妈也不能伪装成小红去找联盟申请证书,因为联盟要看申请者身份证。

但既然小明只是想确认小红公钥的真实性,为什么恋爱联盟不直接把小红的公钥给小明呢?因为小明同时在和很多女生表白。他不想记那么多女生的公钥,只想记住联盟的公钥就够了。

但这种方法还是有个缺点。

[破解方法]
妈苦算十年把小红RSA私钥破解/妈千里迢迢跑去偷走小红RSA私钥
# 妈用小红的RSA私钥解开了装对称密钥的信,获得了对称密钥
# 妈用对称密钥解开了对称加密的信,获得了信的内容
小明<-妈:滚

在小明和小红享受了长时间的加密通信后,妈也怒了。妈苦算十年破解了小红RSA私钥/妈千里迢迢跑去小红家偷走了小红RSA私钥。这样妈就能解出它俩过去通信用的所有对称密钥,也就能解出过去通信的所有内容。

数字证书+数字签名+DH密钥交换+对称加密

[通信方式]
小明<-恋爱联盟: 联盟的证书公钥
小红->恋爱联盟: 小红的名字,照片,小红的RSA公钥
小红<-恋爱联盟: 小红的数字证书

小明<-小红:小红的数字证书
# 小明用联盟的证书公钥验证数字证书上的证书签名,并从中获得小红的RSA公钥
小明<-小红:小红DH公钥,生成签名(小红DH公钥,RSA私钥)
# 小明用小红的RSA公钥验证签名,获得小红DH公钥
# 小明获得共享密钥
小明->小红:小明DH公钥
# 小红获得共享密钥
小明->小红:对称加密(做我女友,对称密钥)
小明<-小红:对称加密(好,对称密钥)

这样就真的万无一失了。

妈不能伪造HD公钥,因为小红发来的HD公钥被打上了数字签名。

妈也不能伪造数字签名,因为签名公钥被数字证书认证了。

哪怕妈破解了小红数字证书的私钥,她也不能拿到对称密钥,不能解出过去通信的内容。因为这个私钥并没有加密过任何内容,只是单纯用来签名而已。

[破解方法]
妈苦算十年把小红RSA私钥破解/妈千里迢迢跑去偷走小红RSA私钥
妈:草

(当下主流的网页用的就是这种方法。

话说为什么所有方法的最后都是对称加密呢?因为非对称加密太难了,做一次就够累了。