文章目录
    
    
    
    一 . 常见加解密
   
    
    
    SM1-4
   
国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
    
    
    二. 古典密码
   
    
    
    代换密码
   
分类:
- 
移位(凯撒)密码 
 
   
- 
仿射密码 
 
   
- 
单表代换 
- 
多表代换 
     
   
    
    
    置换密码
   
    
    
     
   
    
    
    Hill密码
   
    
    
     
   
    
    
    转轮密码
   
恩格码机
    
    
    代换密码的唯密文攻击
   
- 1.统计攻击
- 2.重合指数法
    
    
    例题
   
- 
     密码分析可分为那几类,它们的含义是什么?
 
 根据密码分析者可能取得的分析资料的不同,密码分析(或称攻击)可分为下列四类:
 
 1)唯密文分析(攻击),密码分析者取得一个或多个用同一密钥加密的密文;
 
 2)已知明文分析(攻击),除要破译的密文外,密码分析者还取得一些用同一密钥加密的明密文对;
 
 3)选择明文分析(攻击),密码分析者可取得他所选择的任何明文所对应的密文(当然不包括他要恢复的明文),这些明密文对和要破译的密文是用同一密钥加密的;
 
 4)选择密文分析(攻击),密码分析者可取得他所选择的任何密文所对应的明文(要破译的密文除外),这些密文和明文和要破译的密文是用同一解密密钥解密的,它主要应用于公钥密码体制。
- 
     移位密码,仿射密码,单表代换密码都没有破坏明文的频率统计规律,可以直接用统计分析法
 
   
- 
     字母频率分析法对(单表代换密码)算法最有效
 
   
    
    
    例题
   
    
    
     
   
    
    
    三. 对称加密算法
   
引自合天网安实验室:https://www.hetianlab.com/expc.do?ce=7bbc91e0-a9b3-4af9-a108-ce94117ee430
以及现代密码学(谷利泽版)
    
    
    分组密码
   
设计思想:
- 混淆:明文/密钥和密文之间的关系复杂
- 分组:明文/密钥的每一个比特都影响密文的每一个比特
    
    
    DES算法(数据加密标准)
   
    
    
    1. Feistel结构
   
    明文和密文分组长度为64Bit,密钥长度56bit(密钥空间2^56)
    
    算法包括:迭代加密和密钥编排
    
     
   
- 
     IP置换(初始置换)
 
 根据初始置换表,将明文数据移到该数据所在位置
 
  
 
 从上表我们可以总结出,初始置换表的规律其实就是(其实不用太在意这个规律):
 
 a. 偶数与奇数分开(1~64),然后分为上下两部分,分布在置换表中,偶数在上,奇数在下。
 
 b. 在偶数与奇数内部,又遵从“从右到左,从上到下,从小到大”的排列。
    实际中加密的是二进制数据,为直观展示这里用字母代替
    
    
    
    置换完
    
    
    
    至此我们便得到了初始置换之后的数据
   
  Data=“5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”
  L0 = “5XPHzrjb7ZRJBtld91TLDvnf=3VNFxph”
  R0 = “4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”
    
    
    2. 轮函数
   
    
    
    函数 f主要对数据右半部分R进行操作
    
    a. 先对其进行扩展置换,使其变为48位的数据,
    
    b. 然后生成的数据再与子密钥进行异或运算,
    
    c. 再以异或运算后的48位数据进行S盒代替,将48位的数据,转换为32位的数据,
    
    d. 再进行P盒置换,生成32位的数据
    
    e. 最后将P盒置换生成的数据与本轮运算的L进行异或,生成新的R。
    
    f. 而新的L是直接由本轮的R进行替换
   
    
    
    3. 密钥编排算法
   
