RSA算法原理及证书生成

2021-01-03  本文已影响0人  崔希羽

RSA的起源


RSA算法原理 -- 摘抄自网站

    1.任意两个质数构成互质关系
    2.一个数是质数,另一个数只要不是前者的倍数,两者互质
    3.若较大的数为质数,则两者互质
    4.任意自然数与1都互质
    5.若p大于1,则p与p-1构成互质
    6.若p为大于1的奇数,则p与p-2互质
    1.如果n=1,则φ(1)=1。因为1与任何数都构成互质关系。
    2.如果n是质数,则φ(n)=n-1。因为质数与小于它的每一个数都构成互质关系。
    3.如果n是质数p的k次方,k为正整数,则φ(n) = p^k - p^(k-1) = p^k(1 - 1/p)
    4.如果n为两个互质的整数p1、p2之积,那么φ(n) =φ(p1) * φ(p2)
    5.因为任意一个大于1的正整数都可以写成一系列质数p1,p2,p3...pn之积
      φ(n) = φ(p1^k1 * p2^k2 *...pn^kn) 
           = φ(p1^k1) * φ(p2^k2) * ... * φ(pn^kn)
           = p1^k1(1 - 1/p1) * p2^k2(1-1/p2)...* pn^kn(1-1/pn)
           = n * (1-1/p1)(1-1/p2)...(1-1/pn)

      φ(72) = φ(8*9) = φ(2^3 * 3^2) = 72*(1-1/2)(1-1/3) = 24
            = φ(8) * φ(9) = 4 * 6 = 24 
欧拉函数通用计算公式

了解上面的数论知识之后,再来理解RSA算法就比较容易了,假如AB要进行加密通信,那么如何生成公钥和私钥?


RSA算法的可靠性

由于ne是公开的,d为推导出来的,如果d被算出来,那么就意味着私钥被破解,我们可以看一下d的推导过程:

总结:如果n可以被因数分解,私钥才能被破解

维基百科对于RSA有这样一段描述:

对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用 RSA 加密的信息的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的 RSA 钥匙才可能被强力方式破解。到目前为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被破解的。

目前已公布分解出的最大整数是232个十进制位,768个二进制位,因此1024位很安全,2048位非常安全。


Mac系统内置OpenSSL(开源加密库),所以我们可以使用终端尝试使用RSA


OC代码中使用RSA不能直接使用pem格式文件,需要将私钥转成p12文件,公钥转成der格式

OSStatus SecKeyEncrypt(
                       SecKeyRef           key,
                       SecPadding          padding,
                       const uint8_t        *plainText,
                       size_t              plainTextLen,
                       uint8_t             *cipherText,
                       size_t              *cipherTextLen)

使用方法github有很多封装示例,这里就不再列举。

上一篇 下一篇

猜你喜欢

热点阅读