※ 引述《datoguo (秋)》之銘言:
: 你有沒有考慮用公鑰密碼系統,如RSA,
: 把序號被破解的困難度建立在密碼學已知且公認安全的公鑰密碼系統上,
: 發序號時,以私鑰將明文加密後的密文為序號,
: 再於軟體中使用公鑰檢驗,如此,破解者逆向追蹤程式碼,縱然知道原始碼,
: 不知道私鑰,也無法設計出序號產生器。
沒錯,這是我本來的想法。
可是,許多密碼學的人,例如CryptoPP的作者,不認同private key加密這個動作
因此CryptoPP裡面的非對稱金鑰都只能用公鑰加密
如果直接用他裡面的實做,那就得把私鑰放在軟體裡面,
有人就會質疑從私鑰可以得到公鑰然後生出keygen
(ECIES那篇有很多人這麼問)
: 不過,缺點是:如果你要用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的變形,
加殼...不覺得非常需要
我的client部份就算程式碼被知道,要逆向也沒辦法,就像你要從public key去得到
private key一樣...很難 :p
有興趣我們來Programming版討論吧
或是 http://bbs.pediy.com/showthread.php?t=82573
我怕在這邊會被罵
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.216.204