精華區beta CodeJob 關於我們 聯絡資訊
※ 引述《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)