发布网友
共1个回答
热心网友
现在,通常使用分组密码(block cipher)或序列密码(stream cipher)实现对称密码,我们将在此讨论这两种密码。这一特性中还要考虑称为“消息认证代码(Message Authentication Code,MAC)”的一种使 用秘钥的校验和机制。MAC 与消息摘要 是完全不同的,消息摘要是在数字签名中使用的,将在关于非对称密码术(第 3 部分)的特性中讨论。 分组密码将定长的明文块转换成等长的密文,这一过程在秘钥的控制之下。使用逆向变换和同一密钥来实现解密。对于当前的许多分组密码,分组大小是 位,但这很可能会增加。
明文消息通常要比特定的分组大小长得多,而且使用不同的技术或操作方式。这样的方式示例有:电子编码本(ECB)、密码分组链接(CBC)或密码反馈(CFB)。ECB 使用同一个密钥简单地将每个明文块一个接一个地进行加密;在 CBC 方式中,每个明文块在加密前先与前一密文块进行“异或”运算,从而增加了复杂程度,可以使某些攻击更难以实施。 “输出反馈”方式(OFB)类似 CBC 方式,但是进行“异或”的量是生成的。 CBC 受到广泛使用,例如在 DES(qv)实现中,而且在有关密码术的技术性方面的相应书籍中深入讨论了各种方式。请注意:您自己建立的 密码系统的普遍弱点就是以简单的形式来使用某些公开的算法,而不是以提供了额外保护的特定方式使用。
迭代的分组密码是那些其加密过程有多次循环的密码,因此提高了安全性。在每个循环中,可以通过使用特殊的函数从初始秘钥派生出的子密钥来应用适当的变换。该附加的计算需求必然会影响可以管理加密的速度,因此在安全性需要和执行速度之间存在着一种平衡。天下没有免费的午餐,密码术也是如此;与其它地方一样,应用适当方法的技巧中有一部分是源于对需要进行的权衡以及它们与需求平衡的关系如何的理解。
分组密码包括 DES、IDEA、SAFER、Blowfish 和 Skipjack — 最后一个是“美国*局(US National Security Agency,NSA)”*器芯片中使用的算法。 与分组密码相比,序列密码可以是非常快速的,尽管某些方式下工作的一些分组密码(如 CFB 或 OFB 中的 DES)可以与序列密码一样有效地运作。序列密码作用于由若干位组成的一些小型组,通常使用称为密钥流的一个位序列作为密钥对它们逐位应用“异或”运算。有些序列密码基于一种称作“线形 反馈移位寄存器(Linear Feedback Shift Register,LFSR)”的机制,该机制生成一个二进制位序列。
序列密码是由一种专业的密码,Vernam 密码(也称为一次性密码本(one-time pad)),发展而来的。序列密码的示例包括 RC4 和“软件优化加密算法(Software Optimized Encryption Algorithm,SEAL)”,以及 Vernam 密码或一次性密码本的特殊情形。 消息认证代码(MAC)并不是密码,而是校验和(通常是 32 位)的一种特殊形式,它是通过使用一个秘钥并结合一个特定认证方案而生成的,并且附加在一条消息后。消息摘要是使用单向散列函数生成的,紧密联系的数字签名是使用非对称密钥对生成并进行验证的。与这两者相比,预期的接收 方需要对秘钥有访问权,以便验证代码。