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加解密即可,安全性较高。

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

python实现Diffie-Hellman 协议并使用aes256进行加密传输实验原理参见旧帖子大概说一下代码的思想流程:1.第一阶段实现的是双方就DH协议进行交换得到对称密钥使用的是命令行参数实现的,循环调用命令行控制函数首先得到q,a这两个数。q为大素数,a为其本原根,为了省事直接从网上找了个本原根表,静态定义了这两个数。其次进行socket通信,将两方的根据q,a,自己选择的公钥ya,yb实现得到计算后的公钥YA,YB传输给对方。得到传输的公钥后,发送消息时利用公钥根据DH算法
DH_Crypto概况介绍原理介绍RSA_signConnection.pyDH_Client.pyDH_Server.pycall_DH.pyDH.py(用于Qt界面设计)结果展示 本次实验 实现 了DH原理的双机通信。DH_Client和DH_Server的main部分与call_DH部分大同小异,主要是用于本地调试显示,可以忽略。 p,q为公有信息。 1.Alice 选择一个范围在[1, p-1]的随机数,为rand_a 2.Alice 计算cal_a = q^rand_a mod p
Diffie-Hellman 密钥交换是一种安全交换密钥的方法,可以让双方在不泄漏密钥的情况下,德出一个密钥。以Whitfield Diffie和Martin Hellman的名字共同命名。 Diffie-Hellman 密钥交换是Ralph Merkle构想的第一个公钥 协议 之一,由 Diffie 和 Hellman 于 1976 年出版,这是最早提出私钥和相应公钥概念的公开著作。可以让双方在不泄漏密钥的情况下协商出一个密钥来传统上,两方之间的安全 加密 通信要求他们首先通过某种安全的物理方式交换密钥,例如由受信任
Diffie-Hellman 密钥交换算法 Diffie-Hellman 密钥交换算法的目的是使两个用户能安全交换密钥,以便在后续的通信中用该密钥对消息 加密 。所以这个算法本身只限于密钥交换。 Diffie-Hellman 密钥交换算法的有效性建立在离散对数上,在计算离散对数是困难的才能确保秘密交换。 Diffie-Hellman 密钥交换算法如图所示 有素数和本原根,为公开的整数,Alice选择随机整数,Bob选择,分别计算,其中和保密,对算出的和公开。Alice和Bob通过计算,将作为共享的密钥。这样
1. Diffie-Hellman 密钥交换算法 (1)有两个全局公开的参数,一个素数p和一个整数a,a是p的一个原根(对于正整数gcd(a,m)=1,如果a是模m的原根,那么a是整数模m乘法群的一个生产元); (2)假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA,并计算公开密钥YA = a^XA mod p,A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选
Diffie-Hellman (简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥。目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端、服务端利用DH算法交换对称密钥。 下面会先简单介绍DH的数理基础,然后举例说明如何在nodejs中 使用 DH相关的API。下面话不多说了,来一起看看详细的介绍吧。 要理解DH算法,需要掌握一定的数论基础。感兴趣的可以进一步研究推导过程,或者直接记住下面结论,然后进入下一节。 假设 Y = a^X mod p,已知X的情况下,很容易算出Y;已知道Y的情况下,很难算出X; (a^Xa mod p
JWT简介 JWT(Json web token),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT提供了一种简单、安全的身份认证方法,特别适合分布式站点单点登录、或者是签名。 JWT构成 JWT是由3部分信息组成,分别为header,payload,signature,组合形式为:header.payload.signature(注意:这里的header,payload,signature都是经过base64 加密 的值) header 格式如下: 'typ':
在这个例子中,我们 使用 23作为质数p,5作为原根g,并随机选择a和b作为私钥。然后,通过计算A和B来生成公钥,最后计算共享密钥s_a和s_b。最终输出a、b、A、B、s_a和s_b的值。 当然,在实际应用中需要选择更大的质数和原根,以及更长的私钥来保证安全性。