python实现的基于源IP加密的传输程序
一、设计目标
1.1 目标概括
以对发送数据内容进行隐藏且隐蔽发送方为目标实现一种传输方法,并编写程序实现。
1.2 实现功能
-
基本的数据传输
-
通过将发送内容映射到源 IP 地址位置
-
修改 IP 以隐蔽发送方
-
发送方的 IP 欺骗
1.3 可加密容量
每个数据包的加密容量为 1 个字节,容量比较小,仅适用于传送少量但是重要的信息。
二、选题原因
2.1 网络安全的重要性
在网络与信息安全课程中,老师花了一周多的时间对整个网络安全行业进行了介绍。介绍了在网络安全发展的几个阶段中出现的 一些著名的网络安全事件、我国网络信息安全的现状、网络体系的脆弱性。且引用了习近平总书记说过的“没有网络安全,就没有国家安全”,以及介绍了目前的网络安全行业整体产值情况,通过这些方式说明了当前的网络安全行业亟待发展,无论是国家支持程度,还是行业的利润 空间,都表明了网络安全在当前以及未来的重要性。
2.2 隐蔽通信
隐蔽通信是数据传输过程中不可或缺的一部分。数据传输过程中首先不应当直接通过明文传输,然而仅对数据加密在许多情况下并不能满足安全性要求。因此诞生了许多的隐蔽通信技术,不过本质上就是 两点,对数据进行加密、以及对数据所在位置进行隐藏。
然而信息隐藏的实现重点除了加密算法本身外,还有一个非常重要的问题就是把信息藏在哪里。也就是信息的隐藏载体。信息就算用了非常好的加密算法。如果敌方知道了这段信息就是隐藏后的加密信息。依然可以暴力破解。而如果敌方面对一段信息无法定位真正有价值的信息的位置,则所有的无关信息都可以作为增加对方破解难度的助力。 因此,信息的隐藏载体是研究信息隐藏的重要方向之一。
2.3 为何使用源 IP 地址进行信息隐藏
当下许多研究方案的重点在于通过 TCP/IP 协议中的预留好的部分进行填充来实现隐蔽通信, 例如ICMP发送0~255Bytes 的数据包。但是这些方案有一个问题,那就是如果想要滤除这些信息,可以对防火墙进行设置。这样就可以过滤哪些传送过来的数据包,从而使隐藏的信息丢失。这种方案的问题的本质还是在于容易被敌方探测到隐藏信息的大概位置,即使不可破解,也可以破坏。
而为何选择用源 IP 地址进行信息隐藏呢?原因如下:
-
源 IP 地址即使被修改,也不影响接收方的接收过程,因为源 IP 地址其实就是接收方用于辨别发送者身份的信息。目标 IP 地址自然关乎接收方能否成功接收,而源 IP 地址对接受过程完全不造成影响,可以用来修改以承载隐藏信息
-
源 IP 地址是每一个数据包共有的信息,不易引起注意。对于敌方来说,每一个数据包都有其源 IP 地址,源 IP 地址的量非常大,因此增加了处理和分析难度
-
对发送者自然而然进行了匿名处理,这种保护是额外的收益
三、设计实现
3.1 问题分析
3.1.1 修改源 IP 地址的可行性
在选题原因中我已经分析了修改源地址的可行性,可行的原因很简单,就是在数据包传输过程中,路由器不会检查源 IP 地址,知乎检查目标 IP 地址,据此进行中继传输。这就是修改源 IP 地址可行性的理论基础。
3.1.2 伪造源 IP 的合法性问题
TCP/IP 协议在路由过程中不会对源 IP 进行检查,但是出口以及目标局域网入口端的网关和防火墙如果设置了相关规则,则有可能对其进行检查,并筛选掉不符合要求的伪造的 IP 包。因此需要考虑得问题就是伪造的 IP 既要保证携带了隐藏信息,还要能够合法,不被拦截。
3.1.3 隐藏信息的映射及恢复算法
已知一般来说局域网的地址数量不超过 255,所以在对信息量没有过高要求的情况下,可以将信息映射为 8bit,再用这个字节替换源地址,这样对源 IP 的修改量比较小,尽量保证了合法性,且算法实现比较简单。
3.2 发送方设计
3.2.1 传输协议选择——UDP 协议
选择 UDP 协议的原因有以下两点:
-
TCP 协议需要建立连接,实现三次握手,而此次试验的方法并不需要如此,该设计所能够传输的加密信息上限仅仅是 1 字节每数据包的,设计目的就是短暂通信,传输少量的信息。不需要也不适合建立连接
-
该设计方法本质就是修改源 IP。更是不适合 TCP 通信
3.2.2 隐藏信息映射方法
隐藏信息的映射方法实际上有非常强的扩展性,可选择的方式很多,例如 MD5 简化后就可以用于此次试验。不过这个并不是这个实现方法的重点,我认为这个实现的重点在于其通过源 IP 地址 来隐藏信息的思路非常好。这种隐藏方式有迷惑性且不易被拦截,还能起到隐蔽发送方的效果,是比较有价值的地方。考虑到加密后还要恢复的工作量且加密算法本身并不是这个项目的价值体现。所以我只选择了简单的异或的方式进行加密。将源信息每个 byte 和目标 IP 地址的后一个 byte 进行异或,异或结果可以被恢复为源信息,用异或结果替换源 IP 地址后一个 byte。就实现了隐藏信息映射并隐藏。
3.2.3 数据包序号的意义
由于每个数据包能够加密的信息实在是太少,一个信息需要发送许多个数据包来传递,所以为了增强程序的鲁棒性,对数据包进行标号,这样可以方接收方判断是否丢包,是否发送开始,并对数据包进行排序。具体方法为将数据包序号与当前数据包的伪造主机号进行异或,用异或结果替换 MAC 地址的末位byte。
3.2.4 发送起始和终止标志
接收方接收时需要知道包含隐蔽信息的数据包何时开始,何时结束,因此为了实现开始和终止标志,需要额外多发两个数据包表示标志开始序号为 1 作为开始标志,并以此时的加密信息值作为开始和终止标志。加密信息也放在源 IP 地址中。起始和终止的标志数据包的源 IP 地址的内容为真实 IP 的末尾 byte 和目的 IP 地址的末尾 byte 异或得到。
3.3 接收方设计
3.3.1 数据包筛选
为了简化算法流程,我规定了发送和接收的源端口和目标端口,少了很多麻烦,只需要对规定端口接收的数据包进行筛选即可。
3.3.2 解密过程
由于加密算法比较简单,完全按照加密过程的逆过程即可。
判断本次信息接收序列解密信息是否为 1,若是 1,说明是开始标志数据包,其隐藏的信息为真实源 IP 地址的末位 byte。并记录此时的隐藏信息。
将源 IP 末位 byte 和目的地址的末位 byte 异或得到结果并暂时存储当前接收到的信息,并等待下一个数据包。
判断每一个收到的数据包加密信息是否为之前记录的信息,当相同时表示终止。
将数据包的源 MAC 地址的末位 byte 和数据包的源 IP 的末位 byte 异或,得到数据包的序号。
3.3.3 信息显示
若收到结束标志数据包,则进行判断。若结束标志的序号和数据包数量一致,则接收成功,打印接收成功并输出记录好的加密信息和真实的源 IP 地址。
若结束标志数据包的序号和数据包号表示的长度不一致,打印接收失败。输出真实源 IP 地址,每个数据包的序号以及解密号的信息。
3.3.4 超时处理
为了增加程序完整性,避免空等,引入超时处理机制,若 20秒内没有收到新的数据包,视为超时,停止等待。
四、实验结果与分析
4.1 实验结果截图
4.1.1 发送方
4.1.2 接收方
4.2 结果分析
由于数据包的容量不宜太多,所以我规定的实际上发送方发送的信息为“trap”作为测试。实际上发送的信息只有 4 个字节,按照每个数据包携带一个加密信息作为载体的规则,按说应该有 4 个数据包,但是实际上因为开始标志和结束标志都要作为实际上需要传输的信息,而每个标志需要用一个独立数据包进行传输。因此实际发送的数据包数量为 6。
可以看到接收方每次接收到一个数据包,对数据包进行逆处理,记录真正的 ip 地址和加密的信息,但是展示的是此时发送给接收方的 ip 地址,也就是发送方想要别人看见的 ip 地址。
第一次 ip 地址的末尾为 0,为开始标志。此时启动接收方的信息记录程序。每次接收到一个新的数据包,对 ip 末位 byte 进行解密并记 录。直到再接收到一个 ip 地址末尾为 0 的数据包作为结束标志为止。
当结束接收后,打印真正的存在于开始和结束标志数据包中的真正的 IP 地址,并展示隐藏信息。
4.3 项目评价与反思
4.3.1 优点
-
通过多个 IP 地址发送数据,一方面提升了发送者的隐秘性,其次被拦截后攻击者很有可能认为这只是发送者用来隐藏自己的手段,这样就掉入了第二个陷阱,也就是容易忽略 IP 地址的重要 性。仅仅关注数据包本身的内容。这就是对人性的利用
-
每次数据包发送的目标传输端口号不同,部分提高了隐蔽性
-
通过对数据包进行排序。减少了网络不稳定导致的到达顺序不一致的可能性。增强了程序的鲁棒性
-
在开始标志和结束标志数据包中增加了加密后的真实地址的信息,可以选择是否让接收者看见。如果选择让其看见,也可以保证拦截者不看见
4.3.2 缺点
-
加密信息太少,每个数据包仅加密一个字节,因此局限性比较大
-
mac 地址用来存储数据包实际的发送序列好,如果 mac 地址不同,但是 IP 地址相同比较可疑(不过这个问题的解决比较容易,并不能算是一个大问题)
-
比较取巧,如果拦截方知道了真实的加密策略,拦截很容易
五、实验心得与感悟
5.1 收获
本次实验,我手写了一个安全隐蔽传输程序,该程序实现了通过将一段加密信息分布存储在多个数据包的源 IP 地址处,既实现了信息隐藏,又对发送者进行了隐匿。且这种隐匿方式可以做到对接受者可见但是对路由过程中的窥探者进行隐藏。相当于一举三得。在此次实验中,我学习了很多 scapy 库的相关 API 的调用。UDP 协议的包结构以及亲自实现了发送和接收的整个流程。收获良多。
除此之外,这次实验也是对大三上的上半学期的许多课程学习内容的一次融会贯通,包括计算机网络,网络与信息安全,还有一点的操作系统课程设计方面学到的知识。实验覆盖面广,与课程内容联合紧密。 且有新颖性。
我认为这种隐藏方法的具体实现并不高深,只是非常新颖。而且有价值的地方在于它利用到了人性。这也和网络与信息安全课上老师强调的内容是一样的。老师讲到了网络攻击与防御发展到后就是人性的思考与判断。提到了攻击者需要站在防御者的角度思考下手点,反之亦然。
5.2 课程感想
老师网络与信息安全这门课程非常系统,前两周老师花了许多精力重点介绍了当前网络完全这个行业的现状和这一学科的重要性和潜力。讲述了行业的发展情况。这促使我们在学习具体内容时能够时刻在脑海中有一个整体的框架,且端正了我们的学习态度。
此外,老师在理论方面教授了网络安全的基础,也就是密码学。以密码学为基础讲授了网络安全的攻防策略和相关的具体技术。有概念性质的防火墙技术,病毒,等各种概念,也有实践性质的缓冲区溢出以及漏洞利用工具的使用。老师的课程为我们搭建起了整个网络安全学科的整体架构,打开了信息安全的大门。其中具体的内容还需要自己在未来进一步填充。
参考文献
- 加密货币钱包的分布式破解系统(深圳大学·马超)
- 基于J2EE权限管理系统平台设计与实现(吉林大学·任翔)
- 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 基于JSP平台的网络数据库研究与开发(西南交通大学·岳丽全)
- 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
- 微服务架构的数据传输和鉴权安全研究(杭州电子科技大学·金一科)
- 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
- 基于DES和RSA算法的数据加密传输系统的设计和实现(苏州大学·朱作付)
- 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
- 基于ZYNQ的SM2密钥交换系统设计与实现(黑龙江大学·刘晓东)
- 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
- 南京师范大学泰州学院电子邮件系统的设计与实现(电子科技大学·王赒晋)
- 基于web的旅游服务平台的设计与实现(内蒙古大学·张凡)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码驿站 ,原文地址:https://m.bishedaima.com/yuanma/35593.html