图书馆学不进去就赶紧写个总结水篇博客吧!

第一章 密码学概述

密码学:密码是按特定法则编成、用以对通信双方的信息进行明文->密文变换的符号。或者说,密码是隐蔽了真实内容的符号序列。

是结合数学、计算机科学、电子与通讯等诸多学科于一体的交叉学科,是研究信息系统安全保密的一门科学。

密码体制,也称密码系统(Cryptosystem),由五部分组成:明文空间M,密文空间C,密钥空间K,加密算法E,解密算法D 。

第三章 古典密码

仿射密码:选取𝑘1,𝑘2两个参数,其中gcd⁡(𝑘1, 26)=1
加密变换: 𝐶= 𝑘1∗𝑚+𝑘2 𝑚𝑜𝑑 26解密变换: 𝑚= (𝐶−𝑘2)∗〖𝑘1〗^(−1) 𝑚𝑜𝑑 26

第四章 分组密码

分组密码的设计要求:

分组长度要足够大:假设𝑛为分组长度,则要使2𝑛足够大,防止明文穷举攻击
密钥量要足够大:防止密钥穷举攻击
密码变换要足够复杂:使攻击者除穷举攻击外,找不到其他简洁的数学攻击方法
加密和解密运算简单:便于软件和硬件的实现

无数据扩展和压缩

扩散原则(移位):密钥或明文的每一比特变化影响密文的许多比特的变化,以便隐蔽明文的统计特性(形象的称为雪崩效应)

混淆原则(替代):又称混乱原则,指密钥和明文以及密文之间的依赖关系尽可能的复杂化,以防通过统计分析法进行破译(如使用非线性变换)

乘积密码体制

Feistel网络的优点在于加解密相似性,它只需要一个逆转的密钥编排算法,其加解密部分几乎完全相同

SP网络是由多重S变换和P变换组合成的变换网络
基本操作是S变换(代换)和P变换(置换),前者称为S盒,后者称为P盒
S盒起到混乱作用,P盒起到扩散的作用

DES轮函数F:扩展置换(E盒),密钥加,非线性代换(S盒),线性置换(P盒)

加密方程:
L0R0 ←IP(<64位明文>)
Ln←Rn-1
Rn← Ln-1+(Rn-1,Kn)
<64位密文>← IP-1(R16L16)

解密方程:
R16L16 ←IP(<64位密文>)
Rn-1←Ln
Ln-1← Rn+(Ln,Kn)
<64位明文>← IP-1(L0R0)

S盒设计准则:具有良好的非线性(输出的每个比特与全部输入比特有关)
每一行包括所有16种4位二进制
两个输入相差1比特时,输出相差2比特
如果两个输入刚好在中间两个比特上不同,则输出至少有两个比特不同
如果两个输入前两位不同而最后两位相同,则输出一定不同
相差6比特的输入共有32对,这32对中有不超过8对的输出相同

DES子密钥是从初始密钥(种子密钥)产生的
种子密钥𝐾为64位,其中有8位用于奇偶校验,分别位于第8,16,24,32,40,48,56,64位
奇偶校验位用于检查密钥𝐾在产生和分配以及存储过程中可能发生的错误
DES的密钥实际上只有56位

DES的安全性:互补性:对明文𝑚逐位取补,记为𝑚 ̅,密钥𝐾逐位取补,记为𝑘 ̅ , 若𝑐=𝐸𝑘(𝑚),则有𝑐 ̅=𝐸𝑘 ̅ (𝑚 ̅) ,称为算法上的互补性
由算法中两次异或运算的配置决定:两次异或运算一次在S盒之前,一次在P盒置换之后若对DES 的明文和密钥同时取补,则扩展运算E的输出和子密钥产生器的输出也都取补,因而经异或运算后的输出和未取补时的输出一样,即到达S盒的输入数据未变,输出自然也不变,但经第二个异或运算时,由于左边数据已取补,因而输出也就取补。弱密钥:给定初始密钥𝐾生成子密钥时,将种子密钥分成两个部分,如果𝐾使得这两部分的每一部分的所有位置全为0或1,则经子密钥产生器产生的各个子密钥都相同,即𝐾1=𝐾2=…=𝐾16,则称密钥𝐾为弱密钥(共有4个)若𝐾为弱密钥,则对任意的64比特信息有: 𝑬𝒌(𝑬𝒌(𝒎))= 𝒎 和 𝑫𝒌(𝑫𝒌(𝒎))= 𝒎半弱密钥:把明文加密成相同的密文,即存在两个不同的密钥𝑘和𝑘′,使得𝐸𝑘 (𝑚)=𝐸(𝑘^′ ) (𝑚)具有下述性质:若𝑘和𝑘′为一对弱密钥,𝑚为明文组,则有:𝐸(𝑘^′ ) (𝐸𝑘 (𝑚))=𝐸𝑘 (𝐸_(𝑘^′ ) (𝑚))=𝑚迭代轮数,密钥的长度

