逆向-密码学

546 阅读4分钟

RSA数学原理

离散对数

截屏2021-04-15 上午10.30.04.png

欧拉函数

互质关系

如果两个正整数,除了1意外,没有其他公因数,就称这两个数为互质关系

7和8就是互质关系,6和8不是互质关系

欧拉函数特点

  • 当n是质数时,Φn = n - 1
  • 如果n可以分解成两个互质数的相互的乘积,如下图,Φn = Φp1 × Φp2 = (p1 - 1) × (p2 - 1) 截屏2021-04-15 上午10.58.42.png

欧拉定理

如果两个正整数m和n互质,那么m的Φn次方减1,可以被n整除 截屏2021-04-15 下午3.36.51.png

费马小定理

如果两个正整数m和n互质,并且n是质数那么Φn的结果就是n-1 截屏2021-04-15 下午3.40.22.png

公式转换

截屏2021-04-15 下午4.59.58.png

迪菲赫尔曼密钥交换

截屏2021-04-16 下午4.09.29.png 经过上面一堆的数学算法可以看RSA的加密效率并不高,要经过一堆的数学算法来计算,大数据不适合用RSA来加密,比如说对称加密,需要用到KEY,但直接传递KEY和数据很容易被破解,但如果用RSA加密这个KEY,再用KEY来对数据进行对称加密,再把KEY和数据传给客户端,如果中间被获取到了,要想解密,就必须要先破解得到KEY,才能来解密数据

RSA终端命令

Mac的终端就是用的OpenSSL(开源加密库),可以用终端来调试RSA

openssl genrsa -out private.pem 1024    生成私钥

openssl rsa -in private.pem -pibout -out public.pem   生成公钥

openssl rsa -in private.pem -text -out private.text   把私钥转成明文查看

openssl rsautl -encrypt -in message.text -inkey public.pem -pubin -out enc.text     用公钥加密

openssl rsautl -decrypt -in enc.text -inkey private.pem -out dec.text       用私钥解谜

RSA代码演示

openssl req -new key private.pem -out rsacert.csr    
通过私钥向证书颁发机构请求csr文件

openssl x509 -req -days 3650 in rescert.csr -signkey private.pem -out rsacert.crt 
通过csr文件向证书颁发机构进行签名

openssl x509 -outform der -in rsacert.crt -out rsacert.der 
把crt证书转成iOS能够用的der证书

openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
生成p12文件

截屏2021-04-17 上午9.45.05.png 因为加密后的文件全是些二进制的,不能验证,所以会把二进制进行转码,专程Base64编码的

Base64编码

是由AZ、az、/、=,这几个构成的,base64只适用于表达加密过后的二进制文件,经过base64编码之后会比原文件大三分之一

base64 message.text -o abc.text      编码

base64 abc.text -o 123.text -D       解码
- (NSString *)base64EndCode:(NSString *)str {
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    return [data base64EncodedStringWithOptions:0];
}编码

- (NSString *)base64DecCode:(NSString *)str {
    NSData *data = [[NSData alloc]initWithBase64EncodedString:str options:0];
    return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
}解码

RSA加密

截屏2021-04-18 下午4.25.05.png先通过rsa加密解密然后在通过base64编码打印出来

Hash

特点

  • 算法是公开的,得到的结果是一样的
  • 不同数据的运算,如MD5得到的结果默认是128位
  • 无法逆运算
  • 用来做信息摘要,信息指纹,用来做数据识别 数据是无限的但Hash的结果是有限的是16的32次方,当两个或多个不同的数据拥有同样的Hash时,这时候称之为散列碰撞

用途

密码加密
加盐&HMAC加密

截屏2021-04-19 上午10.35.04.png

对称加密

  • DES 数据加密标准
  • 3DES 使用3个密钥,对相同的数据进行3次加密,
  • AES 高级密码标准 对称加密是加密解密是用同一个key ,非对称加密,私钥加密公钥解密

对称加密有两种模式

  • ECB 电子密码本模式 每一块数据,独立加密 最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用
openssl enc -des-ecb -K 7068 -nosalt -in ph.text -out msg.bin
  • CBC 密码分组链接模式。使用一个密钥和一个初始化向量[IV]对数据执行加密 明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误) CBC可以有效的保证密文的完整性,如果一个数据块在传递是丢失或改变,后面的数据将无法正常解密