当前位置:

密码学——古典密码的基本加密运算附例题

访客 2024-02-05 938 0


前言

首先引入密码学中的几个基本定义:
M:明文空间,明文的集合
C:密文空间,密文的集合
K:密钥空间(也称密钥的数量),密钥的集合
E:加密变换的集合,使明文加密生成密文的算法
D:解密变换的集合,使密文解密生成明文的算法
单表密码体制:明文字母对应的密文字母在密文中保持不变。(浅显一点就是相同的字母加密以后的字母也为相同的)
多表密码体制:明文中不同位置的同一明文字母在密文中对应的密文字母不同。(相同的字母在不同的位置加密以后的字母极大可能不同)

Zq={0,1,2,...,q−1},Zq∗={k∈Zq∣gcd(k,q)=1}Z_q=\{0,1,2,...,q-1\},Z_q^*=\{k\inZ_q\vertgcd(k,q)=1\}Zq={0,1,2,...,q−1},Zq∗={k∈Zq∣gcd(k,q)=1},其中gcd(k,q)=1gcd(k,q)=1gcd(k,q)=1表示k与q互素。
例如:Z26={0,1,2,...,25}Z_{26}=\{0,1,2,...,25\}Z26={0,1,2,...,25}则Z26∗={1,3,5,7,9,11,15,17,19,21,23,25}Z_{26}^*=\{1,3,5,7,9,11,15,17,19,21,23,25\}Z26∗={1,3,5,7,9,11,15,17,19,21,23,25}即由与26互素的数组成的


一、单表古典密码中的基本加减密运算

1.加法密码

设X=Y=Zq,K=Zq.X=Y=Z_q,K=Z_q.X=Y=Zq,K=Zq.对任意m∈X,k∈Km\inX,k\inKm∈X,k∈K
加密算法:c=Ek(m)=(mk)modqc=E_k(m)=(mk)mod\qc=Ek(m)=(mk)modq解密算法:m=Dk(c)=(c−k)modqm=D_k(c)=(c-k)mod\qm=Dk(c)=(c−k)modq加密密钥和解密密钥:k
密钥量:q

例题:m=4,k=5,q=26,则加密c=(45)mod26=9c=(45)mod\26=9c=(45)mod26=9;若改为m=23,则c=(235)mod26=28mod26=2c=(235)mod\26=28mod\26=2c=(235)mod26=28mod26=2
解密m=(9−5)mod26=4m=(9-5)mod\26=4m=(9−5)mod26=4;m=(2−5)mod26=−3mod26=26−3=23m=(2-5)mod\26=-3\mod\26=26-3=23m=(2−5)mod26=−3mod26=26−3=23。(分别对应上面的加密过程)
注意:此处运用了模运算,基本上密码学中都会用到模运算,如有不懂可去搜查模运算的知识点。

2.乘法密码

设X=Y=Zq,K=Zq∗.X=Y=Z_q,K=Z_q^*.X=Y=Zq,K=Zq∗.对任意m∈X,k∈Km\inX,k\inKm∈X,k∈K
加密算法:c=Ek(m)=kmmodqc=E_k(m)=km\\mod\qc=Ek(m)=kmmodq解密算法:m=Dk(c)=k−1cmodqm=D_k(c)=k^{-1}c\\mod\qm=Dk(c)=k−1cmodq加密密钥和解密密钥:k
密钥量:φ(q)\varphi(q)φ(q),(Euler函数:小于q且与q互素的非负整数的个数)

例题:m=4,k=5,q=26,则加密c=(5∗4)mod26=20c=(5*4)mod\26=20c=(5∗4)mod26=20;
解密m=(5−1∗20)mod26=21∗20mod26=(−5)∗(−6)mod26=30mod26=4m=(5^{-1}*20)mod\26=21*20mod\26=(-5)*(-6)mod\26=30mod\26=4m=(5−1∗20)mod26=21∗20mod26=(−5)∗(−6)mod26=30mod26=4
注意:此处的5−15^{-1}5−1指的是5的逆元,在模运算的情况下应为5∗x≡1mod265*x\equiv1\mod\265∗x≡1mod26解得x=21
小tips:此处K=Zq∗K=Z_q^*K=Zq∗是因为要使k−1k^{-1}k−1存在

3.仿射密码

设X=Y=Zq,K={(k1,k2)∣k1∈Zq,k2∈Zq∗}.X=Y=Z_q,K=\{(k_1,k_2)\vertk_1\inZ_q,k_2\inZ_q^*\}.X=Y=Zq,K={(k1,k2)∣k1∈Zq,k2∈Zq∗}.对任意m∈X,k=(k1,k2)∈Km\inX,k=(k_1,k_2)\inKm∈X,k=(k1,k2)∈K
加密算法:c=Ek(m)=k1k2mmodqc=E_k(m)=k_1k_2m\\mod\qc=Ek(m)=k1k2mmodq解密算法:m=Dk(c)=k2−1(c−k1)modqm=D_k(c)=k_2^{-1}(c-k_1)\\mod\qm=Dk(c)=k2−1(c−k1)modq加密密钥和解密密钥:(k1,k2)(k_1,k_2)(k1,k2)
密钥量:q∗φ(q)q*\varphi(q)q∗φ(q)
加法密码和乘法密码是仿射密码的特例

