扩散加密算法是一种使用扩散算法进行数据加密/解密的算法。它使用扩散算法的原理,在处理过程中加入密匙,从而达到数据加密的目的。扩散算法有着完美的扩散率,进行数据加密可谓是“本职所在”。

扩散算法通过在元素之间建立扩散路径,使元素沿着该路径向其他元素扩散。每一个元素都沿着指定的路径扩散,从而使元素间相互发生影响。

扩散算法的核心在于扩散过程,扩散过程由扩散网络决定。所谓扩散,是指元素传递影响的过程,若元素A扩散到元素B,则当A发生改变时,B也发生改变。

若有N(N>=1)个元素组成的集合M。通过一定的规则使M中的元素相对应,如M1(起点)对应M4(终点),M4对应M8,M8对应M2,M2对应M6…,描述为Mi向Mj扩散,记作Mi→Mj;分别取出相对应的元素并组成表达式,通过一定的方法对表达式进行处理,再使用处理的结果更新被对应的元素(终点)。当起点元素发生改变时,终点元素也发生改变;在处理的过程中这种改变会发生传递,进而影响其他元素,最终影响所有元素。

在上述过程中,元素间的对应关系用扩散路径(以下简称路径)表示,起点元素(Mi)叫做原体,终点元素(Mj)叫做受体;由元素组成的表达式叫做扩算式;对扩算式的处理叫做扩散运算(为防止受体丢失,扩散运算时需加入受体一同运算);所有路径的集合叫做扩散网络(以下简称网络);对整个网络执行一次扩散叫做一个周期。

建立网络时,若要达到100%的扩散率,必须要保证所建立的网络对于每一个输入元素都能影响任何一个输出元素;每个扩散式的扩散运算都必须满足原体中任意元素的变化都将引起受体的变化(受体为元素组时,则元素组内的每一个元素都要发生变化)。

加密过程

第一步:建立扩散网络,将分组中的元素以某种规则建立网络(有序或无序);所建立的网络必须满足对于每一个输入元素(X、Y、K)都能通过该网络扩散到任意一个输出元素中(X、Y)。

第二步:以路径为基础建立扩散式,扩散式的建立是为确认参与扩散运算的元素。如:

X[0]+K[0]+Y[4]→Y[4],Y[4]+K[0]+X[0]→X[0];

X[0]+K[0]+Y[2]→Y[2],Y[2]+K[0]+X[0]→X[0];

X[0]+K[0]+Y[1]→Y[1],Y[1]+K[0]+X[0]→X[0];

......

建立扩散式时,扩散式除包含路径所连接的元素之外,还可以包含其他任意元素。

第三步:对扩散式进行扩散运算,并使用运算的结果更新受体。为防止受体丢失,需加入受体一同运算。如

Y[4]=FY(X[0], K[0], Y[4]), X[0] = FX(X[0], K[0], Y[4])。函数FX, FY是可逆函数。

解密过程与加密相反。

算法特性

密匙长度任意

扩散算法支持任意长度、任意数量的分组进行处理,扩散加密算法同理。建议分组长度N满足

,x>=0且x为整数。扩散加密可以实现密匙和明文长度不等同,密匙即可以比明文短,也可以比明文长,具体可根据需要设定。

运算速度快

扩散加密算法的核心代码只有几行,所使用的运算操作可以是速度极快的

浅析扩散加密算法

运算(如加法运算、异或(xor)运算、置换运算和移位运算),且只需少量的扩散阶段即可完成明文块的加密(设N为明文长度,则只需

个扩散阶段)。在每一阶的扩散处理都可以使用并行处理,对于N长度的扩散处理,并行计算速度理论上比串行计算提高N倍。

扩散加密不需要显式的对明文进行分组,可以直接对缓冲区进行(并行)处理,省去了明文的复制操作,进一步减少处理时间。

灵活的处理方式

网络可以建立为有序的(图1),也可以建立为无序的(图2)。相同长度的分组,有多种网络建立方案;丰富的扩散式建立方式,扩散式除包含路径所连接的元素之外,还可以包含其他任意元素;丰富扩散运算方式,扩散运算可以使用任何函数进行运算(若需解密,则要求函数可逆)。

加密模式

扩散算法其良好的扩展性,可有如下加密模式:

对称分组加密:使用扩散算法进行加密,对每一组明文的加密都使用的相同的密匙(可以在每一阶都使用不同的密匙)。

对称流加密:仅使用扩散算法生成子密匙流(参见生成随机数),再使用所生成的密匙流和明文进行异或运算(xor)即可得到密文。使用可靠的扩散运算(函数)再以消除线性,将使密匙重复变得遥遥无期。

对称分组流加密:使用扩散算法以密匙为基础生成子密匙流,再使用扩散算法对明文进行分组加密。此模式可以满足对每一组明文的加密都使用不同的密匙。

半非对称加密:应用扩散算法,可提高非对称的加密效率。用非对称加密数据时,不需要将整个明文组块合成一个大整数进行加密,只需对明文中的各个元素(元素组)分别加密即可(密匙不同)。

此模式共分三次加密。设有明文M,长度为n;应用非对称分别对M中的各个元素(M1,M2,M3…Mn)进行加密后得到T1;应用扩散算法对T1进行加密后得到T2;最后再次应用非对称分别对T2中的各个元素加密得到密文C(密匙与第一次加密相同)。

全非对称加密:设函数F与函数Fˊ为非对称互斥函数,通过F(Fˊ)加密后的数据只能通过F’(F)进行解密。应用扩散算法,在进行扩散运算的过程中使用F(Fˊ)进行加密,用Fˊ(F)进行解密即可。