移动存储设备跨平台加密技术研究与实现

来源:优秀文章 发布时间:2023-04-16 点击:

张 帅 刘 勇 孔 坚 冯词童 安锦程 白 鑫 高晓红

1(奇安信科技集团股份有限公司 北京 100020) 2(中国科学院信息工程研究所 北京 100093)

随着计算机信息技术的普及和发展,U盘、移动硬盘等移动存储设备的应用越来越广泛,由此带来的数据泄露也经常发生.为了防止移动存储恶意泄露保密、敏感等数据事件的发生,各种对移动存储设备的加密和权限控制技术层出不穷.主流的方式是对移动存储的禁用、写、读等访问操作进行访问权限控制,根据需要的意图可配置策略,限制携带敏感重要数据的访问权限和数据流向权限.目前移动存储设备介质访问控制方面的研究主要针对数据流入与流出的方向和数据内容本身的访问权限控制,根据数据访问者的角色赋予其对应的访问控制权限等.根据预定义的敏感关键词库[1]进行匹配,匹配到则停止传输与访问,该方法的匹配关键词的内容检测算法会很大程度地影响移动存储设备介质的使用体验和数据交换速度.基于用户角色的访问权限控制可以实现对访问者的自身角色进行多级的策略划分,通常做法是用户身份与其角色类型相关联,角色类型和落地具体访问操作权限值相关联,这样的方案设计会大大增加移动存储系统管理建设和使用难度,同时也会大幅度增加系统的性能开销.上述主流方案中,所有数据在存储介质设备中是明文存储,因此存在数据存储信息的安全性问题.鉴于此,移动存储介质的加密技术便成为另一个主流研究方向.目前移动存储介质的加密方式有2种实现:软件模拟加密和硬件介质加密,软加解密是将加密软件程序内置到存储介质中,将加解密程序存放在设备端.硬件介质加密是指通过存储介质的控制芯片进行加解密,实现实时加解密运输,整个加解密过程在存储介质内部完成,该方案的安全级别高,设计比较复杂,硬件成本比较高,而且加解密算法都比较单一.无论上述何种方案,主流的加密存储介质技术方案均无法使得一个加密移动存储磁盘可以同时在Windows系统和Linux系统下跨平台下兼容运行.

因此本文提出了一种基于跨平台下解决移动存储设备的加解密技术方案.该方案是将移动存储设备集身份认证与数据加解密于一体,存储区域被划分为多个功能区域[2],加密数据区域的磁盘只有经过口令认证才能被系统识别并挂载,数据的加解密均在主机端实现而且对用户透明.本文首先针对1个磁盘进行扇区区域功能划分介绍,进而介绍不同分区下的功能,然后重点引出加密磁盘跨平台通用技术;
其次构建分析移动存储介质下底层数据加密、解密模块的技术原理,跟进Windows系统和Linux系统的不同特点,分别构建磁盘加密的不同系统模型;
综合基于上述技术原理和模块,分别在Windows系统和Linux系统上实现了加密移动存储系统,并对同一移动存储磁盘设备进行了实验技术方案验证,最后对加密移动存储的实现方案进行了功能性测试和性能性指标测试.

通用跨平台的加密磁盘设计包括通用磁盘的扇区区域功能布局划分、加密磁盘识别模块和数据加解密模块.U盘识别模块主要功能是对加密U盘头部信息进行解析,如果加密U盘能够通过认证那么就允许挂载,这里称为内部系统识别.相对于内部系统识别,外部系统识别指的就是当加密U盘插入到非本系统时加密U盘是不会被识别的.数据加解密模块的主要功能是在不需要用户干预的情况下,自动完成数据的透明加解密.

2.1 通用跨平台加密磁盘的扇区区域布局划分

加密磁盘的扇区划分为若干个区域部分,如图1所示:

各地应依据水法和水污染防治法等法律法规,根据不同的保护目标、保护功能,同时考虑保护区的地理位置、地形地貌、地层岩性、水文地质条件、供水量、开采方式和污染源的分布等情况,建立各自地区的地下水保护区,确定相应的地下水保护管理级别,并通过法律和行政手段加以确认。在条件成熟时,应在南水北调受水区内统一划定地下水保护区,系统保护地下水水质和水量。

图1 加密磁盘扇区区域布局划分

加密磁盘的扇区结构布局划分6个区域:第1是分区表,容量为1 MB,记录磁盘的分区信息;
第2是FAT分区,容量为5 MB,这块区域是被格式化的Windows FAT32文件系统,存储一个带可执行的Windows认证程序,在Windows系统下接收用户点击输入口令;
第3是exFat分区,存储可执行的Linux存储认证程序,在Linux系统下接收用户点击输入认证口令;
第4是空闲区域,留作后续功能业务拓展;
第5是价值数据信息存储数据块区域,主要用于存储加密移动存储设备的身份信息、权限信息、加密因子等加密算法信息;
第6是核心大容量数据安全存储数据区域,占据整个磁盘最大的99.9%以上的物理容量,该区域存储加密过的用户数据,是基于磁盘扇区级的加密.在Windows系统下,加密移动磁盘插入主机后,系统自动挂载第2部分的FAT分区,接收用户密码输入,并进行基本合法性输入判断,登录程序获取身份认证存储数据区域的信息进行身份认证比对校验,正确比对成功之后挂载大容量数据磁盘数据块,经过上述核心步骤,Windows驱动程序可完成加密移动存储系统对介质设备的识别和加密数据区挂载访问;
在Linux系统上加密移动磁盘插入主机后,系统自动挂载第3部分的exFAT分区,接收密码输入,并进行基本的合法性校验,程序获取身份认证存储区域的身份信息,与输入的密码进行认证对比校验,比对成功之后,Linux下的fuse程序寻找空闲loop设备,实现虚拟磁盘与物理设备关联,并对其挂载访问,经过上述步骤,可完成Linux下加密存储设备介质的系统识别和加密大容量数据区挂载访问.

加密移动存储介质对比普通移动存储介质,普通移动存储介质仅仅是一块大容量数据区,当普通移动存储介质设备接入到主机系统上时,主机系统会根据系统的机制加载其数据存储区并实现自动挂载,用户的价值数据直接裸奔展示出来,存在数据泄露风险[3].加密移动存储介质定义了其自身的数据存储格式,只有接收了输入密码身份认证信息并且正确校验成功才会被识别并且访问大容量价值数据,保障了数据的安全性.

2.2 跨平台一致性数据结构设计

本文提出了基于通用跨平台加密移动磁盘的方案,所谓通用跨平台,即经过软件系统注册之后的移动磁盘,在主流的系统下,即Windows和Linux系统上都可以完美的兼容使用,且口令和数据一致性是需要得到保证的,用户无感知差异;
因此需保证注册区域扇区存储的数据是通用的,该区域容量为2 KB,记录存储设备(唯一标识ID、单位、用户、时间、初始密码、密钥数据key、序列号、PID、VID、权限、特殊标志位)等信息;
具体设计结构如图2所示.

2.3 通用加解密算法

加密算法采用的是基于SM4优化的加密算法,其特点是对称加解密[4],对于明文和密码长度一致;
采用1个扇区大小(512 B)对齐的方式,使用注册信息区域的密钥与口令计算的值,对磁盘扇区数据块进行512 B的整数倍加密与解密计算,图3和图4分别为加密数据块大小和对称加密算法原理.

图2 通用数据结构定义

图3 扇区大小整数倍加解密

图4 SM4对称数据加密算法

