一、算法原理
我们可以将明文看成一个Byte数组A[N],加解密过程就是对这个数组的运算。首先,我们从头到尾对它进行一次正向的遍历,在遍历的同时将每次遇到的元素的值与前一个元素的值叠加,并写回到数组中。即A[i]+A[i-1]=>A[i](i从2递增到N)。这样执行了遍历相加运算后,除了第一个元素之外,其余所有元素的值都会依赖于它之前的元素的值。不难发现,进行一遍遍历,只能让数组中下标大的元素对下标小的元素形成依赖,而反过来则不成立,而理想中的情况应该是混合型的依赖。为了解决这个缺陷,我们可以使用反向遍历——思路与正向遍历相同,只是起止点对调了:A[i]+A[i+1]=>A[i](i从N-1递减到1)。经过了正反两次叠加遍历,数组中的每个元素的值都变得和其它所有元素的值相关了——由此,本算法也就相应的具备了抗反向分析以及差分分析的能力。
在解决了信息相关性的问题之后,接下来要做的就是将密钥置于在计算过程之中。首先,在正反遍历的求和计算过程中加入了两个长度为一个字节的密钥,分别作用于求和前和求和后的数组元素值,于是,加密过程就变成了:
正向遍历:((A[i]XOR K11)+A[i-1])XOR K12=>A[i]
反向遍历:((A[i] XOR K21)+A[i+1])XOR K22=>A[i]
虽然有了上面的两次遍历过程,但是,不难发现——在每次遍历中,都有一个位于起点的元素的值不会发生变化(正向遍历中的A[1]以及逆向遍历中的A[N])——为了避免这两个元素成为破解的切入点,必须对其进行进一步处理。于是,我们对数组两端的元素再进行一次加密,让它们在正反两次遍历开始时分别作用于相应的起始元素:
正向遍历前:((A[1] XOR K31)+K32=>A[1]
反向遍历前:((A[N] XOR K41)+K42=>A[N]
在完成了加密算法的设计后,接下来就是解密算法——上面的双向遍历叠加过程可以很容易的逆向为双向解密过程,具体见后面的代码,在此不再赘述。同时,不难发现解密密钥就是加密密钥,因此,本加密算法属于对称加密算法。
现在,密钥的复杂度达到了8个字节,即64Bits,能满足一般的加解密要求。为了获得更大的密钥空间,用户完全可以采用多次加密或者多层加密的方法。需要指出的是,由于本算法每次的加密对象都是整个明文,而不是某个定长区块,因此,多次嵌套加密后,所有的密钥信息都会被密文均匀的包容,而不是在固定长度的区块中相互混迭。
二、算法实现
下面是算法的Pascal代码实现(在此,我们使用字符串S作为加解密的对象):
procedure TwoWayEnc(var S:String;const K1,K2:Integer);
var
i,n:Integer;
K11,K12,K21,K22,K31,K32,K41,K42:Byte;
begin
n:=Length(S);
if n=0 then exit;
K11:=K1;K12:=K1 shr 8;
K21:=K1 shr 16;K22:=K1 shr 24;
K31:=K2;K32:=K2 shr 8;
K41:=K2 shr 16;K42:=K2 shr 24;
S[1]:=Char(Byte(S[1])xor K31+K32);
for i:=2 to n do
S[i]:=Char((Byte(S[i])xor K11+Byte(S[i-1]))xor K12);
S[n]:=Char(Byte(S[n])xor K41+K42);
for i:=n-1 downto 1 do
S[i]:=Char((Byte(S[i])xor K21+Byte(S[i+1]))xor K22);
end;
procedure TwoWayDec(var S:String;const K1,K2:Integer);
var
i,n:Integer;
K11,K12,K21,K22,K31,K32,K41,K42:Byte;
begin
n:=Length(S);
if n=0 then exit;
K11:=K1;K12:=K1 shr 8;
K21:=K1 shr 16;K22:=K1 shr 24;
K31:=K2;K32:=K2 shr 8;
K41:=K2 shr 16;K42:=K2 shr 24;
for i:=1 to n-1 do
S[i]:=Char((Byte(S[i])xor K22-Byte(S[i+1]))xor K21);
S[n]:=Char((Byte(S[n])-K42)xor K41);
for i:=n downto 2 do
S[i]:=Char((Byte(S[i])xor K12-Byte(S[i-1]))xor K11);
S[1]:=Char((Byte(S[1])-K32)xor K31);
end;
三、总结
通过实际测试,本算法在主频为2.0GHz的CPU上完成对10MB文本的加密及解密运算只需要0.11秒,平均每个字节的加密或解密运算量小于11个时钟周期,和得到广泛应用的加密算法相比,效率优势非常明显(大多数对称加密算法对每个字节的加解密都需要数十个时钟周期,非对称加密算法的耗时则更长)。基于这一点,完全可以进行多次加密运算以获得更高的安全性,而不会有太大的性能负担。
全球著名减震器制造商——天纳克携手安企神共筑安全制造新防线
天纳克(北京)汽车减振器有限公司天纳克(北京)汽车减振器有限公司成立于1995年,是天纳克在中国最早投资的合资企业。公司集设计、开发、生产及销售汽车减振器于一身。作为天纳克全球网络的一部分,能充分享受天纳克全球的技术积累经验和国际领先的设计理念,加之先进的生产设备和工艺技术。天纳克(北京)汽车减振器有限公司完全能保证为...
筑牢安全防线:安企神企业助力特种设备机械企业数据防泄密解决方案
西安苛菲特机械设备有限公司 西安苛菲特机械设备有限公司致力于特种设备的发展,专业从事特种设备的研发、制造和销售。目前已成为有色冶金特种设备、大型船舶特种设备、煤化工特种设备的领军品牌,并在业内得到了“ 特种设备专家”的称号。公司以打造国内一流特种设备为使命,主要产品定型为高品质特种(高温、高压、高合金)流量控...
安企神软件:三峡大学数据安全的坚实后盾与合作伙伴
学校介绍三峡大学是经国家教育部批准,由原武汉水利电力大学(宜昌)和原湖北三峡学院于2000年5月25日合并组建。2018年,学校被省人民政府列为“国内一流大学建设高校”,水利工程、土木工程、电气工程等3个学科被列为“国内一流学科建设学科”;目前,三峡大学已发展成为水利电力特色与优势比较明显、综合办学实力较强、享有较高社...
零部件企业数据保卫战:安企神软件如何筑起防泄密铜墙铁壁
瑞安市特迩翡汽车配件有限公司企业背景瑞安市戴尔菲汽车零部件有限公司一直致力于高共轨电喷(EFI)发动机和SCR排气系统的研发。通过了16949质量管理体系和CE认证,公司具备自主开发汽车电子系统和核心软件的技术能力。公司力争成为以市场为导向、以技术为支撑、以质量为先、以人才为本的知名创新型企业。产品包括:氮氧化物传感器...
强强联合!安企神软件携手瀚颐共筑汽车行业终端安全防线
瀚颐上海汽车电子科技有限公司EAST瀚颐中国团队成立于2015年。是国际AUTOSAR软件联盟的研发伙伴单位。具备汽车电子硬件设计、软件开发、CAN网络集成、系统集成测试以及项目管理的全面研发能力。专注于汽车电子以及相关产业并拥有25年以上的专业经验,拥有来自于德国和中国业内专家和高管组成的顾问团队,并向全球汽车行业客...