LOADING

正在加载

密码学(叁)——非对称加密算法介绍

壹 非对称加密算法介绍

对称加密目前存在的问题以下两个问题:

  • 密钥管理困难,因为与每个人进行信息加密交流都需要一个密钥对,这时候如果上百万个人就会非常多,管理起来非常复杂
  • 密钥分发困难,如果两个人相隔千里,那么要分发的话,相对比较困难

为了解决这两个问题,就出现了非对称加密算法。与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法

特点

  • 优点:加密强度高,因为密钥比对称加密的长度长
  • 缺点:加密效率低,加密解密速度慢

对称加密与非对称加密区别

  • 对称加密相较于非对称加密加密效率要快,但是由于对称加密的两个缺陷,导致非对称加密在安全性上要比对称加密强
  • 对称加密的密钥最有一个,是不能公开的,只能自己和对方保管,加密和解密都需要这个密钥,而非对称加密的密钥有两个,分别是公钥和私钥,公钥可以被所有人知道,私钥只能自己知道,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。非对称加密的公私钥虽然都可以加解密,但是一般情况下,都是使用公钥加密,私钥解密。

使用场景

  • 通信加密,一般使用私钥加密,公钥解密
  • https,验证网站是否为官方网站
  • 签名,为了防篡改
  • 网银U盾,用于验证客户端一般私钥做U盾,公钥在服务器
  • secure shell登录,就是ssh免密登录

贰 RSA——RSA算法

2.1 概念

RSA算法是一种非对称加密算法,它的名字由三位开发者。即RonRivestAdiShamirLeonardAdleman的姓氏的首字母组成的(Rivest-Shamir-Leonard)。RSA的安全性主要是基于对大数进行因式分解,这个大数是两个素数的乘积得到的。这种方法公认很难被快速的分解

  • OpenSSL是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。我们也可以使用OpenSSL生成RSA公私密钥:
    # 目前主流密钥长度至少都是1024bits以上,低于1024bit的密钥已经不建议使用(安全问题)
    # genrsa子命令主要用于生成RSA私钥
    OpenSSL> genrsa -out rsa_private_key.pem 1024 #生成私钥,1024是密钥长度
    # 可以不指定私钥长度,默认是2048位,长度建议1024以上,这样安全! !
    # rsa子命令主要用于处理RSA公私钥文件
    > rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥
    openSSL> exit #退出OpenSSL程序
    

2.2 原理分析

这里我们使用公钥进行加密,私钥进行解密来阐述!

2.2.1 RSA算法加密简单介绍

RSA加密过程可以使用以下公式来表达:
$$
密文 = 明文^E mod N(RSA加密)
$$
可以看出RSA的加密就是明文(这里的明文是数字值,它与实际被加密的数据进行一一对应,这个对应会有一个字符对应表进行比对)的E(Encrypt)次方除以N取余数,这个余数就是密文,因此只需要知道EN这两个数,即可进行RSA加密,而RSA的公钥就是由E和N的组合而成,所以公钥一般可以写成{E,N}或者(E,N)

N就是pq两个素数的乘积(两个质数必须保密),E是在1(p - 1)(q - 1)之间并且与(p - 1)(q - 1)得出的结果互质的数。

2.2.2 RSA算法解密简单介绍

RSA解密过程可以使用以下公式来表达:
$$
明文 = 密文^D mod N(RSA解密)
$$
可以看出RSA的解密就是密文的D(Decrypt)次方除以N取余数,这个余数就是明文(同样这里的明文也是数字值,它与实际被解密后的数据进行一一对应,这个对应会有一个字符对应表进行比对),同样只需要知道DN这两个数,即可进行RSA加密,而RSA的私钥就是由D和N的组合而成,所以私钥一般可以写成{D,N}或者(D,N)

N就是两个素数的乘积(两个质数必须保密),D是 $e^{-1}(mod(p-1)(q-1))$。

2.2.3 模指数运算

模指数运算是先做指数运算,取其结果再做模运算,而指数运算不用多说,例如:$2^3 = 8$、$3^5 = 243$,而模运算是以m mod n的形式运算的,即让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如:$10 mod 3 = 1$、$14 mod 3 = 2$,所以模指数运算的形式就是$5^3 mod 7 = 125mod7 = 6$。

2.2.4 RSA算法详细描述

RSA算法描述:

  • 选择一对不同的且足够大的素数:pq
  • 计算两个素数的乘积N,即:$N = pq$
  • 接着计算$f(N) = (p - 1)(q - 1)$,这里的pq不能被任何人知道
  • 计算E,即找一个与f(N)互质的数E,且这个数E需要在$1 < E < f(N)$之间
  • 计算D,使得 $DE ≡ 1 mod f(N)$。这个公式也可以表达为$D ≡ E^{-1} mod f(N)$,是数论中表示同余的符号,符号的左边必须和符号右边同余,也就是说两边模运算结果相同
  • 此时得到$公钥={E,N}$,$私钥={D,N}$
  • 加密时,先将明文变换成0n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程就是前面的RSA算法加密简单介绍
  • 解密过程就是前面的RSA算法解密简单介绍

从上面我们可以看出如果我们知道公钥和两个素数,我们是可以推导出私钥的。

2.2.5 例子说明

假设两个素分别为p = 2q = 7,那么$N = pq = 2 * 7 = 14$,接着$f(N) = (p - 1)(q - 1) = (2 - 1)(7 - 1) = 6$,然后E在$1 < E< 6$区间里,即E = 5(如果有多个互质的数,随便选一个),最后求D,即$D ≡ 5^{-1} mod 6$,转换后就是$5 * D mod 6 ≡ 1$,我们可以列个表:

D E * D => 5 * D (E * D) mod (p - 1)(q - 1) => (5 * D) mod 6
1 5 5
2 10 4
3 15 3
4 20 2
5 25 1(余数为1满足条件)

通过运算得,当D = 5时,E * D≡ 1 mod f(N)同余等式成立。因此,可令D = 5。从而我们得到的一对公私密钥,$公钥={E,N}={5,14}$,$私钥={D,N}={5,14}$。根据公式我们也可以发现,无论是E或者D ,一定比N小。

2.3 特点

  • 解决了对称加密的两个问题
  • 安全性较好,但效率较低
  • 对于量大的数据,一般需要预先进行数据分割
  • 由一对密钥对组成,公钥可以公开,私钥必须保存

叁 参考

avatar
小C&天天

修学储能 先博后渊


今日诗句