zoukankan      html  css  js  c++  java
  • 【密码学】DES算法和AES算法(Rijndael算法)数学原理及实现

    【密码学】DES算法和AES算法(Rijndael算法)数学原理及实现

    背景

    DES,Data Encryption Standard, 数据加密标准。

    尽管DES是一个很宽泛的名字,但是它指代的只是一个具体的标准。它在1970年代被美国NBS接受为信息处理的标准。

    与之对应,DES的加解密算法称为DEA算法,它采用了56-bit的密钥块加密方式。具体的实现中,考虑到块加密的问题,如区块相似性,要使用DES的变种。常用DES有最早出现的工作模式,ECB,CBC,OFB和CFB,可以追溯到1981年。

    AES和DES一样也是一个标准,但是称为高级加密标准,听起来也很宽泛。这两个加密标准在历史上确实是DES先于AES, 而且同属于块加密,所以它们都可以用块加密的四种工作模式。它们都是对称加密,等等。尽管AES不具备RSA这种加密方法的特殊优点,但是它确实地受到了一种特殊的待遇,这可能是因为密码学家确实在筛选它的过程中发现了它良好的防止攻击的性能,而这要追究到密码学中很多复杂的理论。

    数学原理

           讲清楚DES和AES的数学原理并不容易。

      事实上关于AES的数学原理,有一本书The Design of Rijndael:AES - The Advanced Encryption Standard.正是用来阐释它的原理的。

      AES算法的设计策略是WTS。WTS 是针对差分分析和线性分析提出的,可对抗差分密码分析和线性密码分析。

    AES和DES的策略无外乎置换和代换,但是在这些变换中的混淆,扩散,抗性分析都是经过精心设计的。有兴趣的可以看上面提到的原理书。这里仅列举两者的一些小区别。

    DES

    AES

    加密单位长度

    8字节

    16字节

    密钥长度

    56bit

    密钥长度为128/192/256比特,实际中至少要跟DES的变种3DES的安全性一样。

    能否对抗差分和线性密码分析

    不能

    DES加密流程

    DES加密流程

     

     

    电子密码本(Electronic codebook,ECB),模式直接分块加密

     

    密码块链接(CBC),在CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。

     

    密文反馈(Cipher feedback, CFB),前一轮的密文加密再异或明文,得到密文。

     

    输出反馈模式(Output feedback, OFB)可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与明文块进行异或,得到密文。

                                                            四种加密工作模式 [2]

    CBC, CFB, OFB在每轮中都有加密,异或,只是顺序和参与的数据不一样。为什么会产生这几种变型,在原理上来说并没有太大的原因,只是为了增加破解的难度。

    AES加解密流程

    AES 加解密过程[3]

     

    1.字节代替

             用S盒进行字节的置换

     

    2.行移位

    行移位是一个4x4的矩阵内部字节之间的置换,用于提供算法的扩散性

     

    3.列混淆

    利用GF(28)域上算术特性的一个代替,同样用于提供算法的扩散性。有限域乘法操作,在运行中需要消耗较多的时间。现在的计算平台都拥有丰富的软件资源(RAM、Flash等),因此AES的软件实现一般都会采用查表的方式,将字节替代、行移位、列混淆合在一起查表,大概消耗8-10K字节的存储空间,但效率非常之高。

    4. 轮密钥加

     

    References:

    [1] https://www.garykessler.net/library/crypto.html

    [2] https://zh.wikipedia.org/wiki/%E5%88%86%E7%BB%84%E5%AF%86%E7%A0%81%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F

    [3] boxbox, 密码算法详解——AES, http://www.cnblogs.com/luop/p/4334160.html#3674719

  • 相关阅读:
    20169219 实验二 Java面向对象程序设计
    20169219 2016-2017-2 《移动平台开发》第七周作业
    20169219 实验一 Java开发环境的熟悉(Linux + IDEA)
    20169219 2016-2017-2《网络攻防》第七周作业
    文件下载之ServletOutputStream
    DOM对象之window
    webservice接口的开发和调用
    utf-8与unicode是什么关系
    hibernate注解之@Onetomany、@Manytoone、@JoinColumn
    ajax不执行success的问题
  • 原文地址:https://www.cnblogs.com/wangzming/p/7991322.html
Copyright © 2011-2022 走看看