Camellia 算法由 NTT 公司和 Mitsubishi 电子公司与 2000 年联合开发,是一种Feistel 结构的分组密码(分组长度为 128bit,密钥长度可使用 128bit,192bit 和 256bit),具有与 AES 同等级的安全强度及运算量,能够抵抗差分和线性密码分析等已知攻击针对小规模硬件平台的设计,具有高效性。camellia 加密算法中 Feistel 结构具有完整的前后白化层,最后一轮的整个输出与后白化子密钥进行异或运算,攻击者无法获得纯子密钥,只能得到子密钥的异或值,增加了攻击难度。
左上图所示为128bit明文camellia加密流程图,右上图所示为128bit密文解密流程图。解密过程是加密过程的逆过程,两者不同之处是输入的数据不同,加密过程输入的数据是明文,解密过程输入的数据是密文。其中以字母K开头的数据,我们称之为子密钥。F为轮函数,FL和FL-1为FL函数和FL-1函数。
左上图所示为产生子密钥的运算过程。该运算过程与数据的加解密过程类似,也要用到F函数和大量的异括运算。与后者不同的是,F函数的子密钥输入口由密钥拓展常量替换。密钥拓展常量如上右图所示。
上图所示为轮函数F的运算过程,首先经过段选,经过段选的数据与相对应的子密钥进行异或运算,异或运算后的结果作为S盒的输入。Camellia算法一共要用到四个不同的S盒,S盒的定义已在如上公式中给出。S盒处理后的数据还需要输出给P变换作为处理,P变换也为相应的异或运算。最后得出,F函数的输出结果。
上图所示为FL函数和FL-1函数的运算过程,运算过程与上面的F函数类似,拆分成基本运算就是异或,移位和与运算等。
本文主要解释了Camellia算法的原理,以及实现过程,下一篇文档将会介绍Camellia算法的具体shi