[REV] 密码学考点文章汇总

在这里插入图片描述

前面古典的那些要会算 熵和完善保密性要会证明 aes要会算 des要知道结构和原理 rsa要会算 会用中国剩余定理解 素性检测会用米勒拉斌和那个s什么的算 md5和sha1要知道迭代结构 dh和elgamal也要知道原理+会算 离散对数会用shanks算


古典密码

代换/置换密码

仿射密码

https://baike.baidu.com/item/仿射密码

维吉尼亚密码:多表代换

https://www.wikiwand.com/zh-hans/维吉尼亚密码

为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
例如,假设明文为:
ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
明文:ATTACKATDAWN
密钥:LEMONLEMONLE
密文:LXFOPVEFRNHR
解密的过程则与加密相反。例如:根据密钥第一个字母L所对应的L行字母表,发现密文第一个字母L位于A列,因而明文第一个字母为A。密钥第二个字母E对应E行字母表,而密文第二个字母X位于此行T列,因而明文第二个字母为T。以此类推便可得到明文。

希尔密码

https://www.wikiwand.com/zh-hans/希尔密码

每个字母当作26进制数字:A=0, B=1, C=2… 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。

流密码和线性反馈移位寄存器

https://blog.csdn.net/qq_31825569/article/details/79697458

香农理论

完善保密性

https://blog.csdn.net/POTASSIUM711/article/details/89415233
就是密文和明文的独立性
P [ X ∣ Y ] = P [ X ] P[X|Y]=P[X] P[XY]=P[X]

信息量和熵

https://blog.csdn.net/POTASSIUM711/article/details/89415233
消除不确定性所需的信息量-不确定性的量度
I ( X = x i ) = − l o g 2 P ( x i ) I(X=x_i)=-log_2P(x_i) I(X=xi)=log2P(xi)
联合信息量
I ( x i y j ) = − l o g 2 P ( x i y j ) I(x_iy_j)=-log_2P(x_iy_j) I(xiyj)=log2P(xiyj)
独立时 = I ( x i ) + I ( y i ) =I(x_i)+I(y_i) =I(xi)+I(yi)
条件自信息量
I ( x i ∣ y j ) = − l o g 2 P ( x i ∣ y j ) = P ( x i y j ) P ( y j ) I(x_i|y_j)=-log_2P(x_i|y_j)=\frac{P(x_iy_j)}{P(y_j)} I(xiyj)=log2P(xiyj)=P(yj)P(xiyj)
互信息量
I ( x i ; y j ) = I ( x i ) − I ( x i ∣ y j ) I(x_i;y_j)=I(x_i)-I(x_i|y_j) I(xi;yj)=I(xi)I(xiyj)衡量相关性

H ( X ) = E ( I ( X ) ) H(X)=E(I(X)) H(X)=E(I(X))
联合熵
H ( X Y ) = E ( I ( x y ) ) = − ∑ ∑ P ( x y ) l o g 2 P ( x y ) H(XY)=E(I(xy))=-\sum\sum P(xy)log_2P(xy) H(XY)=E(I(xy))=P(xy)log2P(xy)
条件熵
H ( X ∣ Y ) = E ( I ( X ∣ Y ) ) = − ∑ ∑ P ( x y ) l o g 2 P ( x ∣ y ) H(X|Y)=E(I(X|Y))=-\sum\sum P(xy)log_2P(x|y) H(XY)=E(I(XY))=P(xy)log2P(xy)
平均互信息量 I ( x ; y ) = E ( I ( x ; y ) ) = H ( X ) + H ( Y ) − H ( X Y ) I(x;y)=E(I(x;y))=H(X)+H(Y)-H(XY) I(x;y)=E(I(x;y))=H(X)+H(Y)H(XY)

唯一解距离

https://wenku.baidu.com/view/a38a0638376baf1ffc4fad42.html
n = l o g 2 ∣ K ∣ R L l o g 2 ∣ P ∣ n=\frac{log_2|K|}{R_Llog_2|P|} n=RLlog2Plog2K
乘积,幂等,迭代.

分组密码

SPN基本

https://blog.csdn.net/POTASSIUM711/article/details/89917445
在这里插入图片描述

