移动存储设备数据存储加密.docx
- 文档编号:3440279
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:21
- 大小:922.04KB
移动存储设备数据存储加密.docx
《移动存储设备数据存储加密.docx》由会员分享,可在线阅读,更多相关《移动存储设备数据存储加密.docx(21页珍藏版)》请在冰豆网上搜索。
移动存储设备数据存储加密
移动存储设备数据存储加密
技术研究
目录
目录0
论文摘要1
一、引言2
(一)、课题背景2
(二)、课题情况介绍2
二、TRUECRYPT概述3
(一)、TrueCypt简介3
(二)、TrueCrypt的主要工作原理4
(三)、TureCrypt内置的加密算法5
三、基于TrueCrypt的磁盘加密模块实现6
(一)、TrueCrypt开发环境构建6
(二)、TrueCrypt源码分析7
(三)、Crypto模块分析和提取9
(四)、面向数据存储的加密模块封装和实现12
四、WINDOWS平台下的移动存储介质访问模块实现14
(一)、存储介质访问模块的设计与实现14
五、模块功能测试验证18
(一)、测试方案设计18
(二)、测试程序编写18
(三)、测试实施19
(四)、测试结果分析22
六、参考文献22
论文摘要
随着全球信息化的发展和信息技术水平不断提高,涉密文档大量采用电子化手段存储、交换和管理。
然而,涉密文档电子化应用和管理中存在突出的安全问题,尤其是在军事、商业、政府办公和外交等特殊环境下,如何在重要文档应用和交换中有效防止失泄密,成为信息化技术应用的解决的关键问题。
现在通常采取的办法是将保存到移动存储盘上的数据实施加密,因为使用软件对移动存储盘进行数据加密,不仅可以保证信息的机密性,且可以保证信息的完整性和确定性,防止信息被篡改、伪造和假冒。
尽管目前已有很多成熟的加密文件系统被广泛地应用,涉密文档都实施了不同程度的保护,但因为需要满足保护强度、性能、系统负载、易用性等多方面的问题,真正满足这些条件的加密系统却很少,TrueCrypt是一款具有的免费、开源、绿色、跨平台、便携性、多语言等特征的数据加密软件,为涉密文档的安全提供了一种高强度、高效率的保障方法。
本课题的主要目的是从介绍TrueCrypt的使用方法和原理入手,编写和移植了数据存储加密软件,完成对移动存储设备储介质访问、数据存储加密等功能。
关键字:
信息安全TrueCrypt数据加密涉密信息移动存储设备数据存储
移动存储设备数据存储加密技术研究
一、引言
(一)、课题背景
课题随着全球信息化的发展和信息技术水平不断提高,涉密文档大量采用电子化手段存储、交换和管理。
然而,涉密文档电子化应用和管理中存在突出的安全问题,尤其是在军事、商业、政府办公和外交等特殊环境下,如何在重要文档应用和交换中有效防止失泄密,成为信息化技术应用的解决的关键问题。
保证涉密文档和敏感数据安全的关键是数据加密技术。
目前,已经有很多加密文件系统被广泛地应用,对涉密文档都实施了不同程度的保护,然而,重要部门的信息安全,特别是机密文档的安全,需要满足保护强度、性能、系统负载、易用性等多方面的问题。
因此,研究和使用满足高等级安全标准要求的文件加密系统是非常有意义,本课题详细介绍TrueCrypt加密文件系统的技术原理与实现的方案,该方案具有占用资源少、加密效率高、安全性能强和实时动态加载(卸载)加密卷等特点。
本课题的主要目的是介绍典型数据存储加密软件TrueCrypt的技术原理和方案,编写和移植数据存储加密软件对移动存储设备进行存储管理、数据存储加密等功能。
(二)、课题情况介绍
1、“保密优盘”总体项目介绍
“保密优盘”项目旨在开发一套基于不同文件系统能跨平台运行的加密存储设备。
包括了GUI用户图形界面,VFS虚拟文件系统和SGP文件系统以及加密引擎和磁盘管理模块。
其整体结构如下图。
本课题主要是为了实现“保密优盘”项目的最后一个模块即加密引擎和磁盘管理模块,如下图蓝色部分。
图1、项目总体模块图
2、课题完成情况
该课题的最终目的是在介绍TrueCrypt加密技术原理和实现方案的基础上,编写和移植TrueCrypt的加密模块对数据存储进行加密,编写存储设备访问控制模块实现设备存储管理等功能。
目前该课题的总体目标已经完成,能提供数据存储加密和设备访问控制等功能,但在数据存储加密模块中,未提供TrueCrypt中的加密模式。
二、TRUECRYPT概述
(一)、TrueCypt简介
TrueCrypt是一款免费开源的加密软件系统,同时支持WindowsVista/XP,MacOSX,Linux等多个操作系统。
TrueCrypt可以建立和维持一个加密卷(数据存储设备),在建立一个加密卷的时候可以选择密码、密钥文件或两种方式并存的方式产生密钥。
在生成加密卷后,又可以在已有的加密卷中增加二次加密隐藏区。
TrueCrypt加密了整个加密卷的文件系统,例如文件名、文件夹的名称、内容、每一个文件、可用空间、元数据等。
在不使用正确的密码、密码文件或正确的加密密钥都将无法读取(解密)这个加密卷中的任何存储数据。
而当用户打开或复制加密的TrueCrypt卷,文件可以复制,剪切到/从安装TrueCrypt卷就像他们被复制、剪切到/从任何正常磁盘(例如,通过简单的拖放操作)一样,文件将在内存中自动被解密,同样,文件被剪切或复制到TrueCrypt卷时将在内存中自动加密(然后才写入TrueCrypt卷)。
(二)、TrueCrypt的主要工作原理
1、TrueCrypt加密/解密技术
TrueCrypt主要使用即时加密/解密技术,在这里为了说明这种技术的工作原理,假设有一个.AVI视频文件存储在TrueCrypt卷中(因此,视频文件是完全加密的)。
用户提供正确的密码、密钥文件或者密钥打开TrueCrypt卷。
当用户双击该图标的视频文件,Windows操作系统将推出该文件相关联的应用——通常是一个媒体播放器(如MediaPlayer)。
媒体播放器为了播放视频,开始载入TrueCrypt加密卷中视频文件的最开始的一部分到RAM(内存)中。
当这一部分开始载入,TrueCrypt便自动解密它(在RAM中)。
解密的部分视频存储在RAM中,然后媒体播放器开始播放。
虽然这部分正在播放,媒体播放器开始载入下一个小部分视频文件从TrueCrypt加密卷到RAM(内存)中,并一直重复这个动作,直到视频文件被播放完毕。
这一过程被称为即时加密/解密,这种方式不仅仅适用于视频文件,对于其他的文件也同样适用。
2、TrueCrypt的加密模式
TrueCrypt对其创建的加密分区、驱动器、虚拟卷、使用XTS模式,同时兼容LRW加密模式运作。
XTS是PhillipRogaway于2003年设计的XEX模式的一种变量。
XEX模式为两种不同的目的使用单一密钥,而XTS模式使用独立的密钥,尤其是自己的秘密密钥,或者独立于主要加密密钥的“调节密钥”。
“调节”是指在明文文本或者密码之外可以接受的二次输入(调节)的分组加密。
调节和密钥选择密码计算的排列方式。
XTS模式是IEEE1619标准,它是2007年12月发布的关于密码保护基于分组的存储设备的标准。
XTS模式的描述:
Ci=EK1(Pi^(EK2(n)
ai))^(EK2(n)
ai)
其中:
Ci表示密文块
Pi表示明文块
表示两个多项式的乘积再模与多项式x128+x7+x2+x+1,
K1为主密钥(支持256-bit的密码;例如,AES,Serpent,andTwoFish)
K2次密密钥(支持256-bit的密码)
i是指数据单元密码块的索引,第一个密码块包含的数据块i=0;
n数据单元索引包含K1的作用域,第一块数据单元中,n=0
a是GaloisField(2128)所对应的多项式x的一种原始要素
(三)、TureCrypt内置的加密算法
1、AES算法
AES是新一代对称加密标准,为了替代年代久远而且不再安全的DES和慢速的3DES而制定。
美国政府于1997年开始了遴选高级加密标准AES(TheAdvancedEncryptionstandard)的工作。
目的是确定一个非保密的、全球免费使用的分组密码算法,用于加密保护政府的敏感信息,并希望成为秘密和公开部门的数据加密标准。
经过筛选,从10个设计中,筛选出5个(MARS、TwoFish、RC6、Serpent和Rijndael)进入下一轮的筛选。
其他的5个因为效率和安全性问题而被拒绝。
2001年11月26日,NIST宣布由比利时的密码学家JoanDeamen和VlncentRijmen提出的密码算法Rijndeal作为AES。
Rijndael算法具有安全、性能好、效率高、良好的可扩展性和易于实现等特点。
AES是一个数据块长度和密钥长度可变的分组迭代加密算法。
数据块的长度和密钥长度可以分别指定为128位、192位或256位。
TrueCrypt使用的AES拥有14轮变换和256位长的密钥(即AES-256,2001发布),高级加密标准(AES)明确规定了符合FIPS认可的加密算,可用于美国联邦部门和机构,以保护敏感信息。
TrueCrypt在XTS模式(见本节的运作方式)下使用AES的14轮和256位密钥(例如,一个AES-256,2001年发布)。
2、SERPENT算法
由RossAnderson等设计,1998年发布。
使用256位密钥,块尺寸128位,并在XTS模式(见本节的运作方式)下操作。
Serpent也是AES的五个最终候选算法的一员。
它比获胜的Rijndael算法拥有更高的安全系数,而Rijndael仅表现出足够的安全性。
在AES入围的五个算法中SERPENT的安全系数最高:
3.56(适用于所有支持关键尺寸)。
Rijndael算法-256的安全系数为1.56。
尽管存在这些事实,Rijndael算法因其安全,性能,效率,可执行和灵活性。
被认为是适当的选择AES,在最后的AES候选会议,Rijndael算法得到86票赞成票,SERPENT获得59票,TwoFish获得31票,RC6获得23票,和MARS获得13票。
3、TwoFish算法
1998年由BruceSchneier等设计,使用256位密钥和128位长的块尺寸,在XTS模式(见本节的运作方式)下操作。
TwoFish也是AES的五个最终候选者之一。
加密使用与S盒无关的密钥。
TwoFish也可以视为2128种不同的加密系统的集合,其中128位来源于一个256位的密钥,控制加密系统集的选取。
TwoFish小组断言,与S盒无关的密钥提供了一种抵抗未知攻击的安全形式。
三、基于TrueCrypt的磁盘加密模块实现
(一)、TrueCrypt开发环境构建
1、源码编译所需要的工具
1)MicrosoftVisualC++2008(ProfessionalEditionorcompatible)。
2)MicrosoftVisualC++1.52(availablefromMSDNSubscriberDownloads)。
3)MicrosoftWindowsDriverKitforWindowsServer2008(build6001.1800
(1)。
4)NASM0.99汇编器。
5)Yasm汇编器。
6)gzip压缩器。
2、源码编译的准备工作
1)安装MicrosoftVisualC++2008。
2)安装MicrosoftVisualC++1.52。
3)安装MicrosoftWindowsDriverKitforWindowsServer2008。
4)拷贝NASM0.99汇编器、Yasm汇编器、gzip压缩器至'%SYSTEMDRIVE%\WINDOWS'目录下。
5)创建环境变量'MSVC16_ROOT',指向安装MSVisualC++1.52的目录。
6)如果已经安装了WindowsDriverDevelopmentKit且其不在'%SYSTEMDRIVE%\WinDDK'目录下,则创建环境变量'WINDDK_ROOT'的指向WinDDK的安装目录。
注:
环境变量创建方法,在“我的电脑”->“属性”->“高级”->“环境变量”->“新建”中填入对应的变量名和变量值即可。
3、源码编译的步骤
1)在MicrosoftVisualStudio2008中打开’TrueCrypt.sln’解决方案。
2)在解决方案配置中将活动设置为全部。
3)编译、链接源码。
4)如果成功,在'Release'文件夹里将生成一个新的可执行文件“TrueCrypt”。
5)查看各模块的编译结果,在“Crypto”模块的文件夹下生成了“Crypto.lib”文件。
(二)、TrueCrypt源码分析
1、源码分析工具介绍
Doxygen是一款静态源码分析工具,他可以根据提供的源代码,和设置的生成参数(例如:
“PROJECT_NAME”等)生成源代码的文件、函数调用关系图,以及函数说明等。
在本课题中笔者安装和使用步骤如下(根据不同需求有所不同):
(1)、确认“C:
\ProgramFiles\HTMLHelpWorkshop\hhc.exe”文件是否存在,若不存在从互联网上下载此文件,Doxygen将使用此文件来将生成的chm源文件(html,hhp,hhc,hhk)编译成chm文件。
(2)、在默认安装路径下安装“graphviz”,Doxygen将使用该软件实现在文档中画图的功能绘制文件、函数的调用关系图。
(3)、将本Doxygen文件夹放在与源码所在的同一路径下,按需求修改Doxyfile文件,如“PROJECT_NAME”等参数,其参数设置可参见“doxygen_manual-1.5.2.chm”。
在本例中作者将TrueCrypt解决方案拷贝到了C:
\TrueCrypt目录下,其Doxyfile中配置信息设置如下:
PROJECT_NAME=TrueCrypt
OUTPUT_LANGUAGE=Chinese
INPUT=C:
\TrueCrypt
FILE_PATTERNS=*.h*.cpp*.c
除上述声明的参数外,其余参数使用默认参数
(4)、运行run.bat批处理文件,help.chm文档将生成在与源码所在的同一路径下,如需了解生成过程中的编译提示信息可查看doxygen\build.log。
2、TrueCrypt源码结构
经分析TrueCrypt各模块的总体功能图如下:
图2、TrueCrypt的总体结构
本课题主要需要的加密/解密功能在Crtypto模块中,在下面的章节,将对这个模块进行具体分析。
3、Crypto模块结构
使用Doxygen工具生成Crypto模块的文件包含/依赖结构图如下:
图3、Crypto模块结构图
(三)、Crypto模块分析和提取
1、Crypto模块的提取
在MicrosoftVisualStudio2008中新建一个解决方案“Crypto”,将TrueCrypt中Crypto模块源码目录下和上图相关的文件拷贝至Crypto的源码目录下,并在解决方案中包含这些文件。
在解决方案中创建文件夹“Common”,将Crypto模块“Common”目录下和上图相关的文件拷贝至该目录下并在解决方案在中包含这个文件夹,根据上述生成的Crypto模块的文件关系图,将图中所包含的头文件相对应的.c、.cpp、.asm文件拷贝到“Crypto”解决方案中对应的文件夹下。
重新生成Crypto解决方案,如果成功,在解决方案中将生成Crypto.lib文件,至此Crypto模块提取成功。
2、Crypto模块分析
Crypto模块是TrueCrypt软件系统的加密主体,所有加密算法和加密模式都在这里得以实现。
在Crypto.h中包含了加密所需的一般加密算法和加密模式的调用函数,如:
块加密/解密函数EnciperBlock()/DecipherBlock(),XTS模式(见2.2中对TrueCrypt加密模式的介绍)加密/解密函数EncryptBufferXTS()/DecipherBlock()等。
Doxygen生成的Crypto.h中主要加密模式/加密函数的函数调用关系图:
图4、EncipherBlock函数调用关系图
图5、DecipherBlock函数关系调用图
图6、EncryptBufferXTS函数调用关系图
图7、DecryptBufferXTS函数调用关系图
EnciperBlock()/DecipherBlock()两函数已经基本满足加密/解密的一般需求。
因此本课题不再对EncryptBufferXTS()/DecipherBlock()进行封装,这可以作为本课题下一步研究的方向。
经测试EnciperBlock()/DecipherBlock()两函数加密/解密数据只支持16字节(加密不满16字节时其会在不足的地方自动填充204后再行加密),因此根据需求在封装中,应将其封装成任意长度数据加解密即可。
(四)、面向数据存储的加密模块封装和实现
1、需求分析
(1)、同时支持多个加密算法;
(2)、加密/解密口令不定长;
(3)、加密/解密数据块大小不定长。
2、接口定义
(1)、加密初始化:
(3)、加密函数:
(4)、解密函数:
(5)、关闭加密函数:
3、具体实现
(1)、数据结构
1)、算法选择共同体,提供给用户选择加密算法
2)、密钥数组,用于存储根据用户密码生成的密钥:
(2)、封装密钥初始化及关闭加密函数实现
其中rb是根据加密算法生成的加密HANDLD
上述密钥初始化实现时,密钥初始化后存储在ks_temp数组中,因此在关闭加密时,将ks_temp中的数据清除即可。
(3)、加密/解密函数的实现
由上述分析,EncipherBlock()/DecipherBlock()已基本满足需求,在进一步的封装中,通过密文/明文长度判断循环调用EncipherBlock()/DecipherBlock()即可实现加密/解密功能。
四、WINDOWS平台下的移动存储介质访问模块实现
(一)、存储介质访问模块的设计与实现
1、需求分析
(1)、对物理磁盘设备进行读、写访问操作;
(2)、枚举物理磁盘信息(磁盘号、名称、大小、磁盘设备接口类型、磁盘分区类型等)。
2、接口定义
1)磁盘信息获取函数:
2)磁盘打开函数:
3)磁盘写函数:
4)磁盘读函数:
5)磁盘关闭函数:
3、具体实现
由于Windows操作系统在很大程度上采取了访问安全保护机制(例如,在Windows操作系统下不能直接访问物理内存、不能使用各种DOS、BIOS中断等),在对设备进行访问时不能直接对其驱动进行操作,而Windows提供了例外一种对设备进行操作的方式,在WIN32API中对设备封装成“文件”,并允许按照对文件的读写方式来对其进行数据存取访问。
(1)、数据结构:
磁盘信息数据结构体:
磁盘结构体数组:
(2)、Open_Disk(),Close_Disk()的实现
前面已经提过,在Windows下把所有的设备当作文件进行操作,如对于串行端口1、2,可以用“COM1”、“COM2”作为参数调用CreateFile()函数,这里的“COM1”、“COM2”即以文件存放路径的方式指出了要操作的硬件设备。
同理如果需要对磁盘进行读写,与对串行端口的访问类似,需要用与文件存放路径相类似的方式指出要操作的硬件设备(硬盘)。
因此这里需要以某种特定的格式来指定需要访问的物理磁盘设备,对系统注册的第i块物理硬盘,其格式为"\\\\.\\PHYSICALDRIVEi"。
根据Open_Disk()传入的参数物理磁盘号No,构造出字符串"\\\\.\\PHYSICALDRIVE‘No’",然后调用CreateFile()传入相应参数,实现磁盘打开操作,在这里为了满足后续读/写磁盘的需要,其第三个控制参数应传入“FILE_SHARE_READ|FILE_SHARE_WRITE”(即可读可写参数)。
针对打开的物理磁盘,调用CloseFile()来实现关闭物理磁盘操作。
(3)、Write_Disk()和Read_Disk()的实现
通过Open_Disk()打开的是整个物理磁盘,而要操作的是该磁盘里存储的某段具体数据,因此还要通过SetFilePointerEx()函数以文件操作的方式把操作指针移到磁盘数据的预操作处,再调用WriteFile()/ReadFile()函数来实现读写操作。
注:
由于在本系统中使用优盘时(磁盘不会出现此类情况),直接填写第一引导分区,会导致Windows无法注册该盘,因此在封装此函数时,直接越过磁盘的前两个扇区,对第三个扇区进行读写操作,因此在文件指针操作参数传入是应调用StartByte.QuadPart+=1024;
(4)、Get_Disk_Info()的实现
Get_Disk_Info()主要包括枚举磁盘信息,注册表项HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Disk\\Enum中包括了物理磁盘编号,磁盘名字,磁盘接口类型等信息,通过对该表项RegOpenKeyEx()/RegQueryValueEx()操作可以读取这些信息。
标准分区的标志位(MBR信息的最后两字节),和本软件的标志位区分,通过Read_Disk()操作读取信息比对后得出磁盘分区信息。
DeviceIoControl()通过给DISK_GEOMETRY填写内容后通过乘法计算得出磁盘长度。
五、模块功能测试验证
(一)、测试方案设计
1、测试流程
1)、枚举并打印磁盘信息1。
2)、将1号磁盘的500-1000字节的信息读入缓存1,并打印。
3)、将缓存1加密后成缓存2并打印(包括加密信息及加密前后的大小),再写入1号磁盘的0-512中。
4)、读出该磁盘的0-512的信息并打印,与步骤三打印结果对比,以确定其真确写入。
5)、将缓存2的信息解密后存入缓存3并打印(包括解密信息及解密前后大小),与缓存1对比。
6)、弹出磁盘。
7)、重新加载磁盘后,枚举磁盘信息2,与信息1对比。
2、预期结果
1)、能枚举标准磁盘信息(磁盘号、名字、大小、接口类型、分区类型)。
2)、正常读取磁盘数据并打印。
3)、正常加密数据且写入磁盘。
4)、正常解密且与原明文一样。
5)、两次枚举的磁盘信息相同。
(二)、测试程序编写
1)获取磁盘信息:
2)打开1号磁盘:
3)读取1号磁盘的500-1000字节数据:
4)加密buf内容至buf1:
5)将buf1内容写入1号磁盘0-512号磁盘,写入后再次读取该区域的磁盘数据至buf2:
6)将buf1内容解密至buf3:
7)弹出磁盘后,重复步骤(
(1)。
(三)、测试实施
运行测试程序后,其运行结果如下图:
图8、第一次枚举磁盘信息
图9、500-1000字节内容
图10、加密后的密文
图11、解密后的明文
图12、写入磁盘的信息
图13、第二次枚举磁盘信息
(四)、测试结果分析
1)从图8中可以看出,该模块能正常枚举正常磁盘信息;
2)从图9中可以看出,该模块能在磁盘的任意地方正常读出任意字长的内容;
3)从图10中可以看出,该模块能加密任意字长的数据,并正确提供了加密后密文的长度;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动 存储 设备 数据 加密