美文网首页
RSA算法原理

RSA算法原理

作者: Children乏 | 来源:发表于2022-04-23 15:27 被阅读0次

    基础知识点

    分解质因数难题

    取两个很大的素数P1、P2
    假设都是长度都在150位左右
    求积N = P1 * P2
    N长度300多位
    若只知道N,倒推计算P1、P2是非常复杂的

    同余

    符号:≡
    两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余或a同余于b模m。

    记作:a≡b (mod m)
    例如 26≡2(mod 12)

    a与b对m取模的结果一样,相减后自然能整除m

    欧拉函数(Phi函数)φ(N)

    定义: 1~ N 中与 N 互质的数的个数叫欧拉函数

    对于任何质数P
    φ(P) = P - 1

    因为质数跟比它小的数都没有公约数

    如果a,b互质,有φ(a*b)= φ(a) * φ(b)
    例:φ(7 * 11) = φ(7) * φ(11) = 6 * 10 = 60

    对应【分解质因数难题】
    φ(N) = φ(P1) * φ(P2)

    欧拉定理

    对任意两个正整数 a, n,如果两者互质,那么 a^φ(n)≡1(mod n)。

    时钟算术

    例:
    明文m = 3
    取模(Modulus)N = 17
    指数(Exponent) E,公开的
    计算余数(Remainder) c = m ^ E mod N

    指数Exponent 余数Remainder(m ^ E mod N)
    1 3
    2 9
    3 10
    4 13
    5 5
    6 15
    7 11
    8 16
    ... ...

    结论:
    若只知道一组E、c、N,则很难反推出m

    解密过程:
    c ^ d mod N = m

    已知:m ^ E mod N = c

    得 (m ^ E) ^ d mod N = m
    即 m ^ (E * d) mod N = m

    E为加密,公开的,公钥
    d为解密,私钥

    因此需要一个方法构建一对密钥E和d
    E会公开,而d要很难被计算出来

    实践

    生成一对密钥

    生成两个同位数的素数
    P1 = 53
    P2 = 59
    N = P1 * P2 = 3127
    φ(N) = (P1 - 1) * (P2 - 1) = 52 * 58 = 3016

    选公钥e(条件如下)

    • 必须是质数
    • 1 < 公钥 < φ(N)
    • 和φ(N)没有公约数

    在此选择了e = 3
    计算私钥d(条件如下)

    • (d * e) % φ(N) = 1
      即 d = (k * φ(N) + 1) / e

    原因:
    根据【欧拉定理】
    n是非常大的两个素数相乘
    自然满足
    m ^ φ(n) ≡ 1 (mod n)
    变换(两边都自乘k次)
    m ^ (k * φ(n)) ≡ (1^k) (mod n)

    m ^ (k * φ(n)) ≡ 1 (mod n)
    再变换(两边同乘以m)
    m ^ (k * φ(n)) * m ≡ (1 * m) (mod n)

    m ^ (k * φ(n) + 1) ≡ m (mod n)

    可得 e * d = k * φ(n) + 1

    经计算k=2时有解
    d = (2 * φ(N) + 1) / e = (2 * 3016 + 1) / 3 = 2011

    公钥(e,N)分发
    私钥(d,N)自己保留

    加密

    明文m = hi 填充法转化为
    m = 89
    计算密文c = m ^ e mod N
    = 89 ^ 3 mod 3016
    = 1394

    解密

    c ^ d mod N
    = 1394 ^ 2011 mod 3127
    = 89
    = m(明文)

    注:私钥加密的密文,用公钥也能解密

    相关文章

      网友评论

          本文标题:RSA算法原理

          本文链接:https://www.haomeiwen.com/subject/jzdaertx.html