阅读 153

RSA加密原理

什么是RSA加密

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。公钥加密--私钥解密,私钥加密--公钥解密

RSA数学原理

离散对数问题

整数中,离散对数是一种基于同余运算和原根的一种对数运算。而在实数中对数的定义 logba是指对于给定的ab,有一个数x,使得bx=a。相同地在任何群G中可为所有整数k定义一个幂数为bK,而离散对数logba是指使得bK=a的整数k

当3为17的原根时,我们会发现一个规律

当3为17的原根

欧拉函数

正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1)。有以下几个特点

  • 当n是质数的时候,φ(n)=n-1
  • 如果n可以分解为两个互质的整数之积,如n=AB,则: φ(n) = φ(AB) = φ(A)φ(B) = φ(A-1)φ(B-1)
    欧拉函数

欧拉定理

  • 欧拉定理
    如果两个正整数m和n互质,那么m的φ(n)次方减去1,可以被n整除。
    mφ(n)modn≡1
  • 费马小定理
    欧拉定理的特殊情况:如果两个正整数m和n互质,而且n为质数,那么φ(n)结果就是n-1
    mn-1modn≡1
根据欧拉定理进行下面公式转换
公式转化
公式2验证
公式3验证

迪菲赫尔曼密钥交换

服务端根据生成一个随机数15,根据315mod17计算出6,服务端将6传递给客户端,客户端生成一个随机数13,根据313mod17计算出12后,将12再传回给服务端,客户端收到服务端传递的6后,根据613mod17计算出10,服务端收到客户端传递的12后,根据1215mod17计算出10,我们会发现我们通过迪菲赫尔曼密钥交换10进行了加密传递

迪菲赫尔曼密钥交换
迪菲赫尔曼密钥交换原理

RSA原理

RSA原理

说明:

  • n会非常大,长度一般为1024个二进制位(目前人类已经分解的最大整数,232个十进制,768个二进制)
  • 由于需要求出φ(n),所以根据欧拉函数特点,最简单的方式n是由两个质数相乘 -- 得到质数:p1和p2。φ(n)=φ(p1-1)*φ(p2-1)
  • 最终由φ(n)得到e和d
    总共生成了6个数字:p1、p2、n、φ(n)、e、d

安全性:
除了公钥用到ne,其余的4个数字是不公开的(p1、p2、φ(n)、d)
目前破解RSA得到的方式如下:

  • 要想求出私钥d,由于e*d=φ(n)*k+1,要知道eφ(n)
    -e是知道的,但是要得到φ(n),必须知道p1p2
  • 由于n=p1*p2,只有将n因式分解才能算出

缺点
RSA加密效率不高,因为是纯粹的数学算法,大数据不适合RSA加密,所以我们在加密大数据的时候,我们先用对称加密算法加密大数据得到KEY,然后再用RSA加密KEY,再把大数据和KEY一起进行传递

OpenSSL进行RSA加密

因为Mac系统内置了OpenSSL(开源加密库),所以我们开源直接在终端进行RSA加密解密

常用命令

  • openssl genrsa:生成并输出一个RSA密钥
  • openssl rsautl:使用RSA密钥进行加密、解密、签名和验证等运算
  • openssl rsa:处理RSA密钥的格式转换等问题
生成私钥

生成RSA私钥,密钥名为private.pem,密钥长度为1024bit

openssl genrsa -out private.pem 1024
openssl genrsa

private.pem
从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
openssl rsa
public.pem
将private.pem私钥转化成明文形式
openssl rsa -in private.pem -text -out private.txt
private.pem转成明文
private.pem的明文
通过公钥加密数据
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out exc.txt
公钥加密数据
通过私钥解密数据
openssl rsautl -decrypt -in exc.txt -inkey private.pem -out dec.txt
私钥解密数据
通过私钥加密数据
openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt
私钥加密数据
通过公钥解密数据
openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
公钥解密数据

因为在iOS中是无法使用.pem文件进行加密和解密的,需要进行下面几个步骤

私钥签名(没有认证的)

.csr文件
openssl req -new -key private.pem -out rsacert.csr
私钥签名
crt证书

生成一个10年期限的crt证书

openssl x509 -req -day
s 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
crt证书
der证书

crt证书格式转换成der证书

openssl x509 -outform der -in rsacert.crt -out rsacert.der
der证书
p12证书
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
p12证书

作者:木扬音

原文链接:https://www.jianshu.com/p/2e90c62fdce9

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