- 
     子密钥K的生成
 
  
 
 假设初始64位密钥:
 
 “abcdefgh ijklmnop qrstuvwx yzABCDEF GHIJKLMN OPQRSTUV WXYZ0123 456789+=”
 
 红色部分为奇偶校验位,不参与加密算法
    
    
    初始压缩置换后:
    
    
    
    可以看出压缩置换1的规律:
    
    
    
    压缩置换1接下来的是拆分:
   
  K0=“4WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ+2UMEwog91TLDvnf80SKCumeBtld”
  C0=“4WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ”
  D0=“+2UMEwog91TLDvnf80SKCumeBtld”
  
  拆分之后我们得到C0、D0,再然后就是循环左移,求出C1、D1:
根据”轮数和左移位数”的对应表,第一轮得到
  C1=“WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ4”
  D1=“2UMEwog91TLDvnf80SKCumeBtld+”
    如上,左移的同时还要保持位数不变,所以移动的数据又补充到后面。
    
    C1D1= “WOGyqia5XPHzrjb6YQI(i)Askc7ZRJ42UMEwog91TLDvnf80SKCumeBtld+”
    
    
    
    
    
    压缩置换2
    
    
    
    得到子密钥K1
    
    
    
    K1=“jYH7WqG4bisPcI(i)zyR56aJArOvBM1KdUDe0wC8uL+otSnm92E”
   
- 
扩展置换E 
 
 将数据R(32位),按照每4位一组,拆分成8个组,如图,左右黑色的两列是扩展时添加的数据,中间的就是分组后的数据R,表中的数字代表数据R中的位置。分成8组织后,遵循这样的一个规则:每一组的头部添加本组数据上一组的尾部,每一组的尾部添加本组数据下一组的头部。即第一组数据,前面添加的是最后一组的最后一位数据,后面添加的是第二组的第一位数据…以此类推
 
  
 
 因此,对R0进行扩展置换
 
 R0=“4WOGyqia6YQI(i)Askc80SKCume+2UMEwog”
 
  
 
 之后我们便得到了扩展到48位的R0:R0=“g4WOGYGYqia6a6YQI(i)AI(i)Askc8c80SKCKCume+e+2UMEMEwog4” 
扩展置换E结束之后,我们要进行的就是K1与R0的异或运算
- 
     S盒代替
 
 S盒代替的作用,就是将我们上一步,R0与K1异或后得到的48位数据压缩为32位数据。
    我们前面扩展置换后得到的R0是48位的数据,我们的S盒有8个,那么我们就需要将得到的R0平均分为8组,每组对应一个S盒。
    
    每一组的数据长度为6位,假设第一组的二进制数据为:“100110”
    
    那么,我们取第一位与最后一位,组成行数:“10”=2
    
    取中间四位,组成列数:“0011”=3
    
    那么,在对应的S1盒中,取2行3列的数据(第3行第4列):8,转换为2进制:“1000”
    
    那么就将这个得到的4位二进制数据,代替原来第一组的6位数据,这样一来,等8个S盒全部代替完毕,我们就得到32位的数据。
    
     
   
- 
     P盒置换
 
  
 
 至此我们便得到了f(R0,K1),只要再与L0进行异或运算,就得到了第一轮运算最终的R1,然后再将R0的值赋给L1,就完成了第一轮的运算,得到了L1,R1。
    
    
    4. 末置换
   
    经过16次的运算,我们在函数f的最后,会得到“L16、R16”,这正是我们需要的,然后将L16与R16合并,但是与之前的步骤中的合并不同,此次合并需要先交换二者的位置,也就是应该是R16 L16。
    
     
   
    
    
    5. 安全增强
   
    (1)穷举搜索攻击
    
    目标:给定输入输出对 (m i , c i = E(k, m i )) i=1,…,3 ,寻找密钥 k.
    
    (2)3DES
   
