SSL引入原因及加密步骤
1.SSL简介:
SSL是为了保证网络通信的安全性,对网络上传递的数据进行加密的一种方式。现在主流的加密方法是SSL 和TLS 。一般用SSL指代SSL和TLS,也可能会说SST/TLS。
SSL功能实现主要依赖于散列函数Hash、对称加密和非对称加密。它使用非对称加密实现身份认证和密钥协商,使用对称加密算法利用上一步协商的密钥对数据加密,并基于散列函数验证信息的完整性。
2.SSL引入原因
2.1 对称加密的局限性:
最初传送信息在古代是不加密的,因此很可能产生信息拦截之类的事情(如擒获信使)。于是在古代最早的对称加密就产生了。最广为人知的对称加密是凯撒加密,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。后来又演变出了仿射密码等复杂一点的加密方式。不过考虑到在统计学中不同英文字母出现频率不同。当文章越长每个字母出现频率越贴近统计结果。一般e是最多的,因此锁定最多的字母和e就有机率猜测密码。因此凯撒加密很容易破解。仿射同理,只需要锁定两个明文字母和密文字母的映射关系即可。
到了计算机时代,为了解决上述古老的加密容易破解的情况,衍生出更复杂的对称加密。常见的计算机时代的对称加密有DES,AES等。DES采用56bit数据做密钥,在刚出现时几乎没有计算机算力可以破译。但是随着计算机算力提高,56bit也很容易被穷举了。因此衍生了256bit的AES。再往后衍生了更安全的国密算法SM1,SM7等。由此可见最新型对称加密基本可以满足一段时间的安全性,随着算力提高也会产生更可信的对称加密。
在网络时代对称加密最大的问题并不是密钥容易被破译,而是密钥容易被拦截。以前需要进行加密的场合少,可以去和目标进行协商密钥后再通信。而现在网络过于发达,我们不可能和每个通信目标进行沟通协商密钥,只能在网上发送对称密钥,然后就有极大的被拦截风险,由此非对称加密油然而生。
2.2 非对称加密及局限性:
非对称加密使用两个密钥,一个是公钥(public key),一个是私钥(private key)。通特定的数学算法,使得数据的加密和解密使用不同的密钥,因此称为非对称加密。最经典的非对称加密是RSA算法。非对称加密算法里面的公钥和私钥在数学上是相关的,因此使用其中一个加密时才可以用另一个解密。但是以现有的数学算法,无法从一个密钥算出另一个密钥,即便知道这种相关性。
在使用中,A和B各生成一个公钥和私钥。私钥只保留在本地而公钥可以被公开。A使用B的公钥加密数据。加密之后,A将加密的数据发送给B。B收到了之后,先用自己的私钥解密数据,反过来亦可。这样A和B只需公开公钥即可进行加密通信,且其它人无法使用公钥解密。
考虑到虽然其它人拿到公钥也破译不了,但是他们可以篡改数据,因此非对称加密一般也使用hash加密数据,并将加密结果传递给目标,目标需要验证数据的hash来校验数据完整性。比如A先使用自己的私钥加密数据的hash值,之后再用B的公钥加密数据。之后,A将加密的hash值和加密的数据再加一些其他的信息,发送给B。B收到后用自己的私钥解密数据,本地运算一个hash值,再用A的公钥解密hash值,对比两个hash值,以检验数据的完整性。
上述方式已经相对安全,但是还有安全隐患。中间人攻击可以破译非对称加密。想象一下这种情况,C先生成自己的公钥和私钥并拦截了A和B的公钥,又用自己的公钥发给A和B。A和B此时以为这个公钥来自对方。当A给B发消息时,A先用自己的私钥加密数据的hash值,之后用C传来的假的公钥加密数据,再发出去。C拦截到之后,先用C自己的私钥解密数据(因为约定生成的公钥和私钥的算法是透明的,因此C也可以用自己的私钥解密由C公钥加密的数据),C就获取了A的明文。之后,C可以篡改数据内容,再用自己的私钥加密数据的hash值,用之前拦截的B的公钥加密数据后发给B。B收到以后,先用自己的私钥解密数据,再用C传来的假公钥解密hash值,发现匹配。这样,A和B都以为自己成功发送/接收了信息,却不知道信息已经被C控制了。此时就需要解决办法。
2.3 CA证书:
CA全称Certificate Authority,即证书颁发机构。现在一般都采用这种方式保证公钥的真实性。CA也是基于非对称加密算法来工作。B会先把自己的公钥(和一些其他信息)交给CA。CA用自己的私钥加密这些数据,加密完的数据称为B的数字证书。B要向A传递CA加密之后的数字证书。A收到以后,会通过CA发布的CA证书(包含CA的公钥),来解密B的数字证书,从而获得B的公钥。
此时可能会有疑问,C可以把一个假的CA证书发给A,然后继续类似中间人攻击的步骤。但是一般CA会把自己的CA证书集成在了浏览器和操作系统里面。A拿到浏览器或者操作系统的时候,已经有了CA证书,没有必要通过网络获取,因此无法被拦截。
需要明白的是CA证书的安全性在于CA机构。CA机构就像是权威的官方,因此它的可信程度主要在于官方的可信程度。就像防伪标记,正版的防伪标记可以说明东西是真的,但是假定这个权威机构和盗版厂商进行某些交易,为盗版厂商的产品印正版防伪标记,那么此时就没办法了。因此在选择的CA机构没有信誉时这种方式就没有了意义。不过一般情况下不用考虑这种情况。
此外,如果使用了盗版的系统,或非官方浏览器,或者被病毒攻击了,此时有可能会认可非CA认证的数字证书,C就有机会发起中间人攻击。所以在确保CA机构不会暗箱操作的情况尽量使用正版来保证不被篡改。
2.4 引入ssl:
通过上述内容可以发现一个安全的加密通道需要进行以下操作:
1.通过CA交换公钥。
2.通过非对称加密算法交换对称加密的密钥。
3.通过对称加密算法,加密通信数据。
一般的加密都是基于上面架构进行优化来规避一些泛型的或特定场合的潜在危险情况。非对称加密中的hash处理就属于一种优化方式,只不过这种方式基本都在用。
有些人可能会有疑问,问什么一定要用非对称加密传递对称加密的密钥,直接使用非对称加密来通信就好了?这是因为绝大多数情况下非对称加密都比对称加密慢很多,从上面步骤就能看出来。因此为加快上网速度还是要传递对称加密的密钥。
SSL就是基于上述流程的一种加密方式。
3.SSL步骤:
3.1 获取证书:
CA虽然能确保数字证书的真实性。但是在实际使用中,CA认证基本要收费的,而我们不可能为了能使用网上银行或者某宝等网上交易软件就额外掏钱买证书。此时可能会发现难以保证网络通讯安全,不过这是有解决办法的。
一般银行等一些大的机构去获得自己的数字证书并将其加到自己的web服务器上。当用户要去访问它们的网页,会经过下面步骤:
1.用户向web服务器发起请求。
2.服务器返回CA数字证书,证书里面包含了服务器的公钥。
3.用户拿到数字证书并通过自己浏览器内置的CA证书解密得到服务器的公钥。如果证书被篡改,那么自己浏览器的证书会报错。
4.用户用服务器的公钥加密一个用于接下来的对称加密算法的密钥,传给web服务器。只有服务器的私钥可以解密因此不怕被拦截。
5.服务器拿到这个加密的密钥,解密获取密钥,然后就可以利用密钥和用户完成接下来的网络通信。
因此就不使用证书完成了这些步骤。我们会发现此时一直都是用户在认证服务器,而服务器没有认证用户,而用户没有CA证书,因此产生疑问,服务器怎么认证用户?其实方式很简单,用户名和密码就可以验证用户的信息。
3.2 SSL握手:
SSL握手协议很复杂,下面简单总结一下步骤,A代表客户,B代表服务端:
1.A给出支持SSL协议版本号,一个客户端随机数r1,客户端支持的加密方法等信息。
2.B收到信息后确认加密方法,并返回服务器数字证书和一个服务器生成的随机数r2等信息;
3.A确认数字证书的有效性,然后生成一个新的随机数r3,然后使用数字证书中的公钥加密这个随机数发给B。
4.B使用自己的私钥,获取爱丽丝发来的随机数r3。
5.A和B通过约定的加密方法(AES,SM1,SM7等),使用r1,r2,r3这三个随机数生成对话密钥,用来加密接下来的通信内容。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!