2010-07-30 37 views
4

我可以分发一个使用用户无法访问的密钥的.NET应用程序,但该应用程序可以吗?如何在.NET中安全地使用二进制文件分发密钥?

请注意,我使用单词分发,意思是应用程序交付在用户的计算机上运行,​​而不是在云或群集中运行。

+0

你试图完成什么?也许有你没有考虑过的选择。 – 2010-07-30 14:12:22

+0

@Lasse我希望只有一部分计算机可以访问web服务。它们可以通过硬件序列号识别,可通过客户端应用程序访问。 – 2010-07-30 14:17:14

+1

这里的问题不是传递密钥,而是要检测应用程序/用户是否在说谎。我想你会发现这是不可能做到100%的。你所希望的只是一个“足够好”的解决方案。 – 2010-07-30 14:20:29

回答

6

您的应用程序中的任何内容均可由熟练的用户访问。

这就是为什么游戏等从存储程序中的关键算法转移到验证游戏制造商所拥有的外部服务器的原因。

如果你只是试图阻止平均乔,只是散列和存储它像任何其他变量..就像一个门上的挂锁,它不会阻止确定的用户,但保持诚实的男人诚实。

+0

我认为你是对的。在游戏认证中,如果一个密钥被多台计算机使用,他们不能只阻止盗版者,所以他们只能阻止盗版者和使用该密钥的原始盗版者。所以即使这个服务器存储机制虽然比替代方案更好,但仍然有其缺陷。 – 2010-07-30 14:14:38

+0

没有什么是完美的。这是游戏开发世界的军备竞赛,也是游戏制造商由于各种原因而失败的原因。一般情况下,如果他们核对密钥,原始拥有者可以联系并在一段电话时间内获得新的工作密钥。 99.99%的时间,简单的挂锁是最好的选择。有时加密狗附件是“要走的路”,但我觉得这些非常非常非常烦人,所以不会推荐它们。 – Caladain 2010-07-30 14:21:31

+0

很好的答案。安全性很少涉及创建一个超安全的系统,它通常是不值得花时间和精力去打破 – zebrabox 2010-08-01 22:52:51

1

根据您要加密的内容,您需要提供公钥,保留私钥并自由分发。你想要完成什么?

1

不是。你可以让烦人来检索密钥,但是如果它可以被程序使用,用户也不可避免地阅读它。

2

你的问题有两个一般答案。

如果你的问题是这样的:

是否有可能对我来说,通过沿着我的可执行文件的关键以任何方式,使得它100%不可能任何用户访问,但还是我的程序能访问它?

然后答案是这样的:不,你不能。

您的代码可以做的任何事情,用户也可以做得很好。

所有你能做的就是让用户很难。加密它,隐藏它。


如果你的问题是这样的:

是否有可能对我来说,通过旁边我以任何方式,使得它不太可能,用户可以访问可执行的关键,但仍然是我的程序可以访问它吗?

那么答案是这样的:请参阅第一个案例的答案,特别是关于使用户难以做到的部分。