首页
社区
课程
招聘
[原创]RDLP - RSA,Rabin Keygenerator and DLP Tool v1.07 , 2007.12
发表于: 2007-8-3 17:13 14145

[原创]RDLP - RSA,Rabin Keygenerator and DLP Tool v1.07 , 2007.12

2007-8-3 17:13
14145

RDLP - RSA,Rabin Keygenerator and DLP Tool
readyu [at] gmail [dot] com

v1.07, dec. 2007
+ add benchmark
+ add quadratic residue
+ add a new rng salt type,hex bytes/all printable chars
+ add a pause button

v1.04-v1.06 beta, not public
* fix some bugs
+ add factor: Brute,P+1,P-1,Rho,ECM,QS(not yet)
+ add rc4 rng

v1.03 beta
* fix some minor bugs
* fix Rabin-Test bug
* improve rng
+ DLP base check

v1.01 beta
+ fisrt public version

v1.01 Public测试版
说明:
DLP功能内测中。暂未添加。
其他已经完备。

1. 全局设置

Prime Size (16 -2048)
指的素数的大小bits,对RSA来说,N的大小是它的2倍。
RSA-512  用2个256 bits的素数;
RSA-4096 用2个2048 bits的素数;
一般不会采用更大的bits了。运算耗时,目前没有必要。

BASE
BASE 10, BASE 16 不用介绍。
其他三个:
- Used Base36 conversion table:
  0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
- Used Base60 conversion table:
  0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx
- Used Base64 conversion table:
  ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

RNG 的一些设置:
RNG主体采用安全HASH函数, SHA-512, 512 bits。hash经过rc4加密。
开始收集了30多KB的buf作为hash,rng收集参考了windows的部分源代码。
RNG salt由专门的线程刷新。可以加入自定义的键盘键入扰乱。

CPU 主频:
采用cpu time stamp counter 与 Windows的PerformanceFrequency(3.579545MHZ)对比。
计算出CPU主频,约每2s刷新一次。
由于Windows的高精度时间是MHZ的,CPU主频是GHz的,因此,精确度可做到KHZ。
也就是误差小于10KHZ。在Intel Celeron 1.7G 和 AMD64 3000+ 1.81G测试过。

2. 功能点介绍
(1)全局
Pause:
当前线程可以随时暂停/继续。当前没有任务运行时,此按钮为灰色。

Stop:
当前线程可以随时中断。当前没有任务运行时,此按钮为灰色。
虽然我做了很大处理,但是Windows的TerminateThread()必然泄露内存,所以慎用Stop。
另外,TerminateThread可能破坏线程堆栈,调试中发现,1024 bit以上的generate,
反复stop强制结束thread,如果正在运行到Miracl的mad函数,会引发溢出。
出现这个错误Exception:0xc0000095 (int_overflow)

(2) RSA-Rabin功能

Factor:
实现了较为简单的Brute,P+1,P-1,Rho,ECM。QS没有实现。
400 bits以内的因子分解推荐用msieve。速度很好。

//////////////////////////////////////////////
msieve, with qs and gnfs factor core:
msieve v1.32:
http://www.boo.net/~jasonp/qs.html

Tested msieve v1.30:
CPU CM530, 1.73G, MEM 1G, DDRII-667
using msieve v1.30,
when 250+bits, time estimated,
every +10 bits, need +2 times,
every +40 bits, need +10 times,
every +120 bits, need +1000 times.

256 bits:
elapsed time 00:09:33

281 bits:
elapsed time 00:35:59

321 bits:
elapsed time 06:18:20
//////////////////////////////////////////////

Generate:
生成key pairs.生成的素数都是Blum数,即 P=3 mod 4

Test:
测试keypairs.包括RSA测试和Rabin测试。

Rev:
Reverse,翻转N。 Little endian <-> Big endian
比如:
12AB67 <-> 67AB12

PQE->D:
由公钥和P,Q,计算私钥。采用扩展欧几里德算法求逆元。

NED->PQ:
由N的任何一对正确的公私钥(E,D),可以计算出P,Q
E,D中有一个小于N^(1/2), 采用phi(N)搜索法;
E,D都很大,则采用解二次同余方程的概率算法。

Wiener Attack:
当密钥(E,D)中有一个大,一个小。
如果大的已知,记为E。小的未知,记为D。
如果 D < N^0.295, 则可以采用Wiener attack求出D。
算法是"连分数分解法"。

Fermat Attack:
N=P*Q, 如果P,Q比较靠近,|P-Q|小于或稍大于N的1/4 (bits size),则Fermat分解法有效。
实例:
winmail 4.2的N,是fermat attack有效的
ADD1D47967E6ED701852554F88EEE22C416B71A26F3961AE922CFD6ECEC39D73
他的p,q很靠近,fermat attack一次就出来了

Next 2 Primes:
计算大于N的2个依次的素数。结果存于P,Q当中。
next 2 prime功能很有意思,你可以找到你喜欢的p,q.
比如,你可以生成含200个连续0的p,q。
不过这样的P,Q用来做RSA加密就不太好了,有所好必有所患。
会被社会工程的。

