2016-03-24 50 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