2014-01-29 16 views
4

在我们的应用程序中,我们有几个API密钥(又名共享或私人密钥)。那些是需要运行时除了我/我的组织之外,这些字符串永远不会落入任何其他人的手中,这一点至关重要。编写/提交iOS应用程序,字符串/文本应该永远达不到黑客

尝试1 - 什么也不做

NSString *privateKey = @"a6dedb6096973e4576e1dfc9d048075d; 

如果任何人得到这个应用程序的手,并得到通过签订-东西,他们可以运行二进制strings,容易retreive所有字符串。 (FAIL)

尝试2 - 做一些聪明

这是你的StackOverflow,你们是最棒的。给我看一些魔法!

+0

拆分/混淆密钥 – Volker

+1

这是一个棘手的问题,没有简单的解决方案。我过去使用的一种解决方案是建立一个单独的,专用的内部Web服务器,其唯一目的是(a)存储私钥,并且(b)提供内部Web服务(在PHP中使用简单的CURL调用)用私钥执行任何必要的功能。只有允许访问私钥的用户才允许访问* this *服务器上的源代码。 –

+1

如果钥匙从不落入其他人的手中至关重要,那么没有安全的方式来分配他们,你应该找出一种不同的方式来实现你的目标。通过默默无闻的安全(正如Volker所建议的)根本就没有安全保障。 如果问题的关键是通过Internet访问服务,那么根本无法保护它。任何人都可以从您的应用程序中嗅探网络流量,以确定使用的密钥。 对于您希望保护的密钥的使用情况,您尚未提供足够的信息,以便更详细地解答您的困境。 –

回答

0

我们为Crystal Shuffle的私人Facebook访问密钥做了什么,我们将密钥隐藏在Web服务上。 iOS应用程序将打到该服务以获得服务可以获得的答案,因为它拥有密钥。

据我所知,没有安全的方法将密钥包含在应用程序本身中。

1

为什么每个应用程序副本都使用相同的私钥?

发送数据: 如果您的应用程序需要将信息发送到您的服务器,它只需要您的公钥来加密数据。

接收数据(这是棘手的地方): 当应用程序安装在用户的设备上时,它应该生成它自己的私钥/公钥对。然后它将公钥发送到您的服务器。 (往上看)。然后,无论何时服务器需要将数据发送回设备,它都会使用设备的公钥来加密所述数据。因此只有该设备才能解密数据。

问题是,如果你在应用程序中输入一个知道的私钥有什么意义。

相关问题