DH ECDH? 数字签名数字证书? 一篇文章帮你搞懂! (附Python源码)

1. 相关的知识基础

1.1 对称加密和非对称加密

对称加密与非对称加密

1.2 混合加密

混合加密
混合加密主要是为了解决对称加密秘钥交换问题与非对称加密速度慢的问题

1.3 AKE Authenticated Key Exchange

这个是解决对称加密秘钥无法交换的第二个问题也是我们今天的主题!, 具体的代码会在下面演示. AKE的算法有很多但是基本是建立在:

1.31 迪菲-赫尔曼密钥交换 DH algorithm

DH AKE

1.32 ECDH DH的安全加强版结合了椭圆曲线

DH 和 ECDH

ECC算法详解

这两个代码在原理上都十分相像目的就是黑客能看到的东西组不成秘钥, 组成秘钥的是双方的私有秘钥和公共秘钥, 但是黑客无法根据公共秘钥或者公共秘钥与私有秘钥的结合得到私有秘钥进而得到用于对称加密的私钥. 但是两个算法的区别是DH的公共秘钥是相同的, 而ECDH的公共秘钥有两个和私钥对应.

1.4 数字签名和数字证书 - 解决AKE 的中间人攻击

中间人攻击的相关问题有时间会写.
数字签名与数字证书动画讲解
数字签名和数字证书详解版 - 更全面但是不好理解

2. 环境准备

2.1 云服务器 跑Server 和 CA

云服务器这里有一个坑, 就是你本地或者虚拟机跟云服务器同行(云服务器是主机)的话, 要绑定内网IP而并不是公网IP, 公网IP是用来映射到内网IP上的, 所以很多port都用来映射了, 这意味着如果你绑定公网会报错原因port不足.

2.2 本地 跑Client

这个没啥好说的, 但是注意安装rsa库 其它的没啥

3. 开始实战

3.1 设计理念

在这里插入图片描述

最关键的一点就是模拟CA, 用CA的私钥加密服务器的公钥已获得数字证书从而确定服务器公钥的正确性, 同时数字签名是服务器私钥签名的, 如果被签名额消息, 服务器公钥 能验证成功的话证明消息确实是服务器发出的, 并且消息未被更改, 因为签名是服务器私钥签的只有服务器公钥能验证, 由于CA保证了服务器公钥的正确性, 因此如果验证成功那么消息一定来自CA公钥解出的公钥所属的地方发来的-服务器. 同时如果验证成功还说明消息没有被更改过, 因为签名是消息哈希值用私钥加密, 所以验证的其实是公钥解密的哈希值和消息原来的哈希值是否一样一样就说明消息未被改过, 注意黑客这里是无法同时改消息和哈希值的, 因为黑客没有服务器的私钥没法重加密哈希值以获得签名.

3.2 程序运行

在这里插入图片描述
在这里插入图片描述

4 代码上传了 依赖包有点多

原创文章 28 获赞 44 访问量 3790

猜你喜欢

转载自blog.csdn.net/qq_42141943/article/details/106164453