字节代换行移位列混合轮密钥加

乘 0x01 -> 不变
乘 0x02最高位为 0,直接左移一位 最高位为 1,左移一位后与0001 1011 异或
乘 0x03,0000 0011= 0000 0010⊕0000 0001
乘以 0x03 可以拆为分别称为 0x01 和 0x02,再将结果异或.

AES和DES相似之处:二者的轮函数都是由三层构成,非线性层、线性混合层、子密钥异或,只是顺序不同
AES的子密钥异或对应于DES中S盒之前的子密钥异或
AES的列混合运算的目的是让不同的字节相互影响,而DES中F函数的输出与左边一半数据相加也有类似的效果
AES的非线性运算是字节代替(ByteSub),对应于DES中惟一的非线性运算S盒
行移位运算保证了每一行的字节不仅仅影响其它行对应的字节,而且影响其它行所有的字节,这与DES中置换P相似

AES和DES不同之处:AES的密钥长度(128位、192位、256位)是可变的,而DES的密钥长度固定为56位
DES是面向比特的运算,AES是面向字节的运算
AES的加密运算和解密运算不一致,因而加密器不能同时用作解密器,DES则无此限制

电码本模式(ECB ) 密文中数据出了错,解密事会使得相应的整个明文分组解密错误,不影响其他密文块的解密
密码分组链接模式(CBC ) 没有明文错误扩散 只有一个分组错误 解密分组影响对应的解密明文分组和其后的一个

密码反馈模式(CFB) 明文的一个错误影响所有后面的密文但解密的明文只有一组分组错误 密文里单独的一个错误会引起解密后的对应明文的一个错误,错误进入移位寄存器,导致加密输出错误,知道该错误从寄存器另一端移出 8比特CFB中,密文1比特错误,解密后明文9比特错误

输出反馈模式(OFB) 1对1错误 失去同步是致命的

计数器模式(CTR) 并行性 硬件效率 软件效率 预处理 随机访问 可证明安全性 简单性

第六章 哈希函数

Hash函数的概念

•Hash函数(杂凑函数/散列函数)是将任意长的消息M变换为较短的、固定长度的值H(M)的不可逆的单向密码体制

•H(M)称为杂凑值、杂凑码或消息摘要

•H(M)打上了输入串的烙印,又称为数字指纹(Digital FingerPrint)

Hash函数(杂凑函数)的基本特征:

算法公开,不需要密钥

数据压缩:可将任意长度的输入数据变换成一个固定长度的输出

易于计算:对任何给定的m,h(m)易于计算

•单向性(抗原像性,Pre-image Resistance):给定消息的散列值h(m),要得到消息m在计算上不可行、

函数 y=H(x)满足

I.将任意长度的比特串x压缩成为固定长度的比特串y

II.已知x,计算y=H(x)很容易;已知y,找一个x满足y=H(x)在计算上不可行——单向性

III.找(x1,x2),x1≠x2,满足H(x1)= H(x2)在计算上是不可行的———抗碰撞性

Hash函数必须满足以下安全性要求:

抗弱碰撞性;抗第二原像; 对任意给定的消息m,寻找与m不同的消息m’,使得h(m)=h(m’)在计算上不可行

抗强碰撞性(Strong Collision Resistance) : 寻找任意两个不同的消息m和m’,使得h(m)=h(m’)在计算上不可行

消息填充

•步骤1(填充消息):使消息长度模512=448

•如果消息长度模512恰等于448,增加512个填充比特。即填充的个数为1~512

•填充方法:第1比特为1,其余全部为0

