一、加密通信
1.1 什么是加密通信?
在加密通信中,有三个关键概念:明文、密文和密钥。
-
明文(plaintext):明文是指原始的、未经加密的数据或信息。它可以是一段文本、图像、音频等任何形式的数据。在加密通信过程中,明文是需要进行加密的内容。
-
密文(ciphertext):密文是指通过加密算法处理明文后得到的加密数据。它是经过加密处理后的数据,无法直接被人类直接阅读或理解。只有使用正确的密钥进行解密处理,才能恢复成可理解的明文。
-
密钥(key):密钥是在加密和解密过程中使用的参数,它决定了加密算法的逻辑,使得同一份明文可以根据不同的密钥得到不同的密文。在对明文进行加密时,使用的是加密密钥;在对密文进行解密时,使用的是解密密钥。密钥的安全性对于加密通信的保密性至关重要。
在加密通信过程中,首先将明文和密钥输入加密算法,通过算法的运算得到密文。然后,将密文和相应的解密密钥传输给接收方。接收方使用解密密钥对密文进行解密处理,得到原始的明文。这样,只有掌握正确的密钥才能够从密文中还原出原始的明文,保障了数据的安全传输。
1.2 为什么要加密通信?
加密通信在当今信息社会中至关重要,主要有以下几个原因:
-
保护隐私:加密通信可以保护用户的隐私信息,防止黑客、攻击者或第三方未经授权的人获取到用户的敏感信息,如个人身份信息、银行账户信息、信用卡信息等。
-
防止数据泄露:通过加密通信,可以有效防止数据在传输过程中的泄露和监控。即使数据包被拦截,拦截者也无法直接解读和窃取数据内容,保护数据的机密性。
-
防止数据篡改:加密通信可以确保数据的完整性,防止数据在传输过程中被篡改或修改。接收方可以通过解密来验证数据的完整性,确保数据的可信度。
-
防止中间人攻击:加密通信可以防止中间人对通信过程进行拦截和篡改,保证通信的安全性和可靠性。中间人攻击是一种常见的网络攻击手段,通过加密通信可以有效遏制这类攻击。
-
遵守法规要求:在一些行业和国家,对数据安全和隐私保护有着严格的法规和规定。使用加密通信是符合法规要求的基本措施,可以避免法律风险和法律责任。
综上所述,加密通信可以保护用户隐私、防止数据泄露和篡改、防止中间人攻击以及遵守法规要求,是保障信息安全和网络安全的重要手段。在当今信息化社会中,加密通信已经成为保障个人、组织和国家信息安全的必要措施。
臭名昭著的“运营商劫持”
大庆警方破获全国首起涉及通信运营商DNS劫持案21人“流量劫持”案_澎湃号·政务_澎湃新闻-The Paper
运营商劫持(ISP hijacking)是一种中间人攻击的一种形式,常见于网络服务提供商(ISP)对于用户的网络连接进行干扰、篡改或劫持的行为。这种行为可以使运营商具有干扰和控制用户通信数据的能力。
运营商劫持的常见手段包括:
- DNS劫持:运营商篡改用户的DNS解析请求,将其指向运营商指定的恶意服务器,从而控制用户访问的网站,在用户不知情的情况下窃取用户的个人信息、登录凭证等。
- HTTP重定向:当用户访问某个网址时,运营商将其重定向到其他网页,通常用于投放广告、提示用户付费或其他目的。
- 搜索劫持:运营商修改用户的搜索引擎设定,将搜索结果重定向到广告或运营商指定的搜索结果页面,从中获取经济利益。
- 网页篡改:运营商可能在用户访问的网页中插入广告、更改页面内容或注入恶意代码,影响用户体验和数据安全。
运营商劫持可能是出于商业考虑、政府监管或网络管控的目的。然而,运营商劫持危及用户隐私和数据安全,破坏了网络中立性和用户自主权。
因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击 ,所以我们才需要对信息进行加密。
二、常见的加密方式
对称加密和非对称加密是两种常见的加密算法,它们在信息安全领域起着重要的作用。下面是它们的主要区别和特点:
2.1 对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密
- 特征:加密和解密所用的密钥是相同的
- 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等
- 优点:算法公开、计算量小、加解密速度快、效率高
- 缺点:主要缺点是密钥传输的安全性,如果密钥被第三方恶意获取,数据可能被篡改或泄露。
对称加密其实就是通过同一个"密钥",把明文加密成密文,并且也能把密文解密成明文。
一个简单的对称加密,按位异或:
- 假设明文a=1234,密钥key=8888
- 则加密a^key得到的密文b为9834.
- 然后针对密文9834再次进行运算b^key,得到的就是原来的明文1234.
- 当然,按位异或只是最简单的对称加密.HTTPS中并不是使用按位异或.
2.2 非对称加密
需要两个密钥来进行加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(privatekey,简称私钥)。
- 特征:非对称加密要用到两个密钥,一个叫做"公钥",一个叫做"私钥"。
- 常见非对称加密算法(了解):RSA,DSA,ECDSA
- 优点:非对称加密方式提高了数据传输的安全性,无需通过不安全的信道传递密钥。
- 缺点:缺点是速度较慢,相比对称加密而言,非对称加密加解密过程更耗时。
公钥和私钥是配对使用的:
- 可以用公钥加密,私钥解密。
- 也可以反着来:私钥加密,公钥解密。
非对称加密的数学原理比较复杂,涉及到一些数论相关的知识。这里举一个简单的生活上的例子:
- A要给B一些重要的文件,但是B可能不在。于是A和B提前做出约定:
- B说:我桌子上有个盒子,然后我给你一把锁,你把文件放盒子里用锁锁上,然后我回头拿着钥匙来开锁取文件。
- 在这个场景中,这把锁就相当于公钥,钥匙就是私钥。公钥给谁都行(不怕泄露),但是私钥只有B自己持有。持有私钥的人才能解密。
总的来说,对称加密速度快但需要保护密钥的安全性,非对称加密更安全但速度较慢。通常情况下,对称加密和非对称加密会结合使用,例如使用对称加密加密通信数据,再使用非对称加密来保护对称加密密钥的安全传输。这种结合使用的方式被称为混合加密。通过合理选择加密算法和加密方式,可以提高数据传输的安全性和效率。
三、数据摘要 & 数据签名
数据摘要
数据摘要(又被称为数据指纹),其基本原理是利用单向散列函数(Hash函数)对数据进行运算,生成一串固定长度的数字摘要(散列值)。
- 摘要的特征:数字摘要并不是一种加密机制,数据摘要具有不可逆性,即无法从摘要推导出原始数据。
- 摘要的应用:数据摘要用于验证数据的完整性,确保数据在传输或存储过程中没有被修改。
- 摘要的常见算法:有MD5、SHA1、SHA256、SHA512等。
Hash算法详情见:【哈希结构】哈希表 {哈希函数和哈希冲突;哈希冲突的解决方案:开放定址法,链地址法;Hash算法;红黑树结构 VS 哈希结构}-CSDN博客
数据签名
- 数据签名是在数据摘要的基础上添加了非对称的加密操作,用于验证数据的完整性和真实性。
- 数据签名包含了数据摘要、公钥密码学算法和数字证书等技术。发送者使用私钥对摘要进行加密,形成签名,接收者使用发送者的公钥对签名进行解密和验证。
- 数据签名不仅验证数据的完整性,还验证发送者的身份,确保数据的真实性和不可否认性。
四、HTTPS的加密过程探究
4.1 方案一:使用对称加密
如果通信双方都各自持有同一个密钥X,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)
引入对称加密之后,即使数据被截获,由于黑客不知道密钥是啥,因此就无法进行解密,也就不知道请求的真实内容是啥了.
但事情没这么简单.服务器同一时刻其实是给很多客户端提供服务的.这么多客户端,每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,黑客就也能拿到了)。因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情~
比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定这次的密钥是啥~
但是如果直接把密钥明文传输,那么黑客也就能获得密钥了~~此时后续的加密操作就形同虚设了.
因此密钥的传输也必须加密传输!
但是要想对密钥进行对称加密,就仍然需要先协商确定一个"密钥的密钥".这就成了"先有鸡还是先有蛋"的问题了.此时密钥的传输再用对称加密就行不通了.
4.2 方案二:使用非对称加密
单方面使用非对称加密
鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
但是服务器到浏览器的这条路怎么保障安全?
如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了。
双方都使用非对称加密
- 服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C’
- 客户和服务端交换公钥
- 客户端给服务端发信息:先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
- 服务端给客户端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’
这样貌似也行啊,但是
- 效率太低
- 依旧有安全问题
4.3 方案三:使用混合加密
- 服务端具有非对称公钥S和私钥S’
- 客户端发起https请求,获取服务端公钥S
- 客户端在本地生成对称密钥C,通过公钥S加密,发送给服务器.
- 由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥(有安全问题)
- 服务器通过私钥S’解密,还原出客户端发送的对称密钥C.并且使用这个对称密钥加密给客户端返回的响应数据.
- 后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥即使截获数据也没有意义.
由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.
虽然上面已经比较接近答案了,但是依旧存在安全问题
4.4 MITM中间人攻击
中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种在网络通信中攻击者插入自己作为中间人的手段,以窃取、篡改或干扰通信数据的攻击方式。
中间人攻击的一般流程:
首先攻击者需要通过某种方式称为你网络通信的中间人,然后:
- 服务器具有非对称加密算法的公钥S,私钥S’
- 中间人具有非对称加密算法的公钥M,私钥M’
- 客户端向服务器发起请求,服务器明文传送公钥S给客户端
- 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端
- 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥C,用公钥M加密C,形成报文发送给服务器
- 中间人劫持后,直接用自己的私钥M’进行解密,得到通信密钥C,再用曾经保存的服务端公钥S加密后,将报文推送给服务器
- 服务器拿到报文,用自己的私钥S’解密,得到通信密钥C
- 双方开始用C进行对称加密通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的。
上面的攻击方案,可以攻破加密通信方案2、3
出现这种状况的根本问题在于:客户端无法确定收到的含有公钥的数据报文,就是目标服务器发送过来的!
常见的中间人攻击手段(如何成为中间人):
-
ARP欺骗:攻击者发送伪造的ARP(地址解析协议)响应,将受害者发送的数据流量重定向到攻击者的设备上,从而达到监听和篡改数据的目的。
-
DNS欺骗:攻击者通过篡改DNS解析,将受害者的域名解析到攻击者控制的恶意服务器上,进而截取和篡改通信数据。
-
SSL劫持:攻击者通过欺骗用户,使其安装恶意SSL证书,从而中间截取加密通信中的数据内容,窃取用户隐私信息。
-
无线网络攻击:攻击者在无线网络环境下,通过设置伪造的无线基站或中继设备,拦截用户通信数据,窃取敏感信息。
-
中间人代理:通过在受感染设备上安装代理工具,例如代理服务器、VPN等,攻击者可以中间转发、篡改和截取用户的通信数据。
-
HTTPS劫持:攻击者通过将受害者访问的网站替换为伪造的HTTPS网站,借此窃取用户的个人信息、密码等敏感数据。
为了防止中间人攻击,用户可以采取以下防范措施:
- 使用加密通信方式,如HTTPS、SSL/TLS等,确保通信数据的保密性和完整性。
- 注意网络环境安全,避免连接不安全或未知的Wi-Fi网络。
- 安装反病毒软件和防火墙,定期更新操作系统和安全补丁。
- 在访问网站时检查SSL证书是否有效和正确,避免访问被劫持的网站。
4.5 CA证书
CA证书(Certificate Authority Certificate)是由证书颁发机构(CA)颁发的数字证书。它用于验证和确认网站、服务器或应用程序的身份,并提供安全的通信渠道。
CA证书的主要作用是进行公钥加密与数字签名。它包含了以下信息:
-
明文信息
-
签发机构:该CA证书的颁发机构
-
域名:证书的拥有者或实体(通常是网站、服务器或应用程序)的域名或IP。
-
公钥(核心内容):证书中包含了公钥,用于加密和解密数据的过程。若CA证书通过验证,则可以确保该公钥就是由目标服务器发送过来的,没有经过篡改。
-
有效期:证书具有有效期,指定证书的生效日期和失效日期。
-
-
加密信息
- 数字签名:证书颁发机构使用自己的私钥对证书进行数字签名,以保证证书的完整性和真实性。
通过使用CA证书,其他实体(如浏览器、操作系统等)可以验证证书的合法性和有效性,确保与网站或应用程序之间的通信是安全的。浏览器和操作系统内置了一些受信任的根证书颁发机构的根证书,这些根证书被用来验证其他证书的合法性。
在网站或服务器上安装CA证书后,它们可以使用HTTPS协议,通过使用证书中的公钥对传输的数据进行加密和签名,以确保数据的安全性和完整性。CA证书是构建安全通信基础设施的关键组成部分,广泛应用于互联网、电子商务、电子邮件等领域。
4.5.1 CA认证
从CA认证到服务器客户端HTTPS通信的整个流程包括以下步骤:
- 证书申请:服务器生成公钥与私钥对,公钥用于创建证书,而私钥保留用于对数据进行解密。填写申请信息(包括公钥、域名、申请者等),生成CSR文件。服务器管理员向证书颁发机构(CA)提交CSR文件。
- 审核信息:CA机构对服务器的身份进行验证,通常通过域名验证、组织验证等方式确保服务器的合法性和真实性。
- 证书签发:CA机构使用自己的私钥对服务器的公钥和身份信息进行数字签名,生成数字证书。证书中包含服务器的公钥、有效期、颁发机构信息等。服务器管理员将CA颁发的数字证书安装到服务器上,同时配置服务器以使用SSL/TLS协议。
- 返回证书:客户端通过浏览器等工具向服务器发起HTTPS请求,服务器返回数字证书给客户端。
- 证书验证:客户端验证证书的合法性和有效性。客户端检查证书是否受信任、证书是否在有效期内、证书的颁发机构是否可信等。
- 密钥协商:客户端使用服务器证书中的公钥对数据进行加密,并与服务器协商一种对称密钥加密算法,以后的通信将使用这个对称密钥进行加密。
- 安全通信:客户端和服务器通过对称密钥进行加密通信,保障数据的隐私和完整性。
整个流程保证了HTTPS通信的安全性和可靠性,让服务器和客户端之间的数据传输得以加密和保护。证书的使用使得通信的双方可以相互验证身份,确保数据不会被窃取或篡改。
掌握私钥的一方掌握权力:
- 如果私钥用于解密,那么只有保留私钥的服务器具有将密文转为明文的权利,保证了数据的安全性。
- 如果私钥用于加密,那么只有保留私钥的服务器具有为数据签名的权力,保证了数据的完整性。
4.5.2 验证证书
证书签名
当服务端申请CA证书的时候,CA机构会对该服务端进行审核,并专门为该网站形成数字签名,过程如下:
- CA机构拥有非对称加密的公钥A和私钥A’
- CA机构对服务端申请的证书明文数据进行hash,形成数据摘要
- 然后对数据摘要用CA私钥A’加密,得到数字签名S
- 服务端申请的证书明文和数字签名S共同组成了数字证书,这样一份数字证书就可以颁发给服务端了
验证证书
-
检查证书链
- 客户端首先会构建一条从服务器证书到达可信根CA的证书链。每个证书都由它的上级CA签名。
- 验证过程包括确保服务器证书由中间CA签名,中间CA再由根CA签名,且根CA是预安装在操作系统或浏览器中的信任锚点。
-
验证签名
- 客户端会使用CA机构根证书的公钥对服务器证书的签名进行解密,得到信息摘要。
- 同时,客户端会读取证书中的相关明文信息,并使用相同的散列函数计算得到信息摘要。
- 对比两个摘要是否一致,如果一致,则可以确认证书的合法性,即服务器的公钥合法。
-
验证证书信息
- 核实证书中的“发行者”字段,确保它与颁发该证书的CA的名称相匹配。
- 对于服务器证书,检查“主体”字段,确保它与尝试通信的服务器的域名或IP地址一致。
- 确认证书的有效期没有过期,这可以通过查看证书上的“有效期开始”和“有效期结束”字段来完成。
为什么要将证书摘要加密形成签名?
- 防止中间人伪造证书,同时伪造签名。
为什么不直接加密证书明文,而要先hash形成摘要?
- 体积小:数据摘要(Hash)是把任意长度的输入通过散列算法变换成固定长度的输出,这种转换是一种压缩映射,也就是,摘要的空间通常远小于输入。
- 速度快:摘要体积小带来的直接好处就是加密解密速度快,因此可以加快数据签名的验证(解密)速度。
中间人有没有可能篡改该证书?
- 如果中间人篡改了证书的明文,但由于他没有CA机构的私钥,所以无法将明文摘要加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
- 如果强行篡改,客户端收到该证书后会发现明文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终⽌向服务器传输信息,防⽌信息泄露给中间人
中间人整个掉包证书?
- 因为中间人没有CA私钥,所以无法制作假的证书。所以中间人只能向CA申请真证书,然后用自己申请的证书进行掉包
- 这个确实能做到证书的整体掉包,但是别忘记,证书明文中包含了域名等服务端认证信息,如果整体掉包,客户端依旧能够识别出来。
永远记住:中间人没有CA私钥,所以对任何证书都无法进行合法修改,包括自己的
4.5.3 查看浏览器中的根证书
在浏览器设置里自己找找,或直接搜索”管理证书“
五、HTTPS 协议
- 定义:HTTPS(HyperText Transfer Protocol Secure)即安全超文本传输协议,是一种安全的网络通信协议,它通过在 HTTP 的基础上增加 SSL/TLS 层来实现数据加密和身份验证,确保数据传输过程中的安全性和完整性。
- 应用:HTTPS 广泛应用于需要保护用户数据安全和隐私的场景,如电子商务、网上银行、电子邮件等。
5.1 HTTPS 协议的工作原理
HTTPS 协议的工作原理主要包括以下几个步骤:
- 客户端发起请求:用户通过浏览器输入 HTTPS 网址并回车,浏览器会向服务器发起 HTTPS 请求。
- SSL/TLS 握手:
- 服务器向客户端发送 SSL/TLS 证书,证书中包含服务器的公钥、证书颁发机构的信息等。
- 客户端验证证书的有效性,包括证书是否由可信的证书颁发机构签发、证书是否过期、证书中的域名是否与请求的域名一致等。
- 如果证书验证通过,客户端会生成一个随机数作为对称加密的密钥,并使用服务器的公钥对密钥进行加密后发送给服务器。
- 服务器使用自己的私钥解密出密钥,至此,双方都有了相同的密钥,可以使用对称加密进行通信。
- 数据传输:双方使用协商好的对称加密密钥对数据进行加密和解密,确保数据传输过程中的安全性和完整性。
5.2 HTTPS 协议的安全性
HTTPS 协议通过以下方式保障通信的安全性:
- 数据加密:使用对称加密和非对称加密相结合的方式,确保数据的机密性。
- 身份验证:通过数字证书验证服务器的身份,确保客户端连接到的是真实可信的服务器。
- 完整性校验:通过数字签名等技术,确保数据的完整性和真实性,防止数据在传输过程中被篡改。
5.3 HTTPS 协议的优势
- 安全性高:相比 HTTP,HTTPS 能有效防止数据在传输过程中被窃取、篡改和伪造。
- 信任度高:由于 HTTPS 使用了数字证书进行身份验证,用户可以更加信任使用 HTTPS 的网站。
- 符合标准:随着网络安全意识的提高,越来越多的网站和应用开始采用 HTTPS 协议,成为互联网通信的标准之一。