Feistel cipher

https://www.wikiwand.com/zh-hans/费斯妥密码

F {\displaystyle {\rm {F}}} F为轮函数,并令 K 0 , K 1 , … K n {\displaystyle K_{0},K_{1},\ldots K{n}} K0,K1,Kn分别为轮 0 , 1 , … , n {\displaystyle 0,1,\ldots ,n} 0,1,,n的子密钥。

基本操作如下:

将明文块拆分为两个等长的块, ( L 0 , R 0 ) (L_0, R_0) (L0,R0)

对每轮 i = 0 , 1 , … , n {\displaystyle i=0,1,\dots ,n} i=0,1,,n,计算

L i + 1 = R i   {\displaystyle L_{i+1}=R_{i}\,} Li+1=Ri
R i + 1 = ( L i ⊕ F ) ( R i , K i ) . {\displaystyle R_{i+1}=(L_{i}\oplus {\rm {F)(R_{i},K_{i}).}}} Ri+1=(LiF)(Ri,Ki).
则密文为 ( R n + 1 , L n + 1 ) {\displaystyle (R_{n+1},L_{n+1})} (Rn+1,Ln+1)

解密密文 ( R n + 1 , L n + 1 ) {\displaystyle (R_{n+1},L_{n+1})} (Rn+1,Ln+1)则通过计算 i = n , n − 1 , … , 0 {\displaystyle i=n,n-1,\ldots ,0} i=n,n1,,0
R i = L i + 1   {\displaystyle R_{i}=L_{i+1}\,} Ri=Li+1
L i = R i + 1 ⊕ F ⁡ ( L i + 1 , K i ) . {\displaystyle L_{i}=R_{i+1}\oplus \operatorname {F} (L_{i+1},K_{i}).} Li=Ri+1F(Li+1,Ki).
( L 0 , R 0 ) {\displaystyle (L_{0},R_{0})} (L0,R0)就是明文。
与代换-置换网络相比,Feistel模型的一个优点是轮函数 F ⁡ {\displaystyle \operatorname {F} } F不必是可逆的。
图显示了加密和解密的过程。注意解密时子密钥顺序反转,这是加密和解密之间的唯一区别。
在这里插入图片描述

What is the diffrence between Feistel networks and SPN?

https://crypto.stackexchange.com/questions/35424/what-is-the-diffrence-between-feistel-networks-and-spn?rq=1

In a Feistel networks (from the German IBM cryptographer Horst Feistel), the input is divided into two blocks (L0 and R0) which interact with each other. Main example is DES.
In a SPN (Substitution Permutation Network), the input is divided into multiple small blocks, applied to a S-box (substitution), then the bits positions are mixed (permutation). The key addition may occur before or after these two operations.

差分分析

https://www.wikiwand.com/zh-hans/差分密码分析

差分密码分析通常是选择明文攻击,意思是攻击者可以自行选取一部分明文并取得相应密文。不过,一些扩展也能让此方法用在已知明文攻击,甚至是唯密文攻击上。差分分析的基本方法,是运用若干对有着常量差异的明文;差异可以用数种方法定义,最常见的是逻辑异或(XOR)。然后,攻击者计算相应密文的差异,尝试找出差异分布的统计特征。明文差异和密文差异所组成的差异对被称为差分,其统计性质由加密所使用的S盒决定。也就是说,对于S盒子S,攻击者分析差分(ΔX, ΔY),其中ΔY = S(X ⊕ ΔX) ⊕ S(X)(⊕表示异或)。在初等攻击中,攻击者希望某个密文差异出现的频率非常高,这样就能将加密和随机过程区分开来。更复杂的变体攻击能做到比穷举更快地破解出密钥。
最基本的差分密码分析密钥破解形式中,攻击者首先取得大量明文对的密文,并假设差分在至少r − 1轮后有效,r即加密算法的总轮数。攻击者在倒数第二轮与最后一轮之间差异固定的假设下,去推测可能的轮密钥。如果轮密钥比较短,那么只需举可能的轮密钥,直到最后一轮运算结果和差异的密文对一致即可。当一个轮密钥看起来明显比其他密钥常出现时,其会被假设是正确的轮密钥。