•步骤2(补足长度): 将消息长度转换为64比特的数值

•如果长度超过64比特所能表示的数据长度,值保留最后64比特

•添加到填充数据后面,使数据为512比特的整数倍

•512比特按32比特分为16组。最终输出 128 位(即 16 字节,32 个十六进制位)的消息摘要。过程为 4 轮,每轮 16 步,共 64 步。

第七章 公钥密码

密钥的生成

  1. 选择两个大素数 p和q,(p≠q,需要保密,步骤4以后建议销毁)
  1. 计算n=p×q, j(n)=(p-1)×(q-1)

  2. 选择整数 e 使 (j(n),e) =1, 1<e< j(n)

  3. 计算d,使d=e-1 mod j(n),

​ 得到:公钥为{e, n}; 私钥为{d}

加密(用e,n): 明文M<n, 密文C=M^e (mod n).

解密(用d,n): 密文C, 明文M =C^d (mod n)

1.若gcd⁡(𝒎,𝒏)=𝟏,
𝐶𝑑 𝑚𝑜𝑑 𝑛=(𝒎^𝒆)𝑑 𝑚𝑜𝑑 𝑛 =𝒎^𝒆𝒅 𝑚𝑜𝑑 𝑛≡𝑚 𝑚𝑜𝑑 𝑛
2.若gcd⁡(𝒎,𝒏)>𝟏,由于𝒏=𝒑𝒒,所以gcd⁡(𝒎,𝒏)必含𝒑,𝒒之一,设gcd⁡(𝒎,𝒏)=𝒑或𝒎=𝒄𝒑, 𝟏≤𝒄≤𝒒,由欧拉定理得:
𝒎^(𝝋(𝒒))=𝟏(𝒎𝒐𝒅 𝒒).
𝒎^(𝒒−𝟏)(𝒑−𝟏)𝒌=𝟏(𝒎𝒐𝒅 𝒒)
即 𝒎^(𝒌𝝋(n))=𝟏(𝒎𝒐𝒅 𝒒) 或 𝟏=𝒎^(𝒌𝝋(n))+𝒉𝒒
由假定𝒎=𝒄𝒑得:
𝒎=𝒎^(𝒌𝝋(n)+𝟏)+𝒄𝒉𝒑𝒒=𝒎^(𝒌𝝋(n)+𝟏)+𝒂𝒏 (其中𝒂=𝒄𝒉),
即𝒎^(𝒌𝝋(n)+𝟏)=𝒎 (𝒎𝒐𝒅 𝒏)

共模攻击:假设𝑚是明文,两用户的公钥分别是𝑒1和𝑒2,且(𝑒1,𝑒2)=1,共同的模数𝑁,两个密文分别为:
𝑐_1≡𝑚^(𝑒_1 ) 𝑚𝑜𝑑 𝑁
𝑐_2≡𝑚^(𝑒_2 ) 𝑚𝑜𝑑 𝑁
攻击者知道𝑁,𝑒1,𝑒2,𝑐1和𝑐2,可如下恢复明文𝑚
(𝑒1,𝑒2)=1,由欧几里德算法可找出𝑟,𝑠满足𝑟𝑒1+𝑠𝑒2=1。假定𝑟是负数,那么
(𝒄𝟏)^(−𝟏)^(−𝒓)∙(𝒄𝟐)^𝒔=𝒎^(𝒓𝒆𝟏+𝒔𝒆𝟐)≡𝒎 𝒎𝒐𝒅 𝑵

低指数攻击:小的公钥可加快加密的速度,但过小的公钥易受到攻击

如果3个用户都使用3作为公钥,对同一个明文m加密,则c1=m3 (mod n1),c2=m3 (mod n2),c3=m3 (mod n3), gcd⁡(n1,n2,n3)=1 ,且m<n1,m<n2,m<n3

由中国剩余定理可从c1,c2,c3计算出c,且c=m3 mod (n1n2n3 ),显然m3<n1n2n3,所以m=c^(1/3)

1.密钥的生成

选取大素数p,g∈〖Z_p〗^∗是一个生成元,p,g 作为系统参数所有用户共享

系统中每个用户U都随机挑选整数x,2≤x≤ p-2,并计算:

​ y=gx(mod p),

