目录
引言
HTTPS 是什么
1.什么是"加密"
2. 为什么要加密
3. 常⻅的加密⽅式
对称加密
⾮对称加密
4.数据摘要 && 数据指纹
5. 数字签名
HTTPS 的⼯作过程探究
⽅案 1 - 只使⽤对称加密
⽅案 2 - 只使⽤⾮对称加密
⽅案 3 - 双⽅都使⽤⾮对称加密
⽅案 4 - ⾮对称加密 + 对称加密
缺陷
引入证书
⽅案 5 - ⾮对称加密 + 对称加密 + 证书认证
关于证书的准确性
中间⼈有没有可能篡改该证书?
中间⼈整个掉包证书?
常⻅问题
为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?--重点是不可伪造
为什么签名不直接对数据加密,⽽是要先hash形成摘要?
如何成为中间⼈
完整流程
总结
引言
在当今的网络世界中,数据的安全性和隐私保护显得尤为重要。随着互联网的普及和信息技术的发展,用户在网络上传输的数据量日益增加,这就要求有一种机制能够保障数据在传输过程中的安全性。HTTPS(Hypertext Transfer Protocol Secure)协议应运而生,它为互联网通信提供了一种安全的传输方式。而CA(Certificate Authority,证书权威机构)认证则是确保HTTPS协议安全性的关键环节。
本文的核心将介绍https的加密方式与ca认证相关的知识。
HTTPS 是什么
1.什么是"加密"
2. 为什么要加密
不⽌运营商可以劫持, 其他的 ⿊客 也可以⽤类似的⼿段进⾏劫持, 来窃取⽤⼾隐私信息, 或者篡改内容.试想⼀下, 如果⿊客在⽤⼾登陆⽀付宝的时候获取到⽤⼾账⼾余额, 甚⾄获取到⽤⼾的⽀付密码.....在互联⽹上, 明⽂传输是⽐较危险的事情!!!
HTTPS 就是在 HTTP 的基础上进⾏了加密, 进⼀步的来保证⽤⼾的信息安全
3. 常⻅的加密⽅式
对称加密
还是举个栗子
⼀个简单的对称加密, 按位异或
假设 明⽂ a = 1234, 密钥 key = 8888
则加密 a ^ key 得到的密⽂ b 为 9834.
然后针对密⽂ 9834 再次进⾏运算 b ^ key, 得到的就是原来的明⽂ 1234.
(对于字符串的对称加密也是同理, 每⼀个字符都可以表⽰成⼀个数字)
当然, 按位异或只是最简单的对称加密. HTTPS 中并不是使⽤按位异或.
对称加密与其局限
对称加密是一种加密技术,其中加密和解密过程使用相同的密钥。以下是对称加密的主要特点和局限性:
### 对称加密的主要特点:
1. **速度快**:对称加密算法通常比非对称加密算法更快,因为它们的计算量较小。
2. **简单**:对称加密的算法和实现通常比较简单。
3. **密钥长度**:密钥长度通常较短,从64位到256位不等,这取决于所使用的算法和所需的安全级别。
4. **用途广泛**:对称加密广泛应用于数据加密标准(如AES、DES、3DES等)。
### 对称加密的局限性:
1. **密钥分发问题**:由于加密和解密使用相同的密钥,因此必须有一种安全的方法将密钥分发给所有需要访问加密数据的用户。在用户数量多或分布广的情况下,密钥分发变得复杂且风险高。
2. **密钥管理**:随着网络中用户和设备的增加,密钥的管理变得复杂。需要定期更换密钥以保持安全性,这进一步增加了管理的难度。
3. **无法提供身份验证**:对称加密本身不提供身份验证机制,因此无法保证消息的来源是真实的。需要额外的机制(如消息认证码)来验证消息的完整性和来源。
4. **不具备非否认性**:由于双方共享相同的密钥,因此无法提供非否认性,即无法证明消息是由特定的发送者发送的。
5. **安全性依赖于密钥的保密性**:如果密钥泄露,所有的加密数据都可能会被解密。因此,密钥的安全存储和传输至关重要。
6. **不支持数字签名**:对称加密不支持数字签名,这是一种验证消息完整性和发送者身份的机制。
7. **规模扩展性差**:在大型网络中,每个用户都需要与其他所有用户建立独立的密钥,这导致了密钥数量的指数级增长,难以管理。
为了克服这些局限性,通常会结合使用对称加密和非对称加密(如公钥加密)。例如,可以使用非对称加密来安全地分发对称加密的密钥,然后使用对称加密来加密实际的通信内容,这样既保证了安全性,又提高了效率。
⾮对称加密
非对称加密
非对称加密算法,如RSA、ECC(椭圆曲线加密算法)等,其核心特点就是使用一对密钥:公钥和私钥。公钥用于加密数据,而私钥用于解密。这种加密方式的安全性不在于公钥的保密性,而在于以下数学特性:
1. **单向性**:根据公钥加密的信息,不能(至少在当前计算能力下不可能)通过公钥解密。这意味着即使公钥是公开的,攻击者也无法利用公钥来解密由它加密的数据。
2. **数学难题**:非对称加密算法基于某些复杂的数学难题,如大数分解(RSA)或椭圆曲线离散对数问题(ECC)。这些难题确保了在不知道私钥的情况下,解密加密信息在计算上是不可行的。
以下是一些关于非对称加密安全性的要点:
- **公钥加密**:公钥加密的数据只能用对应的私钥解密。即使公钥是公开的,攻击者也无法解密公钥加密的信息,除非能够解决上述数学难题。
- **私钥保密**:私钥必须保密,因为它是解密信息的唯一方式。如果私钥泄露,那么所有用对应公钥加密的信息都会被暴露。
- **密钥长度**:非对称加密算法使用的密钥长度通常很长(如2048位或更多),这使得通过暴力破解成为不可能的任务。
- **用途限制**:非对称加密通常不用于直接加密大量数据,因为其速度较慢。它更多地用于密钥交换(如Diffie-Hellman密钥交换)和数字签名,确保信息的完整性和认证。
尽管非对称加密被认为是安全的,但它并不是绝对安全的。以下是潜在的风险和挑战:
- **量子计算**:未来量子计算机的发展可能会破坏现有非对称加密算法的安全性,因为量子计算机能够高效解决大数分解和离散对数问题。
- **算法实现缺陷**:加密算法的实现可能存在漏洞,这些漏洞可能会被攻击者利用。
- **密钥管理**:私钥的安全存储和管理是一个挑战。如果私钥管理不善,可能会被未授权的第三方获取。
- **侧信道攻击**:通过物理手段(如时间分析、功耗分析等)可能会泄露私钥信息。
因此,虽然非对称加密算法在数学上被认为是安全的,但实际应用中仍需注意算法的选择、密钥的管理和系统的整体安全性。
4.数据摘要 && 数据指纹
• 数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
• 摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)
• 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐。
**敏感性**:散列函数对输入数据非常敏感,即使是微小的变化也会导致散列值发生显著变化。
5. 数字签名
摘要经过加密,就得到数字签名(后⾯细说)。
HTTPS 的⼯作过程探究
⽅案 1 - 只使⽤对称加密
⽅案 2 - 只使⽤⾮对称加密
⽅案 3 - 双⽅都使⽤⾮对称加密
⽅案 4 - ⾮对称加密 + 对称加密
服务端具有⾮对称公钥S和私钥S'
• 客⼾端发起https请求,获取服务端公钥S
• 客⼾端在本地⽣成对称密钥C, 通过公钥S加密, 发送给服务器.
• 由于中间的⽹络设备没有私钥, 即使截获了数据, 也⽆法还原出内部的原⽂, 也就⽆法获取到对称密钥(真的吗?)
• 服务器通过私钥S'解密, 还原出客⼾端发送的对称密钥C. 并且使⽤这个对称密钥加密给客⼾端返回的响应数据.
缺陷
确实,在⽅案2/3/4中,客⼾端获取到公钥S之后,对客⼾端形成的对称秘钥X⽤服务端给客⼾端的公钥S进⾏加密,中间⼈即使窃取到了数据,此时中间⼈确实⽆法解出客⼾端形成的密钥X,因为只有服务器有私钥S'
但是中间⼈的攻击,如果在最开始握⼿协商的时候就进⾏了,那就不⼀定了,假设hacker已经成功成为中间⼈
1. 服务器具有⾮对称加密算法的公钥S,私钥S'
2. 中间⼈具有⾮对称加密算法的公钥M,私钥M'
3. 客⼾端向服务器发起请求,服务器明⽂传送公钥S给客⼾端
4. 中间⼈劫持数据报⽂,提取公钥S并保存好,然后将被劫持报⽂中的公钥S替换成为⾃⼰的公钥M,并将伪造报⽂发给客⼾端
5. 客⼾端收到报⽂,提取公钥M(⾃⼰当然不知道公钥被更换过了),⾃⼰形成对称秘钥X,⽤公钥M加密X,形成报⽂发送给服务器
6. 中间⼈劫持后,直接⽤⾃⼰的私钥M'进⾏解密,得到通信秘钥X,再⽤曾经保存的服务端公钥S加密后,将报⽂推送给服务器
7. 服务器拿到报⽂,⽤⾃⼰的私钥S'解密,得到通信秘钥X
8. 双⽅开始采⽤X进⾏对称加密,进⾏通信。但是⼀切都在中间⼈的掌握中,劫持数据,进⾏窃听甚⾄修改,都是可以的
上⾯的攻击⽅案,同样适⽤于⽅案2,⽅案3
问题本质出在哪⾥了呢?客⼾端⽆法确定收到的含有公钥的数据报⽂,就是⽬标服务器发送过来的!
引入证书
CSR文件
CSR文件通常指的是Certificate Signing Request(证书签名请求)文件,它是在公钥基础设施(PKI)中生成和使用的。CSR文件是用于申请数字证书(例如SSL/TLS证书)的一个重要步骤。以下是关于CSR文件的详细介绍:
1. **定义**:
- CSR文件是一个包含公钥和其他身份信息的编码文本文件,它由申请证书的个人或组织创建。
- CSR文件通常是用Base64编码的,并且包含一个摘要算法(如SHA-256)生成的数字签名。
2. **内容**:
- **公钥**:CSR文件中包含的公钥将与相应的私钥一起使用,私钥必须保密地存储在服务器上。
- **主体信息**:这包括申请证书的实体的详细信息,如组织名称、组织单位、通用名称(通常是网站的域名)、城市、州/省、国家/地区代码。
- **签名**:CSR文件包含一个由生成CSR的私钥创建的数字签名,用于验证请求的完整性和真实性。
3. **生成**:
- CSR文件通常使用服务器软件(如Apache、Nginx)或专门的加密工具(如OpenSSL)生成。
- 生成CSR文件时,需要提供上述的主体信息,并且会同时生成一对公私钥。
4. **用途**:
- CSR文件被发送到证书颁发机构(CA),CA会验证CSR中的信息,如果验证通过,CA会使用其私钥对CSR进行签名,生成数字证书。
- 数字证书随后会被安装到服务器上,用于在客户端和服务器之间建立安全的加密连接。
5. **安全性**:
- CSR文件本身不包含私钥,因此可以安全地通过互联网发送给CA。
- 保护私钥是至关重要的,因为任何拥有私钥的人都可以解密通过公钥加密的数据。
在处理CSR文件时,需要谨慎以确保信息安全,并遵循正确的流程来申请和安装数字证书。
CA证书中的数据解析。
CA明文中的公钥:申请者提交(即服务器生成的密钥对中的公钥)服务器自持私钥!
证书的生成过程---借助数据签名
对称加密不支持数字签名
对称加密不支持数字签名的主要原因是数字签名的实现需要满足以下两个关键特性,而对称加密无法满足这些特性:
1. **非对称性**:数字签名通常依赖于非对称加密算法,其中使用一对密钥:公钥和私钥。公钥用于验证签名,而私钥用于创建签名。这种非对称性确保了任何人都可以验证签名,但只有签名者的私钥才能创建有效的签名。
- **原因**:在对称加密中,加密和解密使用的是同一个密钥,这意味着如果一个人能够加密信息,那么任何拥有相同密钥的人也能够解密。这不符合数字签名的要求,因为数字签名需要确保只有签名者才能创建签名,而任何人都能验证签名。
2. **不可伪造性**:数字签名的一个重要特性是它必须是不可伪造的。这意味着即使公开了验证签名的公钥,攻击者也无法伪造一个有效的签名。
- **原因**:在对称加密中,由于加密和解密使用相同的密钥,如果密钥泄露,攻击者不仅能够解密信息,还能够伪造加密信息(即签名)。这破坏了数字签名的不可伪造性。
以下是更详细的原因:
- **密钥共享**:在对称加密中,密钥需要在通信双方之间共享。如果这个密钥被泄露,那么任何知道密钥的人都可以生成有效的“签名”,这使得签名失去了其唯一性和可信性。
- **缺乏身份验证**:对称加密不提供身份验证机制,因此无法证明签名是由特定的人或实体创建的。数字签名则需要这种身份验证来确保签名的可信度。
- **法律和合规性**:在许多法律和合规性框架中,数字签名需要满足特定的安全要求,这些要求通常只能通过非对称加密算法来实现。
因此,为了实现数字签名,通常使用非对称加密算法,如RSA、ECDSA(椭圆曲线数字签名算法)等,这些算法提供了必要的非对称性和安全性来支持数字签名。
⽅案 5 - ⾮对称加密 + 对称加密 + 证书认证
加入证书的安全性体现在
关于证书的准确性
中间⼈有没有可能篡改该证书?
篡改证书需要两方面入手:1.更改签名 2.更改明文。
1.更改签名:由于中间人没有CA私钥,即使是用公钥解密出数据指纹,那么用错误的私钥去再次生产签名后,得到的数据指纹的hash与错误签名被公钥解密的hash2也不一致!
2.更改明文:这个更不现实,我们访问对方的时候,证书往往是企业的相关属性(域名)信息,可以直接辨析,另外,更改明文也会导致得到的数据指纹hash不匹配!
中间⼈整个掉包证书?
常⻅问题
为什么摘要内容在⽹络传输的时候⼀定要加密形成签名?--重点是不可伪造
为什么签名不直接对数据加密,⽽是要先hash形成摘要?
哈希算法可以缩⼩密⽂的⻓度,加快数字签名的验证签名的运算速度。