密码学读书笔记——1

【一】
密码使用学:
①对称算法:加解密同密钥
替换密码(简单)——穷尽密钥空间(经典密码分析)、字母频率分析
实施攻击(物理)、社会工程攻击
②非对称算法:加解密、数字签名
③密码协议:TLS
作用:数据保密性、数据完整性、数据认证、用户表示
古典密码:
①模运算:等价类行为等价(化简极长整数)
②整数环:所有元素加乘皆在自然整数集内,且符合结合律分配率
gcd:两数最大公约数是1时,乘法逆元肯定存在
③移位密码:凯撒密码
④仿射密码:映射密钥一部分。密钥(a,b)y=(a·x+b)%26;x=(y-b)%26·a逆元 (需要gcd(a,26)=1才能解密) a*a-1 =1 mod 26 就是逆元
密码空间越小,越容易被破解

【二】对称密码
①序列密码:小,快,对位进行加密,明文和密钥每位相加后对2取模(异或等概率熵最大)
②随机数生成:不可预测连续伪随机序列,不可重现
③OPT一次一密:需要真随机数产生密钥序列,并安全交换。每个序列仅适用一次,密钥长度还必须和明文一致。现代来说,计算安全就已经很好了
④现代分组密码:对整个明文加密,AES,DES
序列密码
①基于移位寄存器的序列密码:LFSR,下一个位的输出值是上一个为作为输入的线性函数
Si+m=求和(pj`si+j)mod2 未知密钥位pi(设定的反馈系数)但是它在知道度m的情况下,即知道有几个移位寄存器的情况下,可以尝试m,构造m个线性方程组求解系数p(因为LFSR可以表示成多项式)
②Trivium:三个移位寄存器成环,输入输出各种疑惑
nonce:只是用一次的密码,用于与密钥融合成每次不一样的密钥序列。
但是分组密码比序列密码使用更广泛,除了RC4.同时如果是资源少的情况下,序列密码会比较好。

【三】数据加密标砖和替换算法
【DES 对称算法】:使用56位密钥对64位长分组加密
优势:加密过程和解密过程几乎相同,Feistel网络的优势。
强加密算法的两个基本操作:a.混淆(替换):使得密钥和密文竟可能模糊
b.扩散:防止统计属性,可以位置换之类的。良好的扩散属性
是比如修改明文一位,密文也会改变50%以上。现在可以用
乘积密码。将多个加密方法串联
DES的扩散和混淆在f函数内实现了。

使用56为密钥分出16个子密钥做16轮轮加密。
把64位明文分成两部分,32位L和32位R
每次 Li=Ri-1
Ri = Li-1 XOR f(Ri-1,ki) ki是第i轮的子密钥。f是网络中的函数输出
①:置换和逆初始置换,按照位,和表,交换位置
②【函数f】由四步运算构成:秘钥置换(Kn的生成,n=0~16);扩展置换;S-盒代替;P-盒置换。S-盒比较复杂,这种映射是非线性的。把分组输入的明文Ri-1部分进行S-替换,32入,扩充成48位,引起雪崩效应,可以扩散混淆,随后P盒置换,变成32位输出右边的下一轮。
Li = Ri-1
Ri = Li-1 ⊕ f(Ri-1,Ki)
一轮加密流程
【子密钥的生成】:
DES算法由64位秘钥产生16轮的48位子秘钥。在每一轮的迭代过程中,使用不同的子秘钥。把密钥的奇偶校验位忽略不参与计算,即每个字节的第8位,将64位密钥降至56位,然后根据选择置换PC-1将这56位分成两块C0(28位)和D0(28位);将C0和D0进行循环左移变化(注:每轮循环左移的位数由轮数决定),变换后生成C1和D1,然后C1和D1合并,并通过选择置换PC-2生成子密钥K1(48位);这就是一轮加密的过程,要经过16轮。
C1和D1在次经过循环左移变换,生成C2和D2,然后C2和D2合并,通过选择置换PC-2生成密钥K2(48位)之后得到第十六个子密钥(48位)。但是最后一轮的左右两部分不交换,而是直接合并在一起R16L16,作为逆置换的输入块。其中循环左移的位数一共是循环左移16次,其中第一次、第二次、第九次、第十六次是循环左移一位,其他都是左移两位。(这是为了方便逆操作,使得C0=C16)

如图示意:
一轮子密钥编排
【DES解密】:
加密和解密可以使用相同的算法。加密和解密唯一不同的是秘钥的次序是相反的。就是说如果每一轮的加密秘钥分别是K1、K2、K3…K16,那么解密秘钥就是K16、K15、K14…K1。为每一轮产生秘钥的算法也是循环的。加密是秘钥循环左移,解密是秘钥循环右移。解密秘钥每次移动的位数是:0、1、2、2、2、2、2、2、1、2、2、2、2、2、2、1。。
【安全性】
穷尽密钥空间和分析攻击皆可以破解。硬件实现DES会比较快。但是3重DES就不能被破解了。当前一般用AES

【四】AES加密算法
一、【数学知识】:群:封闭,可结合,单位元,存在逆元,阿贝尔群(交换群)
域:中性0:加法群;中性1 :乘法群(除0) 分配定理
素域(GF):GF(p)内都存在逆元,即元素是0~p-1,GF(2)是异或门
GF(2^m)是用系数是GF(2)多项式来表示加减法。
AES用本原多项式来表示多想乘法的模数。
C(x)=A(x)B(x)modP(x):x8+x4+x^3+x+1
注意,可以对高次项先mod p化简,多项式的系数只有0和1!加减
法一样。
GF逆元表:将2个字节表示的行列,在逆元表中寻找出对应逆元元
素,得到逆元(两个多项式相乘=1)的位置。类似于S-盒。
二、【AES内部结构】
【四层】:【混淆】:字节代换层(S-)十六个S盒相同,逆元双射之后仿射变换(B)、
【扩散层】:行、列混淆层:第二行右移3,第三行右移2,第四行右移1
列混淆就是与一个固定的矩阵相乘得到B-》C。矩阵的元素是GF(2^8)
的内容,里面的惩罚一般查找两个256
8的表实现会比较快,不用相乘再
模本原多项式
【与子密钥异或】:就与密钥异或,子密钥是通过编排获得
在这里插入图片描述

【子密钥编排】:
在这里插入图片描述

这里的g函数是一个非线性函数,非4倍数轮密钥是递归计算而成
g函数首先将四个输入字节反转,并按字节S-盒替换,再与轮系数RC相加。RC轮系数是GF(28)的元素从x0到x^9

【密文的解密】:逆列变换,乘以之前矩阵的逆,再逆行变换,这次是左移。之后是逆字节变换,用逆向的S-盒操作。密钥要从倒数第一轮密钥开始,所以密钥的所有编排轮数要在全部密钥变换轮数后存储起来。
【AES】安全性:目前还必须蛮力破解。
硬件实现会比DES困难。

猜你喜欢

转载自blog.csdn.net/czq5659502/article/details/89293858
今日推荐