例题:m=7,k1=1,k2=3,q=26m=7,k_1=1,k_2=3,q=26m=7,k1=1,k2=3,q=26,则加密c=(13∗7)mod26=22c=(13*7)mod\26=22c=(13∗7)mod26=22;
解密m=(3−1∗(22−1))mod26=9∗21mod26=189mod26=7m=(3^{-1}*(22-1))mod\26=9*21mod\26=189mod\26=7m=(3−1∗(22−1))mod26=9∗21mod26=189mod26=7
ps:3−1=93^{-1}=93−1=9

4.置换密码

设X=Y=Zq,K为ZqX=Y=Z_q,K为Z_qX=Y=Zq,K为Zq上全体置换的集合。对任意m∈X,k=σ∈Km\inX,k=\sigma\inKm∈X,k=σ∈K
加密算法:c=Ek(m)=σ(m)modqc=E_k(m)=\sigma(m)mod\qc=Ek(m)=σ(m)modq解密算法:m=Dk(c)=σ−1(m)modqm=D_k(c)=\sigma^{-1}(m)mod\qm=Dk(c)=σ−1(m)modq加密密钥和解密密钥:σ\sigmaσ(一个置换)
密钥量:q!q!q!
因为置换就是简单地将明文字符对应成相应的密文字符,故此处就不写例题了。

二、多表古典密码中的基本加减密运算

1.简单加法密码

设Xn=Yn=Zqn,K=Zqn.X^n=Y^n=Z_q^n,K=Z_q^n.Xn=Yn=Zqn,K=Zqn.对任意m=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈Km=(m_1,m_2,...,m_n)\inX^n,k=(k_1,k_2,...,k_n)\inKm=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈K
加密算法:c=Ek(m)=(m1k1,m2k2,...,mnkn)c=E_k(m)=(m_1k_1,m_2k_2,...,m_nk_n)c=Ek(m)=(m1k1,m2k2,...,mnkn)解密算法:m=Dk(c)=(c1−k1,c2−k2,...,cn−kn)m=D_k(c)=(c_1-k_1,c_2-k_2,...,c_n-k_n)m=Dk(c)=(c1−k1,c2−k2,...,cn−kn)加密密钥和解密密钥:(k1,k2,...,kn)(k_1,k_2,...,k_n)(k1,k2,...,kn)
密钥量:qnq^nqn

2.简单乘法密码

设Xn=Yn=Zqn,K=(Zq∗)n.X^n=Y^n=Z_q^n,K=(Z_q^*)^n.Xn=Yn=Zqn,K=(Zq∗)n.对任意m=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈Km=(m_1,m_2,...,m_n)\inX^n,k=(k_1,k_2,...,k_n)\inKm=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈K
加密算法:c=Ek(m)=(k1m1,k2m2,...,knmn)c=E_k(m)=(k_1m_1,k_2m_2,...,k_nm_n)c=Ek(m)=(k1m1,k2m2,...,knmn)解密算法:m=Dk(c)=(k1−1c1,k2−1c2,...,kn−1cn)m=D_k(c)=(k_1^{-1}c_1,k_2^{-1}c_2,...,k_n^{-1}c_n)m=Dk(c)=(k1−1c1,k2−1c2,...,kn−1cn)加密密钥和解密密钥:k
密钥量:φ(q)n\varphi(q)^nφ(q)n

因为多表的加法密码和乘法密码与单表的极其相似,区别就在于多表是每一个分量就会给一个算法去进行加密
例如:设分量长度为3,k1=3,k2=5k_1=3,k_2=5k1=3,k2=5,则c1=3∗m1mod26,c2=5∗m2mod26c_1=3*m_1\mod26,c_2=5*m_2\mod26c1=3∗m1mod26,c2=5∗m2mod26分别对应不同的k,以此可以类推至n项

3.简单仿射密码

