欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

FLEXLM ECC问答(4)

FLEXLM ECC问答(4)


13. FlexLM ECDSA的公私钥对是怎么生成的?

FlexLM 生成公私钥对的方法是有固定标准的,它是一种IEEE-1363的弱化方法。
seed只有96 bits(3个32bit的digit)。
尽管如此,穷举96 bit在实际操作上不可行的,v9 - v11的版本是足够安全的。
我曾经编译了lmrand1的完整版本,用于分析flexlm ECDSA密钥的生成。
下面对它的分析,主要基于v9.x - v11.x 的SDK。核心代码在l_prikey.c。
(1) gen seed
(2) gen keys
(1)首先分析genseed:
lmrand1调用l_genseed产生三个强随机数,然后由它初始化rng,产生私钥。
对于Flexlm ECC来说,113, 163, 239只是椭圆曲线类型不一样,其他的算法完全一样。没有区别。
LM_SEED1,LM_SEED2,LM_SEED3除了出现在license gen中,不出现在任何地方。
从程序中无法恢复出LM_SEED1,LM_SEED2,LM_SEED3。

flexlm v8.0的版本,l_genseed()的随机性不够好,有bug,能够被恢复seed。
flexlm v9的版本已经修复。
它添加了一段hardware dependent的代码,给rng初始化的sha buffer添了大量数据。
意味着在不同的机器上,lmrand1产生的结果是不同的。
l_genseed() 函数增加了补丁, 代码如下。
注: 感谢 lightgun 提醒 (2012-10-07, 23:55:26)
找了一些资料,对比了v8.0c, v8.3b和v9.2的版本。
在 v8.0c时有此bug。 v8.3b时补丁已经打上了。查了histroy,是v8.1 (2002年)打的补丁。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功