最后更新:2022-04-23 14:29:29 手机定位技术交流文章
该员额是网络空间安全实践和设计三研究的一部分。点数总数为92。除其他外,该项目允许客户和服务器使用Diffie Hellman协议、AES加密通信内容和通过中间攻击窃听来交换钥匙。针对中转人的攻击,更新了Diffie Hellman协议。
课程必须在Linux平台上用C编程语言写成。
第一阶段:执行迪菲-赫尔曼协定
第二阶段:研究和实施Diffie-Hellman中间攻击方法
第三阶段:加强《迪菲-赫尔曼协定》
这一课程是利用libgmp和libpcap图书馆完成的。
apt install libgmp-dev libpcap-dev; rpoof () 被雇用。apt install dsniff该方案用于在局域网内进行快速攻击;三个虚拟计算机(均为Ubuntu服务器20.04)分别发挥服务器、客户和调解员的作用。
在开始通信时,客户端创造了大量质量 p.发送给服务器保存,然后,他们建立自己的私人和公共钥匙。并交换公钥,最后, AES 加密密钥已计算 。并互相发送消息。进行中间人攻击时,亚普波夫应首先用于双向中毒:Arpspoof - i 网卡(例如, ens33) - t 客户 IP- r 服务器 IP,然后开始中间程序。中间软件后台运行以在同一目录下写入客户服务器连接的内容。txt 文件定期被篡改,尽管这在大部分时间都是典型的。
根据我的理解,我写了预先共享的钥匙。可能并不完全正确,基本程序是提前为服务器和客户端创建相同的密钥 。到DH跑步的尾声服务器随机生成字符串 。它以明确的方式发送给客户。客户端加密此段落, 并使用预共享密钥将其发送到服务器 。服务器解密,如果这与发送的内容相同,那么就允许通信,否则中断连接。在此过程中传输的软件包使用公用密钥加密 。中间拦截和生成自己的公用钥匙。当然,原随机字符串已被替换。
这是一项广泛的程序,下文将全面讨论,并与守则一并理解。
所有函数等都是数据对象。客户端必须与服务器通信。
数据关系:服务器绑定端口号码并监听它,等待客户端连接;客户端试图连接所提供的 IP 的指定端口号码,成功连接可以互相互动。
基本操作:
数据对象: Diffie Hellman 关键交换协议所需的任何数据对象,包括结构、功能等等。
数据关系:AES256-GCM加密是通过Socket为客户-服务器连接谈判的。
基本操作:
所有数据类型、功能等都被视为数据对象。使用了AES256-GCM加密。
数据关系:使用 Diffie Hellman的结构中的 DH_key 数组中保存的密钥作为 AES 加密的密钥,如果您想要加密, 请使用给定的加密 。通过 Socket 结构发送的信件; 通过 Socket 结构解密收到的信件输出明文。
基本操作:
数据对象用于中介业务、通过网页卡获取数据包、数据提取和符合特定标准的数据集保存。
数据关系:监听网卡,调用 Diffie Hellman的结构中的函数用于和客户端、服务器分别建立信任关系;调用 AES 结构对提取到的密文进行解密和加密。
基本操作:
不只是客户,是服务器,是客户,是服务器,是服务器,是客户,是服务器,是服务器,是客户,是服务器,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户,是客户要开始, 连接必须使用与 Socket 结构相关的函数来构建 。建立连接之后,为谈判钥匙,使用与Diffie Hellman协议相关的功能。它节省了质数、 根数、 私人钥匙、 公用钥匙、 公用钥匙等, 在一个结构中。 您在中间生产接下来,AES256-GCM加密模块称为要传输的数据在发送、接收和解码前先加密。直到程序结束。
对于中间人程序,不需要使用套接字 。数据集收集模块被替换。在捕捉服务器和客户之间的公用钥匙交换软件包后Diffie Hellman模块的函数运行以生成自己的私人和公共密钥; 在加密数据收集后,为解密和加密数据,使用了 AES256-GCM解密模块。完成后返回到软件包抓取状态 。
从图像中可以看出,这更容易。

下图描述了Diffie Hellman协议的逻辑。该协定将需要得到广泛执行。为了方便,您可以使用 libgmp 来操作 。它可以产生大量数量,检查大量数量是否是一个质数,进行大量数量的基本操作等等。图书馆可用于计算起始质量 p。并计算原根 g,然后随机生成双端私人密钥a和b。此外,还使用建模来计算公用钥匙A和B。交换公钥后,您可以使用调制解调器计算最后的密钥 K 。K在两端都应该是相同的。

事实上,我男朋友只给了我AES尚不清楚是256还是不是256但我不会改变它有兴趣者可查询开放图书馆。这是一种认证加密模型它综合了合作减少威胁和全球监测、评估和评估中心版本的特征。为了保证数据的保密性、完整性和有效性,另外,它还可以作为补充资料完整性的检查。下面的图表说明了推理。www.biyezuopin.vip

