文章目录
- 1.引入
- 1.1http与https
- 1.2SSL/TLS
- 1.3VPN
- 1.4认识
- 1.5密码学
- 1.6为什么要加密?
- 运营商
- 1.7常见的加密方式
- 对称加密
- 非对称加密
- 2.加密与解密
- 3.数据摘要 && 数据指纹
- MD5
- 数字 签名
- 理解三者
- 数据摘要(Digital Digest):
- 数字指纹(Digital Fingerprinting):
- 数字签名(Digital Signature):
- 理解
- 理解链
- 4. HTTPS 的工作过程探究【逐步改进,修补漏洞】
- 方案 1-只使用对称加密
- 方案 2-只使用非对称加密
- 方案 3-双方都使用非对称加密
- 方案4-非对称加密+对称加密
1.引入
1.1http与https
HTTP(Hypertext Transfer Protocol)和HTTPS(HTTP Secure)都是用于在Web应用程序中传输数据的协议,但它们之间存在明显的区别与联系。
首先,我们来讨论它们的区别:
安全性:HTTP使用的是明文传输,这意味着在传输过程中数据可能被截获或被篡改。而HTTPS则通过SSL/TLS协议进行加密传输,这种加密方式可以保护数据在传输过程中的安全,防止数据被窃取或篡改。因此,HTTPS的安全性更高。
证书管理:HTTPS需要使用CA(证书颁发机构)颁发的证书来进行加密和解密操作,而HTTP则不需要证书。因此,在使用HTTPS时,需要配置证书,而HTTP则不需要。
端口号:HTTP默认使用80端口进行通信,而HTTPS默认使用443端口进行通信。
资源消耗:由于HTTPS使用了加密和解密操作,因此在数据传输过程中需要消耗更多的计算资源。
然后,我们来讨论它们的联系:
通信过程:HTTP和HTTPS的通信过程都是客户端向服务器发送请求,服务器返回响应的过程。
应用场景:HTTP和HTTPS都可以用于在Web应用程序中传输数据。然而,由于HTTPS具有更高的安全性,它更适合传输敏感数据,如密码、支付信息等。
基础与升级:HTTPS是在HTTP的基础上增加了SSL/TLS加密协议来保障数据传输的安全性,因此HTTPS可以看作是对HTTP的升级完善。在使用时,两者的数据传输格式和请求方式都是一样的。
综上所述,HTTP和HTTPS在安全性、传输速度和端口号等方面存在较大差异,但在通信过程和应用场景上又存在紧密的联系。在传输敏感数据时,应优先选择HTTPS以确保数据的安全性。
1.2SSL/TLS
SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Security,传输层安全性协议)是用于加密和验证应用程序(如浏览器)和Web服务器之间发送的数据的协议。它们都位于可靠的面向连接的网络层协议和应用层协议之间,用于在两个通信应用程序之间提供保密性和数据完整性。
SSL/TLS协议的工作原理主要依赖于两个重要协议:握手协议和记录协议。握手协议负责协商加密算法、哈希算法、加密密钥,同时帮助服务器和客户端相互验证。记录协议则用于封装各种高层协议,包括使用协商好的加密算法和密钥对应用层数据进行加密和解密。
SSL/TLS协议的主要应用场景包括:
网页浏览:当访问一个网站时,如果网址以“https://”开头,就表示该网站使用了SSL/TLS协议,以确保用户与网站之间的通信安全,防止数据在传输过程中被窃取或篡改。
电子邮件:许多电子邮件服务,如Gmail和Outlook,使用SSL/TLS来加密邮件的传输,以保护用户的敏感信息,如登录凭证、联系人和邮件内容不被未经授权的第三方获取。
在线支付:在线支付系统,如PayPal和Stripe,使用SSL/TLS来保护用户的信用卡信息和其他敏感财务数据,以防止数据在传输过程中被截取或篡改,从而保护用户的财务安全。
VPN连接:虚拟专用网络(VPN)通常使用SSL/TLS来加密客户端与服务器之间的通信,以保护用户的隐私并防止互联网服务提供商或其他第三方监听用户的网络流量。
需要注意的是,虽然SSL和TLS在功能上非常相似,但TLS是SSL的继任者,提供了更高级别的安全性和更好的性能。因此,在现代应用中,TLS更受欢迎并得到了更广泛的应用。
1.3VPN
VPN(Virtual Private Network,虚拟私人网络)是一种可以在公共网络上建立加密通道的技术,通过这种技术可以使远程用户访问公司内部网络资源时,实现安全的连接和数据传输。VPN通常用于连接远程用户、分支机构、业务伙伴或移动用户与公司内部网络资源,如文件服务器、数据库、内部网站等。
VPN的工作原理如下:
隧道技术:VPN使用隧道技术来在公共网络上创建一个加密的通信通道,即VPN隧道。这个隧道能够确保数据的保密性和完整性,因为它将数据在发送前进行加密,并在接收端解密。
加密技术:VPN使用各种加密算法(如AES、DES等)来加密传输的数据,确保数据在公共网络上传输时不会被未经授权的第三方截获和读取。
身份验证:在建立VPN连接之前,通常需要身份验证来确保只有经过授权的用户或设备才能访问内部网络资源。这可以通过用户名和密码、证书、预共享密钥等方式实现。
协议支持:VPN可以支持多种协议,如PPTP(Point-to-Point Tunneling Protocol,点对点隧道协议)、L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)、IPsec(Internet Protocol Security,互联网协议安全性)和SSL/TLS VPN等。不同的协议适用于不同的应用场景和安全性要求。
访问控制:VPN可以配置访问控制策略,以限制用户对内部网络资源的访问权限。这有助于防止未经授权的访问和数据泄露。
VPN的应用场景包括:
远程办公:员工可以在家或其他远程位置使用VPN安全地访问公司的内部网络资源,如电子邮件、文件服务器和内部网站。
分支机构连接:不同地理位置的分支机构可以通过VPN连接在一起,共享资源和数据,同时保持通信的安全性。
安全访问公共Wi-Fi:在公共Wi-Fi网络上使用VPN可以防止黑客或恶意用户截获用户的敏感信息。
数据备份和恢复:通过VPN,远程用户可以安全地将数据备份到公司的数据中心,或在需要时从数据中心恢复数据。
需要注意的是,虽然VPN提供了很多安全性优势,但它并不是万能的。在使用VPN时,仍然需要遵循最佳的安全实践,如使用强密码、定期更新软件和操作系统、避免在VPN连接上传输敏感数据等。
1.4认识
有为了数据安全的“白”就有为了破解数据的“黑”。
攻击的成本和数据的价值大小是一个hacker考虑是否攻击的衡量。
SSL/TLS这种权威的官方的加密解密方案,树大招风,总有人破解,所以SSL/TLS是在不断改进的。
公司当然可以自己搞一套加密协议 只不过需要自己维护
1.5密码学
冯诺依曼
1.6为什么要加密?
运营商
运营商劫持
DNS劫持
由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容,并进行篡改.欢点击"下载按钮”,其实就是在给服务器发送了一个 HTTP 请求,获取到的 HTTP 响应其实就包含了该APP 的下载链接,运营商劫持之后,就发现这个请求是要下载天天动听,那么就自动的把交给用户的响应给篡改成“QQ浏览器"的下载地址了。所以:因为http的内容是明文传输的,明文数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是 中间人攻击,所以我们才需要对信息进行加密。
思考下,为啥运营商要进行劫持?
运营商进行劫持的原因主要有以下几个方面:
经济利益:这是运营商进行劫持的主要驱动力。通过劫持用户的网络流量,运营商可以强制用户访问其指定的网站或服务,从而在这些网站上展示广告或推销产品,以此获取额外的收入。特别是HTTP劫持,运营商会在用户与其目的网络服务所建立的专用数据通道中,监视特定数据信息,当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。
流量控制:对于小运营商来说,他们有省内流量考核,跨省访问会增加成本输出。因此,为了减少省骨干网络链路的负载压力,尽可能的减少中继链路、远距离骨干链路以及负载能力弱的链路上的流量,运营商可能会选择劫持出省流量。
技术和设备限制:运营商或小区宽带会使用分光器设备,通过映射用户请求流量并获取用户请求响应,运营商可以抢先建立HTTP连接,优先传给用户数据,这样真正提供资源的服务器返回来的数据就自然的被丢弃掉了。
然而,需要强调的是,运营商劫持用户的网络流量是一种不道德且违法的行为,它侵犯了用户的知情权和选择权,也损害了用户的网络安全和隐私。因此,用户应该保持警惕,并采取措施保护自己的网络安全。
不止运营商可以劫持
其他的 黑客 也可以用类似的手段进行劫持,来窃取用户隐私信息,或者篡改内容试想一下,如果黑客在用户登陆支付宝的时候获取到用户账户余额,甚至获取到用户的支付密码,后果不言而喻。在互联网上,明文传输是比较危险的事情!!!HTTPS 就是在 HTTP 的基础上进行了加密,进一步的来保证用户的信息安全。
日常生活
- 学校是一个局域网 有路由器 学校的设备会获取到你发起或接收的数据。
- 商场里免费wifi 一旦连上 别人可以通过此网络监听你的数据
- 电脑连接手机的热点 手机实际上就获取到了电脑的数据
1.7常见的加密方式
对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征: 加密和解密所用的密钥是相同的。
常见对称加密算法(了解): DES、3DES、AES、TDEA、Blowfish、RC2等
特点: 算法公开、计算量小、加密速度快、加密效率高
对称加密其实就是通过同一个"密钥",把明文加密成密文,并且也能把密文解密成明文
对称加密举例
一个简单的对称加密,按位异或
假设 明文a=1234,密钥 key=8888
则加密a^key 得到的密文b为9834.
然后针对密文 9834 再次进行运算 b^key,得到的就是原来的明文 1234.
(对于字符串的对称加密也是同理,每一个字符都可以表示成一个数字)当然,按位异或只是最简单的对称加密.HTTPS 中并不是使用按位异或.
非对称加密
需要两个密钥来进行加密和解密,这两个密钥是公开密钥(publickey,简称公钥)和私有密钥(private key,简称私钥)。
常见非对称加密算法(了解): RSA,DSA,ECDSA
特点: 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
非对称加密要用到两个密钥,一个叫做"公钥",一个叫做"私钥",
A方案去加密 B方案去解密。若用B来加密,则用A来解密。
用公钥加密,掌握私钥的人很少。相对安全。
2.加密与解密
加密就是把 明文 (要传输的信息)进行一系列变换,生成 密文。
解密就是把 密文 再进行一系列变换,还原成 明文。
在这个加密和解密的过程中,往往需要一个或者多个中间的数据,,辅助进行这个过程,这样的数据称为 密钥。
举例子
有人要谋反干掉慈禧太后,恭亲王奕诉给慈禧递的折子,折子内容只是扯一扯家常,套上一张挖了洞的纸就能看到真实要表达的意思.明文:“当心肃顺,端华,戴恒”(这几个人都是当时的权臣,后来被慈禧一锅端).
密文:奏折全文
密钥: 挖了洞的纸.
明文:套上挖了洞的纸看到的信息
再举例子
A要发送10,与B约定数据异或5,即发送10^5,B收到数据,再异或5,获取10.
10:明文
5:密钥
10^5:密文
3.数据摘要 && 数据指纹
- 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被窜改。
- 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
- 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比
MD5
MD5(Message-Digest Algorithm 5)是一种广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性。
MD5算法的原理可简要的叙述为:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,这四个32位分组级联后将生成一个128位散列值。
MD5算法在计算机领域中有广泛的应用,如密码存储、文件完整性检查等。然而,MD5算法也存在一些缺点。首先,MD5算法存在碰撞风险,即不同的输入数据可能会生成相同的摘要。虽然这种概率极低,但在某些特定条件下,仍然可能导致安全隐患。其次,随着计算机技术的发展,MD5算法的抗攻击性逐渐减弱。一些研究者发现了针对MD5算法的攻击方法,使得在某些情况下,攻击者可以伪造或篡改数据。因此,在一些安全性要求较高的场合中,MD5算法已经不再被推荐使用。
总的来说,MD5算法是一种重要的密码散列函数,它在保障信息安全方面发挥了重要作用。然而,由于存在碰撞风险和抗攻击性较弱等缺点,MD5算法在某些场合下已经不再适用,需要寻找更安全的替代方案。
数字 签名
摘要经过加密,就得到数字签名
理解三者
数据摘要(Digital Digest):
数据摘要也称为数字指纹或数字手印,它是一种将任意长度的数据转换成固定长度的短消息的方法。这通常通过哈希函数(Hash Function)来实现,哈希函数是一种可以将任意长度的二进制值映射为较短的固定长度的二进制值的函数。数据摘要具有固定的长度,并且对于不同的输入数据,其摘要结果总是不同的;而对于相同的输入数据,其摘要必定一致。数据摘要主要用于确保数据的完整性和真实性,通过比较原始数据的摘要和接收到的数据的摘要,可以判断数据在传输过程中是否被篡改。
数据摘要是将任意长度的消息变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。它通过对原始数据进行哈希计算生成一段固定长度的摘要值,不同的数据生成不同的摘要值。数字摘要具有不可逆性,即无法从摘要值推导出原始数据。一个标点符号不同 生成的字符串千差万别 。数据摘要通常用于验证数据在传输过程中是否被篡改,以及验证数据在存储过程中是否完整。是否被篡改:两次对同一数据生成的字符串是否相同。
数字指纹(Digital Fingerprinting):
数字指纹主要用于版权保护,其原理是将不同的标志性识别代码——指纹,利用数字水印技术嵌入到数字媒体中,然后将嵌入了指纹的数字媒体分发给用户。发行商发现盗版行为后,就能通过提取盗版产品中的指纹,确定非法复制的来源,对盗版者进行起诉,从而起到版权保护的作用。
数字指纹通常与版权保护和用户跟踪相关。在数字内容分发中,发行商可能会向每个拷贝中嵌入特定的信息(即数字指纹),以便在发现非法分发行为时能够跟踪到具体的用户。数字指纹体制主要由两部分构成:一部分是用于向拷贝中嵌入指纹并对带指纹拷贝进行分发的拷贝分发体制;另一部分是实现对非法分发者进行跟踪并审判的跟踪体制。这种体制通常通过发行商、用户以及可能的登记中心、审判者等实体之间的一系列协议来实现。
数字签名(Digital Signature):
数字签名是一种用于验证数据完整性和来源真实性的技术。它使用公钥加密技术,允许信息的发送者创建一个独特的、无法伪造的签名,接收者可以使用相应的公钥来验证签名的真实性和完整性。数字签名通常包括两种互补的运算:签名运算和验证运算。签名运算用于生成签名,而验证运算则用于检查签名是否有效。数字签名的主要优点是它提供了数据完整性和来源真实性的保证,并且具有不可抵赖性(即签名者无法否认其签名)。
理解
- 在一个网站上 用户名+密码 可以唯一标识一个人 但是通过之前讲的cookie我们知道 服务端不会把浏览器发来的账号密码直接返回而是返回一个sessionID 这个ID就可以理解为数据摘要,在该网站内具有唯一性。可以理解为sessionID就是根据某算法生成的字符串。
- 百度网盘:A想要上传一个电影,网盘收到该请求并不是直接开始上传,而是根据该电影的二进制计算出数据摘要md,如果该md在网盘的md库里存在,则网盘提示【您是vip用户,可以秒传】,当然我们知道这只是个幌子,实际上网盘只是在其中建立了一个软连接,软连接中存储已经存在的相同的电影资源的路径。如果在md库中没有找到,则开始上传,并在md库中添加md数据摘要。【md用来代表由md5算法生成的字符串】
理解链
对http进行对称加密,是否能解决数据通信安全的问题?问题是什么?
为何要用非对称加密?为何不全用非对称加密?
4. HTTPS 的工作过程探究【逐步改进,修补漏洞】
既然要保证数据安全,就需要进行"加密"
网络传输中不再直接传输明文了,而是加密之后的"密文"
加密的方式有很多,但是整体可以分成两大类:对称加密 和 非对称加密
方案 1-只使用对称加密
如果通信双方都各自持有同一个密钥X,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)
- 假设密钥一开始是服务端设计的,那么他就要发送给客户端,这个首次发送的过程可能被盗取!有人说对密钥加密之后再发送,请问加的这个密是不是也需要先发送----蛋生鸡鸡生蛋
- 服务端想改变密钥很困难,客户端数量多,种类多
方案 2-只使用非对称加密
- 浏览器首次请求,服务端返回公钥,假设黑客拿到了公钥,浏览器给服务端发送的信息是公钥加密后的,黑客即使有公钥但是没有私钥,无法解密数据。服务端拿到数据后用私钥解密可以获取数据,即客户端到服务端安全。但是,服务端用私钥加密的数据发送给客户端,黑客有公钥,可以解密数据,服务端到客户端是不安全的!
- 鉴于非对称加密的机制,如果服务器先把公钥以明文方式传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。
- 但是服务器到浏览器的这条路怎么保障安全?如果服务器用它的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,若这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息。
方案 3-双方都使用非对称加密
- 服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C
- 客户和服务端交换公钥
- 客户端给服务端发信息: 先用S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S‘
- 服务端给客户端发信息:先用C对数据加密,在发送,只能由客户端解密,因为只有客户端有私钥C’
问题
效率太低
依旧有安全问题【下文讲解 】
方案4-非对称加密+对称加密
- 先解决效率问题
服务端具有非对称公钥S和私钥S’
客户端发起https请求,获取服务端公钥S
客户端在本地生成对称密钥C,
客户端把对称密钥C和公钥S加密,发送给服务器
由于中间的网络设备没有私钥S’, 即使截获了数据,也无法还原出内部的原文,也就无法获取到对称密钥C(真的吗?)
服务器通过私钥S"解密,还原出客户端发送的对称密钥C,并且使用这个对称密钥加密给客户端返回的响应数据.
后续客户端和服务器的通信都只用对称加密即可.由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥。即使截获数据也没有意义
==》利用非对称加密安全的交换对称加密的密钥
由于对称加密的效率比非对称加密高很多,因此只是在开始阶段协商密钥的时候使用非对称加密,后续的传输仍然使用对称加密.
虽然上面已经比较接近答案了,但是依旧有安全问题
方案 2,方案 3,方案 4都存在一个问题,如果最开始,中间人就已经开始攻击了呢?
Man-in-the-MiddleAttack,简称“MITM攻击
在方案2/3/4中,客户端获取到公钥S之后,把对称秘钥X用S进行加密,中间人即使窃取到了数据,此时中间人无法解出客户端形成的密钥X,因为只有服务器有私钥S”。但是中间人的攻击,如果在最开始握手协商的时候就进行了,那就不一定了,假设hacker已经成功成为中间人
- 服务器具有非对称加密算法的公钥S,私钥S’
- 中间人具有非对称加密算法的公钥M,私钥M’
- 客户端向服务器发起请求,服务器明文传送公钥S给客户端。
- 中间人劫持数据报文,提取公钥S并保存好,然后将被劫持报文中的公钥S替换成为自己的公钥M,并将伪造报文发给客户端
- 客户端收到报文,提取公钥M(自己当然不知道公钥被更换过了),自己形成对称秘钥X,用公钥M加密X,形成报文发送给服务器
- 中间人劫持后,直接用自己的私钥M’进行解密,得到通信秘钥X,再用曾经保存的服务端公钥S加密后,将报文推送给服务器
- 服务器拿到报文,用自己的私钥S’解密,得到通信秘钥X
- 双方开始采用X进行对称加密,进行通信。但是一切都在中间人的掌握中,劫持数据,进行窃听甚至修改,都是可以的
上面的攻击方案,同样适用于方案2,方案3
问题本质出在哪里了呢?
客户端无法确定收到的含有公钥的数据报文,就是目标服务器发送过来的!