Linux下的网络层加密解密的实现
随着网络技术在各行各业中的广泛应用,网络安全逐渐成为一个重要的问题。linux是一个优秀的、开源的操作系统,非常适合作为一些新技术的测试平台。本文修改linux操作系统内核的网络协议,以实现对网络通信数据的加密。先介绍了网络数据加密的发展和现状。接着分析了网际协议、des加密算法和linux下的网际协议的实现和套接字结构。然后,实现了des算法,对内核进行了修改,添加了一些功能性内核模块。在此基础上设计和实现了一个位于ip层的端到端加密的系统,整个系统嵌入到linux内核中,可以通过内核模块对其进行操作,来实现其功能。该系统的主要特点是针对ip地址判断是否进行加密操作。最后,通过测试验证了系统设计的正确性。
关键字:网络层;linux内核;端到端;加密;模块;网络通信
引言
随着网络技术的发展,网络安全也就成为当今网络社会的焦点中的焦点,几乎没有人不在谈论网络上的安全问题,病毒、黑客程序、邮件炸弹、远程侦听等这一切都无不让人胆战心惊。病毒、黑客的猖獗使身处今日网络社会的人们感觉到谈网色变,无所适从。
但我们必需清楚地认识到,这一切一切的安全问题我们不可一下全部找到解决方案,况且有的是根本无法找到彻底的解决方案,如病毒程序,因为任何反病毒程序都只能在新病毒发现之后才能开发出来,目前还没有哪能一家反病毒软件开发商敢承诺他们的软件能查杀所有已知的和未知的病毒,所以我们不能有等网络安全了再上网的念头,因为或许网络不能有这么一日,就象“矛”与“盾”,网络与病毒、黑客永远是一对共存体。
现代的网络加密技术就是适应了网络安全的需要而应运产生的,它为我们进行一般的电子商务活动提供了安全保障,如在网络中进行文件传输、电子邮件往来和进行合同文本的签署等。其实加密技术也不是什么新生事物,只不过应用在当今电子商务、电脑网络中还是近几年的历史。
当今网络社会选择加密已是我们别无选择,其一是我们知道在互联网上进行文件传输、电子邮件商务往来存在许多不安全因素,特别是对于一些大公司和一些机密文件在网络上传输。而且这种不安全性是互联网存在基础——tcp/ip协议所固有的,包括一些基于tcp/ip的服务;另一方面,互联网给众多的商家带来了无限的商机,互联网把全世界连在了一起,走向互联网就意味着走向了世界,这对于无数商家无疑是梦寐以求的好事,特别是对于中小企业。为了解决这一对矛盾、为了能在安全的基础上大开这通向世界之门,我们只好选择了数据加密和基于加密技术的数字签名。
2 网络数据加密技术
2.1 链路加密
对于在两个网络节点间的某一次通信链路, 链路加密能为网上传输的数据提供安全保证。对于链路加密(又称在线加密), 所有消息在被传输之前进行加密, 在每一个节点对接收到的消息进行解密, 然后先使用下一个链路的密钥对消息进行加密, 再进行传输。在到达目的地之前, 一条消息可能要经过许多通信链路的传输。
由于在每一个中间传输节点消息均被解密后重新进行加密, 因此, 包括路由信息在内的链路上的所有数据均以密文形式出现。这样, 链路加密就掩盖了被传输消息的源点与终点。由于填充技术的使用以及填充字符在不需要传输数据的情况下就可以进行加密,这使得消息的频率和长度特性得以掩盖, 从而可以防止对通信业务进行分析。
尽管链路加密在计算机网络环境中使用得相当普遍, 但它并非没有问题。链路加密通常用在点对点的同步或异步线路上, 它要求先对在链路两端的加密设备进行同步, 然后使用一种链模式对链路上传输的数据进行加密。这就给网络的性能和可管理性带来了副作用。
在线路/信号经常不通的海外或卫星网络中,链路上的加密设备需要频繁地进行同步, 带来的后果是数据丢失或重传。另一方面, 即使仅一小部分数据需要进行加密, 也会使得所有传输数据被加密。
在一个网络节点, 链路加密仅在通信链路上提供安全性, 消息以明文形式存在, 因此所有节点在物理上必须是安全的, 否则就会泄漏明文内容。然而保证每一个节点的安全性需要较高的费用, 为每一个节点提供加密硬件设备和一个安全的物理环境所需要的费用由以下几部分组成: 保护节点物理安全的雇员开销, 为确保安全策略和程序的正确执行而进行审计时的费用, 以及为防止安全性被破坏时带来损失而参加保险的费用。
在传统的加密算法中, 用于解密消息的密钥与用于加密的密钥是相同的,该密钥必须被秘密保存, 并按一定规则进行变化。这样, 密钥分配在链路加密系统中就成了一个问题, 因为每一个节点必须存储与其相连接的所有链路的加密密钥, 这就需要对密钥进行物理传送或者建立专用网络设施。而网络节点地理分布的广阔性使得这一过程变得复杂, 同时增加了密钥连续分配时的费用。
2.2 节点加密
尽管节点加密能给网络数据提供较高的安全性, 但它在操作方式上与链路加密是类似的:两者均在通信链路上为传输的消息提供安全性,都在中间节点先对消息进行解密,然后进行加密。因为要对所有传输的数据进行加密,所以加密过程对用户是透明的。
然而,与链路加密不同, 节点加密不允许消息在网络节点以明文形式存在,它先把收到的消息进行解密, 然后采用另一个不同的密钥进行加密, 这一过程是在节点上的一个安全模块中进行。
节点加密要求报头和路由信息以明文形式传输, 以便中间节点能得到如何处理消息的信息。因此这种方法对于防止攻击者分析通信业务是脆弱的。
2.3 端到端加密
端到端加密允许数据在从源点到终点的传输过程中始终以密文形式存在。采用端到端加密(又称脱线加密或包加密), 消息在被传输时到达终点之前不进行解密, 因为消息在整个传输过程中均受到保护, 所以即使有节点被损坏也不会使消息泄露。
端到端加密系统的价格便宜些, 并且与链路加密和节点加密相比更可靠,更容易设计、实现和维护。端到端加密还避免了其它加密系统所固有的同步问题, 因为每个报文包均是独立被加密的, 所以一个报文包所发生的传输错误不会影响后续的报文包。此外,从用户对安全需求的直觉上讲, 端到端加密更自然些。单个用户可能会选用这种加密方法, 以便不影响网络上的其他用户, 此方法只需要源和目的节点是保密的即可。
端到端加密系统通常不允许对消息的目的地址进行加密, 这是因为每一个消息所经过的节点都要用此地址来确定如何传输消息。由于这种加密方法不能掩盖被传输消息的源点与终点, 因此它对于防止攻击者分析通信业务是脆弱的。