欢迎来到 嗅灵易学

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

FLEXLM ECC问答 (7)

FLEXLM ECC问答 (7)

17. FlexLM怎样对FEATURE/INCREMENT进行ECDSA签名?
FEATURE/INCREMENT 行的基本格式为:
{FEATURE|INCREMENT} feature vendor feat_version exp_date num_lic SIGN=sign [optional_attributes]
(1)必选属性
FEATURE/INCREMENT 行关有6个必选字段,并且它们具有固定的顺序。这些字段是由供应商定义的,不能对其进行更改。
(2)可选属性
可选属性由供应商自行提供的,以便提供特定的许可行为。这些属性采用keyword=value 语法,其中,keyword 为大写形式。
所以在 FEATURE 或 INCREMENT 行中,它们必须保留在该位置,最终用户不能对其进行更改。
常见的有:
ISSUED=dd-mmm-yyyy 签发日期。
ISSUER="..." 许可证签发者。
NOTICE="..." 用于知识产权通告的字段。
PLATFORMS="..." 使用情况受所列出平台限制。
START=dd-mmm-yyyy 开始日期。
VENDOR_STRING="..." 供应商定义的字符串,用双引号引起来。
签名过程中,这些属性会按照固定的顺序处理。因此保证了用户不能更改FEATURE中的属性或者Sign。
在SDK中,l_crypt_private()这个函数用来处理feature的属性。它调用real_crypt()实现。
real_crypt()其实并不是一个crypt, 它是一个字符处理函数,FEATURE 或 INCREMENT 经过它的处理,然后才会进行ECDSA签名。
接下来就是ECDSA签名, 签名的算法和RNG,前面的文章已有说明,因此不再重复。
这里给出一个例子, 采用是FlexNet 11.5, ECDSA-163。来源于我写的SlickEdit v13.00 keygen(with pubkey patched):
INCREMENT vsee vsflex 13.01 16-jul-2099 uncounted HOSTID=ANY \
  ISSUER="SLICKEDIT KG READYU#2K8" ISSUED=28-jun-2008 \
  NOTICE="readyu" \
  SN=SERIAL:FWC123-74973876|LICTYPE:STD TS_OK \
  SIGN="023843740B3B1FBF51630285E892CF2E3D4AC88CEF 010FBFCB08A51D71423825CB84C5CD63905679F60A"
对于ECDSA来说,这个签名其实是:
hash(msg)=5b176716984bf0e4c0f2016785612e0ad31690e2
sign.r=023843740B3B1FBF51630285E892CF2E3D4AC88CEF
sign.s=010FBFCB08A51D71423825CB84C5CD63905679F60A
ECDSA的签名hash来自于msg的sha-160。
msg并不是直接的把这一行“INCREMENT vsee vsflex 13.01 16-jul-2099 uncounted HOSTID=ANY ....” 连接起来。
它是对INCREMENT行,real_crypt() 之后得来的。

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

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

0 0 0 举报
复制成功