保持云服务API密钥对用户安全

时间:2012-02-18 15:17:42

标签: c# .net encryption obfuscation

我正在使用一些通过提供API密钥(40个字符串)来运行的Web API。

注册此服务后,我(开发人员)会获得每个用户唯一的密钥。

对API的每次调用看起来都像是对以下内容的POST调用:

http://www.someservice.com/api/method

请求中传递的实际数据包含:

apiKey=myKeyHere....

我的问题是 - 如何阻止我的应用用户泄露此API密钥?

此特定服务为游戏提供高分存储。使我的API密钥易于访问意味着我的游戏玩家将能够发出他们自己的注册高分的请求。

我想将HARD CODE编入代码(不太理想的解决方案) 要么 将它保存在一些不能用于确定实际字符串的二进制/配置文件中。

我想阻止的方案是用户获取此密钥,并使用它向服务器而不是我的应用程序提交消息。

2 个答案:

答案 0 :(得分:6)

只要您使用这样一个简单的协议,将静态不变的密钥发送到服务器,您的密钥混淆无关紧要。攻击者可以简单地嗅探流量并提取密钥。

您需要一段严重混淆的代码,它会生成一次(或短期有效)密钥。这可能会阻止弱攻击者,因为他们需要反向工程或复制密钥生成代码。但是对于一个称职的攻击者来说,这也会失败。

您不应将客户端API密钥视为安全措施。它们的行为更像是http中的用户代理标头。唯一可以安全的API密钥是存储在由App开发人员控制的服务器上的API,例如在使用API​​的第三方Web应用程序中。

答案 1 :(得分:-2)

要在内存中保护它,您可以使用SecureString

要在某些本地存储中加密它(例如特定于用户或机器的配置文件),您可以使用ProtectedData

如果您需要在系统之间进行转移,可以使用System.Security.Cryptography中提供的众多加密算法之一,例如:RSACryptoServiceProvider