「每日分享」https的故事

  • 时间:2018-07-09 22:21 作者:java全栈技术 来源:java全栈技术 阅读:156
  • 扫一扫,手机访问
摘要:点击上方"java全栈技术"关注,每天学习一个java知识点1 序言今天来聊一聊https 安全传输的原理。在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖, 还有一个是位于米国的Bill 。这俩哥们隔着千山万水,通过网络联络上了, 两个人臭味相投,聊得火热。此时正值米国大选, 张大胖亲切地

点击上方"java全栈技术"关注,每天学习一个java知识点

1 序言

今天来聊一聊https 安全传输的原理。

在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖, 还有一个是位于米国的Bill 。

这俩哥们隔着千山万水,通过网络联络上了, 两个人臭味相投,聊得火热。

此时正值米国大选, 张大胖亲切地“致电”Bill, 对米国总统大选的情况表示强烈地关注。 Bill则回电说谢谢关心米国人的事情我们米国人自己做主,不使用你们歪果仁瞎操心......

张大胖继续“致电”说其实我们支持特朗普, 由于希拉里太情绪化,太难打交道了, 我们挺希望看到特朗普上台这样米国就会变成 The Divided State of America ......

Bill 回电: 拉倒你吧你, 我们米国的政体有着强大的纠错性, 尽管有时候发展得慢, 有时候会走上岔路, 但很快就会回到正途,几百年来稳固得很,不像你们像坐了过山车一样.....

两个人越聊越投机,天涯海角,海阔天空,还夹杂着不少隐私的话题。

2总是有一种被偷看的感觉

有一天, Bill 忽然意识到: 坏了, 我们的通信是明文的, 这简直就是网络上裸奔啊, 任何一个不怀好心的家伙都能监听我们通信,打开我们发送的数据包,窥探我们的隐私啊。

张大胖说: “你不早点说,我刚才是不是把我的微信号给你发过去了? 我是不是告诉你我上周去哪儿旅游了? 预计已经被人截取了吧!”

Bill 提议: “要不我们做个数据的加密? 每次传输之前, 你把消息使用一个加密算法加密, 而后发到我这里以后我再解密, 这样别人就无法偷窥了,像这样: ”

「每日分享」https的故事

张大胖冰雪聪明,一看就明白了, 这加密和解密算法是公开的,那个密钥是保密的, 只有两人才知道, 这样生成的加密消息(密文) 别人就无法得知了。 他说: “Bill 老兄,你生成一个密钥, 而后把密钥发给我, 咱们这就开启加密消息, 让那些偷窥狂人们哭去吧!”

(注:这叫对称加密算法, 由于加密和解密使用的是同一个密钥)

一炷香功夫过去了, Bill 还是没有回音, 张大胖忍不住地催促: “快发啊?!!!”

Bill 终于回复了: “ 我感觉有一双眼睛正在虎视眈眈地盯着我们的通话, 假如我把密钥发给你, 也被他截取了, 那加密岂不浪费工夫?”

张大胖沉默了, 是啊, 网络是不安全的, 这密钥怎样安全地发过来啊 ?

“奥,对了,我下周要去米国旅游,到时候我们见一面,把密码确定下来,写到纸上,谁也偷不走, 这不就结了?”

“哈哈, 这倒是终极处理之道 ” Bill 笑了, “不过,我不仅仅和你聊天, 我还要和易卜拉欣,阿卜杜拉, 弗拉基米尔,克里斯托夫,玛格丽特, 桥本龙太郎, 李贤俊, 许木木,郭芙蓉,吕秀才等人通信, 我总不可以打着飞的,满世界的和人交换密码吧? ”

张大胖心里暗自佩服Bill同学的好友竟然遍布全球,看来他对加密通信的要求更增强烈啊!

可是这个加密解密算法需要的密钥双方必需得知道啊, 但是密钥又无法通过网络发送, 这该死的偷窥者!

3RSA : 非对称加密