设Xn=Yn=Zqn,K={(<k11,k21>,<k12,k22>,...,<k1n,k2n>)∣k1i∈Zq,k2i∈Zq∗,1≤i≤n}.X^n=Y^n=Z_q^n,K=\{(<k_{11},k_{21}>,<k_{12},k_{22}>,...,<k_{1n},k_{2n}>)\vertk_{1i}\inZ_q,k_{2i}\inZ_q^*,1\lei\len\}.Xn=Yn=Zqn,K={(<k11,k21>,<k12,k22>,...,<k1n,k2n>)∣k1i∈Zq,k2i∈Zq∗,1≤i≤n}.
对任意m=(m1,m2,...,mn)∈Xn,k=(<k11,k21>,<k12,k22>,...,<k1n,k2n>)∈Km=(m_1,m_2,...,m_n)\inX^n,k=(<k_{11},k_{21}>,<k_{12},k_{22}>,...,<k_{1n},k_{2n}>)\inKm=(m1,m2,...,mn)∈Xn,k=(<k11,k21>,<k12,k22>,...,<k1n,k2n>)∈K
加密算法:c=Ek(m)=(k11k21m1,k12k22m2,...,k1nk2nmn)c=E_k(m)=(k_{11}k_{21}m_1,k_{12}k_{22}m_2,...,k_{1n}k_{2n}m_n)c=Ek(m)=(k11k21m1,k12k22m2,...,k1nk2nmn)解密算法:m=(k21−1(c1−k11),k22−1(c2−k12),...,k2n−1(cn−k1n))m=(k_{21}^{-1}(c_1-k_{11}),k_{22}^{-1}(c_2-k_{12}),...,k_{2n}^{-1}(c_n-k_{1n}))m=(k21−1(c1−k11),k22−1(c2−k12),...,k2n−1(cn−k1n))加密密钥和解密密钥:((k11,k21),(k12,k22),...,(k1n,k2n))((k_{11},k_{21}),(k_{12},k_{22}),...,(k_{1n},k_{2n}))((k11,k21),(k12,k22),...,(k1n,k2n))
密钥量:qnφ(q)nq^n\varphi(q)^nqnφ(q)n

例题:已知多表仿射密码的加密密钥为(2,1),(3,3),则c1=2m1mod26,c2=33∗m2mod26c_1=2m_1\mod26,c_2=33*m_2\mod26c1=2m1mod26,c2=33∗m2mod26以此可以类推至n项

4.简单置换密码

设Xn=Yn=Zqn,K={(k1,k2,...,kn)∣ki是Zq上的置换,1≤i≤n}.X^n=Y^n=Z_q^n,K=\{(k_1,k_2,...,k_n)\vertk_i是Z_q上的置换,1\lei\len\}.Xn=Yn=Zqn,K={(k1,k2,...,kn)∣ki是Zq上的置换,1≤i≤n}.对任意m=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈Km=(m_1,m_2,...,m_n)\inX^n,k=(k_1,k_2,...,k_n)\inKm=(m1,m2,...,mn)∈Xn,k=(k1,k2,...,kn)∈K
加密算法:c=Ek(m)=(k1(m1),k2(m2),...,kn(mn))c=E_k(m)=(k_1(m_1),k_2(m_2),...,k_n(m_n))c=Ek(m)=(k1(m1),k2(m2),...,kn(mn))解密算法:m=Dk(c)=(k1−1(c1),k2−1(c2),...,kn−1(cn))m=D_k(c)=(k_1^{-1}(c_1),k_2^{-1}(c_2),...,k_n^{-1}(c_n))m=Dk(c)=(k1−1(c1),k2−1(c2),...,kn−1(cn))加密密钥和解密密钥:(k1,k2,...,kn)(k_1,k_2,...,k_n)(k1,k2,...,kn)
密钥量:(q!)n(q!)^n(q!)n

5.换位密码

设Xn=Yn=Zqn,K为{1,2,...,n}.X^n=Y^n=Z_q^n,K为\{1,2,...,n\}.Xn=Yn=Zqn,K为{1,2,...,n}.上的全体置换的集合,对任意m=(m1,m2,...,mn)∈Xn,k=σ∈Km=(m_1,m_2,...,m_n)\inX^n,k=\sigma\inKm=(m1,m2,...,mn)∈Xn,k=σ∈K
加密算法:c=Ek(m)=(mσ(1),mσ(2),...,mσ(n))c=E_k(m)=(m_{\sigma(1)},m_{\sigma(2)},...,m_{\sigma(n)})c=Ek(m)=(mσ(1),mσ(2),...,mσ(n))解密算法:m=Dk(c)=(cσ−1(1),cσ−1(2),...,cσ−1(n))m=D_k(c)=(c_{\sigma^{-1}(1)},c_{\sigma^{-1}(2)},...,c_{\sigma^{-1}(n)})m=Dk(c)=(cσ−1(1),cσ−1(2),...,cσ−1(n))加密密钥和解密密钥:σ\sigmaσ
密钥量:n!n!n!

简而言之就是将其对应的位置全部打乱顺序

123
σ\sigmaσ312

第一个明文字符到第三个位置上去,第二个铭文字符到第一个位置上去,第三个明文字符到第二个位置上去。


结束语

第一篇有关密码学的文章就写到这里,希望能对读者们起到一定的作用。
如果存在错误欢迎在评论区指出,可以多多交流哇,大家一起进步,嘿嘿。

发表评论

  • 评论列表
还没有人评论,快来抢沙发吧~