安全存储和使用Android的Amazon Access密钥的方法

时间:2014-02-17 09:18:57

标签: java android amazon-web-services cryptography amazon-simpledb

我正在尝试为使用Amazon SimpleDB的android构建一个应用程序。我查看了亚马逊提供的示例代码的源代码。但是在演示中,凭证只存储在Constants.java中,我相信这种方法根本不安全,因为可能有人可以反编译apk以暴露证书,即使Proguard已经开启。

因此我去阅读关于这个的亚马逊文章,我不太明白,因为我对android / java中的加密技术不是很熟悉。

我应该如何实际允许从我的应用程序访问Amazon SimpleDB,同时保持访问密钥不受外部方的影响?

编辑1: 我想使用该应用程序从SimpleDB中检索数据,显示在listview中。例如,像食物和其他用户的简单评论将能够检索其他用户发布的相同评论。也许如果用户想要发布评论,他们需要注册一个帐户并登录。

2 个答案:

答案 0 :(得分:4)

AWS提供了几种解决方案,用于在对硬件进行硬编码之外向设备提供凭据,其中一种或两种可能满足您的特定需求:

我们的samples repository包含与这两种技术集成的示例,但不是特别在SimpleDB示例中。

答案 1 :(得分:0)

没有万无一失的方法可以做到这一点。无论我们采取哪种方式,有人拿你的APK都可能进行逆向工程并破解密码(你通过混淆代码使其变得困难,但它只是变得困难而不是万无一失)。

如果您的应用需要用户登录(使用后端的某些凭据或使用openid),请使用此功能让用户访问您的服务器。然后在服务器代码上,您可以使用IAM角色(http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)提供AWS凭据。

因此,您可以使用用户提供的密码访问您的Web(REST)API访问权限,并且您的服务器代码可以通过IAM角色进行访问。这是最安全的方式。

如果您不想拥有自己的服务器/后端,那么就没有真正的万无一失的方式。

上面的@Bob答案是如何实现这一目标的: https://stackoverflow.com/a/21839911/2959100