为了使注册处理后的移动存储能够同时兼容Windows和Linux系统,即加密存储区域的磁盘数据块能够在解密之后被系统识别,并且可以文件系统的方式对磁盘内的数据进行实时读写和管理;
在充分研究Windows和Linux系统底层机制上,利用系统固有的机制;
采用一种基于NTFS文件系统的自定义加密格式作为移动磁盘的加密数据区,对打开,SEEK,读取,写入等访问操作移动存储扇区数据进行HOOK拦截,将逻辑访问地址计算转化为实际偏移地址.

3.1 跨平台加密文件系统

在Windows系统[5]上,上层对加密磁盘区域的数据块进行NTFS文件系统格式化和读写访问,通过磁盘过滤驱动技术可以拦截所有对该磁盘操作的IRP操作请求,驱动在准确计算完偏移之后,如果收到写操作需要对数据进行加密之后再写入磁盘扇区,如果收到是读操作需要先读取对应扇区的数据,按照要求进行解密操作,将解密之后的数据返回给上层业务.

在Linux系统上,Linux内核fuse技术支持统一接口的文件系统的访问,如图5所示.

基于Linux[6]原生的ntfs-3g文件解析系统进行改造优化,重写mount/open/read/write/seek等系列函数,对加密磁盘区域的挂载、打开、读写等访问进行偏移计算,如图6所示.

图5 Linux虚拟盘框架技术图

图6 一致的数据处理流图

从图5和图6可以看出[7],任何对加密区域的设备块访问都会被拦截,因此当进行写磁盘数据块时需要按照注册区域通用的口令和密钥以及算法,对数据块进行对称加密再写入磁盘;
当进行读磁盘数据块时需要先读取对应的磁盘数据块,再进行解密,将解密之后的数据返回给应用层,创新性地通过这样的文件系统设计,即完成了在Windows/Linux系统下的体验和数据一致性使用.

3.2 加解密偏移计算方法

从磁盘扇区划分布局中能看出加密的磁盘数据区域是磁盘物理起始地址+分区表大小+FAT分区大小+exFat分区大小+空闲分区大小+注册信息区域大小,该计算所得结果就是我们称为加密磁盘的偏移大小.

由上我们也得出了如下计算公式:

实际的访问物理地址=逻辑访问地址+加密磁盘的偏移大小(如图7所示).

图7 偏移计算

加密U盘的实现包括3部分:加密U盘用户信息区的创建;
虚拟磁盘的创建;
加密U盘的管理.

4.1 加密磁盘Linux下的方案设计

基于第2节的理论研究,在Linux系统下本文进行了方案设计和技术实现.

整体设计图如图8所示.

在Linux系统下,首先获取磁盘设备的设备路径(记为/dev/sda)和磁盘设备的序列号、pid、vid等重要信息;
使用分区命令对该磁盘扇区进行重新分区整理,需要特别注意的是这里会对磁盘原数据造成破坏,需提前对重要数据作好备份,命令为parted -s /dev/sda mklabel msdos;
再对磁盘按照第2节的理论进行分区划分[8],这里注意需要从整个磁盘的首地址进行,并且指定分区的起始、终止的扇区位置,命令如下:parted -s /dev/sda mkpart primary fat16 2048s 12287s和parted -s /dev/sda mkpart primary 12288s 28671s这样把移动磁盘按照第2节理论分出了5 MB的分区和10 MB的分区.

图8 加密移动磁盘设计结构

对如上分区进行文件系统格式化[9],只有格式化之后的分区才可以被用户访问存储文件,命令如下:mkfs.fat -n QWIN -F32 /dev/sda1与mkfs.ext4 -F -L QLINUX -b 2048/dev/sda2 -m 5.上述命令执行完成后,这2个分区已经可以用来存放文件,将在Windows下设计实现的登录认证程序storeLoginWin.exe复制到第1个分区QWIN里,这样在Windows系统下,用户可以通过该程序输入口令将加密数据盘挂载起来;
将Linnux下的登录认证程序storeLoginLinux ELF文件复制到另外的分区QLINUX里,这样用户在Linux系统下可以通过该程序输入口令将加密数据盘挂载起来.

