0x01 IDEA 简介
IDEA(International Data Encryption Algorithm,国际数据加密算法),于1991年由XueJia Lai(来学嘉)和L. Massey提出。
这种算法是在 DES 算法的基础上发展出来的,类似于三重 DES。发展 IDEA 也是因为感到 DES 具有密钥太短等缺点,已经过时。IDEA 的密钥为 128 位,这么长的密钥在今后若干年内应该是安全的。
0x02 IDEA 加解密过程
总的来说 IDEA 的加密过程可以分为:子密匙生成、明文加密
一、子密匙生成
选定一个 128 位(16 字节)密匙,再将其分为 8 个 16 位的子密匙,这 8 个子密匙就是第一批的 8 个子密匙。这 8 个子密匙循环左移 25 位,即可生成新的 128 位的密匙,重新分为 8 个子密匙,然后重复以上步骤,可得子密匙 56 个(最后 4 个无用,所以实际为 52 个)。
这 52 个子密匙,依次每 6 个为一组,进行一轮加密,共进行 8 轮加密,最后剩余的 4 个子密匙与输出进行加密。
二、明文加密
假定我们输入了一个 64 位的数据,将其分为 4 个 16 位明文分组:msg1、msg2、msg3、msg4
作为加密的第一轮输入。
下面进行第一轮的加密,以下过程重复进行 8 轮,最后再与 4 个密匙进行运算即可得到密文。以下为个人理解中的代码:
#重复的加密过程
for i in range(8):
middle1 = msg1 * key[0+i*6] #key 即为我们得到的子密匙数列
middle2 = msg2 + key[1+i*6] #2+i*6 i 是表示第几轮的, 1 指示这一轮的第几个子密匙
middle3 = msg3 + key[2+i*6]
middle4 = msg4 + key[3+i*6]
middle5 = middle1 ^ middle3
middle6 = middle2 ^ middle4
middle7 = middle5 * key[4+i*6]
middle8 = middle6 + middle7
middle9 = middle8 * key[5+i*6]
middle10 = middle7 + middle9
middle11 = middle1 ^ middle9
middle12 = middle3 ^ middle9
middle13 = middle2 ^ middle10
middle14 = middle4 ^ middle10
msg1 = middle11 #得到下一轮的输入
msg2 = middle12 #最后一轮是就是最后的输出
msg3 = middle13
msg4 = middle14
#最后的加密,得到最终的密文
enc1 = msg1 * key[48]
enc2 = msg2 * key[49]
enc3 = msg3 * key[50]
enc4 = msg4 * key[51] #以上 enc 连接后即为最后得到的密文
三、解密
解密的重点就是密匙,知道了密匙就可以逆向出子密匙,就可以解密密文。
0x03 参考
看雪:《加密与解密》(第三版)