网站大量收购闲置独家精品文档,联系QQ:2885784924

Diffie-Hellman中间人攻击C++实现课程设计.docx

Diffie-Hellman中间人攻击C++实现课程设计.docx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

针对DiffieHellman协议的中间人攻击与协议改进

本文为网络空间安全实践与设计III的报告内容,最终得分92分。该项目实现了客户端与服务器通过DiffieHellman协议进行密钥交换、AES加密通信内容、中间人攻击实现窃听等,并针对中间人攻击对DiffieHellman协议进行了改进。

课设要求:使用C语言,在Linux平台进行开发。

第一阶段:Diffie-Hellman协议的实现

客户端与服务器之间通过TCPSocket通信;

客户端与服务器之间通过Diffie-Hellman协议协商出对称密钥;

客户端使用协商出的对称密钥对传输内容做加密,并发送给服务端;

服务端接受客户端发送过来的内容,进行解密;

对称加密算法采用AES256-GCM;

第二阶段:Diffie-Hellman中间人攻击方法研究与实现

研究Diffie-Hellman协议,研究中间人攻击方法并完成相关代码。当通信双方进行通信时,中间人攻击程序可以解密出传输内容;

第三阶段:Diffie-Hellman协议改进

基于预共享密钥的方式对Diffie-Hellman做改进,使协议抵抗中间人攻击。完成协议设计,实现代码并用第2阶段的中间人攻击程序做验证。www.biyezuopin.vip

为完成本次课设,总共用到了?libgmp?和?libpcap?两个库(aptinstalllibgmp-devlibpcap-dev);使用了arpspoof(aptinstalldsniff)工具进行局域网内的arp攻击;用到了三台虚拟机,均为UbuntuServer20.04,分别扮演了服务器、客户端与中间人的角色。

在开始通信时,客户端生成一个大素数p,发送给服务器保存,然后各自生成自己的私钥和公钥,并交换公钥,最后计算出用于AES加密的密钥,并互相发送消息。进行中间人攻击时,需要先使用arpspoof进行双向投毒:arpspoof-i网卡(如ens33)-t客户端IP-r服务器IP,然后再启动中间人程序。中间人程序后台运行,将客户端服务器通信的内容写入同目录下的middle.txt文件中,偶尔会乱码,大部分情况下正常。

预共享密钥我是按照自己理解写的,可能并不完全正确,大致过程就是提前在代码中为服务器和客户端写入一个相同的密钥,运行时在DH结束后,服务器随机生成一个字符串,以明文形式发送给客户端,客户端使用预共享密钥加密这段明文并返回给服务器,服务器解密,得到的明文如果与发送的相同,那么就允许通信,否则中断连接。而且这个过程中发送的数据包都是以公钥形式发送的,中间人截获后写入自己的公钥,自然就替换掉原来的随机字符串了。

以上就是大致的过程,详细请看下文,并结合代码自行理解。

目录

TOC\o1-3\h\u针对DiffieHellman协议的中间人攻击与协议改进 1

概要设计 3

抽象数据类型定义 3

Socket结构 3

DiffieHellman结构 3

AES加密结构 4

中间人数据包捕获结构 4

主程序流程 5

客户端主程序流程 5

服务器主程序流程 5

中间人主程序流程 6

各程序调用关系 6

技术开发思路 6

Socket通信的实现 7

DiffieHellman协议的实现 7

AES256-GCM加解密的实现 8

中间人捕获数据包的实现 9

防止中间人攻击的实现 10

git版本管理 10

使用makefile将多个源文件结合 10

详细设计 10

客户端程序流程图 10

服务器程序流程图 12

中间人程序流程图 14

AES加解密详细设计 19

中间人攻击详细设计 24

预共享密钥详细设计 28

调试分析 30

如何生成一个较大的随机数? 30

如何让中间人知道发送的数据包是什么? 31

inet_ntop()处报错 31

如何让中间人代码后台运行? 31

如何开启编译器优化? 32

测试结果 32

第一阶段测试结果 32

第二阶段测试结果 34

第三阶段测试结果 35

概要设计

抽象数据类型定义

Socket结构

数据对象?:客户端与服务器进行通信所需要的所有函数等元素。

数据关系?:根据IP地址和端口号,服务器绑定端口号并监听,等待客户端连接;客户端尝试连接指定IP的指定端口号,成功连接则可以相互通信。

基本操作?:

socket():创建一

文档评论(0)

青铜 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档