让我试试你的问题分解成多个子问题/假设:
假设:
一)钥匙扣是安全的地方
其实,这不是安全的。如果您的应用程序安装jailbroked设备上,黑客将能够从钥匙串获取你的钥匙
问题:
一)有没有把一些关键到一个应用程序(二进制的方式被传递形成AppStore)并且完全安全?
简短回答是否。只要你的二进制文件中有东西,它就可能被反向设计。
b)混淆会有帮助吗?
是的。它会增加黑客的时间来解决问题。如果您在应用程序中使用的密钥“花费”的时间少于逆向工程的时间 - 一般而言,您会很好。
但是,在大多数情况下,通过默默无闻的安全措施是不好的做法,它会让你感觉你是安全的,但你不是。
因此,这可能是安全措施之一,但您也需要采取其他安全措施。
三)我应该在这种情况下怎么办?*
很难给你不知道的背景你正在尝试做一个很好的解决方案。
例如,为什么每个人都应该访问相同的Amazon S3?他们是否需要只读或写入(正如Kendall Helmstetter Gein指出的那样)。
我认为最安全的方案之一是类似的东西:
- 您的应用程序应该是密码保护
- 你输入你的应用程序要求用户进行身份验证(输入自己的用户名第一次,密码)到服务器
- 这对您的服务器或其他身份验证提供程序进行身份验证(例如Google)
- 服务器向设备发送一些身份验证令牌(通常它是某种类型的cookie)。
- 您加密此令牌根据您的应用程序密码的哈希值,并将其保存在钥匙串以这种形式
- 现在你可以做两件事情之一:
- 手在从服务器到客户端专用键(所以每个客户都会有自己的密钥),并将其与您的应用程序密码
- 手柄与S3服务器上的所有操作的散列加密(并要求客户端发送)
这种方式从多个可能的攻击你的保护。
C)Whoooa ....我不打算实现所有的这些东西,你只是写,因为它会带我几个月。有什么更简单的吗?
我认为这将是有益的,如果你有一组每个客户端密钥。
如果连这实在是太多了,然后从服务器下载加密密钥,并将它们以加密形式保存在设备上,有解密密钥硬编码到您的应用程序。我会说这是微创,至少你的二进制文件没有键。
P.S.肯德尔和罗布都是对的。
更新1(基于新的信息)
首先,你见过in app purchase programming guide。
有在服务器产品型号非常好图纸。这种模式可以防止不买新水平的人。将有嵌入到你的应用程序和服务器端将移交级别时,它会收到购买收据没有亚马逊的钥匙。
没有完美的解决方案来防止购买内容的人(并决定从应用程序中删除它),因为在最后几天,应用程序将把内容下载到设备并需要它在某个时间点是简单的(未加密的形式)。
在这种情况下,如果你真的关心这种情况下,我会推荐给所有的资产,并交出其从服务器连同加密密钥加密加密形式。应该为每个客户端生成加密密钥,并且应该使用该加密密钥对其进行加密。
这不会阻止任何先进的黑客,但它至少会从别人使用IEXPLORER,只是复制文件(因为它们将被加密)保护。
更新2
一两件事有关更新1.你应该存储文件加密和存储加密密钥的地方(如实例钥匙圈)。
在这种情况下,如果您的游戏需要互联网连接,最好不要在设备上存储加密密钥。每次启动应用程序时,都可以从服务器获取它。
秘密被使用的方式是什么?它是用于客户端和服务器之间的通信吗?将文件安全地存储在设备上?了解确定事物的原因可以帮助建议实现它的最佳方法。 – WDUK 2013-02-13 18:29:53
@WDUK添加的数据 – shannoga 2013-02-13 20:35:42
您是否需要在_WHY_上添加更多信息以保护这些S3密钥?我是否正确理解您希望这些文件只能由您的应用的用户访问?你是否通过IAP销售这些文件,并担心人们会下载并开始使用它们而无需付费? – 2013-02-15 17:32:25