密码编码学与网络安全(3):对称密码之分组密码和数据加密标准

流密码与分组密码

流密码每次加密数据流的一位或一个字节,如果**流是随机的,除非获得**流,否则这个密码是不可破的。然而,**流必须提前以某种独立、安全的信道提供给双方。如果待传递的数据流量很大,这就带来了一个不可逾越的障碍。相应地,出于实用的原因,位流必须以算法程序的方式实现,从而双方都可以生产具有密码学意义的位流。
密码编码学与网络安全(3):对称密码之分组密码和数据加密标准
分组密码是将一个明文分组作为整体加密并且通常得到的是与明文等长的密文分组。典型的分组大小是64位或128位。与流密码一样,两个用户要共享以恶对称加***。

传统分组密码结构

Feistel密码原理

分组密码作用在n位明文分组上,而产生n位密文分组。共有2n个不同的明文分组,且由于加密是可逆的(即可以解密),每一个明文分组将唯一对应一个密文分组。这样的变换称为可逆变换,或非奇异变换。下图表示了n=2时的非奇异变换和奇异变换。
密码编码学与网络安全(3):对称密码之分组密码和数据加密标准
n=4时,4位的输入有16种可能的输入状态,每一种被代替密码映射成16种可能输出状态中的唯一一个,每一个表示4位的密文输出。这是分组密码的最一般形式,能用来定义明文之间的任意可逆变换。Feistel称这种密码为理想分组密码,因为它允许生产最大数量的加密映射来映射明文分组。然而,从现实和运行角度看,采用大规模分组的任何可逆代替密码(即理想分组密码)时不可行的。因为对于这样的变换,映射本身就是**。考虑到这些困难,Feistel指出我们所需的是对理想分组密码体制(分组长度n较大)的一种近似体制而已。
Feistel建议使用乘积密码的概念来逼近理想分组密码。乘积密码是指依次使用两个或两个以上基本密码,所得结果的密码强度将强于所有单个密码的强度。这种方法的本质是开发一个分组密码,密码长为k位,分组长位n位,采用2k个变换,而不是理想分组密码的2n个可用变换。
Feistel建议使用这样的密码:该种密码交替地使用代替和置换。
代替:每个明文元素或元素组被唯一地替换为相应地密文元素或元素组。
置换:明文元素的序列被替换为该序列的一个置换。也就是说,序列里没有元素被添加、删除或替换,但序列里元素出现的顺序改变了。

混淆和扩散

Shannon引进混淆和扩散这两个术语来刻画任何密码系统的两个基本构建。它用来对付统计分析**密码的方法。
混淆和扩散:扩散就是指使明文的统计特征消散在密文中,这可以通过让每个明文数字尽可能地影响多个密文数字获得,等价于说每个密文数字被许多明文数字影响。扩散的方法是尽可能地使明文和密文间地统计关系变得复杂,以挫败推导出**的企图。混淆则是尽可能使密文和加***间的统计关系更加复杂,以阻止攻击者发现**。

Feistel密码结构

Feistel密码结构:下图展示了Feistel加密和解密(16轮),加密算法的输入是长为2w位明文分组和**k。明文分组被分为等长的部分:L0和R0。这两半数据经过n轮迭代后组合成密文分组。第i轮迭代的输入Li-1和Ri-1来自于上轮迭代的输出;而输入的子**Ki是由整个**K推导出的。一般地,Ki不同于K,也互不相同。
Feistel密码的解密过程本质上与加密过程一致。其规则是:将密文作为算法的输入,但是逆序使用了子**Ki。也就是说,第一轮使用Kn,第二轮使用Kn-1,直到最后一轮使用K1.
密码编码学与网络安全(3):对称密码之分组密码和数据加密标准
Feistel结构的具体实现依赖于以下参数和特征:

  • 分组长度:分组长度越长意味着安全性越高(其他数据不变),但是会降低加、解密的速度。这种安全性的增加来自更好的扩散性。传统上,64位的分组长度比较合理,在分组密码设计里很常用。然而,高级加密标准使用的是128位的分组长度。
  • **长度:**较长同样意味着安全性较高,但会降低加、解密速度。这种安全性的增加来自更好的抗穷尽攻击能力和更好的混淆性。现在一般认为64位的**还不够,通常使用的**长度是128位的。
  • 迭代轮数:Feistel密码的本质在于单轮不能提供足够的安全性而多轮加密可取得很高的安全性。迭代数的典型值是16。
  • 子**产生算法:子**产生越复杂,密码分析就越困难。
  • 轮函数F:同样,轮函数越来越复杂,抗攻击的能力就越强。
    设计Feistel密码还有两个其他方面的考虑:
  • 快速软件加/解密:许多情况下,加密算法被嵌入到应用程序中,以避免硬件实现的麻烦。因此,算法执行的速度很重要。
  • 简化分析难度:尽管我们喜欢吧算法设计得是密码分析尽可能困难,然而将算法设计的容易分析也有它的好处。也就是说,如果算法描述起来简洁清楚,那么分析其脆弱性也就容易一些,因而可以开发出更强的算法。

