0

我有一个 ASP.NET MVC Web 应用程序,它应该以各种版本出售,每个版本都可以解锁越来越多的应用程序功能。想想类似 Visual Studio 的版本 - Professional 允许您执行 X 和 Y,但使用 Premium,您也可以执行 Z。

我正在尝试增强应用程序,以便能够可靠地确定实际购买的版本。或者,换句话说,以某种方式存储有关版本的信息,以便应用程序可以轻松访问它。我不是在寻找任何花哨的保护机制,只是让破解应用程序比重写一些纯文本文件更复杂:)

我能想到的一种方法是使用公钥/私钥对。我生成一个带有版本有效负载的许可证密钥,用私钥对其进行加密,然后将其发送给客户。客户然后输入加密的许可证密钥,该密钥被存储在某个地方,例如数据库。公钥将被硬编码到我们的 web 应用程序中,以便应用程序可以解密许可证密钥并决定是否允许访问某些功能。

这可能起作用,但是将公钥硬编码似乎有点蹩脚。上面提出的解决方案是否有其他选择(也许我想在这里重新发明轮子)?它有什么明显的缺陷吗?

4

1 回答 1

1

最好不要尝试实现完美的安全性,因为您正在尝试实施某种内容保护方案,如果没有应用程序环境(例如操作系统)的明确支持,这些方案必然会失败 - 即使它们大多也会失败然后。

通常您不使用私钥加密,而是使用私钥签名。您可以随应用程序发送一个公钥,并在您的应用程序中验证该版本是为该特定公钥签名的。

有很多方法可以攻击这个方案,并且可以通过隐藏更多来增强它,但基本上你能做的就这些了。

于 2012-08-25T23:37:11.617 回答