说明:
本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
QQ 群 号:513683159 【相互学习】
内容来源:
对称加密与非对称加密、公钥,私钥和数字签名理解、https为什么是安全的协议?相对于http提升了什么?
主要来自该篇:HTTPS理解
完全理解 HTTPS 如何做到传输安全、对称加密与非对称加密、公钥与私钥
有时间再修改
前情场景
随着互联网的发展,信息时代来临,通过互联网,可快速的传递和获取信息。
可这样的信息传递安全么?又该如何保证信息安全?让我们一起理解https是如何保证信息的安全。
为方便描述此处规定:
信息请求方:Client(客户端)
信息响应方:Server(服务器)
信息拦截者:Interceptor(拦截者)
明确问题域:什么是信息安全?
在进行信息交流过程中,保证信息安全可靠,即信息不会泄露和不被篡改,且具有可获得性。
1️⃣保密性:信息原内容不会泄露。
2️⃣完整性:信息原内容不被篡改。
①部分篡改:修改信息部分内容
②全部篡改:替换信息全部内容,也可称作伪装。
3️⃣可获得性:需要时可访问到信息 或 对方可接到信息。
如何保证信息的保密性?
即:如何解决原信息不会泄露?
1.获取不到信息。
2.获取到信息,但看不懂信息内容。
故先考虑信息传递过程中会不会被拦截。很明显,由于现实条件的限制,不能确保信息不被拦截。
问题一:如何让拦截者看不到信息原始内容,但接收者却可以。
解决办法:使用对称加密,对信息进行加密。
什么叫信息加密?
信息加密是指:通过某种规则将原始信息(看得懂的内容)变换为另一种形式(看不懂的内容)。
并且这种变换的过程是可逆的,否则就不能起到解决问题一的方法。
信息加密一般分为两过程:加密过程与解密过程。
某种规则一般称作密钥。
未加密的信息称作明文(可读懂的信息)。
加密过的信息称作密文(读不懂的信息)。什么是对称加密(Symmetric Cryptography)?
加密与解密过程使用同种密钥的加密方法被称作对称加密(或共享加密)
解决过程:
使用对称加密的方法。
在Client处利用密钥将明文加密为密文。
传递过程中,Interceptor拦截了信息,但读不懂密文。
Server接收到后利用密钥将密文解密为明文。
存在问题:
问题在于对称加密的使用前提是:Client与Server必须使用同种密钥:即双方必须事先规定好密钥。
可是根据显示使用场景:
①信息交流的双方可能是初次认识(无法做到事先规定)。
②信息交流对象的数目。(一方可能与N方存在联系)
由于使用场景的限制可知,只能在交流时才可确定密钥(①初次认识)
就算事先认识但无法提前保存所有密钥(②密钥数量庞大)
【也不可只使用同种密钥,否则大家可有,就和不加密没有任何区别】
故必须实现对 对称加密密钥 的传递。
对称加密密钥 的传递与信息传递相同,不可泄露否则密钥泄露后信息也就泄露。
那就继续使用对称加密…,没错,这样的结果就是无限套娃,最外层的密钥总可能泄露。
问题二:如何解决发送对称加密密钥的套娃现象呢?
解决办法:使用非对称加密,对 对称加密密钥进行加密。
什么是非对称加密(Asymmetric Cryptography)?
想一想对称加密是加密解密均使用同一种密钥.那…
是的,就是你想的那样,加密与解密使用的是不同种密钥。
这是什么意思?不同的密钥还能相互解密?
对的,不清楚原理,就把它当成一个黑匣子,知道它的作用就好了。
即只需知:两把钥匙可相互解密,根据是否公开可分为:
①私钥:不可外泄,隐私的。安全性高(不公开)
②公钥:随意分发,公开的。安全性低(公开)非对称加密功能的理解
非对称加密会将公钥发送给接收方,不用担心公钥是否泄露(本身就是公开的),私钥保留在自己身上。
可这有什么又有怎样的效果呢?
①一方可将信息使用 私钥加密,另一方使用 公钥解密。
疑问:公钥安全性不高,这样信息不是会泄露?
是的,确实会泄露,故该信息是泄露也没关系的信息。
疑问:那这样的加密有什么用?与不加密区别不大呀。
有用的,这因为由于私钥是安全的,故可使用公钥与之相匹配,确定就是该公钥对应的私钥,
由此 可确定信息的来源 ,此过程常被称作:签名与验签
(公钥只能解密对应的私钥,若是别人的加密信息是解析不出来的)
②一方可将信息使用 公钥加密 ,另一方使用 私钥解密。
因为私钥是安全的,故只有拥有正确的私钥方才可对该公钥解密。
这就 可保证信息的安全(只有接收方的私钥才可查看信息,其他人看不了)。
解决过程:
1️⃣Server 须将Server公钥 先发送Client。
2️⃣Client利用接收到的Server公钥将对称加密密钥加密后再发送给Server。
3️⃣Server 使用Server私钥 进行解密,从而获取对称加密密钥。
====》此处利用非对称加密,公钥加密私钥解密保证信息安全。
完美解决对称加密的套娃现象,但实际却带来新问题,请观察以下场景:
①Interceptor在环节1️⃣的途中拦截,将Server公钥替换为Interceptor公钥,发送给Client
②Client利用Interceptor公钥对 真对称加密密钥 进行加密。【误以为是Server公钥】
③Interceptor在环节2️⃣的途中拦截,利用Interceptor私钥解密获取 真对称加密密钥,在利用环节①时获得的Server公钥将假对称加密密钥加密后发送给Server。
====》【成功获取 真对称加密密钥,并将假对称加密密钥发送给Server 成功实现信息调包(伪装)】
【下面用图片描述过程更好理解】
【 Client(发送方) = CLIENT,Interceptor(拦截者) = MAN-IN-MIDDLE, Server (接收方) = SERVER】
存在问题:
可知存在Client无法确定 Server公钥是否被调包问题,即:Client需确定公钥一定是来自Server。
问题三:Client如何确定公钥一定是来自Server。
思来想去,似乎很难解决传输过程中公钥被调包问题。【再使用加密手段同样存在套娃问题,这不是没完没了了】
算了,这个公钥咱就不传了!直接Client保存起来,可Server公钥太多了,全部保存有些不现实。
既然全部不可以,那就保存部分呗!那其他的怎么办?通过利用保存的Server公钥来获取!这就请出CA了。
CA是什么?
CA = Certificate Authority = 数字证书认证机构.
负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
CA采用非对称加密,操作系统与浏览器在电脑端会维护一个权威的CA列表(包含CA公钥),因为电脑端收到证书会写有颁发机构,电脑端可根据这个办法机构在本地找到对应的公钥。
CA机构很多怎么办?都要提前保存起来?
其实这边还有一个概念就是证书信任链。
简单说就是:A信任B,B信任C,那么A就信任C,只需在操作系统上保存根证书什么是数字证书(Digital Certificate)?
Server向CA请求,由CA生成发给Server
数字证书如何生成?
CA将Server公钥与相关内容通过CA私钥进行加密所生成的内容。
数字证书的作用:
利用CA公钥获取Server公钥。(保证Server公钥的来源可靠)
解决办法:
CA使用 非对称加密算法+散列算法 形成 数字证书,保证Server公钥的传输。
解决过程:
1️⃣Server将Server公钥传给CA
2️⃣CA使用CA私钥加密 Server公钥+相关内容(Server相关信息,如:证书编号等) 形成数字证书在传给Server
【前面我们知道,非对称加密中 私钥加密公钥解密的作用就是:确认信息来源】
3️⃣Server再将数字证书发送到Client,Client通过CA私钥(电脑端自带)解密即可获取到Server公钥
存在的问题:
在上面的解决过程中,发现必须保证数字证书的真实性,若数字证书是伪造的那解密到的公钥自然也是伪造的。这可能么?
可能,因为CA不只为你制作数字证书,他也可能为Interceptor制作证书。这就给Interceptor制造了机会。
①Client向Server请求Server证书
②Server下发Server证书途中被Interceptor截获,并使用CA公钥解密获取Server公钥及相关内容 替换为Interceptor证书【将相关信息修改Server相关信息】
③Client用CA公钥解密后获得Interceptor公钥【误以为是Server公钥】用来加密明文形成密文发送。
④途中又被Interceptor截获使用Interceptor私钥解密读取明文内容,篡改内容后再用环节②得到的Server公钥加密。
⑤成功篡改内容。【图片描述更清晰,如下:】
那如何防止数字证书是伪造的呢?
数字证书上的相关信息(证书编号等)不可篡改。
什么是散列(Hash)算法?
功能:将任意长度字符串内容转换为固定大小的字符串(称为 摘要[digest])内容,且该 过程不可逆。
散列算法包含:MD5、SHA1等。
作用:验证文本内容是否遭到篡改。
场景描述:
将要消息经过散列算法转换后则可将会得到固定大小字符串的摘要内容
再将"消息+摘要"内容一同发送,收到"消息+摘要"后,将消息在经过散列算法转换得到新摘要内容
匹配两摘要内容是否一致,若不一致则说明内容遭到修改,一致则未遭修改。什么是数字签名(signature)?
由散列算法与非对称加密算法构成,
非对称加密算法准确的说是:非对称加密中的 私钥加密公钥解密的方式来确定信息来源,起到数字签名的作用。
作用:
散列算法得到摘要可验证文本内容是否遭到篡改。
非对称加密算法可确认信息来源。
验证数字证书没被修改且信息来源正确。
数字签名流程图:
解决办法:
Server 发送数字证书+数字签名,防止证书遭到篡改。
解决过程:
1️⃣Server 用 数字证书形成数字签名(对数字证书使用散列算法形成摘要+ 非对称算法中私钥加密公钥 [可由数字证书获得]解密形成,确定信息来源。
2️⃣Server 发送数字证书+数字签名到Client,Client通过数字签名确认数字证书未被篡改,在从数字证书中获得Server公钥
3️⃣成功解决问题三,并没有产生新问题!。
为何还需对称加密?:
会发现为什么前面对称加密似乎没有存在的必要,直接使用非对称加密不就好了,这是效率问题!
对称加密与非对称加密的理解:
信息加密的分类:
1.对称加密:(加密解密使用相同密钥)
工具:
使用同一种“密钥”
描述:
加密解密的过程使用同一种“密钥”或者说“规则”。
优点:简单高效。
缺点:安全性低
场景理解:
A 发送信息"111"给B,
A利用密钥s 将 信息"111" 加密变为:信息"222”,
B接收到信息后,利用密钥s 将信息"222" 还原为信息"111",
至此,B成功接收到A信息。
若密钥s不泄露,则信息不会泄露。
存在的问题:
由于双方使用必须同一密钥,故该方法前提是:双方都需拥有该密钥,又由于交流对象众多,每个密钥都需不同(都相同无异于没有加密),故无法一开始就提前保存好密钥,即:需每次交流都需对密钥进行传输。
但密钥的传输过程中有可能被截获而导致密钥泄漏。(与最初信息传输的过程一样[存在套娃问题])即:直接使用对称加密在使用场景中无法保证密钥安全。
故:对称加密,密钥容易泄漏,故存在信息泄漏问题,同样存在信息篡改问题。(篡改包含:修改(修改部分内容)或伪装(内容全部替换))
(绘图)
2.非对称加密:(加密解密使用不同密钥)
工具:
①私钥:不可外泄,隐私的。安全性高
②公钥:随意分发,公开的。安全性低
特性描述:
公钥与私钥互为解密。(公钥加密,私钥解密 或 私钥加密,公钥解密)
可知,谁作为公钥谁作为私钥是根据该密钥是否公开。
优点:安全性高。
缺点:速度较慢。
场景理解:
场景一:
A 接收来自B的密钥s,
A首先 生成私钥和公钥并将公钥传给B。(私钥留下来)
B接收到公钥 对密钥s进行加密 发送给A
A接收到经过公钥加密过的密钥s,利用私钥解密得到密钥s。
很明显,其他人可能也有公钥,故可能会冒充,
但B的信息是安全的,绝对不会泄露(因为只有私钥才可查看)。
故公钥加密,起到保护信息安全,可保证信息不泄露。
场景二:
A发送信息"111" 给B,
A用私钥对信息"111"加密,变为信息"222”
B可通过公钥解密,将信息"222” 还原为 信息"111"
很明显,其他人可能也有公钥,故用私钥加密的信息无异于公开交流。
但却可证明一定是A发布的信息。(因为只有对应的公钥才可解析A的私钥)
故私钥加密,可确保发送身份,用于数字签名。
总结:公、私钥成对存在,相互解密。
公钥加密,私钥解密:可确保信息安全 ,作为加密,防泄漏使用。
私钥加密,公钥解密。可确保信息来源,作为数字签名与验证。