对称加密与非对称加密
对称加密 与 非对称加密
对称加密
对称加密,顾名思义就是双方都拥有同样的加密秘钥
对称加密流程图
sequenceDiagram
participant C as Client
participant S as Server
C ->> S : 请求
note right of S : 生成密钥并本地保存下来
S ->> C : 发送服务器端生成的密钥
note left of C : 保存服务器端密钥
loop 服务器端与客户端交互通信
note left of C : 执行业务
note left of C : 用密钥加密数据
C ->> S : 发送加密后的数据
note right of S : 用密钥解密数据
note right of S : 执行业务
note right of S : 用密钥加密数据
S ->> C : 发送加密后的数据
note left of C : 用密钥解密数据
end
可以看出,在这一系列的交互中,最危险的阶段,是Client端请求Server后,Server向其发送密钥的过程,如果这一阶段被黑客劫持,黑客即可以拿到密钥了,那么后面所有的交互详情在黑客面前都是一清二楚的,这显然是一种有漏洞的加密方式。所以非对称加密出现了。
非对称加密
非对称加密的设计避免了黑客拿取“破解和加密所用的密钥”,非对称加密设计了2种密钥,私钥和公钥。
私钥:不对外公开的密钥,仅负责解密
公钥:对外公开的密钥,仅负责加密
非对称加密流程图
sequenceDiagram
participant C as Client
participant S as Server
note left of C : 生成客户端的公钥和私钥并本地保存下来
C ->> S : 请求,并发送客户端生成的公钥
note right of S : 本地保存客户端的公钥
note right of S : 生成服务器端的公钥和私钥并本地保存下来
S ->> C : 发送服务器端生成的公钥
note left of C : 保存服务器端公钥
loop 服务器端与客户端交互通信
note left of C : 执行业务
note left of C : 用服务器端公钥加密数据
C ->> S : 发送加密后的数据
note right of S : 用服务器端私钥解密数据
note right of S : 执行业务
note right of S : 用客户端公钥加密数据
S ->> C : 发送加密后的数据
note left of C : 用客户端私钥解密数据
end
在上述场景的交互中,双方都生成了自己公钥和私钥,且对对方仅公开“公钥”,不公开私钥,这就保证了即便黑客截取到了报文信息和公钥,因为没有私钥,他也无法解密。
常用的支持非对称加密的协议
- SSH(Secure Shell),TSL(Transport Layer Security),SSL(Secure Sockets Layer)
两套公私钥相互配合,在一定程度上确保了交互的安全。为什么是一定程度上呢?因为即便是非对称加密,也存在安全隐患,这个隐患并不是由协议自有的漏洞。做生意有中间人,网络通讯中也有“中间人”,比如A向B发送消息,消息不是直接传递给B,而是经过了C,那么C就称为中间人,C是个黑客,他在A,B之间冒充对方,传达错误的信息,这种攻击方式被称为——中间人攻击。
中间人攻击流程图
sequenceDiagram
participant C as Client
participant M as 中间人
participant S as Server
note left of C : 生成客户端的公钥和私钥并本地保存下来
C ->> M : 请求,并发送客户端生成的公钥
note right of M : 保存客户端的公钥
note right of M : 生成中间人的公钥和私钥并本地保存下来
M ->> S : 模仿客户端发送请求,并发送中间人生成的公钥
note right of S : 本地保存中间人的公钥
note right of S : 生成服务器端的公钥和私钥并本地保存下来
S ->> M : 发送服务器端生成的公钥
note left of M : 保存服务器端公钥
M ->> C : 发送中间人生成的公钥
note left of C : 保存中间人公钥
loop 服务器端与客户端交互通信
note left of C : 执行业务
note left of C : 用中间人公钥加密数据
C ->> M : 发送加密后的数据
note right of M : 用中间人端私钥解密数据
note right of M : 操作数据
note right of M : 用服务端公钥加密数据
M ->> S : 发送加密后的数据
note right of S : 用服务器端私钥解密数据
note right of S : 执行业务
note right of S : 用中间人公钥加密数据
S ->> M : 发送加密后的数据
note left of M : 用中间人端私钥解密数据
note left of M : 操作数据
note left of M : 用客户端公钥加密数据
M ->> C : 发送加密后的数据
note left of C : 用客户端私钥解密数据
end
为了防范被中间人攻击,我们一般需要在双方仔细核对对方的IP地址,端口号。如果使用SSH远程登录服务器,那么需要特别注意比对服务器端生成的公钥和我们自己通过ssh客户端第一次远程连接服务器显示的公钥是否是一样的。
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18194408