Bill 和 张大胖的通信无法加密,说话谨慎了不少, 直到有一天, 他们听说了一个叫做RSA的非对称加密算法,一下子来了灵感。

这个RSA算法非常有意思,它不是像之前的算法, 双方必需协商一个保密的密钥, 而是有一对儿钥匙, 一个是保密的,称为私钥,另外一个是公开的,称为公钥

更有意思的是,使用私钥加密的数据,只有对应的公钥才可以解密,使用公钥加密的数据, 只有对应的私钥才可以解密

「每日分享」https的故事

有了这两个漂亮的特性, 当张大胖给Bill发消息的时候, 即可以先使用Bill的公钥去加密(反正Bill的公钥是公开的,地球人都知道), 等到消息被Bill 收到后, 他即可以使用自己的私钥去解密(只有Bill才可以解开,私钥是保密的 )

「每日分享」https的故事

反过来也是如此, 当Bill 想给张大胖发消息的时候,就使用张大胖的公钥加密, 张大胖收到后,就使用自己的私钥解密。

这样以来,通信安全固若金汤, 没有任何人可以窥探他们的小秘密了。

4非对称加密+对称加密

两人试验了几次, 张大胖说: “Bill , 你有没有感觉这个RSA的加密和解密有点慢啊?”

Bill叹了口气 :“是啊, 我也注意到了, 刚才搜了一下,这个RSA算法比之前的对称密钥算法要慢上百倍。我们就是加个密而已,现在搞得都没法使用了”

“回到咱们最初的问题,我们想使用一个密钥来加密通信,那个对称加密算法是非常快的,但是苦于密钥无法安全传输, 现在有了RSA ,我想能结合一下, 分两步走 (1) 我生成一个对称加密算法的密钥, 使用RSA的方式安全发给你, (2) 我们随后就不使用RSA了, 只使用这个密钥,利使用对称加密算法来通信, 如何? ”

Bill 说: “你小子能啊, 这样以来既处理了密钥的传递问题, 又处理了RSA速度慢的问题,不错。”

于是两人就安全地传递了对称加密的密钥, 使用它来加密解密,果然快多了!

5中间人攻击

张大胖把和Bill 聊天的情况给老婆汇报了一次。

老婆告诫他说: “你要小心啊, 你确定网络那边坐着确实实是Bill ?”

张大胖焦急地辩解说:“一定是他啊,我都有他的公钥,我们俩的通信都是加密的。”

老婆提示道:"如果啊,Bill给你发公钥的时候, 有个中间人,截取了Bill的公钥, 而后把自己的公钥发给了你,冒充Bill ,你发的消息就使用中间人的公钥加了密, 那中间人不即可以解密看到消息了?"

张大胖背后出汗了,是啊,这个中间人解密以后,还能使用Bill的公钥加密,发给Bill , Bill和我根本都意识不到, 还以为我们在安全传输呢!

「每日分享」https的故事

看来问题出现在公钥的分发上! 尽管这个东西是公开的, 但是在别有使用心的人看来,截取以后还能干坏事 !

6你究竟是谁?

但是怎样安全地分发公钥呢? 似乎又回到了最初的问题: 怎样安全的保护密钥?

可是似乎和最初的问题还不一样,这一次的公钥不使用保密,但是肯定得有个办法公告这个公钥的确是Bill的, 而不是别人的。

怎样公告呢?

张大胖忽然想到: 现实中有公证处,它提供的公证材料大家都信任,那在网络世界也能建立一个这样的具有公信力的认证中心, 这个中心给大家颁发一个证书, 使用于证实一个人的身份。

这个证书里除了包含一个人的基本信息之外,还有包括最关键的一环:这个人的公钥!

这样以来我拿到证书即可以安全地取到公钥了 ! 完美!

可是Bill 马上泼了一盆冷水:证书怎样安全传输? 要是证书传递的过程中被篡改了怎样办?

