2011-06-15 67 views
5

我一直在想方設法阻止人們篡改隨我的軟件一起發運的許可證文件。我一直在查看RSA並使用簽名來驗證數據。使用RSA簽署許可證文件

現在從我的理解,我基本上有一些數據(許可證文件),我使用RSACryptoServiceProvider的SignData方法創建一個公鑰和私鑰的數據簽名,這是通過ExportParameters(true)創建的。

然後,我會給軟件許可證文件和公鑰,以便我可以驗證客戶端上的數據(許可證)使用VerifyData,但是什麼是停止用戶創建自己的公鑰/私鑰對並重新創建數據並只是覆蓋公鑰和數據?

我一直在閱讀和做一些谷歌搜索,但我仍然堅持這一點,我對加密和簽署也很新,但我需要弄清楚這一點。

我知道,實際上不可能像文件一樣獲取文件之類的許可證,因爲他們可能只是反編譯代碼並刪除檢查,所以我只是想讓它們更難以濫用軟件,我不希望他們能夠製作自己的許可證或將許可證移動到另一臺機器。

任何人都可以指出我正確的方向或提供一些建議嗎?

謝謝。

+0

我已經仔細研究過這個問題,用於授權Java。在我的情況下,客戶不願意建立一個激活服務器,所以我的軟件可以驗證它的許可證,所以我必須採取加密/解密方法。我所做的是在許可證和截止日期和數量限制等中對客戶詳細信息進行編碼,以阻止將許可證複製到其他地點。儘管如此,如果客戶瞭解Java,他們可能已經取代了處理產品激活的類,但是我不能輕易地阻止 - 只是讓它變得更難。 – 2011-06-15 10:04:36

+0

我也看過這種方法,加密許可證文件並在客戶端解密。你在哪裏存放鑰匙?你是將它嵌入到軟件中還是將它放在一個文件中? – 2011-06-15 10:10:33

+0

我發現激活服務器令人反感。爲了能夠運行某個軟件,我必須不斷運行(並花費資源)未經審計的網絡服務,我被禁止掃描可能與我公司網絡安全相關的漏洞。 – 2011-06-15 10:28:33

回答

4

沒有什麼會阻止他們。將密碼學應用於軟件許可的全部重點是爲法院使用創造更有力的證據。

不要花太多時間讓您的許可系統難以規避(越複雜,越會讓人看到它是一種挑戰),而是確保您的付費客戶不會受到阻礙。

+0

是的,這幾乎是我對我客戶的答案。我對現有的解決方案不滿意,因爲它不符合客戶的要求。 – 2011-06-15 11:10:48

+0

是的你是對的,我想我會做到這一點,所以他們不能輕易讓自己完全訪問所有內容或將許可證文件移動到另一臺機器上。 我同意Simons對激活服務器的評論。 – 2011-06-15 11:27:49

+0

阻止人們將許可證移動到其他機器的困難在於它經常會阻止他們將許可證移動到新的安裝位置。 – 2011-06-15 23:18:12