现实中对称密码如何使用
㈠ 【密码学笔记】第3部分 对称密码
跟诸位大牛相比,笔者阅历尚浅、经验不足,笔记中若有错误,还需继续修正与增删。欢迎大家的批评与指正。
  
 查看上一篇请点击以下链接: 【密码学笔记】第2部分 历史上的密码 
  
  1. XOR运算
2. 一次性密码本 
  
  3. 对称密码算法 
  
      3.1 DES 
  
      3.2 三重DES 
  
      3.3 AES 
  
      3.4 Rijndael 
  
  4. 对称密码的选择 
  
  5. 对称密码的评价 
  
  参考书目 
  
 XOR运算,又称为 异或 运算,运算结果是 同0异1 。
  
 对同一个比特序列进行两次XOR之后就会回到最初的状态,因此XOR运算可用于对称密码的加密和解密。
  
 一次性密码本(又称为 维纳密码 )是一种非常简单的密码,它的原理是“ 将明文与一串随机的比特序列进行XOR运算 ”。
  
  一次性密码本是无法破译的。 这是因为在对它尝试解密的过程中,所有的排列组合都会出现,既会包含规则字符串,也会包含英文单词,还会包含乱码。由于明文中所有可能的排列组合都会出现,因此 我们无法判断其中哪一个才是正确的明文 。
  
  一次性密码本是一种非常不实用的密码。 原因如下:
  
 a.  密钥的配送 。( 最大的问题 )如果能够有一种方法将密钥安全地发送出去,那么就可以用同样的方法安全地发送明文。
  
 b.  密钥的保存 。 密钥的长度必须和明文的长度相等。 如果能够有办法安全保存与明文一样长的密钥,那就有办法安全保存明文本身。
  
 c.  密钥的重用 。在一次性密码本中绝对不能重用过去用过的随机比特序列,因为作为密钥的比特序列一旦泄露,过去所有的机密通信内容将全部被解密。
  
 d.  密钥的同步 。在通信过程中,发送者和接收者的密钥的比特序列不允许有任何错位,否则错位的比特后的所有信息都将无法解密。
  
 e.  密钥的生成 。一次性密码本需要生成大量的随机数,这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重现性的真正随机数。
  
 DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。
  
 DES是以64比特的明文(比特序列)为一个单位来进行加密的,这个64比特的单位称为 分组 。以分组为单位进行处理的密码算法称为 分组密码 。
  
 DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代,而迭代的具体方式就称为 模式(mode) 。
  
 DES的基本结构又称为 Feistel网络 ,这一结构不仅被用于DES,在其他很多密码算法中也有应用。在Feistel网络中,加密的各个步骤称为 轮(round) ,整个加密过程就是进行若干次轮的循环。下图展现的是Feistel网络中一轮的计算流程。DES是一种16轮循环的Feistel网络。
                                          
  一轮的具体计算步骤 如下:
  
 a. 将输入的数据等分为左右两部分;
  
 b. 将输入的右侧直接发送到输出的右侧;
  
 c. 将输入的右侧发送到轮函数;
  
 d. 轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列;
  
 e. 将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。
  
 我们需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调。
                                          
 Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了。
                                          
  Feistel网络的性质 :
  
 a. 轮数可以任意增加;
  
 b. 加密时无论使用任何函数作为轮函数都可以正确解密(即使该函数不存在反函数);
  
 c. 加密和解密可以用完全相同的结构来实现。
  
 综上所述,无论是任何轮数、任何轮函数,Feistel网络都可以 用相同的结构实现加密和解密 ,且加密的结果必定能够正确解密。
  
 三重DES是为了增加DES的强度,将DES重复3次所得到的一种密码算法,也称为 TDEA ,通常缩写为 3DES 。
                                          
 明文经过三次DES处理才能变成最后的密文,由于DES密钥的长度实质上是56比特,因此三重DES的密钥长度就是168比特。
  
 三重DES并不是进行三次DES加密,而是 加密→解密→加密 的过程,目的是 让三重DES能够兼容普通的DES ,当所有密钥都相同时,三重DES也就等同于普通的DES。
                                          
 尽管三重DES目前还被银行等机构使用,但其处理速度不高,除了特别重视向下兼容性的情况以外,很少被用于新的用途。
  
 AES是取代其前任标准(DES)而成为新标准的一种对称密码算法。全世界的企业和密码学家提交了多个对称密码算法作为AES的候选,最终选出了一种名为 Rijndael 的对称密码算法,并将其确定为AES。
  
 AES的选拔并不仅仅考虑一种算法是否存在弱点,算法的速度、实现的容易性等也都在考虑范围内。此外,这种算法还必须能够在各种平台上有效工作。
  
 Rijndael是由比利时密码学家设计的 分组密码算法 ,被选为新一代的标准密码算法——AES。
  
 和DES一样,Rijndael算法也是由多个 轮 构成的,其中每一轮分为 SubBytes 、 ShiftRows 、 MixColumns 和 AddRoundKey 共4个步骤。DES使用Feistel网络作为其基本结构,而Rijndael使用的是 SPN结构 。
  
  加密过程 :
  
 a. 首先,需要 逐个字节 地对16字节的输入数据进行SubBytes处理,即以每个字节的值(0~255)为索引,从一张拥有256个值的 替换表 (S-Box)中查找出对应值( 类似于简单替换密码 )。
                                          
 b. 进行ShiftRows处理,即以4字节为单位的 行(row) 按照一定的规则向左平移,且每一行平移的字节数是不同的。
                                          
 c. 进行MixColumns处理,即对一个4字节的值进行比特运算,将其变为另外一个4字节值。
                                          
 d. 最后,将MixColumns的输出与轮密钥进行 XOR ,即进行AddRoundKey处理。至此,Rijndael的一轮就结束了。实际上,在Rijndael中需要重复进行10~14轮计算。
                                          
 在SPN结构中, 输入的所有比特在一轮中都会被加密 。和每一轮都只加密一半输入的比特的Feistel网络相比,这种方式的优势在于 加密所需要的轮数更少 。此外,这种方式还有一个优势,即 SubBytes、ShiftRows和MixColumns可以分别以字节、行和列为单位进行并行计算 。
  
 在Rijndael的 加密 过程中,每一轮所进行的处理为:
  
  SubBytes→ShiftRows→MixColumns→AddRoundKey 
  
 而在 解密 时,则是按照相反的顺序来进行的,即:
  
  AddRoundKey→InvMixColumns→InvShiftRows→InvSubBytes 
  
  解密过程 :
                                                                                                                          
 Rijndael算法背后有着 严谨的数学结构 ,即从明文到密文的计算过程可以全部用公式来表达,这是以前任何密码算法都不具备的性质。如果Rijndael的公式能够通过数学运算来求解,那也就意味着Rijndael能够通过数学方法进行破译,这也为新的攻击方式的产生提供了可能。
  
 (1) 因为现在用暴力破解法已经能够在现实的时间内完成对DES的破译, DES不应再用于任何新的用途 。但是也需要保持与旧版本软件的兼容性。
  
 (2) 尽管在一些重视兼容性的环境中会使用三重DES,但 我们也没有理由将三重DES用于新的用途 ,它会逐渐被AES所取代。
  
 (3)  现在应该使用的算法是AES(Rijndael) ,因为它安全、快速,而且能够在各种平台上工作。
  
 (4)  AES最终候选算法应该可以作为AES的备份 ,因为这些密码算法也都经过了严格的测试,且没有发现任何弱点。
  
 (5) 一般来说, 我们不应该使用任何自制的密码算法 ,而是应该使用AES。
  
  优点 :
  
 使用一种密钥空间巨大,且在算法上没有弱点的对称密码,就可以通过密文来确保明文的机密性。 巨大的密钥空间能够抵御暴力破解,算法上没有弱点可以抵御其他类型的攻击。 
  
  不足 :
  
 a. 用对称密码进行通信时,还会出现 密钥的配送问题 ,即如何将密钥安全地发送给接受者。为了解决密钥配送问题,需要 公钥密码技术 。
  
 b. 尽管使用对称密码可以确保机密性,但仅凭这一点还并不能完全放心。 例如发送者可能发送伪造的密文,并利用解密时返回的错误来盗取信息。 
  
  衷心感谢您的阅读。 
查看下一篇请点击以下链接: 【密码学笔记】第4部分 分组密码的模式
㈡ 对称加密技术是从哪里来的
对称加密技术开始的历史可以追溯到上个世纪。二战期间,密码学在军事和政治上极其重要,盟军和轴心国之间的密码破解和密码保密都是至关重要的战术,对加密技术的研究和发展也因此得到了更多的关注和投入。
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法。
对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统樱尘是国际数据加密算法(IDEA),它比DES 的加密性好,而且对计算机功能要求也戚族没有那么高。IDEA加密标准由PGP(Pretty Good Privacy)系统使用。

对称密钥的管理和分发工作
对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同脊仔禅时还要设定防止密钥泄密和更改密钥的程序
㈢ 非对称加密和对称加密的区别
非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下:
1、加密和解密过程不同
对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
2、加密解密速度不同
对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。

3、传输的安全性不同
对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。
非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。
