作者datoguo (秋)
看板CodeJob
标题Re: [讨论] 序号保护机制
时间Mon Feb 23 13:02:02 2009
※ 引述《jlovet (Want 2 see u no more)》之铭言:
: ※ 引述《datoguo (秋)》之铭言:
: : 你有没有考虑用公钥密码系统,如RSA,
: : 把序号被破解的困难度建立在密码学已知且公认安全的公钥密码系统上,
: : 发序号时,以私钥将明文加密後的密文为序号,
: : 再於软体中使用公钥检验,如此,破解者逆向追踪程式码,纵然知道原始码,
: : 不知道私钥,也无法设计出序号产生器。
: 没错,这是我本来的想法。
: 可是,许多密码学的人,例如CryptoPP的作者,不认同private key加密这个动作
其实这要看应用为何,不能说private key加密就不好,
如RSA签章,它其实也是用private key加密,再用public key解密,
一般公钥密码系统是以public key加密,再以private key解密,RSA加密也是如此,
但RSA签章则相反,它采用用private key签章(用解密函数签章),
再用public key检验(用加密函数检验),
而且这还是凭证的公开标准作法 (不过前提是key的长度要够长)。
: 因此CryptoPP里面的非对称金钥都只能用公钥加密
如果你要用RSA的话,可以考虑用OpenSSL,
若是要用ECC,我个人推荐MIRACL是不错的选择。
: 如果直接用他里面的实做,那就得把私钥放在软体里面,
: 有人就会质疑从私钥可以得到公钥然後生出keygen
以RSA私钥加密(签章,即产生序号): s = m^d (mod n),
上式d为私钥,s为签章,
要从s逆推出d有其困难度,特别是当你数字够大时就更难了。
比较要担心的是n长度够不够长,会不会被人家在有限时间内因数分解,
因为你无论加解密都一定会用到n,而n=p.q (p, q为2个够大质数),
如果可以由n分解出p, q,就可以马上计算出d。
: (ECIES那篇有很多人这麽问)
可以将私钥放在产生序号的程式里面,公钥放在检验序号的发行软体中,
使用者只会拿到发行软体,即使拿到发行的软体的code,
里面顶多也只有public key,而要从public key逆推出private key有很大的困难度。
RSA的提出至今,接受过许多公开的挑战,
但至今仍被证明是安全的公钥密码系统(在有限时间内被破解的机率可以被忽略),
如果以private key加密(签章)是不可被信任的,
那现今的凭证就不该使用RSA签章,呵呵呵。
如果使用CryptoPP有如你说的那样的限制,不妨可以考虑使用其他的Library,
如果你用RSA,我推荐OpenSSL;用ECC,则推荐用MIRACL。
: : 不过,缺点是:如果你要用RSA,必须选大质数才够安全(破解者难以大数分解),
: : 但是一旦如此,你的序号也会非常长。
: : 可是如果选用不够大的质数,序号可以比较短,但是也相对比较容易被大数分解破解。
: : 除此之外,你可以针对序号检验的部份的code加Anti-Debug,及加壳,
: : 增加破解及逆向追踪的困难度。
: : 以上小小建议。
: http://www.codeproject.com/KB/security/ProductActivation.aspx
: 这个人做了三种,RSA,AES,ECC
: RSA用512 bits,就花了28个字元了..
没错,用公钥密码系统做序号的缺点就是序号长,呵呵。
: http://www.codeproject.com/KB/security/ECIESProductKey.aspx
: ECC可以做出比较小的签章,或是加密结果..
ECC的优点是速度快,但在同样安全性的情况下,
虽然ECC的金钥长度可以比RSA短,但它生出来的密文是明文的两倍或更多
(如果你采用ECC大师Koblitz提出的加解密方法,密文会是明文的两倍再多一点点),
使用RSA的话,至少可以明文与密文差不多长。
可是ECC的签章可以比较短,比RSA签章短(在同样安全性情况下),
因此ECC的话,采用ECDSA做序号确实是比较适合。
我之前也有实作序号检验及产生函数库,
我也是选用ECC GF(p)。
: 我用的是ECC的变形,
: 加壳...不觉得非常需要
: 我的client部份就算程式码被知道,要逆向也没办法,就像你要从public key去得到
: private key一样...很难 :p
: 有兴趣我们来Programming版讨论吧
: 或是 http://bbs.pediy.com/showthread.php?t=82573
: 我怕在这边会被骂
呵呵,我相信大家不想做的东西被copy,应该也会关心这问题。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.250.200.94
※ 编辑: datoguo 来自: 60.250.200.94 (02/23 13:02)
1F:推 jlovet:其实有这个还是会被copy,只是很难keygen 02/23 16:18
2F:→ jlovet:我说他们不认同的意思是,大家都可以用public解密 02/23 16:19
3F:→ jlovet:他们觉得这样就不叫做秘密了 02/23 16:19