链路加密方案的设计


数据链路层是OSI系统结构中的第二层,如果采用链路加密,则网络中每条通信链路上的加密是独立实现的.对每条链路可以使用不同的密钥,这样,当某条链路受到破坏时也不会导致其他链路上传递的加密信息被解出。NDIS微端口驱动位于网络链路层,是网络驱动中与网卡结合*紧密的驱动程序.因此可以对微端口驱动程序进行改造,在驱动程序中实现对数据帧的截取,并调用加解密模块对数据进行加解密.对驱动程序的改造大体可以分为两步:截取数据帧和加解密模块的实现.

截取数据帧
NDIS库为微端 口驱动程序提供了一系列接口函数.微端口驱动程序可以利用这些函数在主机与网络之间建立联系,也可以利用这些函数来截取数据.


在发送本机数据到网卡之前,可以在微端口驱动程序中加入截取子程序截获数据帧,并把数据帧送人加密模块进行加密,然后将加密后的密文送入网卡缓冲区中.接收数据时,从网卡缓冲区中接收的密文被送人主机 内存.密文在送往上层网络驱动程序之前被接收截取子程序截获,并调用解密模块将其解密成明文,之后再将明文数据送交上层处理.

加解密模块
考虑到帧长的限制,对于数据帧加密要求必须保证其明文和密文长度相等.因此在加解密模块当中采用分组密码算法.分组密码的工作方式是将明文分成固定长度的组(块),用同一密钥对每一块加密,输出也是固定长度的密文,本文以DES为例.


考虑到软件加解密过程速度较慢,为了提高速度,直接将加解密模块嵌人到微端口驱动程序中,这样所有对数据的处理将全部在系统底层进行,大大提高了数据处理的效率.*后将所有模块集成在一起,编译生成网卡驱动程序 MyDriver.SYS文件,分别安装在两台主机中进行测试.

恒波文件夹加密软件转载自张杨的《基于NDIS的数据链路层加密》。