我有一个ASP.NET MVC Web应用程序,应该以各种版本出售,每个版本解锁了应用程序的越来越多的功能。想想像Visual Studio的版本 - Professional允许你做X和Y,但是使用Premium,你也可以做Z.
我正在尝试增强应用程序,以便可以可靠地确定实际购买的是哪个版本。或者,换句话说,以某种方式存储有关版本的信息,以便应用程序可以轻松访问它。我不是在寻找任何花哨的保护机制,只是会让应用程序破解比重写一些纯文本文件更复杂:)
我能想到的一种方法是使用公钥/私钥对。 我生成一个带有版本有效负载的许可证密钥,使用私钥对其进行加密,然后将其发送给客户。然后,客户输入加密的许可密钥,该密钥存储在某处,例如,一个数据库。公钥将硬编码到我们的webapp,以便应用程序可以解密许可证密钥并决定是否允许访问某些功能。
这可能可能工作,但是公钥被硬编码似乎有些蹩脚。是否有一些替代上面提出的解决方案(也许我试图在这里重新发明轮子)?它有任何明显的缺陷吗?
答案 0 :(得分:1)
你不是想要实现完美的安全性是好的,因为你正在尝试实现某种内容保护方案,如果没有对应用程序环境(例如操作系统)的明确支持,这些方案必然会失败 - 并且它们将会即使那时大多都失败了。
通常,您不使用私钥加密,使用私钥签名。您可以使用该应用程序发送公钥,并在您的应用程序中验证该版本是否针对该特定公钥进行了签名。
有很多方法可以攻击这个方案,并且可以通过隐藏更多方案来增强它,但这基本上就是你所能做的。