Diffie Hellman协议被用来获取 K 所需的密钥 。最后,使用矩阵计算,您可以构造移动和组合行的函数。对于字节替代,则介绍正式的S-Box和反向S-Box。不过在此之前,第一步是扩大关键。此函数生成 AES 加密的滚轮键 。iv 为初始向量,这主要用于确保数据的完整性。
最常见的应用程序是libpcap。图书馆可以捕获该数据包。此外,为了分析获得的每一个数据包,提取出需要的内容,您想要在其中插入的数据、 您想要在其中插入的数据、 您想要在其中插入的数据、 您想要在其中插入的数据、 您想要在其中插入的数据、 您想要在其中插入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据、 您想要在其中输入的数据最后,我们必须计算校验和。如果没有,接收人没有通过产前检查和产后检查。他们在被视为损坏的袋子后被倾倒。
ARP欺诈对于欺骗服务器来说也是必要的,因为服务器是客户和客户,而服务器是将数据包传送到中间计算机的服务器。 这里不需要开发程序,您可以直接使用该工具来进行双向欺骗。
必要时使用预先分享的钥匙。第一步是在守则中附上一个关键字。客户端和服务器都相同。AES在Diffie Hellman咨询后加密了密钥 。服务器最初生成随机字符串,它以公用钥匙的形式提供给客户。收到电文后,客户将使用预先共享的密钥加密。信件将发回服务器 。解密由服务器使用预共享密钥进行。如果解密的字符串与发送的字符串相符,则允许互相通信,否则拒绝。
由于软件包作为公用钥匙交付,被拦截时,中间人视其为服务器发送的公用钥匙,重新生成私人钥匙和公用钥匙,并将其传送给客户,客户当然不会从服务器获得任何字符串。
根据课设要求,对于版本控制,您必须使用 git 。这一阶段必须从项目一开始就开始。因为它是在Linux系统上创建的口袋是简单的设置。之后,我们要做的就是 保持与Git相关的命令。作为奖金的特写git commit,git status,这些照片是博客上出现的一些照片。就可以轻松使用了。如果使用视觉工作室代码或其他 IDE,版本控制提供的图形界面使使用简单。
由于代码是由两个人制作的,并使用了若干源文件,因此,必须使用文件来将源代码汇集在一起,根据逻辑进行归档,在修改源代码时,只需建立文件。
客户流程图在图中说明,下文将详细讨论。

服务器终端过程的流程图在下面的图像中描述,深度如下。

维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普、维普。

