首页
社区
课程
招聘
[求助]关于FLEXLM中的RNG
发表于: 2009-9-18 22:05 15611

[求助]关于FLEXLM中的RNG

2009-9-18 22:05
15611
据gcxiong兄弟所说,FLEXLM中实现的签名算法实现中有漏洞,可以恢复出私钥,进而实现ECC的完全破解。这两天仔细研究了下,和大伙讨论一下:
1、l_prikey_sign函数的核心如下:
  sb_initialize();
   sb_fipsRngOptionalInput(SHA(MSG));
   sb_ecdsaSignBegin();
   sb_ecdsaSignEnd();
2、在上述算法中,sb_initialize根据私钥d,产生随机数A。这个过程已经搞清楚了;
   sb_fipsRngOptionalInput利用SHA(MSG)的值来更新随机数发生器,过程也搞清楚了;
   sb_ecdsaSignEnd将产生随机数B;
3、签名所用的k=(A+B) mod n(n是曲线的阶),签名的结果s=k^-1*(e+dr) mod n
4、如果有两个不同的签名,则可以计算出私钥d:
   k1*s1=e1+d*r1  
    k2*s2=e2+d*r2
    d=(k1*s1-k2*s2-e1+e2)/(r1-r2) mod n
   进一步:
  d=(A*s1+B1*s1-A*s2-B2*s2-e1+e2)/(r1-r2) mod n
   上面的s1、s2、e1、e2、r1、r2均可以利用正版license文件计算得出,所不知道的就是A、B1、B2的值。

现在的问题是,如何得到A、B1、B2的值?如果A和B之间存在一定的关系(必然的),特别是B,如果能够搞清楚B的产生原理,应该可以破解掉FLEXLM中的ECC。
我现在发现一些规律:
1、B与私钥d和MSG都有关系;
2、B的形成好像还参与到曲线上的运算;
由于certicom的库没有源代码,所以只能摸索的前进,尤其是曲线参与了运算,更麻烦。
有没有高手指点一二,多谢了!


最后,FlexLM的随机数使用方法很有问题,应该可以解算出私钥的...

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
建议分析java版的flexlm,想看啥源码都有。
2009-9-19 22:03
0
雪    币: 225
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谷哥了,找不到,哪里有java版的flexlm?谢谢
2009-10-10 21:03
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼主的研究有没有新进展?
2009-10-16 12:32
0
雪    币: 134
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主的帖子让秒破高手尝到菜鸟的味道了,哈哈。
我也知道私钥能恢复了。。。有人已经弄出来了。2天就能跑出结果。
2009-10-16 21:50
0
雪    币: 161
活跃值: (1499)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
能不能分享或指点?
2009-10-17 01:45
0
雪    币: 64
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
如果是这样的话,那意味着还不能快速的算出来,还是依靠部分穷举,只是穷举的强度减弱到可以接受的程度。我去看看下,是否有穷举可能的地方,哈哈
2009-10-21 16:37
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
最近一直在跟flexlm里的ECC算法,里面的随机数产生可真是复杂啊!

还有没有人也在研究这个啊?大家交流下啊~~~~
2009-11-13 13:23
0
雪    币: 51
活跃值: (2051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
随机数生成不算复杂吧
2009-11-13 18:11
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我说的是最后参与运算的那个k,而不是sb_fipsRngOptionalInput()函数,sb_fipsRngOptionalInput()函数并不复杂,经过rng处理的随机数还有N多变化啊。

2009-11-14 22:41
0
雪    币: 51
活跃值: (2051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
sb_fipsRngOptionalInput根本就没什么东西,说白了就是一个大数加法而已
它只是随机数生成过程中的一小部分
2009-11-15 10:08
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
说的没错,这个160位的随机数后面会转换为240位的,后面的转换过程应该才是关键吧?

2009-11-15 18:56
0
雪    币: 51
活跃值: (2051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
随机数的位数是由加密的位数决定的,你说的160位是一次SHA-1产生的结果
另外,没有所谓的依据160位转成240位的过程
2009-11-15 20:37
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
以239类椭圆曲线为例,由密钥生成160位的随机数,然后用rng函数更新,最后经过变化后取两次变化后的数值组合成240位,然后经过变化得到最后的240位随机数k。

难道不是这个过程?
2009-11-17 14:43
0
雪    币: 51
活跃值: (2051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
160比特只能说是SHA-1的种子数而已
2009-11-17 16:08
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
虽然那个是个固定的随机数k=k(d,msg),但是如果以形如
SHA1(f(d, msg))+f(d, msg)的形式给出的话
那么那条方程对于每个正版license则得到一个可以看作是有三个未知数的线性方程
并且每增加一条方程增加1个未知数,不是还是解不出来吗?

ps:随机数和曲线无关
2009-12-3 22:54
0
雪    币: 51
活跃值: (2051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
1.随机数生成过程和曲线相关
2.随机数生成过程确实存在漏洞
2009-12-4 09:14
0
雪    币: 324
活跃值: (172)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
1,随机数好像是与曲线相关的。随机数的最后一个变化还没时间跟完,但应该与曲线运算相关。
2,大家都希望有漏洞,并且是能够利用起来的漏洞!
2009-12-4 09:48
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好吧,我想知道一下大家说的漏洞,可以将穷举范围缩小到多少?
我认为不能砍到2^50左右基本是没戏的,微软的算号器好像就是2^55穷举出来的
做一次SHA1出来结果就是160比特,嗯
2010-1-8 13:42
0
雪    币: 225
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20


2009-09-18, 22:05:06  【求助】关于FLEXLM中的RNG

又是一年过去!甚是可惜!甚是可惜!

2010-11-14 15:39
0
游客
登录 | 注册 方可回帖
返回
//