张大胖心里不由地咒骂起来: 我操, 这简直就是鸡生蛋,蛋生鸡的问题啊。

天无绝人之路, 张大胖很快就找到了突破口: 数字签名

简单来讲是这样的, Bill能把他的公钥和个人信息使用一个Hash算法生成一个消息摘要, 这个Hash算法有个极好的特性,只需输入数据有一点点变化,那生成的消息摘要就会有巨变,这样即可以防止别人修改原始内容。

「每日分享」https的故事

可是作为攻击者的中间人笑了: “尽管我没办法改公钥,但是我能把整个原始信息都替换了, 生成一个新的消息摘要, 你不还是辨别不出来?”

张大胖说你别得意的太早 , 我们会让有公信力的认证中心(简称CA)使用它的私钥对消息摘要加密,形成签名:

「每日分享」https的故事

「每日分享」https的故事

这还不算, 还把原始信息和数据签名合并, 形成一个全新的东西,叫做“数字证书

「每日分享」https的故事

「每日分享」https的故事

张大胖接着说:当Bill把他的证书发给我的时候, 我就使用同样的Hash 算法, 再次生成消息摘要,而后使用CA的公钥对数字签名解密, 得到CA创立的消息摘要, 两者一比,就知道有没有人篡改了!

假如没人篡改, 我即可以安全的拿到Bill的公钥喽,有了公钥, 后序的加密工作即可以开始了。

尽管很吃力, 但是为了防范你们这些偷窥者,实在是没办法啊。

「每日分享」https的故事

「每日分享」https的故事

中间人恶狠狠地说: “算你小子狠! 等着吧,我还有别的招。 对了,我且问你, 你这个CA的公钥怎样拿到? 难道不怕我在你传输CA公钥的时候发起中间人攻击吗? 假如我成功的假装成了CA,你这一套体系彻底玩完。”

张大胖语塞了,折腾了半天,又回到了公钥安全传输的问题!

不过转念一想,想处理鸡生蛋,蛋生鸡的问题必需得打破这个怪圈才行,我必需得信任CA,并且通过安全的的方式获取他们的公钥,这样才可以把游戏玩下去。

(公众号码农翻身注:这些CA本身也有证书来证实自己的身份,并且CA的信誉是像树一样分级的,高层的CA给底层的CA做信誉背书,而操作系统/浏览器中会内置少量顶层的CA的证书,相当于你自动信任了他们。 这些顶层的CA证书肯定得安全地放入操作系统/浏览器当中,否则世界大乱。)

7https

终于能详情https了,前面已经详情了https的原理, 你把张大胖替换成浏览器, 把Bill 替换成某个网站就行了。

一个简化的(例如下图没有包含Pre-Master Secret)https流程图是这样的, 假如你了解了前面的原理,这张图就变得非常简单:

「每日分享」https的故事

文章转自码农翻身

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】极客时间-数据分析实战45讲【完结】(2021-09-02 16:26)
【系统环境|windows】字节跳动前台面试题解析:盛最多水的容器(2021-03-20 21:27)
【系统环境|windows】DevOps敏捷60问,肯定有你想理解的问题(2021-03-20 21:27)
【系统环境|windows】字节跳动最爱考的前台面试题:JavaScript 基础(2021-03-20 21:27)
【系统环境|windows】JavaScript 的 switch 条件语句(2021-03-20 21:27)
【系统环境|windows】解决 XML 数据应用实践(2021-03-20 21:26)
【系统环境|windows】20个编写现代CSS代码的建议(2021-03-20 21:26)
【系统环境|windows】《vue 3.0探险记》- 运行报错:Error:To install them, you can run: npm install --save core-js/modules/es.arra...(2021-03-20 21:24)
【系统环境|windows】浅谈前台可视化编辑器的实现(2021-03-20 21:24)
【系统环境|windows】产品经理入门迁移学习指南(2021-03-20 21:23)
血鸟云
手机二维码手机访问领取大礼包
返回顶部