Linux下的网络层加密解密的实现论文.docx
- 文档编号:5725104
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:23
- 大小:275.79KB
Linux下的网络层加密解密的实现论文.docx
《Linux下的网络层加密解密的实现论文.docx》由会员分享,可在线阅读,更多相关《Linux下的网络层加密解密的实现论文.docx(23页珍藏版)》请在冰豆网上搜索。
Linux下的网络层加密解密的实现论文
Linux下的网络层加密解密的实现
摘要
随着网络技术在各行各业中的广泛应用,网络安全逐渐成为一个重要的问题。
Linux是一个优秀的、开源的操作系统,非常适合作为一些新技术的测试平台。
本文修改Linux操作系统内核的网络协议,以实现对网络通信数据的加密。
先介绍了网络数据加密的发展和现状。
接着分析了网际协议、DES加密算法和Linux下的网际协议的实现和套接字结构。
然后,实现了DES算法,对内核进行了修改,添加了一些功能性内核模块。
在此基础上设计和实现了一个位于IP层的端到端加密的系统,整个系统嵌入到Linux内核中,可以通过内核模块对其进行操作,来实现其功能。
该系统的主要特点是针对IP地址判断是否进行加密操作。
最后,通过测试验证了系统设计的正确性。
关键字:
网络层;Linux内核;端到端;加密;模块;网络通信
TheImplementationofEncryptionandDecryptionatNetLayerbasedonLinux
Abstract
Withtheabroaduseofnetworktechnologyinvarioustrades,networksecurityisbecominganimportantissue.LinuxisanexcellentOpen-sourceOperatingSystemandisverysuitableforthetestofsomenewtechnology.Inthispaper,thenetworkprotocolstackoftheLinuxoperatingsystemkernelischangedtoencryptnetworkcommunicationdata.Firstly,introducesthedevelopmentandactualityofthenetworkdataencryption.Secondly,analysestheinernetprotocol,theDESencryptionalgorithm,andtheimplementationofinternetprotocolandthesocketstructureinthelinuxkernel.Whereafter,realizestheDESalgorithm,changesthekernel,andaddssomefunctionalkernelmodules.Andthen,anIPend-to-endencryptionsystemisdesignedandimplemented,anditisembededinthelinuxkernel,wecanachieveitsfunctionthroughkernelmodule.Lastly,atestisgiventotestifythecorrectnessofthedesign.
KeyWords:
Netlayer;Linuxkernel;End-to-end;Encrypt;Module;Networkcommunications
论文总页数:
23页
1引言
随着网络技术的发展,网络安全也就成为当今网络社会的焦点中的焦点,几乎没有人不在谈论网络上的安全问题,病毒、黑客程序、邮件炸弹、远程侦听等这一切都无不让人胆战心惊。
病毒、黑客的猖獗使身处今日网络社会的人们感觉到谈网色变,无所适从。
但我们必需清楚地认识到,这一切一切的安全问题我们不可一下全部找到解决方案,况且有的是根本无法找到彻底的解决方案,如病毒程序,因为任何反病毒程序都只能在新病毒发现之后才能开发出来,目前还没有哪能一家反病毒软件开发商敢承诺他们的软件能查杀所有已知的和未知的病毒,所以我们不能有等网络安全了再上网的念头,因为或许网络不能有这么一日,就象“矛”与“盾”,网络与病毒、黑客永远是一对共存体。
现代的网络加密技术就是适应了网络安全的需要而应运产生的,它为我们进行一般的电子商务活动提供了安全保障,如在网络中进行文件传输、电子邮件往来和进行合同文本的签署等。
其实加密技术也不是什么新生事物,只不过应用在当今电子商务、电脑网络中还是近几年的历史。
当今网络社会选择加密已是我们别无选择,其一是我们知道在互联网上进行文件传输、电子邮件商务往来存在许多不安全因素,特别是对于一些大公司和一些机密文件在网络上传输。
而且这种不安全性是互联网存在基础——TCP/IP协议所固有的,包括一些基于TCP/IP的服务;另一方面,互联网给众多的商家带来了无限的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。
为了解决这一对矛盾、为了能在安全的基础上大开这通向世界之门,我们只好选择了数据加密和基于加密技术的数字签名。
2网络数据加密技术
2.1链路加密
对于在两个网络节点间的某一次通信链路,链路加密能为网上传输的数据提供安全保证。
对于链路加密(又称在线加密),所有消息在被传输之前进行加密,在每一个节点对接收到的消息进行解密,然后先使用下一个链路的密钥对消息进行加密,再进行传输。
在到达目的地之前,一条消息可能要经过许多通信链路的传输。
由于在每一个中间传输节点消息均被解密后重新进行加密,因此,包括路由信息在内的链路上的所有数据均以密文形式出现。
这样,链路加密就掩盖了被传输消息的源点与终点。
由于填充技术的使用以及填充字符在不需要传输数据的情况下就可以进行加密,这使得消息的频率和长度特性得以掩盖,从而可以防止对通信业务进行分析。
尽管链路加密在计算机网络环境中使用得相当普遍,但它并非没有问题。
链路加密通常用在点对点的同步或异步线路上,它要求先对在链路两端的加密设备进行同步,然后使用一种链模式对链路上传输的数据进行加密。
这就给网络的性能和可管理性带来了副作用。
在线路/信号经常不通的海外或卫星网络中,链路上的加密设备需要频繁地进行同步,带来的后果是数据丢失或重传。
另一方面,即使仅一小部分数据需要进行加密,也会使得所有传输数据被加密。
在一个网络节点,链路加密仅在通信链路上提供安全性,消息以明文形式存在,因此所有节点在物理上必须是安全的,否则就会泄漏明文内容。
然而保证每一个节点的安全性需要较高的费用,为每一个节点提供加密硬件设备和一个安全的物理环境所需要的费用由以下几部分组成:
保护节点物理安全的雇员开销,为确保安全策略和程序的正确执行而进行审计时的费用,以及为防止安全性被破坏时带来损失而参加保险的费用。
在传统的加密算法中,用于解密消息的密钥与用于加密的密钥是相同的,该密钥必须被秘密保存,并按一定规则进行变化。
这样,密钥分配在链路加密系统中就成了一个问题,因为每一个节点必须存储与其相连接的所有链路的加密密钥,这就需要对密钥进行物理传送或者建立专用网络设施。
而网络节点地理分布的广阔性使得这一过程变得复杂,同时增加了密钥连续分配时的费用。
2.2节点加密
尽管节点加密能给网络数据提供较高的安全性,但它在操作方式上与链路加密是类似的:
两者均在通信链路上为传输的消息提供安全性,都在中间节点先对消息进行解密,然后进行加密。
因为要对所有传输的数据进行加密,所以加密过程对用户是透明的。
然而,与链路加密不同,节点加密不允许消息在网络节点以明文形式存在,它先把收到的消息进行解密,然后采用另一个不同的密钥进行加密,这一过程是在节点上的一个安全模块中进行。
节点加密要求报头和路由信息以明文形式传输,以便中间节点能得到如何处理消息的信息。
因此这种方法对于防止攻击者分析通信业务是脆弱的。
2.3端到端加密
端到端加密允许数据在从源点到终点的传输过程中始终以密文形式存在。
采用端到端加密(又称脱线加密或包加密),消息在被传输时到达终点之前不进行解密,因为消息在整个传输过程中均受到保护,所以即使有节点被损坏也不会使消息泄露。
端到端加密系统的价格便宜些,并且与链路加密和节点加密相比更可靠,更容易设计、实现和维护。
端到端加密还避免了其它加密系统所固有的同步问题,因为每个报文包均是独立被加密的,所以一个报文包所发生的传输错误不会影响后续的报文包。
此外,从用户对安全需求的直觉上讲,端到端加密更自然些。
单个用户可能会选用这种加密方法,以便不影响网络上的其他用户,此方法只需要源和目的节点是保密的即可。
端到端加密系统通常不允许对消息的目的地址进行加密,这是因为每一个消息所经过的节点都要用此地址来确定如何传输消息。
由于这种加密方法不能掩盖被传输消息的源点与终点,因此它对于防止攻击者分析通信业务是脆弱的。
3系统的总体分析
3.1网际协议分析
网络层是TCP/IP协议栈的核心组件,网际协议(InternetProtocol)是网络层的最重要协议。
它为Internet以及其他基于IP的网络上的所有数据通信提供了基本服务。
IP的首要任务是:
隐藏各种数据传输层之间的差异,并且为不同的网络技术提供一种统一的表示。
总的来说,IP实现了如下功能:
Ø提供了无连接的、不安全的数据报服务;
Ø定义了IP数据报是数据传输的基本单元;
Ø定义了IP寻址机制;
Ø在各种互联网络之间路由、转发IP数据报;
Ø验证包的生存期;
Ø分片、组装包;
Ø使用ICMP输出错误。
IP的开发思路是,即使有一些传输故障存在,仍能维持两个之间的通信。
因此,IP的开发基础是数据报交换原理。
IP的头字段如图1:
Ø4位版本号:
表示IP的版本,现有IPv4和IPv6;
Ø4位首部长:
表示IP首部长,值域为5—15;
Ø8位TOS字段:
包括3位优先权字段(已废弃),4位TOS子字段和1位未用位(必须为0);
Ø16位IP数据报总长度,包括头部;
Ø16位标志位:
为此IP数据报的唯一标志(同一数据报分片后此相同);
Ø3位标志:
用于分片于组装的标志位;
Ø13位片偏移:
用于确定组装分片的顺序;
Ø8位生存时间:
限定路由次数,避免无用数据报长期占用网络资源;
Ø8位协议:
标记上层协议类型;
Ø16位首部检验和:
首部检验和存放与其中,作用为检验IP头正确性;
在Linux系统中IP头部以结构体方式实现,定义在include/linux/ip.h中:
structiphdr{
#ifdefined(__LITTLE_ENDIAN_BITFIELD)
__u8ihl:
4,
version:
4;
#elifdefined(__BIG_ENDIAN_BITFIELD)
__u8version:
4,
ihl:
4;
#else
#error"Pleasefix
#endif
__u8tos;
__u16tot_len;
__u16id;
__u16frag_off;
__u8ttl;
__u8protocol;
__u16check;
__u32saddr;
__u32daddr;
/*Theoptionsstarthere.*/
};
3.2套接字结构分析
在Linux系统TCP/IP协议栈设计中的一个基本概念就是套接字缓存,称作sk_buff,在整个联网代码中用于存储各种信息。
它满足了网络协议对内核的存储器管理能力提出的很多要求。
这些要求包括能方便的操作可变长缓存,能在缓存的头部和尾部填加数据,能从缓存中移除数据,并能尽量减少这些操作所做的数据复制。
它被定义在include/linux/skbuff.h中,其结构表示如图2:
由图2可见,套接字缓存由两部分组成:
Ø报文数据:
该存储区域保存了实际在网络中传输的数据;
Ø管理数据:
当一个报文在Linux内核中进行处理时,内核需要额外的数据,这些数据没有必要存储在实际的报文当中。
这些主要是实现方式中特有的数据(指针、计数器等)。
他们构成了协议实例间交换的接口控制信息。
套接字缓存是用来定位和管理一个报文在内核中被处理的整个周期的。
当应用程序向一个套接字传输数据后,该套接字就创建相应的套接字缓存并将有效数据的地址存入此结构的变量中。
在报文穿过层的过程中,每一层的报文的头信息被插入到有效数据之前。
由于为报文头申请了足够的空间,所以避免了在报文头之后对有效数据的多次拷贝。
有效数据只被拷贝了两次,一次是从用户空间到内核空间,一次是到达网卡的时候。
3.3Linux下IPv4的实现
对于基于TCP/IP协议实现的网络来说,IP层是完成数据传输的必要层,网络层以上的包都要经过网络层。
数据包可以从三处进入具体的网络层:
Ø通过网络适配器抵达计算机的包会存储在对应的输入队列中。
判定了数据链路层中的三层协议后,上层协议为IP的包会传递给ip_rcv()函数。
Ø第二处入口位于传输层协议接口处。
这些是TCP、UDP等协议用到的包。
这些协议使用ip_queue_xmit()函数将他们打包成IP包并发送出去。
还有一些其他函数也能生成IP包。
Ø第三种情况就是:
IP层自动主动生成IP包。
这些包主要是新的多播包、大型包的碎片及不含专门有效负载的ICMP包或者IGMP包。
这些包是用特殊的方法创建的(如icmp_send())。
包一旦进入了网络层,就会有多种退出选择。
对IP而言,我们一般只区分计算机可扮演的两种不同角色,其中第一种是第二种的特例。
Ø终端系统:
Linux计算机正常情况下会配置成终端系统——它会用作工作站或者服务器。
主要负责的任务是运行用户应用程序或者提供应用程序服务。
终端系统的基本属性是,它们不会转发IP包。
也就是说,如果系统实际上只有一块网络适配器,即可认定它是终端系统。
即使有多种网络访问的系统也可以配置成终端系统——只要禁用包转发即可。
Ø路由器:
路由器将抵达一块网络适配器的IP包传递给另一块网络适配器。
也就是说,路由器拥有多块在本地接口之间转发包的网络适配器。
包抵达路由器之后,一般有两种选择:
可以本地投寄(即传递给上层协议处理);或者,可以转发包。
因此,路由器可以看作是终端系统的一般化,它还有额外的包转发功能。
与终端系统相反,路由器一般不会启动任何应用程序,以此确保尽可能快的转发包。
Linux内核中IP包流经网络层时,其主要途径如图3。
首先分析传入包的情况。
Ip_rcv()进行一些IP协议工作。
首先,该函数丢弃那些并非去往本地计算机的包;接着过滤掉包头错误的包,主要是检验它的尺寸是否至少相当于IP包头,包是否是IPv4,检验和是否正确,包的长度是否错误。
然后再把包传递给ip_rcv_finish()。
Ip_rcv_finish()中激活ip_route_input()函数以决定包的路由。
接下来,
ip_rcv_finish检查IP头是否含有选项。
如果确定含有选项,则分析这些选项并创建一个ip_options的结构;所有选项设置都会有效的存储在这个结构中。
最后在ip_rcv_finish()中,IP流程走到了一个岔路口:
包是去往本地还是被转发:
Ø遇到应该投递给本地计算机的单播包或多播包时,则进入ip_local_deliver();
Ø遇到需要转发的单播包则进入ip_forward();
Ø遇到需要转发的多播包则交给ip_mr_input()处理;
由于这里路径出现分支,而针对个人计算机,一般不开启转发功能,在这里只描述包的本地投寄。
不需要转发的数据包被ip_rcv_finish()传递给ip_local_deliver()。
Ip_local_deliver()的首要任务是利用ip_defrag()组装那些分片后的包。
接着,流程流向ip_local_deliver_finish()。
在这里会需要为下一步处理判定传输协议。
在这里,分析包的传出流程。
本地创建的包在处理时与传入时是完全独立的。
首先,创建IP头的函数不只一个,而是多个,其中包括了ip_queue_xmit()、ip_build_and_send_pkt()和ip_push_pending_frames()。
每个函数针对某项特殊用法进行了定制和优化。
其中ip_build_and_send_pkt()只处理TCP连接过程中的SYN/ACK等包,而ip_queue_xmit()函数来自上层协议的其他包,ip_push_pending_frames()处理ip层自身的包。
它们首先会检查套接字结构中路由。
若尚未选择路由,则启用ip_route_output()选出一个路由。
接着会填充IP包的各个字段(版本、包头长度、TOS字段、碎片偏移量、地址级协议字段)。
然后,会由ip_options_build()添加可能存在的IP选项。
最后计算检验和。
然后流程流经ip_queue_xmit2()等函数,最后到达链路层,由链路层继续处理。
3.4DES算法介绍
美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。
加密算法要达到的目的(通常称为DES密码算法要求)主要为以下四点:
Ø提供高质量的数据保护,防止数据XX的泄露和未被察觉的修改:
Ø具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;
ØDES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;
Ø实现经济,运行有效,并且适用于多种完全不同的应用。
1977年1月,美国政府颁布:
采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES/DataEncryptionStandard)。
目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。
DES算法的入口参数有三个:
Key、Data、Mode。
其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:
加密或解密。
DES算法是这样工作的:
如Mode为加密,则用Key去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。
在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。
这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
DES算法是把64位明文输入块变成64位密文输出块,其流程图如图4:
其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:
58,50,12,34,26,18,10,2,60,52,44,36,28,20,12,4,
62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,
57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,
61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,
即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。
L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:
设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:
L0=D58D50...D8;R0=D57D49...D7。
经过16次迭代运算后。
得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。
逆置换正好是初始置的逆运算,例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,其逆置换规则如下表所示:
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
34,2,42,10,50,18,5826,33,1,41,9,49,17,57,25,
放大换位表
32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,
12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,
22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1,
单纯换位表
16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,
2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25,
在f(Ri,Ki)算法描述图中,S1,S2...S8为选择函数,其功能是把6bit数据变为4bit数据。
下面给出选择函数Si(i=1,2......8)的功能表:
选择函数Si
S1:
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
S2:
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
S3:
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
S4:
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
S5:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 网络 加密 解密 实现 论文