透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

24 | 固若金汤的根本(上):对称加密与非对称加密

Chrono 2019-07-22
在上一讲中,我们初步学习了 HTTPS,知道 HTTPS 的安全性是由 TLS 来保证的。
你一定很好奇,它是怎么为 HTTP 增加了机密性、完整性,身份认证和不可否认等特性的呢?
先说说机密性。它是信息安全的基础,缺乏机密性 TLS 就会成为“无水之源”“无根之木”。
实现机密性最常用的手段是“加密”(encrypt),就是把消息用某种方式转换成谁也看不懂的乱码,只有掌握特殊“钥匙”的人才能再转换出原始文本。
这里的“钥匙”就叫做“密钥”(key),加密前的消息叫“明文”(plain text/clear text),加密后的乱码叫“密文”(cipher text),使用密钥还原明文的过程叫“解密”(decrypt),是加密的反操作,加密解密的操作过程就是“加密算法”。
所有的加密算法都是公开的,任何人都可以去分析研究,而算法使用的“密钥”则必须保密。那么,这个关键的“密钥”又是什么呢?
由于 HTTPS、TLS 都运行在计算机上,所以“密钥”就是一长串的数字,但约定俗成的度量单位是“位”(bit),而不是“字节”(byte)。比如,说密钥长度是 128,就是 16 字节的二进制串,密钥长度 1024,就是 128 字节的二进制串。
按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(32)

  • TerryGoForIt
    简单来说,SSL 就是通信双方通过非对称加密协商出一个用于对称加密的密钥。

    作者回复: √

    2019-07-22
    1
    11
  • 鱼向北游
    私钥加密用公钥解是为了做身份认证,不可抵赖,因为默认私钥只有持有人知道

    作者回复: √

    2019-07-22
    1
    7
  • 小美
    加密的分组模式,是怎么实现的,具体怎么做,这块不是很理解。方便老师指导下不

    作者回复: 拿ECB来举例子,假设使用aes128,密钥长度是16字节,那么就把明文按16字节分组,然后每个分组用密钥加密。

    其他的cbc、ofb等的方法类似,但细节不同,例如cbc增加了初始向量。

    2019-07-22
    7
  • -W.LI-
    混合加密:用非对称加密,加密对称加密的私钥。对称加密的私钥又是会话级的随机数=一次会话一个私钥。就算别人baoli破解也只是破解了一个会话。

    作者回复: √

    2019-07-22
    5
  • Geek_66666
    在实际传输过程中,大家(包括其他人)怎么知道双方通信用的哪个公钥,是传输过程公开的,大家都可以获取看到的吗?如果大家都知道了,用私钥加密的内容都能被别人用公钥解密,这部分内容是不是不安全?

    作者回复: 公钥的传输必须使用证书,把公钥和持有者身份绑在一起,否则就会有信任问题,容易被别人冒充。

    私钥加密的作用是签名,实现身份认证而不是数据保密,签名是公开的,所以不存在安全问题。

    2019-08-25
    3
  • Geek_steven_wang
    分组模式:DES和AES都属于分组密码,它们只能加密固定长度的明文。如果需要加密任意长度的明文,就需要对分组密码进行迭代,而分组密码的迭代方法就称为分组密码的“模式”。
    主要模式:
    ECB模式:Electronic Code Book mode(电子密码本模式)
    CBC模式:Cipher Block Chaining mode(密码分组链接模式)(推荐使用)
    CFB模式:Cipher FeedBack mode(密文反馈模式)
    OFB模式:Output FeedBack mode(输出反馈模式)
    CTR模式:CounTeR mode(计数器模式)(推荐使用)

    作者回复: 补充的非常好。

    2019-08-24
    1
    3
  • allen
    非对称加密通信的时候是不是会互相把自己的公钥发给对方?

    作者回复: 是的,公钥的分发通常都使用证书的形式,防止伪造。

    2019-08-23
    3
  • 青莲居士
    老师,你好,我不明白对称加密为啥会有密钥交换的过程,对称加密就一个密钥,客户端服务端各保存一份就可以了,为啥要传输交换呢?

    作者回复: 关键是“如何各保存一份”,两边加密通信必须要使用相同的密钥才行,不交换如何才能保持一致呢?

    而且简单的一对一还好说,现实情况是网站要面对成千上万的用户,如何与这么多的客户端保持一致?

    还有,如果总使用一个密钥,就很容易被破解,风险高,需要定期更换,最好是一次一密。

    所以,为了安全起见,每次通信前双方都要交换密钥,这样就实现了“各保存一份”,用完就扔掉,下次重新交换。

    2019-08-02
    2
    3
  • Keep-Moving
    然后用随机数产生对称算法使用的“会话密钥”(session key)

    这个能详细说一下吗?

    作者回复: 这个其实很简单,就是产生一个随机数,比如16字节,然后用公钥加密后安全传递给对方。

    2019-07-22
    3
  • Fstar
    思考题第1题:
    (这里举个比较勉强的例子)假设 a 持有私钥,b 持有公钥,然后他们用一个加了锁的盒子进行通信。

    1. a 把信件放到盒子里,然后用一排连接为锁链的锁将盒子锁起来,然后寄给 b。只要公钥能解开其中一个锁,那对方就能拿到信件。(可能换成能识别具有某些特征密码的密码锁的比喻会更好一些)
    2. b 用公钥开锁拿到了信件,然后他写了一封回信,同样放到盒子里,然后挂上一个只有私钥才能打开的锁,寄给 a。
    3. 只有 a 有有对应的钥匙(私钥),于是 a 拿到了回信。

    思考题第2题不是很清楚题意,大概是问只要有公钥就能解密,私钥有什么意义?

    答:虽然任何公钥都可以对私钥加密的数据解密,但这个解密后的数据如果是某个公钥持有人用自己私有的密钥加密(对称加密)后的加密数据,那其他人拿到是加密后的数据,无法得到真正的数据,于是可以保证机密性。

    作者回复: 回答的很认真。

    第二个问题,问的是私钥加密公钥解密有什么作用,能够干什么。

    因为私钥只能由一个人秘密持有,所以它加密的数据谁都可以解密,没有私密性,但这就是它的价值所在,可以证明这个数据就是私钥持有人发布的,可以用来做身份认证。

    2019-07-25
    2
  • qiezitx
    1、密钥就相当于现实生活中的钥匙,加密算法相当于现实生活中的锁,通过钥匙来上锁和解锁。公私钥相当于A上的锁只能B解锁,B上的锁只能A解锁,但一般A会分发出去有多份。
    2、私钥加密,公钥解密,这个刚开始没领悟,看了答案才知道用来做身份认证,能解开说明是私钥持有者发给我的。但这个反向认证的应用时机还没领悟,因为毕竟此时已经有会话密钥了,可以用对称加密来通讯。继续学。

    作者回复: 看得出来很努力、认真,加油。

    2019-09-27
    1
  • xiaolin777
    老师,今天面试官问我非对称加密为什么慢,非对称加密除了慢外还有什么缺点,您能帮我解答一下吗?

    作者回复: 非对称加密基于大数运算,比如大素数或者椭圆曲线,是复杂的数学难题,所以消耗计算量,运算速度慢。

    除了慢,可能还有一个缺点就是需要更多的位数,相同强度的对称密钥要比非对称密钥短。

    对称密钥一般都128位、256位,而rsa一般要2048位,不过椭圆曲线的会短一点。

    2019-09-19
    1
  • missing~~
    老师好,对于混合加密这块不是很理解,实质是通过非对称加密传递一个会话级别的密钥,假如客户端A用公钥加密了一个对称加密的秘钥传递给服务端B,B收到后通过私钥解出来这个对称加密密钥然后做对称解密。客户端A第二次请求又走同样的逻辑。不知道我这样理解对不对,如果对那么为什么还要再做一次对称解密感觉没有必要这样不是更影响效率吗?

    作者回复: 这是为了安全起见,如果长时间都使用一个对称密钥加解密就容易被破解,所以每次通信都要选择新的密钥,保证安全。

    当然这有效率的问题,所以tls就出现了会话复用,在一定的有效期内可以直接重用上次的对称密钥,提高效率。

    2019-09-18
    1
  • 业余草
    留个言,证明一下我看过此文!

    作者回复: 继续学习,完成作业才是更好的证明。

    2019-08-12
    1
  • Geek_54edc1
    1、加密算法是公开的,好比锁的制造方法是公开的,任何人都可以研究,但是想要开一个锁,只能用某把特定的钥匙,用其他的钥匙是打不开锁的,即想要解密特定的密文,只能用特定的密钥,用其他的密钥是无法解密的

    作者回复: √

    2019-07-22
    1
    1
  • 彩色的沙漠
    非对称加密除了密钥交换还可以用于身份认证

    作者回复: great。

    2019-07-22
    1
  • 何用
    公钥能解开的信息一定是与之配对的私钥加密的,这能解决身份认证的问题

    作者回复: great。

    2019-07-22
    1
  • 永钱
    1.现在很流行密码锁,秘钥就是你设置的密码,没有密码,开不了锁
    2.私钥加密叫加密,公钥加密叫签名,防止抵赖

    作者回复: 2不太正确,感觉是弄反了。

    其实两者在密码学上都可以叫加密,互相加密解密。只是一般习惯上的说法是公钥加密私钥解密,私钥签名公钥验签。

    2019-07-22
    1
  • Flourishing
    老师,以下几个问题,麻烦看一下:
    1. 举个例子,你想要登录某网站,只要事先和它约定好使用一个对称密码...... 此处应该是对称密钥。
    2. 以现在不再具有明显的优势,但仍然算得上是一个不错算法。 此处应该是不错的算法。
    3. 由于 HTTPS、TLS 都运行在计算机上,所以“密钥”就是一长串的数字。我记得这里不是可以数字+字母的嘛?
    4. 基于“整数分解”的数学难题、基于“椭圆曲线离散对数”的数学难题等等概念不是很清楚,咋办啊?感觉有点深奥。

    作者回复:
    1/2,是笔误,感谢指正。

    3,计算机,全称是“电子数字计算机”,处理的都是数字。虽然我们常用的是各种字符(数字、字母、标点符号),但在计算机里都是用数字来表示的,所以说密钥就是数字。

    4.可参考答疑篇,如果不清楚可以在那里提问。

    2019-12-12
  • nora
    有点糊涂了,向老师提问:

    1. 所以私钥的签名作用是指 服务器的签名嘛? 客户端用公钥来验证收到的消息是否为对应服务器的回复。

    2. 我们平时说的客户端签名验证指的是什么呢?

    作者回复:
    1.单纯在密码学领域来讲,是不存在客户端和服务器的区别的,只有通信的双方,所以私钥签名即可以是服务器签名,也可以是客户端签名,只要有私钥就可以,对应的另一方用公钥来验证。

    2.验签当然是用对方的公钥来验证,所以客户端签名验证就是用服务器的公钥来验证对数据的签名是否是正确的。

    2019-12-10
收起评论
32
返回
顶部