线性分析

https://wenku.baidu.com/view/c162821ca8114431b90dd870.html

DES:Feistel cipher

https://www.wikiwand.com/zh-hans/資料加密標準
http://www.alonemonkey.com/2016/05/25/aes-and-des/
在这里插入图片描述

AES:SPN

https://www.wikiwand.com/zh/高级加密标准
https://blog.csdn.net/qq_28205153/article/details/55798628

操作模式

ECB、CBC、CFB、OFB
https://blog.csdn.net/zp17764507932/article/details/73610466
https://www.cnblogs.com/starwolf/p/3365834.html
CTR
https://www.wikiwand.com/zh-hans/分组密码工作模式
CCM
http://file.scirp.org/pdf/14-2.25.pdf
在这里插入图片描述
这还是看批批踢.

多项式域的求逆

HASH

https://www.wikiwand.com/zh-hans/散列函數

  • 快速:给定M,很容易计算h
  • 单向:给定h,根据H(M)=h无法计算出M
  • 防碰撞:给定M,要找到另一条消息M’并满足H(M)=H(M’)困难或找到任意两个具有相同散列值的不同消息困难
  • 单向性(原像稳固性)
    给定消息摘要y,找到x使得h(x)=y困难
  • 第二原像稳固性
    给定消息x∈X,找到一个x’∈X且x’≠x,使得h(x)=h(x’)困难
  • 碰撞稳固性
    对于任意的x,x’∈X,找到x≠x’且h(x)=h(x’)的二元组(x,x’)困难

生日攻击

https://www.wikiwand.com/zh-hans/生日攻击

MD5

https://www.wikiwand.com/zh-hans/MD5

MD5是输入不定长度信息,输出固定长度128-bits的演算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求馀、取馀、调整长度、与链接变量进行循环运算。得出结果。
F ( X , Y , Z ) = ( X ∧ Y ) ∨ ( ¬ X ∧ Z ) G ( X , Y , Z ) = ( X ∧ Z ) ∨ ( Y ∧ ¬ Z ) H ( X , Y , Z ) = X ⊕ Y ⊕ Z I ( X , Y , Z ) = Y ⊕ ( X ∨ ¬ Z ) ⊕ , ∧ , ∨ , ¬ 是 X O R , A N D , O R , N O T 的 符 号 。 F(X,Y,Z) = (X\wedge{Y}) \vee (\neg{X} \wedge{Z})\\ G(X,Y,Z) = (X\wedge{Z}) \vee (Y \wedge \neg{Z})\\ H(X,Y,Z) = X \oplus Y \oplus Z\\ I(X,Y,Z) = Y \oplus (X \vee \neg{Z})\\ \oplus, \wedge, \vee, \neg 是 XOR, AND, OR , NOT 的符号。 F(X,Y,Z)=(XY)(¬XZ)G(X,Y,Z)=(XZ)(Y¬Z)H(X,Y,Z)=XYZI(X,Y,Z)=Y(X¬Z),,,¬XOR,AND,OR,NOT

SHA

https://www.wikiwand.com/zh-hans/SHA家族
SHA1:
https://www.wikiwand.com/zh-hans/SHA-1
https://www.cnblogs.com/FlyingBread/archive/2007/01/02/610206.html
看看就行.

HMAC

https://baike.baidu.com/item/hmac

HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

CBC MAC

https://blog.csdn.net/weixin_38664664/article/details/78016243

公钥密码

https://www.wikiwand.com/zh/公开密钥加密

它需要兩個密钥,一個是公開密鑰,另一個是私有密鑰;一個用作加密,另一個則用作解密。使用其中一個密钥把明文加密后所得的密文,只能用相對應的另一個密钥才能解密得到原本的明文;甚至連最初用來加密的密鑰也不能用作解密。由於加密和解密需要兩個不同的密鑰,故被稱為非對稱加密;不同於加密和解密都使用同一個密鑰的對稱加密。雖然兩個密鑰在数学上相关,但如果知道了其中一个,并不能憑此计算出另外一个;因此其中一个可以公开,称为公钥,任意向外發佈;不公开的密钥为私钥,必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給被信任的要通訊的另一方。

