首页 > 技术文章 > 密码学笔记——大致说明对称密码学

nldyy 2018-03-10 14:49 原文

对称密钥加密:加密和解密是同一个密钥。安全性是依赖于对密钥的保密。

非对称密钥加密:加密和解密不是同一个密钥。并且有一个是公开的即为公钥,另一个就是私钥。私钥需要严格保密。

                            它的安全性依赖于数学,我们需要找到一个单项陷门函数(即单项并且存在陷门的函数。单项:y=f(x),从x很容易得出y得值但想要从y得出x得值基本上是不可能得。陷门:就是存在z使得知道z                              则可以很容易地计算出x=f ^ (-1) (y)。)从而实现加密密钥和解密密钥不同并且难以互推。例如RSA。

当铺密码:将中文和数字进行转化的密码,算法相当简单。当前汉字有多少笔画出头,就是转化成数字几。例如王——6。

摩斯密码:就是会给一段声音,大概是由滴和哒构成,滴是•,哒是—。将所听到的记录下来,对照摩斯表进行解密。

单码代换密码:

加法密码:凯撒密码,移位密码。P明文,C是密文,k是我们选取的密钥。加密:C=(P+k)%26;解密:P=(C-k)%26。破解:蛮力攻击,统计攻击。

乘法密码:加密:C=(P*k)%26;解密:P=(C*k^(-1))%26.   k^(-1)是k的乘法逆。如果(a*b) mod n=1,则a与b在集合Z中(Z是0——n-1)互为乘法逆。

                  注意:不是每一个数在Z中都有乘法逆只有gcd(n,a)=1的时候a具有一个乘法逆。因为我们是针对26个字母来进行加密解密,所以我们可用的密钥只有12个:1,3,5,7,9,11,17,19,21,                                 23,25.

仿射密码:加法密码+乘法密码。使用的是密钥对(k1,k2)。加密:T=(P*k1) mod n;C=(T+k2) mod n;解密:T=(C-k2) mod n;P=(T*k1^(-1)) mod n。破解:蛮力攻击,统计攻击,明文攻击。

多码代换密码:

自动密钥密码:P=P1P2P3.....,C=C1C2C3.....,k=(k,P1,P2,P3...)

                         加密:Ci=(Pi+ki)mod 26;

                         解密:Pi=   (Ci-ki)  mod 26;

Playfair密码:密钥是一个5*5的字母表

                       将明文两个一组的分开,若出现单个字母,则要补一个。若同一分组的两个字母相同,则要加入一个伪字母。

                       加密规则:1.一对中俩字母在同一行中,每个字母的加密字符就是同一行当中右侧的下一个字母。

                                         2.一对中俩字母在同一列中,每个字母的加密字符就是同一列中下面一个字符。

                                         3.一对字母处于不同行不同列,每个字母的加密字符就是处于同一行和另一个字母同一列的字母。

                       例如hello加密,先分组 he    lx(x是伪字母)    lo

L G D B A
Q M H E C
U R N I/J F
X V S O K
Z Y W T

p

        EC  QZ                     BX

        密文就是:ECQZBX。             

 

 

 

 

维吉尼亚密码:P=P1P2P3...,C=C1C2C3...,k=(k1,k2...km)(k1,k2...km).密钥流是一个长度m的其实密钥流的重复。

                         加密:Ci=(Pi+ki) mod 26        解密 Pi=(Ci-ki) mod 26

                         其实就是明文中每个字母所加的密钥值不同的加法密码。

                         破解:先求密钥长度。在将密文按密钥长度进行分组,将每一个分组看成加法密码,进行分析。

希尔密码:明文分组,每次加密一个分组,分组中的每一个字母多对分组中另一个字母起加密作用。

                  密钥是一个矩阵K。   

k11 k12 ... k1m
k21 k22 ... k2m
... ... ... ...
km1 km2 ... kmm

加密:将明文分成l*m的矩阵。C=P*K;

C1=(P1*k11+P2*k12+...+Pm*k1m)mod 26

C2=(P1*k21+P2*k12+...+Pm*k2m)mod 26

.....

C3=(P1*km1+P2*km2+...+Pm*kmm)mod 26

                  解密:P=C*K^(-1);

                 因为涉及到乘法逆所以密钥矩阵K 一定要具有乘法逆。

无密钥换位密码:

栅栏密码:将明文分组。排成矩阵,在按列去读。

                  例如Meet me at the park.

                  m   e    e   t

                  m   e    a   t

                  t     h    e   p

                  a     r    k            再按列读取就是mmtaeehreaekttp;

有密钥的换位密码:密钥是一个转换密钥

3 1 4 5 2
1 2 3 4

5

↓加密。↑解密。

将明文分为5组,每一组的三个字母放在第一个位置,第一个字母放在第二个位置上,以此类推。形成密文。

                         解密时,将密文五个一组。将每组第一个字母放到第三个位置时=上,第二个字母放到第一个位置上,以此类推,解读出明文。

 

 

非对称密钥加密:加密和解密不是同一个密钥。并且有一个是公开的即为公钥,另一个就是私钥。私钥需要严格保密。

                            它的安全性依赖于数学,我们需要找到一个单项陷门函数(即单项并且存在陷门的函数。单项:y=f(x),从x很容易得出y得值但想要从y得出x得值基本上是不可能得。陷门:就是存在z使得知道z                              则可以很容易地计算出x=f ^ (-1) (y)。)从而实现加密密钥和解密密钥不同并且难以互推。例如RSA。

 

RSA:安全性在于大整数质因子分解。

           生成密钥的步骤

           1.首先,选择两个大素数。p,q;求出两个数的乘机n=p*q,以及n的欧拉函数:φ(n)=(p-1)(q-1);

           2.在φ(n)中随机选取一个数e,1<e<φ(n)并且e与φ(n)互素,即gcd(e,φ(n))=1;

          3.再求出e mod φ(n)的逆,记为d。即是(e*d) mod φ(n)=1。至此公钥为(e,n),私钥为(d,n);

          加密:C=P^e mod n;

          解密 :P=C^d mod n;

          例子:p=7,q=11;n=p*q=77;φ(n)=(7-1)(11-1)=60;

                     选择e=13,则d=37;

                     明文为5

                     密文 C=5^13 mod 77=26

                     解密 P=26^37 mod 77=25

    证明 C=P^e mod n;

            P=C^d mod n = (P^e mod n)^d mod n=P^(e*d) mod n 

           e*d=k*φ(n)+1;

           P=P^(k*φ(n)+1)mod n=P mod n=P;(欧拉定理:n=p*q,a<n,k为整数,a^(k*φ(n)+1)≡a mod n)

 

推荐阅读