比如你可以找到如下的素数:
N =
800000000000000000000000000000000000000000000000000000000000
P =
80000000000000000000000000000000000000000000000000000000001D
Q =
800000000000000000000000000000000000000000000000000000000083

(3) DLP功能

Generate:
生成key pairs.生成的素数P是Blum数,即 P=3 mod 4

Test:
测试keypairs.包括ELGAMAL加密、解密测试,和签名、验证测试。

New GX:
P不变,换一组G,X.

GXP-> Y:
输入 G,X,P,计算 Y = G^X mod P.
即离散幂数,POWMOD。

XYP-> G:
由Y = G^X mod P,计算出G.
G是Y的X次根模P,离散指数问题。
X=2,P为素数,可计算二次剩余的根。

XYP-> G:
由Y = G^X mod P,计算出G.
X是G为底Y的对数模P。离散对数问题。

some benchmark results, RDLP 1.07
(1)
OS:  WINXP PRO SP2
CPU: P4 Celeron @1.7G (Willamette, 0.18 um)
MEM: 512MB DDR 266

Init Prime Table
64K:0 Er,82 us
1024K:0 Er,1222 us
Benchmark PowMod
512:460/20 us
1024:2871/60 us
2048:20044/213 us

(2)
OS:  WINXP PRO SP2
CPU: Celeron M 530 @1.73G (Merom, 65 nm)
MEM: 1GB DDR-II 667

Init Prime Table
64K:0 Er,54 us
1024K:0 Er,798 us
Benchmark PowMod
512:228/10 us
1024:1419/28 us
2048:9640/99 us

(3)
... adds


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 47147
活跃值: (20460)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
希望大家多测试和反馈,趁着readyu目前兴趣极佳的状态下,鼓励他打造出一款精品的密码学辅助工具出来。
2007-8-3 17:21
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
3
多谢支持。请大家积极反馈。

Big Integer Calculator v1.05最近也会更新,添一些新功能,内部重新改一下设计。
期望能与RDLP配合互补。
另外以前写的一个base64kit, 将更新为Base64 Any,从2-256,包括hex,ascii。
2007-8-3 17:30
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
4
学习一下
2007-8-3 17:32
0
雪    币: 437
活跃值: (273)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
5
学习 学习 12345
2007-8-3 18:25
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
6
牛主好楼X,只能说学习
2007-8-3 20:59
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
7
楼上的ccfer是我非常佩服的高人。一直想一睹庐山真面目。
2007-8-3 21:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上的几位都是我学习的对象
学习 支持
2007-8-3 22:38
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我等菜鸟只有学习的份!
2007-8-3 23:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
先学习再说。。。
2007-8-4 15:16
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
11
;回家学习``先顶上去!
2007-8-4 16:02
0
雪    币: 738
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼主加油!!!
先收下了
2007-8-4 18:24
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
13
鼓励哈~~~
2007-8-4 19:28
0
雪    币: 538
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
都是学习的对象啊
2007-8-4 22:52
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习一下哦~~~~~
2007-8-5 00:00
0
雪    币: 22
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
简直不可理解,怎么学,唉
2007-8-5 10:02
0
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
还以为RSA被破,原来出来的是工具。也很牛。支持一个!
2007-8-5 16:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习啊,希望楼主打造一个强大的工具。

能不能集合一些小功能啊,比如各种加密网址的转换解密什么的,那样工具就成常用工具 了,否则一般人很少用到这个的。
2007-8-7 22:12
0
雪    币: 236
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习中,谢谢您的精彩分享,辛苦了!
2007-8-10 10:04
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
20
庆祝08元旦,更新版本。
2007-12-28 17:44
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
21
下载新版本试用~~~
2007-12-28 18:54
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
22
每次运行,发出几秒强烈的读盘声-.-
不知道是不是我的电脑问题.
2007-12-28 20:29
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
23
我在台机和笔记本上都没发现强烈读盘现象。
是否你的硬盘太老了,响动太大?

程序不写注册表,也不写临时文件。用taskmgr看rdlp.exe, io读取,io写入次数和字节数都是0.

仅仅是rng初始化的有一段代码,收集磁盘信息,添加到buf,以便做hash。
这2个api很温和的。windows源代码里rc4 做rng也有类似收集buf的做法。

...
        GetVolumeInformation(rootpath,volname,NAME_MAX_LEN,&serno, &length, &filesysflag, filesysname,NAME_MAX_LEN);

        GetDiskFreeSpaceEx(rootpath, &(dt.a), &(dt.total), &(dt.free));

        sha512_adds(&psha, (char *)(&dt), sizeof(dt));
        sha512_adds(&psha, (char *)(&serno), sizeof(serno));
        sha512_adds(&psha, (char *)(&volname), sizeof(volname));
        sha512_adds(&psha, (char *)(&filesysname), sizeof(filesysname));
...
2007-12-28 21:47
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
24
网络出问题了,一不小心回了3篇。
2007-12-28 21:58
0
雪    币: 11705
活跃值: (975)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
25
网络出问题了,一不小心回了3篇。
2007-12-28 21:58
0
游客
登录 | 注册 方可回帖
返回
//