9

我正在使用 Dropbox API。在示例应用程序中,它包括以下几行:

// Replace this with your consumer key and secret assigned by Dropbox.
// Note that this is a really insecure way to do this, and you shouldn't
// ship code which contains your key & secret in such an obvious way.
// Obfuscation is good.
final static private String CONSUMER_KEY = "PUT_YOUR_CONSUMER_KEY_HERE";
final static private String CONSUMER_SECRET = "PUT_YOUR_CONSUMER_SECRET_HERE";

我很清楚“保密不是安全”的口头禅,而混淆实际上只会稍微增加提取密钥所需的工作量。我不同意他们的说法“混淆是好的”。那我应该怎么做才能保护密钥呢?混淆是否足够好,还是我应该考虑更复杂的东西?

4

2 回答 2

5

你没办法。如果用户(攻击者)拥有受保护的数据和解除保护的代码,则用户最终可以访问数据。就这么简单。他们只需要一个调试器和一个恰到好处的断点。那,还有很多空闲时间和决心。

保密性是否足以满足您的目的取决于您的业务细节。但通常在移动世界中,如果客户担心他们的数据被盗,他们会实施高级别的盗窃和丢失控制。诸如远程擦除、强制屏幕锁定等之类的东西。我认为应用程序程序员不应该复制所有这些东西。

于 2011-01-12T17:50:52.423 回答
2

安全性永远不会是完美的,因此您可以决定要完成多少工作。您可以将消费者秘密分解为多个字符串以进行简单的更改,从而提供最少的额外安全性,或者您可以创建一个算法来以另一种方式表示秘密(从在字符串中的每个 X 空格中插入未使用的字符)修改每个字符,可能基于数字表示)。

您必须考虑工作与收益。如果这是您和几个朋友要使用的应用程序,那么它可能并不重要。如果这将是一个有 1000 万人使用的应用程序,那么安全性显然更值得关注。

于 2011-01-13T05:36:05.073 回答