这是和 libgmp 的链接。GNU MP (gmp) 是便携式 C 语言库 。精度为整点、理性点和浮点的任何精确度的自论计算。其目标是为任何需要比C语更精确的应用程序提供尽可能快速的算法,因为C语当地允许计算。根据操作的大小选择要使用的算法 。此外,将开支限制在最低限度。所以才创造了Gmp
Diffie Hellman协议需要一个结构来保存中间过程的数据。p表示生成的大素数,g为p为了简单起见,最初的根通常需要2或5个步骤。pri_key对于随机创建的私人密钥,pub_key为计算得到的公钥,k为筹备最后磋商而收集的钥匙。mpz_t是一种用 libgmp 描述的数据类型, 是一个大整数类型。 中间方法需要两个公开和关键变量, 一个用于服务器, 一个用于客户端 。
要执行 Diffie Hellman 协议, 需要生成一个大随机数和大质量, 使用 libgmp 提供的一些函数和数据类型可以实现。 要生成大随机数, 可以使用两个随机数来生成函数 :mpz_rrandomb()和mpz_urandomb()如3.1所述,乘以这两个数字的结果为最后随机数字。gmp_randstate数据变量是一个函数可以用作输入参数的数据变量类型。gmp_randinit_default()初始化,使用 libgmp 默认初始化程序,然后将当前时间记录为输入gmp_randstate变量,以便以状态发送到随机数字生成函数。代码如下:
上述知识是一个巨大的随机数字。然而,《Diffie Hellman议定书》需要大量参与者。libgmp提供的若干功能也可以用来产生巨大的质数。首先,使用上述代码生成一个巨大的随机整数。然后对药草进行了评估。这里用到了mpz_probab_prime_p()函数,它可以确定一个给定数字是否为质数。要进行Baylie-PSW概率测试,请使用此函数。然后运行Miller-Robin测试的指定数量 。您可以根据需要将计时器从15倍调整到50倍。如果一定是素数,函数产生 2 的值;它可能是质数。输出值 1; 显然不是一个质数返回 0。这里所需要的只是返回一个非零值。mpz_nextprime()函数返回一个大于和接近提供参数的值。如果随机生成的数字不是一个数字,则该函数用于生成一个数值。
这跟随机生成一个巨大的数字 来制作私人钥匙没什么两样, 对质数没有限制; 你只需要打个电话。get_random_int()该职能是充分的,不需要重复。
无论公用钥匙是创建还是计算最后钥匙,索引和建模都是必要的。 libgmp还提供相应的操作功能:mpz_powm(rlt, a, b, c)它计算了 abmod c 并将结果发送到 rlt, 完成公用钥匙和密钥的计算 。
在客户(类似服务器)的情况下,最终Diffie Hellman协议的相关代码如下:
我的伙伴完全完成了 AES 解密模块, 请在此简要解释。 首先, 无论它是客户端、 服务器还是中间端, 都需要 S- Box 和 反向 S- Box 。
由于AES解密被指定为封闭域,因此有必要设定一个有限面积乘数。2 乘法和3 乘以,另一可作类似操作。
为了在所有 AES 解密中生成轮键,该键必须扩展如下:
生成轮密钥后,开始替换前言 换行 换行 混合列等等字节替换很简单,通过寻找S -Box,每个字节替换为匹配的字节 。逆向字节替换类似,只是代替Contracty S -Box来代替S -Box这里只展示正向的。
线转移是矩阵横向列的循环迁移。如果是256比特的区块第一行维持不变,第二、第三和第四行的差异分别为1字节、3字节和4字节。中间变量是这种方法中唯一必须说明的内容。然后进行交换即可。对于混合矩阵中直线的操作,列是混合的。将每个内部连接的四字节混合起来,这一步骤采用线性转换。只有最后一回合是没有混合。而以轮密钥加替代。
最终加密完整功能是将上述程序与下列主要代码合并:
解密功能相似,如下:
中继者攻击包括截取局域网中两个主机的数据包,并提取和修改数据包,以便双方都认为它们相互交流,而实际上,它们与中继者交流。图像攻击中给出的逻辑是截取局域网中两个主机的数据包,并提取和修改数据包,以便双方都相信它们相互交流,而事实上,它们与中继者交流。图中说明了其理由。

