设计密码系统的2个基本方法为扩散与混淆,为的是抵抗敌手给密码系统实施统计分析。扩散是散发明文的统计性质至密文里,它的实现方式是让明文的每一位影响密文多位的值,等同于密文中每位都被明文中多位影响;混淆是把密文与密钥的统计关系接近充分繁杂,为不让敌手得到密钥。
Horst Feistel在20世纪70年代初,设计了Feistel网络结构,提出用乘积密码能得到浅易的代换密码,乘积密码指依次进行2个或多个基本密码系统。
Feistel网络里每轮的结构均一致,每轮的右半数据被用在轮函数f后,和左半数据异或,此过程就是代换。每轮的轮函数结构均一样,不过用不一样的子密钥K做参数。实现代换后,将左半与右半的数据进行交换,此过程叫做置换。此结构是Shannon提的代换-置换网络的专有形式。
实现Feistel网络和如下参数与特性存在关系。
1.分组大小
分组越是大那么安全性就越为高,不过加密速度也越低。设计分组密码用的最广的分组大小即为64bit。
2.密钥大小
密钥越长安全性越高,不过加密速度就会越低。现在一般用128比特的密钥。
3.轮数
单轮结构远远无法确保安全性,多轮结构有充分的安全性。典型地,轮数设为16。
4.子密钥产生算法
此算法越繁杂,那么密码分析则越难。
5.轮函数
轮函数越是复杂,密码分析则越难。