对称加密与非对称加密

对称加密 与 非对称加密

对称加密

对称加密,顾名思义就是双方都拥有同样的加密秘钥

对称加密流程图

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客户端第一次远程连接服务器显示的公钥是否是一样的。

posted @ 2024-05-15 17:51  勤匠  阅读(9)  评论(0编辑  收藏  举报