当前,中国国家高性能计算环境中存储资源广域分散且隔离自治,大型计算应用迫切需要可支持跨域统一访问、广域数据共享、存储与计算协同的全局数据空间.因此,我国正在构建跨域虚拟数据空间,从而解决广域安全可靠数据共享、计算与存储高效协同、跨域多源数据聚合处理等关键科学问题,发挥广域资源聚合效应,有效支撑大型计算应用.如何解决虚拟数据空间中的高效安全数据迁移是目前亟须解决的问题.虚拟数据空间中数据迁移发生在广域网上,为了保障数据安全性,须对数据进行加密处理后传输.AES,3DES等算法能够提供安全保障,可用于数据的安全传输.然而,虚拟数据空间传输的数据量庞大,部分应用甚至可达TB级乃至PB级.AES算法在加密如此庞大的数据时会造成严重的性能开销,即使使用Intel AES-NI这类专用硬件指令加密也会造成显著性能开销.虚拟数据空间传输的数据以压缩后的二进制文件为主,例如天气预报气象数据、安防视频数据、生物计算数据等.文献[1]指出AES等算法对图像等二进制数据处理效率不高.由于虚拟数据空间要求数据在迁移后能够迅速执行,须尽量减少加解密造成的性能开销,因此亟需一种轻量级的数据安全保障方法.虚拟数据空间数据在传输中通常以二进制压缩包的形式在广域网传输,对于这些数据,难以通过单词频率统计等针对文本数据的分析手段进行攻击,仅需要轻量的安全保障方法.转置加密算法作为一种经典加密技术能够提供轻量级安全保障.因此,本研究提出了ShuffleEnc——一种基于转置加密的轻量级数据加密算法.该方法通过将原始数据按固定大小切块,通过Fisher-Yates算法生成密钥.根据密钥,将原始数据块顺序打乱得到密文数据,从而提供轻量级安全保障方法,满足高性能计算虚拟数据空间用户的需求.使用C语言实现了ShuffleEnc方法,并向用户提供了命令行和动态链接库两种使用方式.相比AES,ShuffleEnc安全性会有所下降[2-3],但是能够满足虚拟空间用户需求.采用基因数据等四种典型数据集与AES算法的四种主流模式进行性能对比.1 数据安全传输由于超算中心之间进行数据迁移须经过广域网传输,广域网存在不安全因素,因此须对迁移数据采用某种安全方法处理后才能进行传输.目前,Globus[4]等主流高性能计算基础软件采用AES[5]这类对称加密算法对数据进行加密后传输.然而,在迁移数据达到TB级甚至PB级时会造成极大的性能开销.对数据进行加密是目前使用最广泛的安全保障方式.DES[6]的出现,标志着对称加密算法的成熟,并成为了一项行业标准.然而,对称加密算法面临着密钥管理的安全风险.RSA公钥密码的出现[7],解决了密钥难于管理、分发的问题.RSA存在不同的公钥和私钥,分别可用于加密和解密,这使得私钥无须经过网络进行分发,安全性得到了极大的提升.随着对这两种密码体制的进一步研究,结合对称加密算法快速性和非对称加密算法在密钥管理上的优势,密码研究者们提出了混合加密方案,并对其进行了大量的研究[8-9].对这两种算法改进的典型代表是高级数据加密标准AES[10-12]和基于椭圆曲线的公钥密码体制[13-14];而对这两种算法应用主要有HTTPS中的安全套接层(SSL)和TLS(安全传输层协议)等.转置加密是一种古典加密技术[15],虽然其安全性低于AES等加密算法,但是由于其低开销优点,近几年又在多媒体加密领域得到了应用[16-18].然而,目前如何针对高性能计算产生的大规模二进制文件进行高效加密缺少足够的研究.本研究针对该问题,基于转置加密技术,在块级别对高性能计算产生的大规模二进制压缩文件进行加密,提高加密性能.2 ShuffleEnc设计ShuffleEnc方法原理如图1所示,方法的核心思想是基于转置加密原理,将原始文件切分为固定长度数据块并打乱数据块顺序.具体流程为首先将文件按固定长度切分为等长数据块,根据块数量基于Fisher-Yates算法生成密钥.10.13245/j.hust.210419.F001图1ShuffleEnc示意图Fisher-Yates算法描述如下:for i from n-1 downto 1 doj←random integer such that 0≤ j≤iexchange a[ j] and a[i]其中:i为当前块位置;j为要交换的块位置;n为代表块数量;a为存储块的数组.例如,若块数量为6,则根据Fisher-Yates算法生成342165作为密钥.根据密钥打乱数据块顺序,乱序可以重复多轮以提高数据随机性.如图1所示,基于密钥342165,通过多轮乱序操作打乱数据块提高密文数据安全性.2.1 数据格式密文数据由三部分构成,如图2所示.10.13245/j.hust.210419.F002图2数据格式 a. 第一部分为元数据大小,占用4 B.b. 第二部分为元数据,假设读取得到元数据大小为m,则读取文件的第5 B~m+5 B得到元数据.元数据用于对乱序后的数据块进行恢复,读取前4 B可得到数据块大小;读取第5~8 B可得到最后一个数据块大小;读取第9 B~m得到密钥.数据块大小是指原文件切分形成数据块的大小,按固定长度对原文件进行切分后,为了方便乱序后的数据进行存储,本研究将所有数据块都按照固定大小保存.因此,最后一个数据块的大小可能会小于固定块长度,为了便于对数据块重组,本研究选择将最后一块数据用’\0’填充后,使其与其他数据块长度相等再进行重组.根据密钥,可对密文数据进行重组恢复.为了保护元数据不被恶意用户窃取,本研究选择用RSA加密算法的公钥对元数据进行加密,只有拥有RSA私钥的接收端才能对元数据进行解密从而恢复密钥元数据.c. 第三部分保存了乱序后的密文数据块.2.2 加密流程a. 切分数据首先,将数据按固定长度,例如1 MB切分为等长数据块.最后一块数据可能会小于1 MB,为了方便对乱序后的数据进行写入,本研究将其用字符’\0’填充为1 MB的数据块,并记录下实际大小.根据切分的块数量chunk_num,通过Fisher-Yates算法生成0~chunk_num之间的不重复随机数序列,保存该序列作为乱序顺序表用作接收方恢复乱序数据.b. 生成元数据元数据由数据块大小、最后一块数据块大小和乱序顺序表构成.为了生成元数据,先在内存中申请一块大小为sizeof(int)×(2+chunk_num)的数组作为元数据缓冲区.并分别将数据块大小,末尾数据块大小和密钥写入该缓冲区中.在x86 64位Linux平台的C语言实现中每个int变量占用4 B,则元数据大小为4×(2+chunk_num).对生成的元数据按照RSA算法进行加密得到元数据密文.c. 写入密文数据创建一个空文件作为密文文件,先写入密文文件的头数据.头数据包括元数据密文大小和元数据密文.先将元数据密文大小写入密文文件中,再写入加密后的元数据,之后写入密文文件的乱序数据块数据.按照乱序顺序表排序,分别将每个数据块写入重组文件的相应位置中.例如,数据块个数为5,生成的密钥为3,2,5,4,1.先从原文件中读取第3个数据块,将其写入乱序文件的第1个数据块位置中,再依次读取第2,5,4,1个数据块,将其写入乱序文件的第2,3,4,5个数据块位置中.2.3 解密流程a. 读取元数据读取乱序文件的前4 B,得到元数据大小.按元数据大小读取元数据RSA密文数据,根据RSA私钥解密元数据密文.分别得到数据块大小、最后一块数据块大小和顺序密钥.b. 恢复文件创建一个新文件作为恢复文件,每次按照数据块大小读取一个数据块,查找乱序顺序表,将其写入恢复文件的正确位置中.假设密钥为3,2,5,4,1,且只乱序一轮,则读取乱序文件的第1个数据块后,将其写入恢复文件的第3个数据块位置,并依次将乱序文件的第2,3,4,5个数据块写入恢复文件的第2,5,4,1数据块位置处.再根据最后一块数据块大小对数据进行修正.例如,假设数据块大小为1 KB,最后一个数据块大小为768 B,则截取最后一个数据块的前768 B进行修正.2.4 安全等级和计算复杂度分析由于虚拟数据空间传输的是压缩文件,压缩文件只有当所有数据块顺序正确时才能成功解压,因此攻击ShuffleEnc只能通过穷举方法寻找顺序密钥.每穷举一次顺序密钥,须对数据块进行重组,根据压缩文件是否能够成功解压判断是否已找到正确密钥.假设传输文件共有n个分块,完成一次重组和解压的平均时间为t.穷举所有可能的顺序密钥花费时间为n!×t,平均需要n!×t/2次穷举才能找到正确密钥.例如,对一个100 MB的文件进行攻击,完成一次重组和解压须要进行I/O(输入/输出)和CPU计算操作,假设平均速率为100 MB/s,则须耗时1 s,即t=1 s.若分块设为1 MB,则n=100.完成对该文件的穷举破解须消耗100!×0.5 s=1.72×1059 d.相比AES 256需要9.96×1063 d[2-3],ShuffleEnc安全性会有约4个数量级下降,但仍能满足虚拟数据空间用户需求.当数据在虚拟数据空间网络传输时,以乱序形式进行,只有当元数据泄露后文件才能被成功重组,因此仅须防范元数据遭受网络攻击.本研究采用RSA(李维斯特·萨莫尔·阿德曼)算法加密传输元数据,接收方生成RSA公钥和私钥对并将公钥发送给发送方,发送方用公钥加密元数据并发送给接收方.恶意用户通过网络攻击手段只能获取公钥加密后的元数据密文和公钥,而根据RSA原理,只有私钥可以对密文解密元数据,因此恶意用户无法破解元数据密文.本研究通过RSA加密元数据方法保障了数据在传输中不受网络攻击.ShuffleEnc的计算开销主要来自于Fisher-Yates算法生成顺序密钥,Fisher-Yates算法的时间复杂度为O(a),因此ShuffleEnc算法计算复杂度为O(a),其中a为数据块数量而非字节数量.AES算法的计算复杂度为O(s),其中s为字节数量,有a=s/k,k为数据块大小,因此O(a)开销小于O(s).3 实现和实验3.1 实现本研究使用C语言实现了ShuffleEnc的功能,并向用户提供了基于命令行和基于动态链接库的访问方式.用户在使用ShuffleEnc命令行模式时,通过-i选项指定输入文件路径,-o选项指定输出文件路径,-c选项指定块大小,-m选项指定使用模式(0代表加密,1代表解密).用户也可以通过动态链接库的方式调用ShuffleEnc功能,ShuffleEnc向用户提供两个函数接口,分别为:a. void encrypt_file(string input,string output,int chunk size);b. void decrypt_file(string input,string output).加密函数encrypt_file有三个参数,分别为:原文件的路径input,加密后的文件路径output,数据块大小chunk_size.解密函数decrypt_file有两个参数,分别为:待解密的文件路径input,解密后的文件路径output.3.2 实验设置从64KB~128MB的不同数据块大小对ShuffleEnc加解密性能进行了对比,同时比较了DES和AES的加解密性能.其中,AES设置了四种模式进行测试,分别为CBC-128,CBC-256,ECB-128和ECB-256.3.2.1 测试环境进行测试的环境配置如下.a. CPU:Intel(R) Xeon(R) CPU E5-2650 v2@2.60 GHz,并开启了AES-NI指令,该指令是对AES算法的专用加速指令集.b. 内存为128 GB.c. 硬盘为1TB PCIe SSD.d. AES,DES和RSA实现:采用OpenSSL提供的AES,DES和RSA实现对数据集进行加解密测试.3.2.2 测试数据集采用四组具有代表性的数据集,分别为Linux内核数据集、Ubuntu ISO数据集、生物计算采用的基因数据集及郭守敬望远镜产生的光谱数据.a. Linux内核数据集,大小为12 GB,由打包为tar格式的源码文件组成.b. Ubuntu ISO数据集,大小为1.5 GB,由Ubuntu-16.04.3-desktop-amd64.iso镜像文件构成.c. 基因数据集,大小为12 GB,包括DNA,RNA等基因组数据打包后的tar文件.d. 光谱数据集,大小为500 GB,是LAMOST(郭守敬望远镜)采集到的光谱数据,由FITS格式的光谱文件构成.3.2.3 加密性能如表1和2所示,ShuffleEnc在四类数据集上进行加密的时间开销都远小于AES-256-CBC,AES-128-CBC,AES-256-CBC,AES-128-CBC和DES,表明ShuffleEnc能显著降低数据加密时间,这是由于ShuffleEnc计算开销小,主要的性能开销来源于I/O.尽管无法提供AES的数据安全等级,但是对于大多数高性能计算用户数据,ShuffleEnc能够满足用户的安全需求.在AES方法中,AES CBC-256消耗的时间最长,也能提供最高等级的安全防护,这也表明更高的安全等级必然会造成更大的性能开销.DES方法消耗时间最多,大约是AES方法的6倍,并且安全性不如AES,因此在实际应用中已被淘汰.将ShuffleEnc的数据块大小减小,能够提供更强的数据随机性,提高安全等级,但是也会导致时间开销上升.10.13245/j.hust.210419.T001表1AES和DES加密消耗时间数据集类型AESDES256-CBC128-CBC256-ECB128-ECBLinux kernel1191149497554Ubuntu ISO1715131279Gene1221299791563LAMOST5 6594 4243 7393 52422 392s10.13245/j.hust.210419.T002表2ShuffleEnc加密消耗时间数据块大小/B数据集类型Linux kernelUbuntu ISOGeneLAMOST64×2104513371 496128×2103910321 370256×210377291 180512×210354251 0421×220334228842×220204229174×220203218758×2202042288416×220223251 04232×220233241 00064×22022423958128×22021423997s3.2.4 解密性能如表3和4所示,ShuffleEnc在四类数据集上进行恢复的时间开销都远小于AES-256-CBC,AES-128-CBC,AES-256-CBC,AES-128-CBC和DES.这是由于ShuffleEnc在进行数据解密过程中只须进行少量的数据计算,主要的性能开销来自于I/O.由于DES解密时仍然须要执行大量CPU计算操作,并且Intel CPU无专用加速指令集,因此其消耗时间最长.10.13245/j.hust.210419.T003表3AES和DES解密消耗时间数据集类型AESDES256-CBC128-CBC256-ECB128-ECBLinux kernel162160164163400Ubuntu ISO2019222153Gene152158160158405LAMOST6 1016 5756 3296 41416 867s10.13245/j.hust.210419.T004表4ShuffleEnc解密消耗时间数据块大小/B数据集类型Linux kernelUbuntu ISOGeneLAMOST64×210407451 786128×210386381 515256×210407401 667512×210316341 4711×220265281 1632×220225241 0424×220235229178×2202452390916×220255251 03332×220244241 02064×220254241 003128×220245241 042s4 结语为了满足目前高性能计算虚拟数据空间用户对轻量数据安全方法的需求,本研究提出了ShuffleEnc,该方法基于转置加密技术,提供轻量级数据安全保障,满足高性能计算虚拟数据空间用户需求.通过四组代表性数据集进行实验测试,结果表明:与AES四种加密模式方法相比,ShuffleEnc能够显著减少加解密所需时间.ShuffleEnc能够满足高性能虚拟数据空间对性能和安全两方面的需求.

使用Chrome浏览器效果最佳,继续浏览,你可能不会看到最佳的展示效果,

确定继续浏览么?

复制成功,请在其他浏览器进行阅读