在安卓设备上保护Twitter密钥

6
当我为我的安卓应用添加Twitter认证时,前往Twitter dev,我惊讶地发现我必须像这样初始化Twitter的Fabric
import io.fabric.sdk.android.Fabric;
import com.twitter.sdk.android.Twitter;
import com.twitter.sdk.android.core.TwitterAuthConfig;
...

@Override
public void onCreate() {
    super.onCreate();

    TwitterAuthConfig authConfig = 
                new TwitterAuthConfig("consumerKey",
                                     "consumerSecret");
    Fabric.with(this, new Twitter(authConfig));
}

他们正式推荐我将API密钥和API密钥作为纯文本放入我的应用程序中。即使在这个官方示例中,密钥也存储在BuildConfig中。
我正在使用Proguard,但即使如此,我也不能保证决心坚定的黑客无法利用我的API秘密。像Quora这样的已建立的应用程序是否也会公开这些密钥?
有人可以发布一个克服这种漏洞的示例,或者给出一个令人信服的论据,说明Twitter为什么要这样做吗?
相比之下,Google和Facebook只需要我添加AppID,并且我必须对签名证书进行哈希处理,并将哈希链接到各自的应用程序。这比以上安全级别高得多。

2
Fabric 的 Alex 在这里。我想进一步解释为什么我们在示例应用和一些文档中展示这种方法。这些示例演示了与工具包集成的最简单机制。每个团队和组织在安全方面都有不同的政策,因此我们将如何保护和存储密钥和秘密的决定留给每个开发人员。我听到了你的意见,我们可以考虑提供更多关于更安全选项的文档。 - Alexizamerican
@Alexizamerican 非常感谢您的回复。 我打算使用的 Twitter 密钥具有写入访问权限。 然而,无论我如何保护这些字符串的安全性,我仍然要将我的 Twitter API 密钥发送给用户。 我没有任何保证的方法来解决这个安全问题,所以我想知道是否有其他方法来解决它。 我可以接受这是一种复杂的方法。 理想情况下,应用程序不应该访问我的密钥。 - xyz
你好 - 我也对此表示关注。你有没有找到一种更安全的存储密钥/秘钥对的方法?我也在想,集成Twitter是否真的是个好主意,因为这看起来完全不安全。 - Simon
很抱歉,@Simon。我只是因为这个问题放弃了Twitter身份验证。但是,如果你真的需要它,最好的选择是Dexguard,但那是付费的。 - xyz
2个回答

2

Proguard不会混淆字符串字面值。相反,您可以将秘密存储为加密字符串(可能使用AES),并在需要时解密。或者,商业程序如StringerDexguard提供字符串混淆。


是的,加密字符串更难解密(不确定这是否是一个单词:P),但由于我正在将必要的密码代码放入应用程序中,这并不能保证安全。此外,如果有人开发出一种从pro(dex)guarded应用中提取Twitter密钥的漏洞,它将给他访问大量Twitter应用程序的权限。这似乎是一个太大的安全漏洞。 - xyz
该死。我没有想到那个。如果你将秘密存储为字符数组(或整数?),然后使用自己的逻辑来重现字符串,只要你然后“应用”Proguard,你就应该得到保护。 - Matt Brown

0
您可以在res/目录下创建一个secrets.xml文件,并在其中定义常量值,然后从您的活动中引用它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接