基于fuse的ntfs-3g文件系统拦截重写open函数、read函数、write函数[10],对要操作的数据块的位置均加固定偏移大小转化为真实的物理地址,再进行运算操作;
需要注意的是加解密算法是按照512 B一个扇区的整数倍进行运算的,因此在进行写磁盘时,如果偏移不是512 B整数倍时进行对齐矫正;
矫正方法是通过读取临近当前偏移距离最近的512 B对齐的磁盘偏移位置数据,长度为包含本次要写入的最小的512 B倍数,按照数据对齐的方式进行数据复制,一次性全部加密写入;
在进行读磁盘时,如果偏移或者长度不是512 B则对齐矫正;
矫正方法是通过读取临近当前偏移距离最近的512 B对齐的磁盘偏移位置数据,长度为包含本次要读取的最小的512 B倍数,按照数据对齐的方式进行数据复制,返回需要读取的数据.

在设备挂载时,由于/dev/sda1与/dev/sda1已经挂载,mount如果使用设备/dev/sda路径挂载,系统调用会返回设备占用无法挂载,为此,巧妙地采用了虚拟空闲loop设备关联绑定:先查询当前系统的空闲loop设备,获取后将空闲的loop设备与真实的物理设备路径./dev/sda进行设备关联,这样在挂载mount执行时,以/dev/loop设备为参数进行挂载访问[11],根据读写不同操作,加密移动存储系统会根据512 B的扇区计算单位进行加密与解密处理.

4.2 加密磁盘Windows下的方案设计

在Linux下注册的移动存储磁盘接入到Windows系统后,只会显示第1个分区启动区,启动区存放storeLogonWin.exe程序,打开storeLogonWin.exe后,输入密码,验证通过后,挂载加密数据区,加密数据区可以作为普通U盘使用.

为了使移动存储加密之后可以跨平台实现,因此注册区域的信息必须保证是一致公用的,使用该区域可以获取到存储的用户身份信息、标志信息、权限信息、关键的密钥信息等,在Windows下使用扇区读取API接口,读取该区域的数据,进行数据清洗;
口令认证成功后,当用户态应用程序对该磁盘数据块进行读写访问时,使用获取的密钥对加密数据区域进行动态加解密;
这样就保证了在加密数据区域与Linux下是一致的.

对比Linux下的方案设计实现,Windows同理,如果是重新注册也需要对磁盘进行相同的分区和格式化,区别在于所使用的命令和函数不同,在Windows下需要使用对应的API和命令进行,对应的函数可以在MSDN中查到[12],比如diskpart等;

在CreateFile的函数原型中,由于访问的是事实上已经存在的磁盘扇区.通过API函数SetFilePointer实现文件操作指针寻址移动,定位信息认证数据存储区域的具体的存储扇区,通过ReadFile与WriteFile函数对该区域的数据进行相应的读写访问操作,其操作与普通的文件读写调用方法一致.经过上述步骤可以实现完成数据访问的操作,调用API函数CloseHandle关闭文件操作句柄,进行释放资源,综上可以实现完整的Windows下磁盘扇区数据读写访问操作.磁盘过滤驱动对打开、读写IRP请求的拦截,图9为Windows虚拟磁盘驱动设备栈结构.

图9 Windows虚拟磁盘驱动设备栈结构

在磁盘文件过滤驱动中,磁盘上的文件打开和读写行为,都会在磁盘卷过滤驱动中,对落地到磁盘驱动上的IRP_MJ_WRITE,IRP_MJ_READ读写请求进行拦截,并从该请求中获得当前逻辑地址和扇区数据内容以及数据内容长度大小;
分别根据读与写,使用提前获得注册信息的DataKey对数据进行加解密运算,如图10所示.

图10 加解密运算过程

