精华内容
下载资源
问答
  • rsa算法

    2017-12-03 13:58:01
    rsa算法
  • RSA算法

    2019-02-20 15:54:01
    打算讲博客分为以下部分,来系统的讲解以下RSA算法的知识,《RSA算法背景》、《RSA算法原理》、《RSA算法秘钥生成》、《RSA算法加密和解密》、《RSA算法签名和验签》、《RSA算法优化和漏洞》、《RSA算法漏洞和加固》...

    受限于个人精力有限,一直没有时间总结RSA相关的知识,最近相对不那么忙了,打算花上一些时间写一下RSA算法相关的博客。

    打算讲博客分为以下部分,来系统的讲解以下RSA算法的知识,《RSA算法背景》、《RSA算法原理》、《RSA算法秘钥生成》、《RSA算法加密和解密》、《RSA算法签名和验签》、《RSA算法优化和漏洞》、《RSA算法漏洞和加固》。

    展开全文
  • RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示RSA算法演示
  • RSA算法RSA算法RSA算法RSA算法RSA算法RSA算法RSA算法RSA算法RSA算法
  • RSA 算法

    2016-10-26 17:38:10
    RSA 算法介绍 RSA 算法的安全性是建立在乘法不可逆或者大数因子很难分解的基础上。 RSA 的推导和实现涉及到了’欧拉函数’和’费马定理’及’模反元素’的概念,有兴趣可以自行百度。 RSA 算法是’统治世界’的最...

    RSA 算法介绍

    • RSA 算法的安全性是建立在乘法不可逆或者大数因子很难分解的基础上。
    • RSA 的推导和实现涉及到了’欧拉函数’和’费马定理’及’模反元素’的概念,有兴趣可以自行百度。
    • RSA 算法是’统治世界’的最重要算法之一,而且从目前来看,RSA 也是 ‘HTTPS 体系中最重要的算法’,没有之一。

    数学知识

    1. 互质关系
      • 如果两个正整数,除了1之外,没有其它公因子,我们就称这两个数是’互质关系’。
      • 比如: 11 和 30 没有除1之外的公因子,所以它们就是互质关系。这也说明,不是质数也可以构成互质关系。
      • 如果一个正整数,它的因子除了1就是它本身,这个正整数就是’质数’。
    2. 欧拉函数:
      • 任意给定一个正整数 n,请问在小于等于 n 的正整数之中,有多少个数与 n 构成’互质’关系?
      • 计算这个值的方法就叫’欧拉函数’,以 φ(n) 表示。
      • 例如: φ(8) ,在1到8之中,与8构成互质关系的是1、3、5、7,所以 φ(8) = 4.

    RSA 的密钥生成步骤如下:

    • 随机挑选两个不相等的质数 p 和 q,假设 p = 13, q = 19。
      (实际应用中,这两个质数越大,就越难破解)
    • 计算 p 和 q 的乘积 n
      • n = p * q = 13 * 19 = 247;
      • n 的长度就是密钥长度。 247对应的二进制是 11110111,一共8位,所以这个密钥就是8位。
      • 实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
    • 计算 n 的欧拉函数 φ(n)。
      • φ(n) 表示与整数 n 互质数的个数。如果 n 等于两个质数的积,则φ(n) = (p-1)(q-1) 。
      • φ(247) = (13-1)(19-1) = 216。
    • 随机选择一个整数数 e,满足 1< e <φ(n) ,并且 e 与φ(n)互质,假设 e = 17。
      (实际应用中,常常选择65537)
    • 计算 e 对于 φ(n) 的模反元素d
      • 所谓『模反元素』就是指有一个整数d,可以使得 ed 被 φ(n)除的余数为1。
      • ed = 1 (mod φ(n)) 等价于 ed - 1 = kφ(n)
      • 于是,找到模反元素d,实质上就是对下面这个二元一次方程求解:
        ex + φ(n)y = 1
        已知 e = 17, φ(n) = 216,则 17x + 216y = 1
        这个方程可以用『扩展欧几里得算法』求解,此处省略具体过程。总之,可以算出一组整数解为(x, y) = (89, -7),即 d = 89。
        至此,所有计算完成。
    • 将 n 和 e 封装成公钥,n 和 d 封装成私钥。
      本例中: n = 247, e = 17, d = 89,所以公钥就是(247, 17), 私钥就是(247, 89)。
      实际应用中,公钥和私钥数据都采用 ASN.1(Abstract Syntax Notation One 抽象语法标记) 格式表达。

    RSA算法的可靠性

    回顾上面的密钥生成步骤,一共出现了6个数字:
    p、q、n、φ(n)、e、d
    - 这6个数字之中,公钥用到了两个(n和e),其余四个数字都是不公开的。
    - 最关键的是d,因为 n 和 d 组成了私钥,一旦d泄露,就等于私钥泄露。

    有无可能在已知 n 和 e 的情况下,推导出 d?

    • ed ≡ 1 (mod φ(n))。只有知道e和φ(n),才能算出d。
    • φ(n) = (p-1)(q-1)。只有知道p和q,才能算出φ(n)。
    • n = pq。只有将n因数分解,才能算出p和q。
      结论: 如果 n 可以被因数分解,d就是算出,也就意味着私钥被破解。
    • 但是当 n 大到一定程度时(比如接近 2^2048),即使现在最快的 CPU 也无法进行这个因式分解,即无法知道 n 是由哪个数 p 和 q 乘出来的。
      大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。
    • 所以就算知道了公钥,整个加解密过程还是非常安全的。

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

    举例: 你没法对下面这个整数进行因数分解

    12301866845301177551304949
      58384962720772853569595334
      79219732245215172640050726
      36575187452021997864693899
      56474942774063845925192557
      32630345373154826850791702
      61221429134616704292143116
      02221240479274737794080665
      351419597459856902143413
    等于
    33478071698956898786044169
      84821269081770479498371376
      85689124313889828837938780
      02287614711652531743087737
      814467999489
        ×
      36746043666799590428244633
      79962795263227915816434308
      76426760322838157396665112
      79233373417143396810270092
      798736308917
    事实上,这大概是人类已经分解的最大整数(232个十进制位,768个二进制位)。
    比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。

    原文鏈接:http://www.jianshu.com/p/67bcb140d804
    著作權歸作者所有,轉載請聯繫作者獲得授權,並標註“簡書作者”。

    展开全文
  • RSA算法工具 RSA算法

    2009-05-28 01:52:29
    RSA算法工具RSA算法工具RSA算法工具RSA算法工具 RSA算法工具
  • rsa 算法

    千次阅读 2010-12-24 18:00:00
    全文均从网络上总结而来,链接见每个点后。 1、基础 RSA算法非常简单,概述如下:

    全文均从网络上总结而来,链接见每个点后。

    1、基础
         RSA算法非常简单,概述如下:
          找两素数p和q
          取 n=p*q
          取 m=(p-1)*(q-1)
          取任何一个数 e,要求满足 e<m 并且 e 与 m 互质(就是最大公因数为1)
          取 d 使 d*e%m == 1

        这样最终得到三个数: n  e  d

        设消息为数M (M <n),设 c=(M**e)%n 就得到了加密后的消息c;设  m=(c**d)%n 则 m == M,从而完成对c的解密。
        注:**表示次方,上面两式中的d和e可以互换。

        在对称加密中:
        n e 两个数构成公钥,可以告诉别人; n d 两个数构成私钥,d 自己保留,不让任何人知道。
        给别人发送的信息使用d加密,只要别人能用e解开就证明信息是由你发送的,构成了签名机制。
        别人给你发送信息时使用e加密,这样只有拥有d的你能够对其解密。

        rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解。从而在已知n e情况下无法获得d;同样在已知n d情况下无法求得e。

        参考:http://www.xfocus.net/articles/200503/778.html
        参考:http://zh.wikipedia.org/zh/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

    2、重要点
        1. 非对称加密算法中1024 bit密钥的强度相当于对称加密算法80bit密钥的强度。有资料上说以当前的软硬件水平,破解1024bit的RSA加密密文,需要一套10亿美金的系统使用若干十年的时间,所以2015年前,1024bit的还无需太担心暴力破解的危险。
        2. 密钥长度增长一倍,公钥操作所需时间增加约4倍,私钥操作所需时间增加约8倍,公私钥生成时间约增长16倍。
        3. 一次能加密的密文长度与密钥长度成正比, len_in_byte(raw_data) = len_in_bit(key)/8 -11,如1024bit的密钥,一次能加密的内容长度为 1024/8 -11 = 117 byte。所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。
        4. 加密后密文的长度为密钥的长度,如密钥长度为1024b(128Byte),最后生成的密文固定为 1024b(128Byte)。
            5.With every doubling of the RSA key length, decryption is 6-7 times slower.
            6.密钥长度指的是 n 的长度。

         
    考:http://dustin.javaeye.com/blog/763931
        参考:http://www.javamex.com/tutorials/cryptography/rsa_key_length.shtml

    3、长度总结
        加密时,一次加密,输入的长度限制: len_in_byte(raw_data) = len_in_byte(key)-11;输出的长度固定为:len_in_byte(key)
        签名时,在openssl中,是先把待签名的 str 转换成 DER 编码,再对此编码后的进行 RSA_private_encrypt。由此,一次签名,输入的长度限制: der_in_byte(raw_data_derEncoded) = len_in_byte(key)-11;输出的长度固定为 key(即n) 的长度。

        参考:《openssl编程.pdf》(p181 24.4 X509_SIG)
        参考:http://topic.csdn.net/u/20090604/20/940b8794-836f-4f9e-95b3-665fddcb13cb.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,362
精华内容 6,144
关键字:

rsa算法