基本阶段
对称加密
算法f
,加解密key k
加密:f(k,data)=X
解密:f(k,X)=data
过程:
C f(k,data)=X ==X>>S f(k,X)=data
C通过k加密data得到X并传输给S,S通过k解密X得到dataS f(k,data)=X ==X>>C f(k,X)=data
S通过k加密data得到X并传输给C,C通过k解密X得到data
只用对称加密,只用一个公有的key[如果每个C一个,对于S存储压力太大]:
因为hacker也有这个k,所以hacker也能解密C与S之间的加密信息
非对称加密
算法f
,加解密key 公钥pk
私钥sk
,私钥sk只有S有
加密:f(pk,data)=Y
解密:f(sk,Y)=data
加密:f(sk,data)=Y2
解密:f(pk,Y2)=data
过程:
C==>>S S==pk>>C
C向S索要公钥pkC f(pk,data)=Y ==Y>>S f(sk,Y)=data
C通过pk加密data得到Y并传输给S,S通过sk解密Y得到dataS f(sk,data)=Y2 ==Y2>>C f(pk,Y2)=data
S通过sk加密data得到Y2并传输给C,C通过pk解密Y2得到data
C to S时,C用pk加密的Y只有S能解密,因为只有S有sk
但,S to C时,因为hacker也有pk,所以sk加密的Y2,C和hacker都能解密
阶段总结
- 对称加密的缺点:key只有一个,大家都知道,hacker也知道
- 非对称加密的缺点:CtoS安全,但StoC因为hacker也有pk,所以不安全
结合以上优缺点,似乎非对称+对称有戏
非对称+对称
过程:
非对称加密通信确定临时key
C==>>S S==pk>>C
C向S索要公钥pkC f(pk,key)=Y ==Y>>S f(sk,Y)=key
C通过pk加密key得到Y并传输给S,S通过sk解密Y得到key,这个key就是临时key,因为只有S有sk,所以此时,只有C和S知道这个key
临时key作公钥进行对称加密通信
C f(key,data)=X ==X>>S f(key,X)=data
C通过key加密data得到X并传输给S,S通过key解密X得到dataS f(key,data)=X ==X>>C f(key,X)=data
S通过key加密data得到X并传输给C,C通过key解密X得到data
先用非对称加密,在CtoS时,双方确定一个临时的key作为公钥进行后续的对称加密通信,每个C得出的key都是不同的
对于hacker来说,因为没有非对称加密中的sk,他得不到这个临时的key,也就无法解密后续的对称加密通信
中间人攻击
非对称+对称看起来无懈可击,但当hacker直接在第一步CtoS时就介入,将自己伪装成S,他就能获取CtoS的通信,再将自己伪装成C与S沟通,就能获取StoC的通信
过程:
非对称加密通信确定临时key
1.
C==>>S(h) S(h)==pkh>>C
C得到的是hacker的pkh
C(h)==>>S S==pk>>C(h)
hacker得到了S的pk
2.
C f(pkh,key)=Y ==Y>>S(h) f(skh,Y)=key
hacker得到了C发的key
C(h) f(pk,keyh)=Y ==Y>>S f(sk,Y)=keyh
S得到了hacker发的keyh
此时,hacker有C的临时key,S的临时keyh,hacker使用相应的临时key和临时keyh作公钥分别与C和S作对称加密通信,通信内容相同,左右手互换
3.
C f(key,data)=X ==X>>S(h) f(key,X)=data
C通过key加密data得到X并传输给hacker,hacker通过key解密X得到data
C(h) f(keyh,data)=X ==X>>S f(keyh,X)=data
hacker通过keyh加密data得到X并传输给S,S通过keyh解密X得到data
4.
S(h) f(key,data)=X ==X>>C f(key,X)=data
hacker通过key加密data得到X并传输给C,C通过key解密X得到data
S f(keyh,data)=X ==X>>C(h) f(keyh,X)=data
S通过keyh加密data得到X并传输给hacker,hacker通过keyh解密X得到data
至此,hacker做到了同时欺骗C和S,hacker知道C和S之间的所有通信信息
分析
综合以上,非对称+对称的最大问题出在哪?
hacker从第一步C请求公钥的时候就介入了,导致C一直以为和他通信的是S,其实是hacker,也就是说,C不知道拿到手的公钥pk是好是坏
如何解决?
引入CA(证书颁发机构),理解为一个权威可信的机构
只有CA认证的公钥才是可信的公钥
CA
过程:
CA把S的pk作为data,把自己的csk作为key,加密pk得到license
==>>c(csk,pk)=license
CA将license卖给S【对,S要给钱的】,S将license发送给C,C的操作系统内置了大量的CA的cpk,C使用cpk对license进行解密就能拿到真正的pk
==>>c(cpk,license)=pk
- C保证了手上的pk是真实的,就能按部就班与S进行对称加密通信
阶段总结
csk只有CA有,cpk大家都有
hacker要想让C认为手上的pkh是真的,必须c(cpk,licenseh)=pkh
=>c(csk,pkh)=licenseh
,也就是hacker必须有csk才能有对应的可被cpk解密的licenseh
这也并非绝对安全,最直接的,万一hacker通过攻击CA拿到csk怎么办?