RSA--维基百科

公钥和私钥的产生

假设Alice 想要通过一个不可靠的媒体接收Bob 的一条私人讯息。她可以用以下的方式来产生一个公钥 和一个私钥

  1. 随意选择两个大的质数p q p 不等于q ,计算N =pq
  2. 根据欧拉函数,不大于N 且与N 互质的整数个数为(p -1)(q -1)
  3. 选择一个整数e (p -1)(q -1) 互质,并且e 小于(p -1)(q -1)
  4. 用以下这个公式计算d d× e ≡ 1 (mod (p -1)(q -1))
  5. p q 的记录销毁。

e 是公钥,d 是私钥。d 是秘密的,而N 是公众都知道的。Alice 将她的公钥传给Bob ,而将她的私钥藏起来。

加密消息

假设Bob 想给Alice 送一个消息m ,他知道Alice 产生的N e 。他使用起先与Alice 约好的格式将m 转换为一个小于N 的整数n ,比如他可以将每一个字转换为这个字的Unicode 码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n 。用下面这个公式他可以将n 加密为c

ne c(mod N)

计算c 并不复杂。Bob 算出c 后就可以将它传递给Alice

解密消息

Alice 得到Bob 的消息c 后就可以利用她的密钥d 来解码。她可以用以下这个公式来将c 转换为n

cd ≡n (mod N)

得到n 后,她可以将原来的信息m 重新复原。

解码的原理是

cd ≡ne-d (mod N)

以及ed ≡ 1 (mod p -1)ed ≡ 1 (mod q -1) 。费马小定理证明

ne-d ≡ n(mod p)     ne-d ≡ n(mod q)

这说明(因为p q 不同 的质数)

ne-d ≡ n(mod pq)

签名消息

RSA 也可以用来为一个消息署名。假如甲想给乙传递一个署名的消息的话,那么她可以为她的消息计算一个散列值, 然后用她的密钥加密这个散列值并将这个 署名 加在消息的后面。这个消息只有用她的公钥才能被解密。乙获得这个消息后可以用甲的公钥解密这个散列值,然后 将这个数据与他自己为这个消息计算的散列值相比较。假如两者相符的话,那么他就可以知道发信人持有甲的密钥,以及这个消息在传播路径上没有被篡改过。

安全

假设偷听者乙获得了甲的公钥N e 以及丙的加密消息c ,但她无法直接获得甲的密钥d 。要获得d ,最简单的方法是将N 分解为p q ,这样她可以计算(p -1)(q -1) 并从而由e 推算出d 。至今为止还没有人找到一个多项式时间的计算方法来分解一个大的整数的因子,但至今为止也还没有人能够证明这种算法不存在(见因式分解)。

至今为止也没有人能够证明对N 进行分解因式是唯一的从c 导出n 的方法,但今天还没有找到比它更简单的方法。(至少没有公开的方法。)

因此今天一般认为只要N 足够大,那么黑客就没有办法了。

假如N 的长度小于或等于256 位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999 年,数百台电脑合作分解了一个512 位长的N 。今天对N 的要求是它至少要1024 位长。

1994 年彼得· 秀尔(Peter Shor )证明一台量子计算机可以在多项式时间内进行因式分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA 和相关的衍生算法。

假如有人能够找到一种有效的分解因式的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA 在这种情况下是不可靠的。

实现细节

密钥生成

首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。

除此之外这样找到的p q 还要满足一定的要求,首先它们不能太靠近,此外p -1q -1 的因子不能太小,否则的话N 也可以被很快地分解。

此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机 不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p q 一半的位的话,那么他们就已经可以轻而易举地推算出另一半。

此外密钥d 必须足够大,1990 年有人证明假如p 大于q 而小于2q (这是一个很经常的情况)而d < N 1/4 /3 ,那么从N and e 可以很有效地推算出d 。此外e = 2 永远不应该被使用。

速度

比起DES 和其它对称算法来RSA 要慢得多。实际上Bob 一般使用一种对称算法来加密他的信息,然后用RSA 来加密他的比较短的对称密码,然后将用RSA 加密的对称密码和用对称算法加密的消息送给Alice

这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA 来直接攻击对称密码。

密钥分配

和其它加密过程一样,对RSA 来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设娥妹交给巴哥一个公钥,并使巴 哥相信这是阿黄的公钥,并且她可以截下阿黄和巴哥之间的信息传递,那么她可以将她自己的公钥传给巴哥,巴哥以为这是阿黄的公钥。可以将所有巴哥传递给阿黄 的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用阿黄的公钥加密后传给阿黄。理论上阿黄和巴哥都不会发现娥妹在偷听他们的消 息。今天人们一般用数字认证来防止这样的攻击。

时间攻击

1995 年有人提出了一种非常意想不到的攻击方式:假如娥妹对阿黄的硬件有充分的了解,而且知道它对一些特定的消息加密时所需要的时间的话,那么她可以很快地推导出d 。这种攻击方式之所以会成立,主要是因为在进行加密时所进行的模指数运算是一个位元一个位元进行的,而位元为1 所花的运算比位元为0 的运算要多很多,因此若能得到多组讯息与其加密时间,就会有机会可以反推出私钥的内容。

典型密钥长度

1997 年后开发的系统,用户应使用1024 位密钥,证书认证机构应用2048 位或以上。

已公开的或已知的攻击方法

针对RSA 最流行的攻击一般是基于大数因数分解。1999 年,RSA-155512 bits )被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G 中央内存的Cray C916 计算机上完成 。

2002 年,RSA-158 也被成功因数分解。

RSA-158 表示如下:

  39505874583265144526419767800614481996020776460304936454139376051579355626529450683609

  727842468219535093544305870490251995655335710209799226484977949442955603

  = 3388495837466721394368393204672181522815830368604993048084925840555281177 ×

  11658823406671259903148376558383270818131012258146392600439520994131344334162924536139

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值