浅析RSA加密算法

1、RSA简介

RSA加密算法是目前最广为使用的一种非对称加密算法(又称公开密钥加密算法)。

相对于对称加密算法,非对称加密算法是一种加密密钥和解密密钥不同的加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”的密码体制。

在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK.

2、RSA加密算法的原理

RSA加密算法的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

2.1 RSA中涉及到的数论知识

质数:
  • 又称素数,一个大于1的正整数,除了1和它自身外,不能被其他整数整除。
互质关系:
  • 如果两个正整数,除了1以外没有其他公因子,就称这两个数是互质关系。
  • 推论:
    • 任意两个质数构成互质关系。
    • 大数是质数的两个数一定是互质关系。
同余:
  • 给定一个正整数m,若存在两个整数a和b满足a-b能被m整除,即(a-b) mod m = 0, 那么就称整数a与b对模m同余,记作 :a≡b(mod m) , 同时又成立:a mod m = b
欧拉函数:
  • 定义:对于给定正整数n,计算在小于等于n的正整数中,有多少个数与n构成互质关系。如:φ(8) = 4 .

  • 推论:

    • 若n可以拆成两个互质的正整数之积,如 n = p × q ,则有:φ(n) = φ(pq) = φ§φ(q)

    • 对质数m , 有:φ(m) = m-1 .

    • 若n可以拆解成两个质数p和q的积,则:φ(n) = (p-1)(q-1) .

    • 欧拉定理:如果两个正整数a和n互质,则n的欧拉函数φ(n)有:
      a φ ( n ) ≡ 1 ( m o d n ) a^φ(n)≡1(mod n) aφ(n)1(modn)
      意味着 aφ(n)次方被n除的余数为1.

模反元素
  • 如果两个正整数a和n互质,则一定有整数b,使得:ab-1能被n整除,或者说ab被n整除的余数是1,记作:ab≡1(mod n)

2.2 RSA的加密与解密过程

当甲想要通过RSA加密算法把某信息发送给乙时,会经过以下过程:

  1. 乙生成一对公私钥。

    1. 随机选择两个不相等的质数p和q(如61和35)
    2. 计算p和q的乘积n=p×q=61×35=3233
    3. 根据欧拉函数,φ(n) = (p-1)(q-1) = 3120
    4. 随机选择一个整数e,满足:1 < e < φ(n), 且e与φ(n)互质。如e = 17
    5. 因为e与φ(n)互质,根据φ(n)来计算e的一个模反元素d:
      1. 由相关公式可得:ed≡1(mod φ(n))
      2. 所以有:(ed-1) / φ(n) = k , k为任意正整数。
      3. 上述式子等价于 ed - 1 = kφ(n)
      4. 带入相关数据可得:17d - 1 = 3120k
      5. 该二元一次方程的一组解为:(d, k) = (2753, 15)
    6. 将n和e封装成公钥,n和d封装成私钥。即PK = (n, e) = (3233, 17),SK = (3223, 2753). 其中n的长度就是密钥长度,如3233写成二迚制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位
  2. 乙把公钥给到甲(公钥泄漏也没有关系)。

  3. 甲使用公钥对明文m进行加密得到密文c。

    1. 设待加密的明文m = 65

    2. 利用收到的公钥(n, e) = (3233, 17)对明文进行加密:
      根 据 公 式 : m e ≡ c   ( m o d   n ) 根据公式:m^e ≡ c \ (mod \ n) mec (mod n)

      得 : c = m e   m o d   n = 6 5 17   m o d   3233 = 2790 得: c = m^e \ mod \ n = 65^{17} \ mod \ 3233 = 2790 c=me mod n=6517 mod 3233=2790

  4. 甲把密文c发送给乙方。

  5. 乙使用私钥对密文c进行解密得到明文m。

    根 据 公 式 : c d ≡ m   ( m o d   n ) 根据公式:c^d ≡ m\ (mod \ n) cdm (mod n)

    得 : m = c d   m o d   n = 279 0 2753   m o d   3233 = 65 得: m = c^d \ mod \ n = 2790^{2753} \ mod \ 3233 = 65 m=cd mod n=27902753 mod 3233=65

3、RSA签名体制

RSA的签名体制同样包含3个算法:KeyGen(密钥生成算法), Sign(签名算法),Verify(验证算法)。

  • KeyGen(λ) -> (PK, SK)。 密钥生成算法以安全常数λ作为输入,输出一个公钥PK和一个私钥SK。
  • Sign(SK, M) -> σ 。签名算法以私钥SK和待签名的消息M作为输入,输出签名σ。在RSA签名体制的签名算法中,σ = M^d mod n 。
  • Verify(PK, σ , M) -> b 。验证算法以公钥PK,签名σ 和消息M作为输入,输出一个比特值b。b=0表示验证不通过,b=1表示验证通过。验证算法的大致流程:
    1. 计算M’ = σ^e mod n
    2. 对比M与M’,相等则输出b=1,反之输出b=0

综上可知,在RSA签名体制中,私钥SK用于对数据进行签名,公钥PK用于对签名进行验证。

4、总结

对于RSA加密算法:

  • 可以用来做加解密(慎用):
    • 密钥的产生很麻烦。
    • 密钥位数n建议至少1024比特。
    • 适合小原文加密,一次运算的原文长度 < n。
    • 非常非常慢。
    • 不具有向前安全性。
    • 私钥必须保密:知道私钥可以计算出公钥,但知道公钥无法计算出私钥。
  • 经常用来做认证:签名/验签
    • 具有抗抵赖性。
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值