y, p, g作为用户U的公钥,而x作为用户U的私钥

2.加密:

1.用户A先把明文M编码为一个在 0 到p-1之间的整数m ;

2.用户A挑选一个秘密随机数 r (2≤ r ≤ p-2 )并计算:c1= g^r (mod p);

​ c2 = m∙y^r(mod p)

3.用户A把二元组 (c1,c2)作为密文传送给用户B

解密:
用户B接收到密文二元组(𝑐1 ,𝑐2)后,做解密计算:
𝒎=𝒄𝟐∙(𝒄𝟏^𝒙 )^(−𝟏)𝒎𝒐𝒅 𝒑

正确性:C2.(C1^x)^(-1) (modp)=(y^r m)(^rx)^(-1) (mod p)
=(g^rx m)g^-rx (mod p)
=m (mod p)

第八章 数字签名

2、利用RSA密码实现数字签名:
⑴签名算法
设M为明文,KeA =<e,n>是A的公开加密钥,
KdA =<d,p,q,φ(n)>是A的保密的解密钥,
则A对M的签名过程是,
SA = D(M,KdA) =(M^d) modn SA 便是A对M的签名。
验证签名的过程是,
E(SA ,KeA)=(M^d)^e modn = M

安全性:

对RSA数字签名的攻击:利用已有的签名进行攻击:此时:S1=(HASH(M1))d mod n ,S2=(HASH(M2))d mod n
而,(HASH(M1))d (HASH(M2))d≠(HASH(M1M2))d mod n
所以:S3≠S1S2 ,于是不能由S1和S2计算出A对M3的签名。

𝑯(𝑴)的另一个作用—加快签名速度
对整个消息签名,由于公钥体制速度比较慢,当消息比较长时,签名与验证过程都会相当慢
对消息的Hash值签名,则无论消息多长,签名都只与Hash值的长度有关

ElGamal签名过程:

1.系统初始化过程:公钥为(p,g,y),私钥为x (1≤x<p-1),其中y≡g^xmod p

2.签名过程:给定消息M,签名者如下计算:

①选择随机数k∈Zp∗,且k与(p-1)互素;

②首先计算消息M的哈希值H(M),然后计算:

​ r≡g^k(mod p);

​ s≡(H(M)-xr) k^(-1) (mod p-1)

③ 将(r,s)作为签名,与M一起发送给接收方

3.验证签名过程:接收方收到M与其签名(r,s)后:

​ ① 计算消息M的Hash值H(M);

​ ② 验证公式

y^r r^s≡g^(H(M)) mod p

成立则确认(r,s)为有效签名,否则认为签名是伪造的

安全性:

非确定性数字签名算法,同一消息M的签名依赖于随机数k;安全性基于有限域上计算离散对数的困难性;随机数k不能被泄露(已知k可以计x) x=(m-ks)^(r-1)mod(p-1);随机数k不能被重复使用(泄露x);不使用Hash函数则易受到攻击攻击者可以选取任一整数对(𝑢,𝑣),满足 𝑔𝑐𝑑⁡(𝑣,𝑝−1) = 1计算 𝑟 = 𝑔^𝑢𝑦^𝑣 𝑚𝑜𝑑 𝑝 = 𝑔^(𝑢+𝑥𝑣) 𝑚𝑜𝑑 𝑝 和 𝑠 = −𝑟𝑣^(−1) 𝑚𝑜𝑑 (𝑝−1),则(𝑟,𝑠)就是对消息𝑚 = 𝑠𝑢 𝑚𝑜𝑑 𝑝的一个有效签名因为𝑘= (𝑚−𝑥𝑟)𝑠^(−1)= (𝑠𝑢−𝑥𝑟)𝑠^(−1)= (𝑢+𝑥𝑣) 𝑚𝑜𝑑 (𝑝−1),所以有 𝑟 = 𝑔^𝑘 =𝑔^(𝑢+𝑥𝑣) 𝑚𝑜𝑑 𝑝

第九章 密码协议

比特承诺 安全性质:1.隐蔽性:Alice像Bob承诺时,Bob不可能获得承诺消息的任何信息。2.绑定性:一段时间后A能够像B证明她所承诺的消息,但是A不能欺骗B,也就是说,在这段时间里A不能改变承诺的消息。