2016-03-24 48 views
0

我讀了很多關於RSA,加密,許可證密鑰等,但我仍然感到困惑。c#,如何存儲和檢查生成的許可證密鑰?

我們可以在本地由客戶安裝(他們通常應該選擇SaaS的版本,但有些人可能不希望它) 應用程序有不同的模塊等。(漂亮的標準)

我們後端的Web應用程序存儲客戶數據和許可證/購買的模塊,並可通過SSL訪問。

「客戶」會定期檢查發出的許可證是否仍然有效。

什麼還不是很清楚我是如何存放許可證密鑰和/或數據,如「有多長許可證有效期」

我的想法至今:

  • 只是它保存在一個表(明文)和定期許可證檢查可確保許可證的有效性,即使用戶篡改數據庫中的數據。 (用戶可以在短時間內訪問他不應該使用的部分)

  • 加密並將其保存在表中。這意味着,我要麼

    • 使用共享密鑰

    • 使用私有/公共密鑰:因此,無論有公鑰(客戶端)解密或將其發送到後端解密並將其發送回客戶端。

我只是有一種感覺加密整個事情是一個開銷。

我不是安全和/或密碼學方面的專家。

所以我的問題是

  • 檢查/存儲許可證(及其數據)時,什麼是最好的做法是什麼?

謝謝。

編輯:

我刪除的問題 「?是SSL不夠」在最後一段中,因爲我意識到這是一個不同的話題。

回答

0

我假設你在本地有你的許可證文件,並且檢查只發生在客戶端?你可以做到以下幾點:

  1. 在服務器上生成一個許可文件(你想要的任何格式,甚至可以是明文)
  2. 簽署這份文件用私鑰(無需密碼,只需附上簽名)
  3. 在您的應用程序中包含您的許可證,簽名和公鑰(或者讓它們可下載以更新/撤消許可證)
  4. 檢查許可證文件時,只需使用您的公鑰檢查簽名。如果客戶端篡改了許可證文件,則簽名將不會生效。

當然,您必須以某種方式保護您部署的公鑰,以便客戶端無法用自己的公鑰替換它並創建它自己的許可證文件。

有了XML,你可以例如使用XML Signature

+0

謝謝,這意味着創造的私有/公共密鑰加密(RSA例如)我的「自己」的實施,是否正確? 或者我需要一些證書(如X509)? – Arikael

+0

或者會/可能/我應該使用安裝在後端的SSL證書嗎? – Arikael

+0

「你自己的實施」是什麼意思?當然.net包括PK加密/簽名類(例如RSA),但您需要一對密鑰才能使用它們。看到例子[這個問題] [http://stackoverflow.com/questions/28099187/rsa-signing-in-c-sharp-for-licensing] – derpirscher