RSA加解密签名简介

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的

算法原理

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

欧拉函数

欧拉函数 φ(n) 用于计算任意给定正整数n,在小于等于n的正整数之中,有多少个数与n构成互质关系。
比如,在1到8之中,有多少个数与8构成互质关系

  1. 如果n=1,则 φ(1) = 1 。因为1与任何数(包括自身)都构成互质关系

  2. 如果n是质数,则 φ(n)=n-1 。因为质数与小于它的每一个数,都构成互质关系。

    如:5与1、2、3、4都构成互质关系。

  3. 如果n是质数的某一个次方,则 φ(pk)=pk - pk-1 = pk(1 - 1/p)。因为只有当一个数不包含质数p,才可能与n互质。而包含质数p的数一共有p(k-1)个,即1×p、2×p、3×p、…、p(k-1)×p,把它们去除,剩下的就是与n互质的数。

    如 φ(8) = φ(23) =23- 22 = 8-4 = 4

  4. 如果n可以分解成两个互质的整数之积(n = p1 × p2),则φ(n) = φ(p1p2) = φ(p1)φ(p2)。即积的欧拉函数等于各个因子的欧拉函数之积。

    如:φ(56)=φ(8×7)=φ(8)×φ(7)=4×6=24。

  5. 任意一个大于1的正整数,都可以写成一系列质数的积。

    因为 n=pk11pk22 … pkrr

    由第4条结论得: φ(n)=φ(pk11)φ(pk22)…φ(pkrr)

    由第3条结论得:φ(n)=pk11pk22pk33 … pkrr(1- 1/p1)(1- 1/p2) … (1- 1/pr)

    即:φ(n) = n(1- 1/p1) (1- 1/p2) … (1- 1/pr)

欧拉定理

如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:

aφ(n) ≡ 1(mod n)

即:a的φ(n)次方被n除的余数为1
如:3和7互质,而7的欧拉函数φ(7)等于6,所以3的6次方(729)减去1,可以被7整除(728/7=104)。
3φ(7) ≡ 1 (mod 7)

欧拉定理有一个特殊情况,即费马小定理。
假设正整数a与质数p互质,因为质数p的φ§等于p-1,则欧拉定理可以写成:

ap-1 ≡ 1 (mod p)

模反元素

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。

ab ≡ 1 ( m o d n ) ,此时,b就是a的模反元素。

如:3和11互质,那么3的模反元素就是4,因为 (3 × 4)-1 可以被11整除。

欧拉定理可以用来证明模反元素必然存在。

aφ(n) = a*aφ(n-1) ≡ 1

可以看到,a的 φ(n)-1 次方,就是a的模反元素。

算法描述

  1. 任意选取两个不同的大素数p和q计算乘积
n = pq,   φ(n) = (p-1)(q-1) 
  1. 任意选取一个大整数e,满足
gcd (e, φ(n)) = 1

整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用)

  1. 确定的解密钥d,满足
(de) mod φ(n) = 1 

即 de = kφ(n) + 1, K ≥ 1 是一个任意的整数;所以,若知道e和 ` φ(n),则很容易计算出d;

  1. 公开整数n和e,秘密保存d

  2. 将明文m(m<n是一个整数)加密成密文c,加密算法为

c = E(m) = m^e mod n
  1. 将密文c解密为明文m,解密算法为
m = D(c) = c^d mod n
  1. 签名,将明文m用私钥签名,签名算法为
sign = m^d mod n
  1. 验签,用公钥验证签名,验签算法为
m = sign^e mod n 

然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密

安全性

RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,也并没有从理论上证明破译。
RSA算法的保密强度随其密钥的长度增加而增强。

举例

  1. 为了方便我们准备两个很小对质数,
    p = 3
    q = 11
    n = p * q = 3 * 11 = 33

  2. 求φ(n)
    φ(n) = (p-1)(q-1) = 2 * 10 = 20
    为方便书写,令L = φ(n)

  3. 求e
    1 < e < L 1 < e < 20
    gcd (e, L) = 1, e 与 L 互质,选 e = 7
    公钥 = (e, n) = (7, 33)

  4. 求d
    求d 也必须满足2个条件:1 < d < L,e*d mod L = 1
    1 < d < 20
    (7 * 3)mod 20 = 21 mod 20 = 1
    d = 3 满足条件
    私钥 = (d, n) = (3, 33)

  5. 加密
    明文m 小于n,假设m = 8
    c = E(m) = m^e mod n = 8^7 mod 33 = 2097125 mod 33 = 2

  6. 解密
    m = D© = c^d mod n = 2^3 mod 33 = 8 mod 33 = 8

  7. 签名
    sign = md mod n
    sign = 8^3 mod 33 = 512 mod 33 = 17

  8. 验签
    m’ = signe mod n
    m’ = 17^7 mod 33 = 410338673 mod 33 = 8
    m’ = 8 = m, 验签成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值