MARS加密算法是IBM公司提供的一个候选加密算法。那么接下来,我就给大家简单的介绍一下MARS加密算法。
一、MARS加密算法算法原理
密钥增加作为预白化处理,经8轮无密钥的向前混合,8轮有密钥的向前变换,8轮有密钥的向后变换,8轮无密钥的向后混合,以及作为后白化处理的密钥减法。16轮有密钥的转换称为密码核(cryptographic core),无密钥的迭代使用两个8x32 bit S-boxes、加、异或操作。此外,有密钥的迭代使用32-bit密钥乘法、数据相倚旋转和密钥加法。混合与核心迭代都被修改为Feistel结构的迭代,其中,1/4的数据块用于标识其它3/4的数据块。
二、密钥的生成
MARS加密算法支持128~448位变长密钥,定义一个临时容器ULONG32 T用于存放用户输入的密钥,
T[0,1…n] = K[0,1…n]
T[n] = n ;
T[n+1,…14] = 0 ;
其中n是用户输入密钥的长度(4字节为单位)。
然后按照下面的算法进行操作:
for ( j = 0 ; j < 4 ; j++)
{
for ( i = 0; i < 15 ;i++)
{
/*T[i] ^= ((T[(i-7)%15]^T[(i-2)%15])<<<3)^(4*i+j);*/
}
for ( r = 0 ; r < 4 ; r++)
{
for ( i = 0; i < 15 ;i++)
{
/*T[i] = T[i]+ S[low 9 bits of T[(i-1)%15]])<<<9;*/
}
}
for ( i = 0 ; i < 10 ; i++)
{
/*T[10*j+i] = T[4*i%15];*/
}
最后我们需要修正那些在E-Fun操作中用作乘数的密钥也就是子密钥数组中的K[5],K[7],K[9],…K[35],要求他们的二进制表示形式中没有连续10个以上(含10个)的0或1。
需要修正的密钥为K[i] = K0K1K2…K30K31,保留K[i]的最低两位的值 n = K[i]&0x3,把K[i]的最低两位置1 w = K[i] | 0x3,产生掩码M:
最低两位置1后的K的二进制表示中如果含有10以上连续的0或1,那么将这些连续位置1,其他的位置0,然后把最低的两位和最高位置0,最后把连续位(1或0单独算)的起始位和中止位置0。
例如:
产生掩码后,我们利用n值作为s-box的索引取得一个替代值,这个s-box含有4个32位的元素,每个元素的二进制表示不含7个(含7个)连续的1或0,MARA加密算法推荐的s-box为:
ULONG32 B[4] = { 0xa4a8d57b , 0x5b5d193b , 0xc8a8309b , 0x73f9a978 }
然后利用如下算式得出K[i]:
K[i] = w ^ (( B[n] <<< ( low 5 bits of K[i-1]) & M)
三、明文加密
1、 第一步前向混合
输入的128位明文分成四块D[0],D[1],D[2],D[3],选取生成的40个密钥的前四个分别与上述四块数据进行加操作。
D[0] += K[0];
D[1] += K[1];
D[2] += K[2];
D[3] += K[3];
果作为第一轮操作的输入数据。
第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
输入的四块数据D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把32位的源数据D[0]分成8位的四块b0,b1,b2,b3
b0和b2作为数组下标从S0中寻找s-box替换数:S0[b0],S0[b2]
b1和b3作为数组下标从S1中寻找s-box替换数:S1[b1],S1[b3]
对FirstTarget的操作:
FirstTarget按位异或S0[b0]后的加上S1[b1]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget加上S0[b2]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S1[b3]的结果返回给ThirdTarget。
对Source的操作:
Source循环右移24位后的结果返回给Source。
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后作为下一轮的输入。
2、第二步密码核
把输入的128位数据分成四块D[0],D[1],D[2],D[3] ,其中D[0]作为源数据(Source),剩下的3个作为目标数据:
D[0]D[1]D[2]D[3]SourceFirstTargetSecondTargetThirdTarget
该步骤中有一个称为E-Fun(见下一节)的操作,把Source和对应两个子密钥(从第5个子密钥开始递增,本轮的输入子密钥K[4],K[5]下一轮的子密钥就是K[6],K[7])作为参数输入,返回三个操作输出L,M,R,然后把这三个输出结果和三个目标数进行加法或异或操作,然后把Source循环左移13位,合并D[0],D[1],D[2],D[3]形成128位数据,循环左移32位后作为下一轮的输入。
本步骤共进行16轮,假定E-Fun的第一个输出数为L,第二个输出数为M,第三个输出数为R。
前8轮中,FirstTarget 和 L相加的结果返回给FirstTarget;SecondTarge和M相加的结果返回给SecondTarget;ThirdTarget和R按位异或的结果返回给ThirdTarget。
后8轮中,FirstTarget 和 R按位异或的结果返回给FirstTarget;SecondTarge和M相加的结果返回给SecondTarget;ThirdTarget和L相加的结果返回给ThirdTarget。
3、 E-Fun操作
该操作利用输入的"种子"数据-D,和两个加密子密钥K1和K2生成3个输出数据。
定义三个临时变量L,M,R
◆ 把D(输入的种子数据)循环右移13位后的结果赋给R
◆ 把D和K1加操作的结果赋给M
◆ 取M的低9位作为s-box的索引找到替代数赋给L
◆ 把R和K2乘操作的结果作循环左移5位后的值返回给R
◆ 把L和R按位异或的结果返回给L
◆ 取R的低五位的值,把M循环左移这个值后的结果返回给M
◆ 把R循环左移5位后的结果返回给R
◆ 把L和R按位异或的结果返回给L
◆ 取R的低五位的值,把L循环左移这个值后的结果返回给L
把L,M,R作为E-Fun操作的第一,第二,第三输出数返回.
4、第三步后向混合
把输入的128位数据分成四块D[0],D[1],D[2],D[3]第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
输入的四块数据D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把32位的源数据D[0]分成8位的四块b0,b1,b2,b3。
b0和b2作为数组下标从S1中寻找s-box替换数:S1[b0],S1[b2]
b1和b3作为数组下标从S0中寻找s-box替换数:S0[b1],S0[b3]
对FirstTarget的操作:
FirstTarget按位异或S1[b0]后的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget减去S0[b3]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget减去S1[b2]后与S0[b1]按位异或的结果返回给ThirdTarget。
对Source的操作:
Source循环左移24位后的结果返回给Source。
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后作为下一轮的输入。
5、 密文的输出
进行完上述的操作后,对生成的密文D[0],D[1],D[2],D[3]与对应的最后4个子密钥进行减法操作形成最终的密文。
D[0] -= K[36]; D[1] -= K[37];
D[2] -= K[38]; D[3] -= K[39];
四、密文解密
用于密文解密的40个子密钥的生成和明文加密时的40个子密钥的生成方法相同。
1、第一步前向混合
输入的128位密文分成四块D[0],D[1],D[2],D[3],选取生成的40个密钥的最后四个分别与上述四块数据进行加操作。
D[0] += K[36];
D[1] += K[37];
D[2] += K[38];
D[3] += K[39];
结果作为第一轮操作的输入数据。
第一轮:
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
把D[0],D[1],D[2],D[3]合并成128位的数据,循环左移32位后分成四块D[0],D[1],D[2],D[3]其中D[0]作为源数据(Source),剩下的3个作为目标数据,把D[0]循环右移24位后的结果返回给D[0]。
把32位的源数据D[0]分成8位的四块b0,b1,b2,b3
b0b1b2b3FirstTargetSecondTargetThirdTarget移动前D[0]D[1]D[2]D[3]移动后D[1]D[2]D[3]D[0]
b0和b2作为数组下标从S1中寻找s-box替换数:S1[b0],S1[b2]
b1和b3作为数组下标从S0中寻找s-box替换数:S0[b1],S0[b3]
对FirstTarget的操作:
FirstTarget按位异或S1[b0]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget加上S0[b3]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S0[b1]后加上S1[b2]的结果返回给ThirdTarget。
本步骤共进行8轮,在第一轮和第五轮中操作结尾处添加将Source加上FirstTarget的结果返回给Source的操作。在第二轮和第六轮中操作结尾处添加将Source加上ThirdTarget的结果返回给Source的操作。
2、第二步密码核
把输入的128位数据循环左移32位后分成四块D[0],D[1],D[2],D[3],其中D[0]作为源数据(Source),剩下的3个作为目标数据,把Source循环右移13位的结果返回给Source,
D[0]D[1]D[2]D[3]SourceFirstTargetSecondTargetThirdTarget
把Source和对应两个子密钥(从第34个子密钥开始递减,本轮的输入子密钥K[34],K[35]下一轮的子密钥就是K[32],K[33])作为E-Fun(同加密)操作的输入参数,返回三个操作输出L,M,R,然后把这三个输出结果和三个目标数进行减法或异或操作,然后,合并D[0],D[1],D[2],D[3]形成128位数据作为下一轮的输入。
本步骤共进行16轮,假定E-Fun的第一个输出数为L,第二个输出数为M,第三个输出数为R。
前8轮中:
FirstTarget 和 R按位异或的结果返回给FirstTarget;
SecondTarge和M相减的结果返回给SecondTarget;
ThirdTarget和L相减的结果返回给ThirdTarget。
后8轮中:
FirstTarget 和 L相减的结果返回给FirstTarget;
SecondTarge和M相减的结果返回给SecondTarget;
ThirdTarget和R按位异或的结果返回给ThirdTarget。
3、第三步后向混合
把输入的128位的数据,循环左移32位后分成四块D[0],D[1],D[2],D[3]。
D[0]D[1]D[2]D[3]b0b1b2b3FirstTargetSecondTargetThirdTarget
其中D[0]作为源数据(Source),剩下的3个作为目标数据,把D[0]循环左移24位后的结果返回给D[0],把32位的源数据D[0]分成8位的四块b0,b1,b2,b3。
b0b1b2b3FirstTargetSecondTargetThirdTarget移动前D[0]D[1]D[2]D[3]移动后D[1]D[2]D[3]D[0]
b0和b2作为数组下标从S0中寻找s-box替换数:S0[b0],S0[b2]
b1和b3作为数组下标从S1中寻找s-box替换数:S1[b1],S1[b3]
对FirstTarget的操作:
将FirstTarget减去S1[b1]后再按位异或S0[b0]的结果返回给FirstTarget。
对SecondTarget的操作:
SecondTarget减去S0[b2]的结果返回给SecondTarget。
对ThirdTarget的操作:
ThirdTarget按位异或S1[b3]的结果返回给ThirdTarget。
本步骤共进行8轮,在第3轮和第7轮的128位数据循环左移32位操作之后添加将Source减去FirstTarget的结果返回给Source的操作,.在第4轮和第8轮128位数据循环左移32位操作之后添加将Source减去ThirdTarget的结果返回给Source的操作。
4、 明文的输出
进行完上述的操作后,对生成的D[0],D[1],D[2],D[3]与对应的起始4个子密钥进行减法操作还原成明文。
D[0] -= K[0]; D[1] -= K[1];
D[2] -= K[2]; D[3] -= K[3]。
小知识之加密算法
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
u盘管理软件哪个好?
如今,随着数字办公的普及,USB闪存驱动器作为一种方便的数据存储和传输工具,其安全性越来越受到公司的重视。为了保证数据安全,避免数据泄漏,挑选出色的USB闪存驱动器管理软件至关重要。今天,让我们来看看一些备受推崇的USB闪存驱动器管理软件,帮助你找到最适合你的。一、BitLocker(内置Windows)作为Windo...
监控电脑上网记录的软件有哪些?
如今,随着数字办公的日益普及,如何有效管理员工的上网行为,保证企业信息安全已经成为很多企业面临的共同挑战。因此,选择一个合适的电脑上网记录监控软件至关重要。本文将为您介绍几款备受推崇的监控软件,帮助你更好地了解这一领域,实现高效的管理和安全防护。一、安企神软件1、网络行为记录:详细记录员工访问的网站,包含访问时间、停留...
监控记录电脑操作的软件有哪些?
如今,随着数字办公的日益普及,企业对员工电脑操作的监控要求也越来越高。这类管控不仅有利于提高效率,并且有效预防数据泄漏和内部威胁。本文将为您介绍一些流行的电脑操作监控软件,以帮助您更好的了解该领域。一、安企神软件安企神软件以其强大的实时监控能力及友善的操作面板获得了广泛好评。它可以记录员工的键盘、屏幕截屏、应用软件使用...
公司电脑监控软件能看到视频内容吗?
如今,随着数字办公的日益普及,公司的电脑监控软件已经成为企业管理的有效途径。但是,这类软件是否能看到员工电脑的视频内容一直是一个备受瞩目的话题。今日,使我们深入讨论一下这种情况。首先,必须明确的是,公司电脑监控软件的主要作用是记录员工在电脑上的操作行为,包括但不限于网页浏览、系统软件运用、文件操作等。这些软件通常可以实...
u盘设备管控软件有哪些?U盘设备控制软件大盘点
随着数字办公的普及,U盘作为一种方便的数据存储和传输工具,被广泛应用于单位和个人用户中。然而,U盘的应用也带来了数据安全的风险。为了高效管理U盘设备,保证数据安全,市场上出现了很多U盘设备控制软件。本文将盘点几类主流的U盘设备控制软件,帮助你更好地保护数据安全。一、安企神软件安企神软件是一种强大的公司级电脑管理和数据安...