免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: keymirage
打印 上一主题 下一主题

[其他] rsa:大整数相乘的问题 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2016-03-07 15:08 |只看该作者
回复 8# keymirage
我的意思是,
你要算的是p^e%n
p^e根本没必要计算,更不用关心如何存储p^e
c=p^e%n
可以这样算
假设
k=p%n
e最高1024位
那么以下伪码
c=1;
k=p%n;
for n=0:1023
if(e & (1<<n))
     c=(c*k)%n;
end
k = (K*k)%n;
end
那么,你所需要的空间(不考虑过程中可能需要的很小的存储)也就是
k 1024bits
c 1024 bits
e 1024 bits
k  1024 bits
c*k
k*k  共用2048bits

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
12 [报告]
发表于 2016-03-07 16:14 |只看该作者
本帖最后由 yulihua49 于 2016-03-07 16:19 编辑
keymirage 发表于 2016-03-05 16:51
rsa 加密的公式 :
c = p^e % n (p的e次方 对 n 取模)
其中 c, p, e, n 都为 1024位(128字节)。

有限域,懂不懂?p^e%N是不可分割的整体。
给你个程序看看吧:expmod.c

  1. #include "bignum.h"
  2. /* ret = a ** z % n */
  3. u_int *_e_m_(int n,u_int *a,u_int *z,u_int *m,u_int *ret)
  4. {
  5. u_int a1[MAXNUMBER+1];
  6. u_int z1[MAXNUMBER+1];
  7. u_int x[MAXNUMBER+1];
  8.         numcpy(n,a1,a);
  9.         numcpy(n,z1,z);
  10.         n_one(n,x);
  11.         while(!n_iszero(n,z1)) {
  12.                 while(!(z1[0]&1)) {
  13.                         rshift(n,z1,1);
  14.                         /* a1 = (a1 *a1) % m; */
  15.                         _m_m_(n,a1,a1,m,a1);
  16.                 }
  17.                 decm(n,z1);
  18.                 /* x = (x*a1) % m; */
  19.                 _m_m_(n,x,a1,m,x);
  20.         }
  21.         numcpy(n,ret,x);
  22.         return ret;
  23. }
复制代码
mulmod.c:每次乘积立即求模,就不会无限大了,有限域算法

  1. #include "bignum.h"
  2. u_int *_m_m_(int n,u_int *a,u_int *b,u_int *m,u_int *ret)
  3. {
  4. u_int tmp[MAXNUMBER*2+1];
  5.         mulm(n,a,b,tmp);
  6.         divm(n,tmp,m,(u_int *)0,ret);
  7.         return ret;
  8. }
复制代码

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-03-10 06:20:00每日论坛发贴之星
日期:2016-03-10 06:20:00程序设计版块每日发帖之星
日期:2016-03-12 06:20:00
13 [报告]
发表于 2016-03-10 19:42 |只看该作者
本帖最后由 zuoyuanturing 于 2016-03-10 19:42 编辑

RSA算法的破解
一.什么是RSA算法
    RSA公钥加密算法是1977年由罗纳德•李维斯特(Ron Rivest)、阿迪•萨莫尔(Adi Shamir)和伦纳德•阿德曼(Leonard Adleman)一起提出的。
    RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
   正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。

二.我们的破解思路
    以往的破解思路都在关注大数分解,理论证明这是极难的。在分解大数没有结果的情况下我们就得换思路进行破解。
    我们先看MD5的破解,MD5HASH值不可逆,但仍然可以破解,基于的是彩虹表破解法,就是先用MD5工具算大量的明文的MD5值,然后储存起来。破解时对比MD5值,相同时就被破解。
    那么,我们破解RSA算法也可以这样,先算大量素数,然后对比是不是在素数表中,这样就能找到了。当然计算需要强大的计算能力,用天河这样的超级计算机比较合适。
    那么有朋友可能要问了,最一般的RSA1024的素数也有2^512大小,穷举的时间也是天河计算机不可接受的。我们的理论来了:
    受到素数产生技术的限制,能产生的素数较少。
    也就是说我们用一般的素数生成工具不断产生素数,用超算算一定时间后就有一个很大的素数集合了。那些素数生成工具不会产生的素数,我们同样也不用计算。这样我们就可以用彩虹表进行破解了

                                        湖南长沙 左远
                                                   2016/3/10

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-13 06:20:00程序设计版块每日发帖之星
日期:2016-06-22 06:20:00程序设计版块每日发帖之星
日期:2016-06-28 06:20:00
14 [报告]
发表于 2016-03-17 11:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
15-16赛季CBA联赛之同曦
日期:2016-04-02 22:00:3915-16赛季CBA联赛之江苏
日期:2016-04-07 12:09:0015-16赛季CBA联赛之天津
日期:2016-05-04 01:20:19
15 [报告]
发表于 2016-03-18 01:30 |只看该作者
好像有人在捣鼓这个,超大数运算,追求千万级整数的阶乘什么的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP