如何安全地存储iOS的AWS服务ID?

时间:2016-08-30 02:10:32

标签: ios security amazon-web-services mobile amazon-iam

我正在开发一个iOS应用程序,它使用Cognito用户池/联合身份,移动分析和S3来管理应用程序的各种功能,最近我开始担心这些功能的安全性。我已经使用IAM角色来控制未经身份验证的用户和经过身份验证的用户可以访问的服务,但是大多数这些服务都使用字符串(例如,用户池应用客户端ID或用户池的用户池应用客户端密钥,或移动分析的应用ID)应用程序访问该服务。

在必要时将这些字符串安全地存储在设备上的最佳做法是什么?由于应用程序使用IAM角色,是否甚至需要保护这些字符串?

如果有必要安全地存储字符串,我已经读过使用CommonCrypto库加密字符串然后将它们放入钥匙串是最好的,但我不确定用于加密的密钥是什么,因为我的用户需要未经身份验证访问这些服务。任何建议都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

这是任何移动应用的常见问题。如果有人真的想要,那么反编译应用程序并从中抓取密钥并不困难。您使用IAM角色来限制功能使用情况非常棒。这将限制攻击者的爆炸半径,但不一定能阻止它们。

Wth用户池您还可以获得一个全局唯一标识符,该标识符可以与IAM一起使用,以限制您可以使用哪些S3使用密钥预修复(类似于文件夹)以限制用户可以访问预修复的对象他们的唯一标识符您可以参考https://mobile.awsblog.com/post/Tx1OSMBRHZVM9V0/Understanding-Amazon-Cognito-Authentication-Part-3-Roles-and-Policies(使用用户池作为提供程序,它将使用标识ID作为前缀)。根据您构建应用程序的方式,您可以使用此选项,以便每个用户只能修改自己的对象。我不认为Analytics有任何限制这样的方式......因为它对它没有任何意义。

就保护您的身份证而言,您可以采取一些措施来帮助减轻身份,但是没有万无一失的方法可以阻止某人接受身份证。例如,您可以让应用程序向您的服务器调用ID ...但是攻击者可以直接调用服务器。您可以对其进行加密,这可能会使攻击者更难以获取,但您必须将密钥保留在某个位置,如果应用程序可以获取它,那么可能会有人反编译该应用程序。除非您的应用程序用户从应用程序外部获取某种密码并将其放入其中,否则无法完全锁定攻击者。

希望这有帮助。