python实现Diffie-Hellman 协议并使用aes256进行加密传输

python实现Diffie-Hellman 协议并使用aes256进行加密传输
实验原理参见旧帖子

大概说一下代码的思想流程:

1.第一阶段实现的是双方就DH协议进行交换得到对称密钥

使用的是命令行参数实现的,循环调用命令行控制函数

全程使用了多线程实现后台的循环接收消息,就基本上除了git版本管理老师的要求都有了吧。
首先得到q,a这两个数。q为大素数,a为其本原根,为了省事直接从网上找了个本原根表,静态定义了这两个数。

其次进行socket通信,将两方的根据q,a,自己选择的公钥ya,yb实现得到计算后的公钥YA,YB传输给对方。

得到传输的公钥后,发送消息时利用公钥根据DH算法计算得到私钥,利用私钥进行加密解密操作(我只解密偷了个懒)。

传输的加密后信息因为使用了私钥进行aes256加密,很安全。

但是问题来了,不能确定我就是跟我想的对象进行私钥的沟通,于是产生中间人攻击问题。

2.第二阶段实现中间人攻击DH协议(这玩意我也没做的太好)

以下是大佬想出来的中间人攻击代码实现原理:

在不影响双方通信的情况下(不能让人发现啊),首先自己实现一个协议如:

自定义的协议头:
开头两个字节为df,第三位为1(版本号),第四位为操作特征符
定义特征符为
1:发起密钥交换
2:回应密钥交换
0:交换后的正常数据传输
定义一个特征头部有助于抓包中进行判定和筛选数据包。

接着在双方通信的时候截获数据包,分别和双方建立双向连接,得到密钥,进行消息的加密解密。

保证双方不能收到真实的数据包,可使用ARP欺骗

1.对于握手,挥手包等不具有协议标记(df1)的数据包,将MAC地址直接改为目的MAC地址后发送。

2.对于密钥交换发起数据包,解析得到Alice的密钥,生成自己的密钥传输给目的mac地址(Bob)。

3.对于回应密钥交换数据包,解析得到Bob的密钥,生成自己的密钥传递给目的mac地址(Alice)。

4.对于常规通信数据包,解密读取信息并转发。

注!校验和很重要!:

       IP校验和只校验IP头,TCP校验和是校验伪头部+整个TCP头+数据字段,如果你修改了数据字段,不修改校验和的话,发送的数据包会直接(静悄悄地)被当作错误包丢弃。TCP校验和是计算伪首部(源IP,目的IP,0,6,长度)+校验和字段置为0的TCP字段。

因为中间人攻击主要是在进行连接的过程中实现的,所以想要防御得在这个过程中下功夫,接下来就引出了第三阶段,预定义密钥对中间人攻击进行抵御

3.预定义密钥对中间人攻击实现抵御

中间人想要得到攻击效果,得知道密钥,我预定义密钥就可以实现对这种攻击的抵御了

在代码内部直接进行定义私钥,然后连接对面的客户端即可,无需进行密钥的沟通,直接预定义密钥进行aes256加解密即可,安全性较高。

python实现Diffie-Hellman 协议并使用aes256进行加密传输_第1张图片

python实现Diffie-Hellman 协议并使用aes256进行加密传输_第2张图片

备注:上面的只是第一部分的截图因为懒得截了。暂时还在课设期间所以不会放出源码,课设完了再放出来吧。
急着想要的找我:qq:1920955927,但是只能看看,别交上去。。

你可能感兴趣的:(网络协议,python,安全)