令 E : K × M ->  M 是一个分组密码
定义 3E: K^3 × M ->M 为 
3E ( (k 1 ,k 2 ,k 3 ), m ) =E(k 3 ,E (k 2 , E(k 1 , m)))
密钥长度 = 3 × 56 = 168 bits ( 穷举攻击复杂度≈2 ^118)
    
    
    参考文章:
    
     DES 安全性&3DES
    
    ,
    
     三重DES原理
    
   
    
    
    AES算法(高级加密标准)
   
    
    
    对称加密流程
   
    分组加密算法:明文(128/256bit)和密文分组(128/192/256bit)可变长度
    
    SPN结构:轮函数包括:代换层-置换层-密钥混合层
    
    密钥长度:128bit(密钥空间2^128) 10轮
    
     
   
包含4个步骤
- 
字节代替 
 
 字节代替(SubBytes)的目的是通过S盒完成一个字节到另外一个字节的映射转换,字节替换为这个密码系统提供了替换性。
 
   
- 
行移位 
 
 行移位(ShiftRows)步骤过程中,每一行都向左循环位移某个偏移量。在AES中(区块大小128位),第一行维持不变,第二行里的每个字节都向左循环移动一格,第三行里的每个字节都向左循环移动二格,第四行里的每个字节都向左循环移动三格。经过行移位之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。
 
   
- 
列混淆 
 
  
 
  
 
 这里有一个错误,初始矩阵为,另外列混淆中第二项02·6E=11011100
 
  
 
 有限域上的字节运算:
 
   
- 
轮密钥加 
    
    
     
   
    
    
    AES的密钥编排算法
   
- 
     密钥扩展:
 
   
    
    
    AES的解密变换
   
    
    
     
   
    
    
    分组密码的运行模式
   
    
    
    1. ECB模式
   
    
    
     
   
     
   
    
    
    2. CBC模式
   
    
    
    
    
     
   
     
   
    
    
    3. CFB模式
   
    反馈是指前一个密文分组的值会被送到密码算法的输入端。
    
    在ECB模式和CBC模式中,明文分组都是通过密码算法进行加密的,然而,在CFB模式中,明文分组并没有通过密码算法来直接进行加密。
   
    明文分组和密文分组之间并没有经过“加密”这一步骤。(加解密过程只调用加密算法这一个过程)在CFB模式中,明文分组和密文分组之间只有一个XOR。
    
    
    
    
    
    j通常为8
    
     
   
     
   
    参考文章:
    
     CFB原理
    
   
    
    
    4. CTR模式(计数器)
   
    
    
    
    
     
   
    
    
    例题
   
- 
     1977年1月 DES正式成为美国联邦政府信息处理标准,即FIPS-46标准,1997年撤销,采用AES算法,新算法的分组长度为128比特,支持可变密钥长度128,192,256比特。
 
 1999年最终选定Rijndanel算法为新的数据加密标准。
- 
     WAPI标准是中国颁布的无线局域网安全国家标准
 
   
    
    
     
   
    
    
     
   
     
   
    
    
     
   
    
    
    流密码
   
流密码核心:伪随机数生成器(PRG)
    LFSR :线性反馈移位寄存器(为线性函数)
    
    密钥流{k}的周期一定要大
    
     
   
    例题:
    
    
    
     
   
    
    
    RC4算法(序列密码)
   
- KSA
//S 表随机化
s[i] 数据
t[i] 密钥
j = 0
i = 0
for i in range(n):
	j = (j+s[i]+t[i])%n;
	s[i],s[j]=s[j],s[i];
	
- PRGA(伪随机数生成算法)
i = (i+1)%n
j =  (j+s[i])%n
swap(s[i],s[j])
t = (s[i]+s[j])%n
k = s[t]
- 
     RC4应用
 
   
    
    
    例题
   
    
    
    
    
    13. 一般的,一个反馈移位寄存器由两部分组成:移位寄存器和反馈函数
    
     
   
    
    
    四. Hash函数
   
    
    
    SHA-256算法
   
     
   
    
    
    例题
   
    
    
    hash函数的抗二次原像性:对于给定的消息M1,发现另一个消息M2,使得H(M1)=H(M2)在计算上是不可行的。
    
    抗碰撞性:找到任意一对不同的M1和M2,使得H(M1)=H(M2)在计算上是不可行的。
    
     
   
 
