基于Web的动态插值DES加密算法
2022-07-19孙建国高春庚
孙建国,高春庚
(济源职业技术学院 人工智能学院,河南 济源 459000)
十四五规划将人工智能AI列入科技发展的重中之重,人工智能在各个行业得到了长足的发展。人工智能三大核心要素为数据、算法、算力[1]。算法大部分开源,深度学习、卷积神经网络算法目前已经比较成熟[2];因为云计算的出现,算力已不是瓶颈;数据作为算法的粮食,需要不断地给模型注入新的数据,提高算法的准确度。数据的重要性不言而喻[3]。
保护数据,特别是标注好的数据,成为算法公司防止恶意竞争的重要任务。人工智能服务平台,例如百度众测、数据堂、格物钛等多家平台,通过搭建自己的服务平台,甚至是采用数据私有化方式,确保数据安全[4]。Web模式为了提高访问速度,图片数据需要暂存本地,数据安全很难保证。大的厂商采用服务器虚拟化软件Citrix、VMWare控制访问权限,将数据和操作分离,有效地保障了数据安全,但数据访问过慢,降低了数据操作的效率[5]。一个有效的加密算法,数据存储在本地,也很难被破解,同时也可提高数据操作的流畅性。
针对传统DES加密算法密钥容易被破解安全性较低的问题,本文设计一种基于Web的动态插值DES加密算法。本算法在传统DES算法基础上,根据数据的不同批次,设置多个关键位置,并在不同的位置插入加密数值;并结合服务端传送不同批次数据的位置序列及对应的加密值给客户端,方便客户端软件解密数据,有效使用数据。
一、DES算法
DES(Data Encryption Standard)是一种分组对称密钥加密算法,该算法每次处理固定长度的数据段。使用相同的8字节密钥,进行16轮迭代。每轮迭代都利用置换和代替两个基本操作实现加解密[6]。
到目前为止,穷举分析是攻击DES算法最有效的方法之一,遍历8字节密钥空间需要较长时间。但随着计算机计算能力的提高,暴力破解密钥将会变得非常容易[7]。
二、改进的DES算法
DES算法核心是密钥,因为算法的开源性,导致密钥一旦被攻破,数据整个将被完全解密出来[8]。改进的DES算法首先从算法底层入手,在数据的指定位置中插入变化的数值;然后通过Web服务器下发每次的位置数据、数值数据以及密钥;客户端工具加入混淆编译,防止解密过程密钥被破解。具体算法流程如图1所示。
图1 改进的DES算法图
(一)动态插值
改进的DES算法主要基于密钥、插值位置、插值这三个关键值。为了防止破解,需要动态变换。动态插值采用客户端/服务器模式,通过客户端和服务器的按需交互,实现插值及密钥的及时更新。
动态插值主要包括服务器动态插值生成、动态插值存储以及动态插值下发三部分,具体算法流程如图2所示。
图2 动态插值算法流程
动态插值生成包括插值位置、插值生成两部分。
插值位置作为加密的重点要素需要首先考虑,既要考虑插值个数,也要兼顾插值位置分布。插值个数太少,容易被破解;插值个数过多,将浪费大量的加密解密时间。服务端首先根据日常加密文件大小,确定插值数量最多不超过总长度的二分之一,同时控制插值数量最小不少于文件总长度的五分之一。插值数量确定后,采用均分方式,结合文件大小,指定插值段。在一定的插值段内,调用随机数,控制最近两次位置间隔不少于20个字符来生成插值位置。如果出现少于20个字符间隔数据,本次位置数据需要重新生成。经过一系列操作,最终生成插值位置。
插值位置产生后,一一对应生成动态插值。加密文件一般为非文本文件,即使是文本文件,也可以按照二进制文件加密和解密。将加密文件统一按照二进制方式处理,既可以使用95个可见ASICC码字符,也可以使用161个控制字符或者其他特殊字符,进一步扩大了插值数值范围。插值使用随机函数生成,通过比对最近几次插值,回避重复值过多、易被破解的问题。
密钥采用多种类型字符组合,可以使用0~9、a~z、A~Z常规字符,也可以使用“-”“+”“_”“/”“?”“.”“>”“<”等一些特殊字符。密钥使用随机函数产生,并通过算法控制必须包括4种类型字符,减少相同字符重复出现次数,通过与服务器存储的多个密钥比较,确保唯一性。
服务器管理多个厂家、多种类型的标注数据,每周甚至每天还会有新的数据加入。为了管理这些错综复杂的数据,需要对不同厂家、不同类型、不同日期的数据予以区分。客户端只关心实际的标注数据,而且标注数据往往都是以G为单位,所以无需在数据库中存储实际的标注数据。算法本身关心的是和密钥相关的数据,所以需要把厂家、类型、日期这些信息与标注数据存储在一起,客户端根据这些信息获取不同的密钥和插值。厂家、类型、日期这些信息可以采用传统的DES算法加密,密钥经常更换。
客户端导入加密数据时,首先通过DES解密,解析出厂家、类型、日期这些信息,并把它发送至服务端。服务端响应后,在服务器中查询并回复插值位置、插值和密钥给客户端,客户端通过插值解密,恢复标注数据。图片数据将形成数据流直接导入图片区,标记数据采用动态方式,用时解密单个文件,一旦停止使用,立马转为加密文件。为了防止客户端使用过程中被破解,可以采用间歇式数据交互方式定期向服务端回传插值和密钥,一旦发现异常,将关闭客户端甚至可以删除客户端及加密数据来保护数据。
除了服务端、客户端数据加密外,在传输过程中,还需要采用安全签名等多种方式确保数据不能在网络通信环节被破解。
(二)插值加密
插值加密需要定义2个数组变量s_iDesPos、s_bDesVal。s_iDesPos是需要插值的位置,根据文件长度fLen,确定插值位置个数大于fLen/5,小于fLen/2,一般设置为fLen/3即可。s_bDesVal是每个加密位置对应的插值,长度与插值位置一致,是一个随机字节数组。
具体加密过程为:
(1)通过原始的DES加密算法完成首次加密。
(2)使用File文件对象,打开加密后的文件,并读入数据输入流ms中。
(3)设置当前写入位置变量iWritePos和写入数量变量iWriteCount,两个变量初值均为0。
(4)打开加密后文件fs。
(5)单字节方式读取数据输入流ms。
(6)如果写入数量iWriteCount小于插值位置s_iDesPos数组总长度,并且当前写入位置iWritePos等于插值位置s_iDesPos[iWriteCount],写入插值s_bDesVal[iWriteCount]至加密文件fs中,并递加当前写入数量变量iWriteCount。写入插值后,仍需要将原始加密数据写入fs,并改变当前写入位置iWritePos;否则,只写入原始加密数据、改变当前写入位置。
(7)重复步骤5、6,直到输入流ms读取完毕为止。
fs = File.OpenWrite(savePath);
int iWritePos = 0;
int iWriteCount = 0;
foreach (byte b in ms.ToArray())
{
if (iWriteCount < s_iDesPos.Length && s_iDesPos[iWriteCount]== iWritePos)
{
fs.WriteByte(s_bDesVal[iWriteCount]);
iWriteCount++;
}
fs.WriteByte(b);
iWritePos++;
}
(三)混淆编译
客户端使用过程中,潜在的风险就是反编译。一旦客户端被反编译,固定密匙很容易被看到;通过服务端传递的密匙也有可能会被追查到内存地址,进而破解密匙。通过混淆编译,可以防止客户端被暴力破解。C#编写的代码可使用VS自带的Dotfuscator实现混淆代码、变量名修改、字符串加密等功能。Java编写的代码可使用ProGuard,一个纯Java编写的混淆工具,有客户端和JAR包两种使用方式。可以将程序打包为JAR,然后用工具进行混淆,也可以在maven中导入ProGuard的插件,对代码进行混淆[9]。
三、算法实施及效果
基于Web的动态插值DES加密算法动态插值部分前端页面采用JSP技术,后台采用B/S(Browser/Server)结构,MVC设计模式以及当前流行的整合框架SSM(Struts2+Spring+Mybatis),结合MySQL数据库,使用Eclipse开发实现服务器动态插值生成、动态插值存储。使用ProGuard的插件,完成Java代码的混淆编译。
数据加密、解密部分使用Microsoft Visual Studio 2015中的WebClient+WebRequest实现动态插值下载,借用传统的DES加密、解密算法,在多个位置上插入加密值实现动态插值;通过VS2015自带的Dotfuscator实现混淆代码,防止反编译。
标注数据来源于4家自动驾驶相关算法研究公司,覆盖前视数据、环视数据、鸟瞰车位数据,前视数据60万左右,环视数据40多万,车位数据20多万。图片多为1K(1280*720)数据和2K(1920*1080)数据,部分数据为4K(4096*2160)超高清数据,鸟瞰数据分辨率较为特殊,不同公司分辨率大小不一。
使用改进的DES算法,完成百万级数据的加密。算法及数据运营6年,期间出现员工暴力破解的情况,但还未破解成功,数据即被删除;与合作公司经常沟通数据安全,并未出现数据被倒卖盗用的问题,有效回避了同行业不正当竞争。
基于改进的DES算法的标注工具使用人数突破500人,日使用频率达到8个小时以上,年使用频率达到300天以上,对比未使用改进的DES算法的标注工具,从未出现加密、解密过程造成的数据延迟、报错等各种异常。由此可见,本文算法在保证数据安全性的同时,有效地提高了数据的可靠性和稳定性。
四、结语
在传统DES算法基础上,提出了一种改进的DES加密算法。通过在DES加密后数据随机位置插值,提高数据破解难度;使用客户端/服务端模式,动态下载密钥相关数据,保证插值位置、插值、DES密钥实时更新;结合Java、C#混淆编译,防止加密解密工具被破解。多方面提高了数据的安全性。该算法运用在数据标注行业6年,未出现数据泄露情况,具有较强的实用性。