当前位置: 查字典论文网 >> Linux下的网络层加密解密的实现

Linux下的网络层加密解密的实现

格式:DOC 上传日期:2015-08-04 09:25:48
Linux下的网络层加密解密的实现
时间:2015-08-04 09:25:48     小编:

【摘要】:本文以下内容将对Linux下的网络层加密解密的实现进行研究和探讨,以供参考。

【关键词】:Linux;网络层;加密解密;实现

中图分类号:G250 文献标识码: A

1、前言

随着网络技术在各行各业中的广泛应用,网络安全逐渐成为一个重要的问题,Linux是一个优秀的、开源的操作系统,可以通过修改Linux操作系统内核的网络协议,以实现对网络通信数据的加密。本文以下内容将对Linux下的网络层加密解密的实现进行研究和探讨,以供参考。

2、网络数据加密技术概述

对于在两个网络节点间的某一次通信链路,链路加密能为网上传输的数据提供安全保证,对于链路加密,所有消息在被传输之前进行加密,在每一个节点对接收到的信息进行解密,然后先使用下一个链路的密钥对消息进行加密,再进行传输,再到达目的地之前,一条消息可能要经过许多通信链路的传输。由于在每一个中间传输节点消息均被解密后重新进行加密,因此,包括路由信息在内的链路上的所有数据均以密文形式出现,这样链路加密就掩盖了被传输信息的源点和终点,由于填充技术的使用以及填充字符在不需要传输数据的情况下就可以进行加密,这使得消息的频率和长度特性得以掩盖,从而可以防止对通信业务进行分析。尽管链路加密在计算机网络环境中使用得相当普遍,但它并非没有问题,链路加密通常用在点对点的同步或异步线路上,它要求先对在链路两端的加密设备进行同步,然后使用一种链模式对链路上传输的数据进行加密,这就给网络性能和可管理性带来了副作用。在一个我那个罗节点,链路加密进在通信链路上提供安全性,消息以明文形式存在,因此所有节点在物理上必须是安全的,否则就会泄露明文内容。然后保证每一个节点的安全性需要较高的费用,为每一个节点提供加密硬件设备和一个安全的物理环境所需要的费用由以下几部分组成:保护节点物理安全的雇员开销,为确保安全策略和程序的正确执行而进行审计时的费用,以及为防止安全性被破坏时带来损失而参加保险的费用。

尽管节点加密能给网络数据提供较高的安全性,但它在操作方式上与链路加密是类似的,两者均在通信链路上为传输的信息提供安全性,都在中间节点先对信息进行解密,然后进行加密,因为要对所有传输的数据进行加密,所以加密过程对用户是透明的。然而与链路加密不同,节点加密不允许消息在网络节点以明文形式存在,它先把收到的消息进行解密,然后采用另一个不同的密钥进行加密,这一过程是在节点上的一个安全模块中进行。

端到端加密允许数据在从源点到终点的传输过程中始终以密文形式存在,采用端到端加密,消息在被传输时到达终点之前不进行解密,因为消息在整个传输过程中均受到保护,所以即使有节点被损坏也不会使消息泄露。端到端加密系统的价格比较便宜,并且与链路加密和节点加密相比更可靠,更容易设计、实现和维护,端到端加密还避免了其他加密系统所固有的同步问题,因为每个报文包均是独立被加密的,所以一个报文包所发生的传输错误不会影响后续的报文包。

3、系统设计与实现

3.1,系统的总体设计

内核嵌入部分主要实现对套接字缓存的书籍进行加密、解密,在内核中定义的函数均在Linux/include/net/IP.h中声明。对于IP包的加密状况,这里采用设置加密位来标志该IP包是否被加密,而由于IP头中的TOS字段作为优先权的高3位已经废弃,为了减少内核的大小,采取把TOS最高位置作为加密标志,以此判断包是否应该解密。

对于如何判断一个包是否应该加密,设计为判断目的IP地址,设计思路为把需要加密发送的目的IP地址存放到一个定义为全局变量的链表中,该链表在内核运行期间始终有效,并声明为模块可读写。

3.2,模块部分的设计与实现

由于模块主要是针对链表和文件的操作,为了能够使多个模块都能使用到这些函数,采取把一些主要函数定义在内核中,首先定义直接对链表操作的函数,定义对文件的操作,文件部分的函数均声明为模块可用,其它函数的定义也均声明为模块可用。功能模块主要包含对List的插入操作、删除操作和读操作,对DES密钥的修改,模块是Linux系统为防止内核不断扩大而设计的一种体系,它能运行于内核态,可以自由加载和删除,增加了系统的灵活性。

3.3,DES算法实现

由于套接字缓存在skbuff>data为数据开始,但是其并不是标准字符串的头指针,所以在此先对DES加密算法做一些修改,即添加一个参数,表示需加密的长度。而由于IP包的一个特点是,数据的长度为8的整数倍,所以这里的DES算法可以不考虑对字符串的填充。DES算法的主要实现思想为定义一个长度为64的unsigned char类型的字符数组把字符串的每8字节按位存储在该字符数组中。密钥也用基本相同的方法处理。加密算法的所有操作都以数组元素为单位操作,减少了位操作的繁琐。

3.4,对内核函数的修改

主要通过对list的查询和加密位的检查调用加密算法实现对数据的加密解密。在IP-input.c中的ip-local-deliver()函数中decskb()需被调用,对套接字缓存中IP头以后的数据进行解密。并检查list,如果list中没有该源IP地址,则插入相应的程序段。而由于数据包传出过程中有多处进入IP层的借口,所以在IP-input.c中也分别在ip-build-and-send-pkt()、ip-queue-xmit()和ip-push-pending-frames()中encskb()需被调用。由于在加密过程中需要对TOS字段进行设置,所以应该在计算IP头检验和之前调用,以避免多次计算检验。

4、结尾

本文以上内容对Linux下的网络层加密解密的实现进行了分析和探讨,表达观点和见解的同时,也加深了对TCP/IP协议栈的认识,对Linux网络协议栈的实现过程有了进一步的了解。不过本人也深知,网络安全的重要性,而只有不断提高加密技术,才能确保网络在一个健康的环境中运行。

全文阅读已结束,如果需要下载本文请点击

下载此文档

相关推荐 更多