zoukankan      html  css  js  c++  java
  • 第三章对称密码之分组密码

    转:https://www.cnblogs.com/WittPeng/p/8978737.html

    对称密码之分组密码

    对称密码
    • 特点:加密速度快、安全性好、基于标准化··· ···
    • 应用:数据保密传输、加密存储··· ···

    分组密码概述

    • 将明文消息编码表示后的二进制序列,划分为固定大小的块
    • 加密和解密是一一映射的
    • 设计应满足要求
    1. 分组足够长
    2. 密钥长度足够长
    3. 由密钥确定的置换算法足够复杂
    4. 加密和解密运算简单
    5. 一般无数据扩展
    • 理想分组密码
    • 分组密码的设计原则:扩散、混乱
    • 乘积密码体制:在密钥控制下扩散和混乱两种密码操作的多次迭代
    • 迭代结构
    1. Feistel密码
    2. SP网络
    组成 S盒(代换):混乱作用,P盒(置换):扩散作用
    效果 雪崩效应
    设计原则
    1. 分组长度
    2. 密钥长度
    3. 轮函数F的设计原则:基本原则:非线性、可逆性、雪崩效应,性能指标:安全性、速度、灵活性
    4. 子密钥的生成方法
    5. 迭代的轮数

    DES算法

    • 特点
    分组长度 64位
    密码体制 对称密码体制,加密和密钥使用同一密钥,仅子密钥编排顺序不同
    有效密钥长度 56位(原64位的每个第8位为奇偶校验位,可忽略)
    迭代结构 SP网络结构,共16轮
    优点 只使用了标准的算术和逻辑运算
    • 流程

                                                                    

    ①64位明文->②IP置换->

    ③分为两部分L0和R0:L0为下一轮的R1;R0和第一次置换得到的子密钥混合经过F函数得到下一轮的L1

    ->④置换IP-1->⑤得到64位密文

    F函数:

    扩展置换 8*4的矩阵 每行的头尾各补齐一位,变成8*6的矩阵
    Ki子密钥的生成算法 将56位的有效的密钥压缩成48位
    代换盒(S盒)

    步骤说明:b1b6确定行,b2b3b4b5确定列,将48位变成32位

    特点:

    1. 非线性
    2. 每一行包括所有16种四位二进制码
    3. 两个输出相差1bit,输出至少相差2bit
    4. ··· ···
    置换运算(P盒)  
    • 安全性
    • 缺陷
    1. 互补性:

                  

    2.弱密钥:4个弱密钥,12个半弱密钥

    3.迭代轮数

    4.密钥长度

    • 应对方法:多重DES
      • 二重DES
      • 三重DES
    • DES的分析方法:
      • 差分分析:由明文差和密文差求系数a,当轮数低于8轮时,个人计算机几分钟即可攻破
      • 线性分析

    AES算法

    • 特点介绍
      • 分组长度:128位
      • 密钥长度和对应轮数:128位10轮,192位12轮,256位14轮
      • 过程:前9轮 字节代换、行移位、列混合和轮密钥加,第10轮 字节代换、行位移和轮密钥加

         字节代换:S盒定义方法

        (1)初始化S盒,将第m行n列的元素初始化为0xmn

        (2)将S盒中的每个字节映射为它在有限域GF(28)中的逆,0x00映射为自身。AES使用Z2[x]上的不可约多项式m(x)=x8+x4+x3+x+1来构造GF(28)。求逆元素的方法是使用Z2[x]上的扩展的欧几里得算法。

         行位移:简单的左循环位移操作,第n行左移n位

         列混合 :通过矩阵相乘来实现

         轮密钥加:

           密码扩展算法:

             1.将初始密钥输入到一个4*4的矩阵中,每列的四个字节组成一个字,依次命名为w[0],w[1],w[2],w[3]

             2.扩充40个新列,构成总共44列的扩展密钥数组

                 产生方式为

        其中,T的组成为:1.字循环(将一个字中的4个字节循环左移一个字节)

                                  2.字节代换(使用S盒)

                                  3.轮常量异或(将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数)

      • AES的结构
        • AES结构的一个显著特征是它不是Feistel结构
        • 输入的密钥被扩展成由44个32位字节所组成的数组w[i]
        • AES结构由四个阶段组成
        • 仅仅在轮密钥加阶段使用密钥,并在算法的开始和结束都是用轮密钥加阶段
        • 每个阶段均可逆,解密算法和加密算法并不一样
        • 加密和解密过程的最后一轮只包含3个阶段,这是由AES的特定结构所决定的,而且也是密码算法可逆性所要求的
    • AES的安全性和可用性
      • AES和DES的对比
      相同 不同
    DES
    1. 二者的轮函数都由3层构成,非线性结构、线性混合层、子密钥异或,只是顺序不同;
    2. AES的子密钥加对应于DES的S盒之前的子密钥异或;
    3. AES的列混合运算目的是让不同的字节相互影响,而DES中F函数的输出与左边一半数据相加也有类似的效果;
    4. AES的非线性运算是字节代换,对应于DES中唯一的非线性运算S盒;
    5. 行移位运算保证了每一行的字节不仅仅影响其他行对应的字节,而且影响其他行所有的字节,这与DES中的置换P相似
    密钥长度固定56位 面向比特的运算 加密和解密运算一致
    AES 密钥长度可以是128位、192位、256位 面向字节的运算

    加密和解密运算不一致,加密器不能同时用做解密器

    典型分组密码

    国际数据加密算法(IDEA)

    • 工作原理:明文64位,密钥128位
    • 轮函数:分为8轮,每轮输入6个子密钥和4个状态块
    • 输出变换

                                                          

    • 解密过程
    • 子密钥生成

    RC6

    • 加密过程
    • 解密过程
    • 密钥扩展方案

    Skipjakc算法

    Callmellia算法

    工作模式

    电子密码本(ECB)模式

    • 工作模式

    • 特点:
      • 分组数量庞大,易受统计分析攻击、分组重放攻击和代换攻击。
      • 明文或者密文出现一位的错误,只会影响一个分组,不会是错误扩散。
      • 是最快最简单的工作模式
    • 应用:数据随机且较少的情况

    密码分组链接(CBC)模式

    • 工作模式

        

    • 特点
      • 克服了ECB模式的缺点
      • 虽然加密会使错误扩散,但解密的过程又进行了抵消,最后出错的仍是一个分组(密文的错误会由一组变成两组)
      • 若文档中的一个分组和他前面的一个分组和另一个文档相同,则这个分组会加密出相同的结果,所以引进了初始化向量IV,使头文件不同(IV不用加密,可以和明文一起传递)
    • 应用:大型文件的加密,是软件加密的最好选择

    密码反馈(CFB)模式

    • 工作模式

    其中,加密算法也能用于解密。加密是对移位寄存器的操作,不对明文加密

    • 特点
      • 面向比特流进行操作
      • 可用于同步序列密码,加密和解密可同时进行
      • 有CBC的优点
      • 对信道错误较敏感且会进行传播,但解密后会纠正。对明文只会影响一个分组,对密文的错误影响只有寄存器推出错误密文后,才能阻止扩散
      • 数据加密速率低
    • 应用:加密字符序列

    输出反馈(OFB)模式

    • 工作模式

    • 特点
      • 改进了CFB,错误不会传播,但密文的错误难以发现
      • 不具有自同步的能力
      • 初始向量IV不需要保密
    • 应用:在极易出错的环境选用的模式,但需要有高速同步机制

    计数器(CTR)模式

  • 相关阅读:
    C++复制构造函数,类型转换构造函数,析构函数,引用,指针常量和常量指针
    POJ1611(The Suspects)--简单并查集
    最小生成树-Kruskal算法
    POJ1861(Network)-Kruskal
    POJ1979(Red and Black)--FloodFill
    [转]全网最!详!细!tarjan算法讲解
    POJ1573(Robot Motion)--简单模拟+简单dfs
    最小生成树-Prim算法
    POJ3368(Frequent values)--线段树
    POJ3255(Roadblocks)--次短路径
  • 原文地址:https://www.cnblogs.com/69-year-old-comrade/p/15313727.html
Copyright © 2011-2022 走看看