【从0到0.1】对称密码随心笔记

我对对称其实并不熟悉,缓更

欢迎捉虫!

0. 前言


1. 密码分析

不讨论侧信道攻击和故障攻击


1.1. 差分分析

对于一个加密函数 EE

(P,P)(P,P^*)为明文对,则PPPP*的差分值定义为

ΔP=PP\Delta P = P \oplus P^*

于是

P=PΔPP^* = P \oplus \Delta P

ΔC=E(P)E(P)=E(P)E(PΔP)\Delta C = E(P) \oplus E(P^*) = E(P) \oplus E(P \oplus \Delta P)


上述性质可以用来恢复密钥,通常用在选择明文攻击中。


我们依此法表示加密过程:

E=ρr...ρ2ρ1E = \rho_r \cdot ...\cdot \rho_2 \cdot \rho_1

ρi\rho_i 表示第ii轮的轮函数 ,r 表示最后一轮


令明文 P1=PP_1 = P (可以理解为经过第0轮的轮函数输出的值)

则有 Pi+1=ρi(Pi)P_{i+1} = \rho_i(P_i)

不难推出

密文 C=Pr+1=ρr(Pr)C = P_{r+1} = \rho_r(P_r) (可以理解为经过第r轮的轮函数输出的值)

类似地,PiP_i^*CC_* 是另一串明文PP^* 使用相同的密钥若干轮加密后的结果


为简化讨论,我们令

δi=ΔPi,Δ=ΔP1,and =ΔPr+1\delta_i = \Delta P_i , \Delta = \Delta P_1 , and\ \nabla = \Delta P_{r+1}

即第ii轮差分用δi\delta_i 表示,明文差分值用 Δ\Delta 表示 ,密文差分值用 \nabla 表示.

pip_i表示 δiδi+1\delta_i \rightarrow \delta_{i+1}的概率,即

pi=Pρi(δi,δi+1)=P[ρi(x+δi)ρi(x)=δi+1]p_i = \mathcal{P}_{\rho_i}(\delta_i,\delta_{i+1}) = \mathcal{P}[\rho_i(x+\delta_i)-\rho_i(x) = \delta_{i+1}]

也就是

“已知第ii轮输出值的差分值是δi\delta_{i},求第i+1i+1轮的输出值的差分值是δi+1\delta_{i+1}”的概率


于是我们有 差分特征:


参考

A Salad of Block Ciphers:The State of the Art in Block Cipher and their Analysis

密码学学习笔记 之 差分分析入门篇——四轮DES | Van1sh的小屋

文章作者: 莫折眉
文章链接: https://m0d1.top/2022/03/11/blockcipher021/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 M0D1.TOP