中间攻击的第一个也是最重要的阶段是捕捉数据包,这是libpcap能够做到的。 使用libpcap的关键过程是:
pcap_lookupdev()获取可访问网络设备的名称和指针 。pcap_open_live():返回打开给定网络设备后用于捕获网络数据包的描述。pcap_compile():包括用户对过滤软件的BPF过滤规则;pcap_setfilter()过滤规则通过使用BPF过滤规则生效。pcap_loop()执行结束时,循环可以被抓取,出错可能发生,或者程序可以终止。callback函数传入pcap_loop()函数, 收集的每个数据包应被处理前五个阶段包含模板,重点是回声功能,即2.3。 中间过程的流程图在下文中以基本术语加以解释。
在启动中间程序之前,必须首先完成美国退休人员协会的欺诈行为。继续告知服务器客户的MAC地址是中间人的MAC地址;客户的MAC地址是中间人的MAC地址。因此,数据包被发给中间人。当中间人的应用程序截获了一个数据包时首先需要考虑的是,它是来自客户端还是服务器。然后,你可以确定它是公用钥匙,加密信息,还是大数字。如果来自服务器,然后需要对数据包进行修改,以便利用MAC地址作为框架目的(由于ARP欺诈)的客户。如果最初的MAC地址来自客户,它充当中间人。MAC 地址代表服务器(MAC 原地址代表中间人),必须为框架的目的更新。如果服务器发送公用密钥,最后,为了制作自己的私人钥匙,他们必须使用Diffie Hellman协议模块中规定的某些功能。并计算得到公钥,然后将服务器替换为自己的公用密钥。发送到客户端; 如果客户端发送公用密钥,直接用您自己的公用钥匙替换客户的公用钥匙, 请写您自己的公用钥匙 。然后发送给服务器。在收到上述两个数据包后,中间人对服务器的钥匙和中间人对客户的钥匙已经可以确定。如果服务器发送加密信息,您可以使用服务器的密钥解密它 。保存在文件当中,然后用客户的钥匙加密发送到客户端; 如果客户发送密码,和上面类似。
实施并不困难,因为这个概念是基本概念,但有些微妙之处很容易出错,需要认真关注。 此处仅展示了客户提供的收集数据包的代码;服务器是可比的,可在附录中查看。
如果这是发送数据包的方法,由于头部核查与收件人计算之间的差异,TCP包件将作为一个损坏的包件丢失。因此,当我们建立我们希望传达给接受者的信息时,还有必要重新计算校验和。此外,向TCP头部发出一个信息。具体守则如下(脚注见附录):
迄今为止,中间人的全面设计已经完成,整个代码(附有详细说明)可参见附录。
预先分摊的关键原则如下:在他们开始交谈之前,客户和服务器指定了一个密钥。此密钥编码在代码中 。不允许查看,当然,中间商是无法进入的。当客户和服务器交换数据时,服务器随机生成一个 20 字符字符串 。向客户提供公用钥匙。收到电文后,客户将用预先共享的密钥加密。信件将发回服务器 。服务器解密,如果解密字符串与原始字符串相同,则那么允许通信,否则不允许。
我使用的加密仍然是 AES, 预共享密钥写入客户端和服务器代码。 服务器代码如下:
其中,key作为预先分摊的密钥保留PSK_LEN对于宏,值为20,“pub”表示软件包是使用公用密钥传输的。flag如果两个字符串相同,则返回此值。get_random_str()函数的目的是生成随机字符串。 基本的想法是生成随机数字, 并将其除以 26 以获得剩余数字, 然后根据剩余数字设定字符数, 案件由奇数随机数决定 。
当中间截取一个数据包时, 它承认它是服务器提供的公用密钥, 重新生成公用密钥, 并将其写入给客户端的数据集, 当加密返回和解密时, 数据包会有所不同 。
要获取更大的随机数字, 您可以创建一个函数, 使用 libgmp 提供的 3 个随机数字 。 但是, 每个函数都有一定的限制 。
mpz_urandomb():可以获得 0 到 2n1 之间的随机数字,但这个随机数字非常小,不能保证目前生成的钥匙的安全;mpz_urandomm()可以在 0 和 n-1 之间创建随机数字,该数字显然太小,与上一个函数存在同样的问题;mpz_rrandomb()可以在 2n1 和 2n1 之间建立随机数, 以确保数字数, 但是在较小的范围内, 这个范围内的质数是最小的, 并且存在安全问题 。将第一个和第三个功能合并是解决办法。mpz_rrandomb()创建 2n1 和 2n1 之间的随机数( 保证创建的随机数不会太小), 然后使用它 。mpz_urandomb()函数产生 0: 2n1 之间的随机数(以确保随机数的广度), 将两个随机数乘以倍数, 最终结果是一个要创建的巨大随机数, 既确保足够数量的随机数数, 也确保足够广泛的随机数。
虽然中介人可以扣押袋子,但他们无法知道所扣押的袋子中是否有公用钥匙、字母或质号。 如果无法区分数据包的类型,那么无法解密是合乎逻辑的。
解决方案: 在客户端服务器传输的每个数据包中包含一个页眉 。无法关闭临时文件夹:%s。如果是公钥,添加“pub”;如果整数是一个质数,如果分类,加上“pri”。加上 “msg”。这样一来,客户端和服务器不仅能够确定所收到的数据包是否是他们正在寻找的。该字符串也可被中间人用来评估他或她是否愿意。
在inet_ntop(AF_INET, &(ip->saddr), src_ip, 16)这是个错误,我先从这个开始src_ip,但这样做不切实际;相反,集中关注ip->saddr看着定义,还是没有问题, 但我不能把它弄出来, 它的连接。packet与此密切相关的是,我想知道这个过程是否有问题,但没有发现任何明显的问题。 但是,我对官方档案的研究显示,这个过程有错。pcap_loop()代码的写法使最后一个参数被发现为u_char因为我正在通过一个结构参数, 我创建了一个格式转换器, 正确解决了问题。
课程要求后台运行;然而,客户和服务器由于必须相互交流而无法设置后台,因此后台只能从中中枢程序运行,拦截记录在一份文件中,以便采取后续行动。
临时进程中可以找到解决办法。main()函数开头加上daemon(1, 1)函数。 它将会构建一个从后台启动的守护进程, 并在必要时关闭它 。ps命令以显示进程编号,然后kill关闭。
这是直截了当的。 当用 gcc 汇编时, 添加-O参数足以选择 -O1, -O2或 -O3, 数字越大, 理想水平越高, 代码的效率越高, 尽管稳定性和兼容性可能不同 。-O1。


让我们从美国革命党的欺骗攻击开始然后开启服务器,让中间人(后台运行)进入。最后开启客户端。和第一阶段一样 在迪菲・赫尔曼协议之前不再赘述,直接看加解密。最后一次骚动是"Ctrl+C"您可以将书面文件与相关客户端服务器给出的明确文本进行比较,以此验证书面文件。

加上 psk 后,在没有中间人的情况下图11说明了结果。Diffie Hellman协议以及AES解密和第一阶段是相同的。不再赘述,仅仅给出了相关的psk位数;如果中间体存在,其后果见图12。仅显示 psk 的重要部分 。


本文由 在线网速测试 整理编辑,转载请注明出处。