DF-HRM

https://www.wikiwand.com/zh-hans/迪菲-赫爾曼密鑰交換

ElGama

https://www.wikiwand.com/zh/ElGamal加密算法
https://www.jianshu.com/p/cd36ae7dca47
https://my.oschina.net/u/1382972/blog/330630

RSA

https://www.wikiwand.com/zh/RSA加密演算法
https://juejin.im/post/5a76d7e3f265da4e752770a3

椭圆曲线算法

https://zhuanlan.zhihu.com/p/26029199 ←质量超高!!!

数字签名思想

https://www.wikiwand.com/zh-hans/數位簽章

ElGamal签名

https://blog.mythsman.com/2015/10/07/3/

DSA

https://zhuanlan.zhihu.com/p/33195438

数学基础

[待续]

多项式求逆元

多项式的乘法逆元原理和整数乘法逆元求法原理一致,只是此时操作的是多项式而已。
方法一:实现多项式的加减乘除
方法二:利用整数(二进制位)来模拟多项式的加减乘除。此方法也是最巧妙最简单最合适的方法。
比如: x 8 + x 4 + x 3 + x + 1 x^8+x^4+x^3+x+1 x8+x4+x3+x+1 用二进制来描述:100011011 可以当做整数283来存储。
然后用欧几里得扩展算法:
a x ≡ 1 ( m o d y ) a = x − 1 a x + b y = 1 ax\equiv 1\pmod y\\ a=x^{-1}\\ ax+by=1\\ ax1(mody)a=x1ax+by=1
在这里插入图片描述

AES列混合

https://blog.csdn.net/u012429555/article/details/78526100

在AES算法中,需要模多项式m(x)=x8+x4+x^3+x+1。列混合即是用一个常矩阵乘以第二步变换后的矩阵,以达到矩阵中每一个元素都是该元素原所在列所有元素的加权和。

[待续…]

整数域求逆

a ⋅ a φ ( b ) − 1 ≡ 1 ( m o d b ) a\cdot a^{\varphi (b)-1}\equiv 1\pmod b aaφ(b)11(modb)

Shanks算法

时间-存储折中算法
SHANKS(G,n,α,β)
m=
for i = 0 to m-1 {
计算α(mi)
}
对m个有序对(i, αmi)基于αmi大小进行排序,
得到列表L1
for j = 0 to m - 1 {
计算βα-j
}
对m个有序对(j, βα-j)基于βα-j大小进行排序,
得到列表L2
找到(i,y)∈L1且(j,y)∈L2
i n d α β = ( m i + j ) m o d   n ind_α β=(mi+j) mod\ n indαβ=(mi+j)mod n

素性演算

根据费马小定理:如果p是素数, 1 ≤ a ≤ p − 1 1\leq a\leq p-1 1ap1,那么
a ( n − 1 ) ≡ 1 ( m o d p ) 。 a^{(n-1)}\equiv 1{\pmod {p}}。 a(n1)1(modp)
如果我们想知道n是否是素数,我们在中间选取a,看看上面等式是否成立。如果对于数值a等式不成立,那么n是合数。如果有很多的a能够使等式成立,那么我们可以说n可能是素数,或者伪素数。
在我们检验过程中,有可能我们选取的a都能让等式成立,然而n却是合数。这时等式
a ( n − 1 ) ≡ 1 ( m o d n ) a^{(n-1)}\equiv 1{\pmod {n}} a(n1)1(modn)
被称为Fermat liar。如果我们选取满足下面等式的a
a ( n − 1 ) ≡ ̸ 1 ( m o d n ) a^{(n-1)}\equiv \not 1{\pmod {n}} a(n1)̸1(modn)
那么a也就是对于n的合数判定的Fermat witness。

快速模幂运算

a b ( m o d x ) a^b\pmod x ab(modx)

  1. 约掉b
  2. 化为二进制算.

RSA中的中国剩余定理

https://blog.csdn.net/mrpre/article/details/79671263
在这里插入图片描述

椭圆曲线的点加运算

https://www.jianshu.com/p/eece4117cb63

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值