MISTY1介绍
Misty1是一个分组密码算法,由在三菱工作的Eisaku Takeda提交给NESSIE,于1996年公布。它的密钥长度是128位,明文长度是64位,适用于资源紧张的环境。整个算法由递归等组成,每一个层次的结构采用稳妥的Feistel结构。MISTY1是一种迭代密码,可以迭代超过8轮,或者更普遍的是迭代4回。它用128位密钥对64位数据进行不确定轮回的加密,采用了两个S-盒,其中一个是7×7的S-盒,s7,另一个是9×9的S-盒,s9。Misty1取得了良好的阻力线和鉴别攻击,并且使能实行以相对较少的逻辑组件中执行函数的程度相对较低。
MISTY1算法是一种迭代密码,用128位密钥对64位数据进行不确定轮回的加密。它采用了经证实可以抵抗密码微分分析和线性分析的安全理论,在设计时就考虑到了在硬件环境和软件环境下都比较高的加密速度。算法可以分为两部分,一部分是密钥的产生部分,另一部分是数据随机化部分。密钥产生部分根据128位的输入密钥,产生128位的扩展密钥。数据随机化部分输入64位的数据进行混合,也就是所谓的加密。
密钥产生
K为输入密钥,K’为扩展密钥,K和K’都是128位,扩展密钥是由函数FI从K,1,… K,8中产生,并存储在K,9,…, K,16中。Ki代表K的一个元素,1≤i≤8,每个的长度为16位;然后Ki被认为作输入到FI,Ki+1作为FI模的密钥。FI模的输出是16位的K,i, 1≤i≤8,K9=K1
K=K1‖K2‖K3‖K4‖K5‖K6‖K7‖K8
for i=1 to 8 do
K,i=FI(Ki,Ki+1)
K,= K,1‖K,2‖K,3‖K,4‖K,5‖K,6‖K,7‖K,8
数据随机化
MISTY1算法采用了两个S盒,S7和S9。函数FO调用函数FI,而密钥扩展部分也使用函数FI。FI函数采用了稳妥的Feistel结构,它的输入是32位,输出也是32位。其中,S7是一个7×7的S盒,而S9是一个9×9的S盒。这两个S盒都被证明具有较好的阻力线和鉴别攻击能力,可以有效地保护数据安全。函数FL和函数FO是用来混合数据的,其中函数FL采用线性变换,而函数FO则采用非线性变换。这些函数的设计都旨在提高MISTY1算法的安全性和效率。
函数
FI函数将16位输入分为两部分L0和R0
FI的输入为:
X16= L0‖R0
KIij=KIijL‖KIijR
FI则定义为:
R1=S9[L0]∧(00b‖R0)
L1=R0
R2=S7[L1] ∧(truncate(R1))KIijL
R3=S9[L2] ∧(00b‖R2)
L3=R2
Y16=L3‖R3
FI函数程序代码:
public int FI(int x,int K