DES(数据加密标准)

DES(Data Encryption Standard),即数据加密标准。在2001年高级加密标准(AES,Advanced Encryption Standard)提出之前,DES一直是使用最广泛的加密方案。(AES和DES都是美国国家标准局NBS,现在称为美国国家标准和技术学会NIST采纳位美国联邦信息处理标准)。

DES加解密

DES采用了64位的分组长度和56位的**长度。它将64位的输入经过一系列变换得到64位输出。解密则使用了相同的步骤和相同的**。
下图表示了DES加密的整个机制。对于任意加密方案,总有两个输入:明文和**。
密码编码学与网络安全(3):对称密码之分组密码和数据加密标准
上图左半部分,可见明文处理经过3个阶段:首先,64位的明文经过初始置换IP而被重新排列。然后进行16轮相同函数的作用,每轮作用都有置换和代替。最后一轮迭代的输出有64位,它是输入明文和**的函数。其左半部分和右半部分互换产生预输出。最后预输出在被与初始置换的IP互逆的置换IP-1产生64位的密文。上图右半部分给出了56位**的过程。首先,**经过一个置换后,在经过循环左移和一个置换分别得到各轮的子**Ki用于各轮的迭代。每轮的置换函数都一样,但是由于**的循环移位使得各轮子**互不相同。
Feistel密码的解密算法与加密算法是相同的,只是子**的使用次序相反。此外,初始置换和最终置换是相反的。

DES强度

  • 穷尽攻击:在目前计算机的技术条件下,DES容易被穷尽攻击找到**。但随着**的加长,这种方式会非常困难,比如使用AES或者3DES。
    密码编码学与网络安全(3):对称密码之分组密码和数据加密标准
  • DES算法性质:目前为止,仍然没有发现DES算法S盒子存在致命的弱点(S盒子指DES每轮迭代所使用的8个代替表)。
  • 计时攻击:本质上计时攻击时通过观察算法的一个既定实现对多种密文解密所需时间,来获得关于**或明文的信息。计时攻击所利用的事实是加密或解密算法对于不同的输入所花的时间有着细微的差别。目前为止,计时攻击还不能成功的攻击DES。

分组密码设计原理

Feistel密码的强度来自于3个方面:迭代轮数,函数F,**使用的算法。

  • 迭代轮数:迭代轮数越多,密码分析就越困难,即使F相对较弱也同样适用。一般来说迭代轮数的选择标准是使密码分析的难度大于简单穷举攻击的难度。
  • 函数F的设计:Feistel密码的核心是函数F。函数F给Feistel密码注入混淆的成分。因此难以**由F实现的这个代替密码函数的作用。F的明显标准是非线性的,F的非线性成分越多,任何形式的分析就越困难。算法的设计应该考虑遵循SAC和BIC。
    • 学崩效应:明文或**的某一位发生变化会导致密文的很多位发生变化。
    • SAC(Steict Avalanche Criterion),雪崩效应准则:对于所有的i和j,它要求若S盒子的输入的任意一位i发生变化,输出的任意一位j发生变化的可能性位1/2。
    • BIC(bit independent criterion),位独立准则:对任意的i,j,k,当输入中的一位i发生变换时,输出中的j和weik的变化应时彼此无关的。
  • **扩展算法:对于任何的Feistel分组密码,**被用来为每轮迭代产生一个子**。一般来说,子**的选择应该加大推导子**及**种子的难度。建议**扩展算法至少应保证**和密文符合严格的雪崩效应和位独立标准。

说明:该篇内容引用自《密码编码学与网络安全》