该设计方案对任何写入该移动存储磁盘区域的数据都是进行对称加密的[13],且算法保持与Linux一致,属于扇区级别的加密,破解难度非常大,因此数据安全性很高.另外需要说明的是,本文选择以512 B为单位的整数倍进行加解密处理,是因为一般情况下,Windows系统对磁盘的操作都是以扇区为单位进行的,即512 B的整数倍,这样保持一致,对于提高大文件的复制,读写速度可以达到最优.

磁盘的卸载或者强力拔除:为了保持磁盘数据的一致性和安全性,本文设计了移动磁盘的安全退出机制,提高了主动退出磁盘卸载的机制[14],可以安全卸载加密磁盘的分区,当发生强力插拔时,驱动和应用层程序也有对应的回收机制,将正在读写的请求进行中断废弃,文件操作句柄进行安全关闭,避免造成内存泄露和异常发生.

本文根据上面的理论研究和方案设计,以一个U盘为移动存储介质设备,在Linux下进行加密注册制作,登录使用[15];
同一U盘在Windows下进行登录使用,2个系统下看到的加密U盘区域内的数据是一致的;
在功能上进行了实现之外,还进行了数据复制读写、性能对比测试分析、验证加密之后的U盘使用体验的影响.

5.1 实验环境

主机:Pentium®Dual-Core,2 GB内存;

Linux操作系统:Kylin3.2.1系统Linux内核版本:2.6.32;

Windows:Win7操作系统;

U盘规格:Kingston(DT101 G2) 8 GB.

5.2 性能测试分析

普通U盘与加密之后的U盘性能对比如图11所示.

从图11可以看出,相同的移动存储U盘读的速度在加密之后降低,写的速度稍有提高.

图11 性能对比

本文针对目前市场上加密移动存储磁盘的不足,提出一种基于通用技术的移动存储软件加密技术方案,在技术原理和理论上进行了研究和可行性分析,在通用的Linux系统和Windows系统上以一个移动存储U盘为例进行了加密注册,并在2类架构完全不同的系统上进行了验证,实现了基于身份密码认证的数据加密与解密的完整移动存储磁盘介质技术方案.该方案采用国密SM4的加密对称算法,提高了非认证用户对加密移动存储介质的数据窃取,大幅度提高了获取机密重要数据的难度,使用软件的方式加强了Linux系统和Windows跨平台下移动存储介质设备盘携带数据的安全性,由于技术方案的通用性,使得一个加密处理之后的移动存储介质可以在任何系统上使用,为用户提供了便利性[16],降低了成本,该方案极具创新和通用性;
实验结果表明,经过通用加密移动存储技术处理之后的物理介质操作方便,加解密算法安全可靠,基本上性能不受影响,具有较高的可靠性和有效性.

猜你喜欢加解密存储介质U盘采用U盘文件冗余方案实现TSP系统的可靠装载铁道通信信号(2019年6期)2019-10-08自动辨认插口方向的U盘发明与创新·小学生(2019年9期)2019-09-12档案馆移动存储介质管理方法探讨信息记录材料(2018年7期)2018-06-12一种使用存储介质驱动的方式数码世界(2017年7期)2017-07-25PDF中隐私数据的保护方法软件导刊(2017年4期)2017-06-20电子取证中常见数据加解密理论与方法研究网络空间安全(2016年3期)2016-06-15基于FPGA的LFSR异步加解密系统电子技术应用(2016年6期)2016-03-18网络数据传输的加解密系统研究软件工程(2014年11期)2014-11-15U盘“闹肚子”少年科学(2014年10期)2014-11-14医院环境下移动存储介质的信息安全管理中国卫生产业(2011年21期)2011-08-15推荐访问:技术研究 加密 存储设备
上一篇:水稻高产栽培技术推广与病虫害防治研究
下一篇:基于TerraClimate数据集的1960—2019年中国干湿气候变化特征

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有