密码学笔记——大致说明对称密码学
对称密钥加密:加密和解密是同一个密钥。安全性是依赖于对密钥的保密。
非对称密钥加密:加密和解密不是同一个密钥。并且有一个是公开的即为公钥,另一个就是私钥。私钥需要严格保密。
它的安全性依赖于数学,我们需要找到一个单项陷门函数(即单项并且存在陷门的函数。单项: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)