RSA原理及应用
-
密码学发展,经理了很长了编码加密,到后来的对称加密, 及上世纪70年代后的非对称加密RSA
-
RSA数学原理
- 欧拉定理
- 模反元素
- 迪菲赫尔曼密钥交换,拆分欧拉定理
Φ(n) k
m mod n = 1 1 = 1, 1 * m = m, m< n
k * Φ(n)+1
m mod n = m
e * d mod X = 1 #e 与 x 互质,那么存在正整数d
e * d = k * x + 1 # x 替换成 Φ(n), e为加密用私钥部分, d为解密的公钥部分
e*d
m mod n = m =>
e d
加密: m mode n = C 解密 C mode n = m
# 公钥: n和e组成 (公开), 私钥: n和d租成, 明文 m, 密文 c, n一般取 1024个二进制位
# Φ(n) n一般取 质数p1,p2 n=p1*p2, Φ(n)=(p1-1)*(p2-1) 由Φ(n)计算出 e, d
- 终端用openssl 生成证书
* openssl genrsa -out private.pem 1024 #生成 1024位的私钥
* openssl rsa -in private.pem -pubout -out public.pem #从私钥中提取公钥
* #可以解析成明文查看,n = publicExponent: 65537, 还有 p1,p2等
* openssl rsa -in private.pem -text -out private.txt
* #使用公钥 加密
* openssl rsautl -encrypt -in msg.txt -inkey public.pem -pubin -out enc.txt
* #使用私钥 解密
* openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
*
* #用私钥签名加密
* openssl rsautl -sign -in msg.txt -inkey private.pem -out enc.txt
* #使用公钥验证签名
* openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec2.txt
- 证书转换成iOS程序可用的格式
$ #用私钥 生成请求证书 的文件,需填写 相关信息,密码留空, ssl的这个证书从正规机构购买,年费大几千
$ openssl req -new -key private.pem -out rsacert.scr
$ #根据证书 导出代码可用的 der格式
$ openssl x509 -outform der -in rsacert.crt -out rsacert.der
$ #根据私钥,scr证书,提取p12私钥, 需要设置密码
$ pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
-
RSA的一些特点
- 加密效率较低,计算较慢
- 合适一些小数据的加密,不适合大数据加密
- 已知e,n, e*d = Φ(n) *k +1, 要求d, 需对 大n因式分解 才能算出 Φ(n) , 进而算出 d
-
RSA的一些主要运用
- 加密 对称加密的 密钥key
- 用于签名, 如ssl,ipa,apk 签名等
网友评论