1) 需要互联网连接
1.1) 推送通知
进行安全数据交换的好方法可能是使用 Apple 的(静默)推送服务,这些服务使用 apns 并通过 https 发送数据 - 更多详细信息 3.1
1.2)
在向已部署的应用程序分发新用户证书时,也使用或多或少类似的方法,如果没有机会重新安装应用程序并且应用程序无论如何都需要有效的互联网连接。
缺点:需要有效的网络连接,并且基本上信息正在进入应用程序,当它已经被执行时 => 似乎不适合您的情况。(见第 4 步)
2)静态数据(因为没有网络连接/通信伙伴就没有交换)
使用捆绑包本身提供的私钥加密数据。无论现在是字符串还是哈希,都可以使用嵌入在应用程序中的函数进行逆向工程。由于 iOS9,反编译 iOS 应用程序非常困难,基本上您将主要查看提供的头文件。因此,如果您有这样的函数、字符串、散列值或其他任何内容,请确保将其保存在 .m 文件中!
但同样:如果信息不是设备或用户特定的,只是您自己的微环境中的一个秘密,在所有设备上都有效,如果没有更新过程,您必须在同一个包中提供加密数据和解密方法/信息交流什么的,你可以想到的。
适合加密:iOS System.Security https://developer.apple.com/reference/security
或简单的 openssl
您所描述的钥匙串方法之间的区别在于:您获得了一个值,该值将被加密并安全存储。(2) 描述了具有加密和存储(捆绑)半安全值的方法,该值将被解密
3) 信息交流
您描述了由另一个实例散列的关键数据。伟大的!- 确保,请确保您正在与之交谈的实例确实是您期望的实例(使用 ssl 证书固定等防止网络挂钩,但即使在这里您也可能有入侵者(中间人))。并且您将(可能)在您的应用程序包中提供一个证书,以确保通信服务器的真实性 - 再来一次,数据应该确保您的微环境的某些实例之间的安全过程。不过,这些数据是在您的应用程序包中提供的。
3.1 安全信息交换扩展 - 无声推送
为此目的,请使用 Apple 的服务器交换您的秘密。如果您只需要交换小数据块。我建议对用户使用静默推送通知,这些通知甚至可以在没有用户明确许可的情况下工作。巨大的优势:如果您的秘密或密钥发生变化,您可以尽快通知用户有关更改。他们可能只需要在收到新数据时进行更改,这在大多数情况下应该可靠地工作。例外:在本地网络或通过蓝牙进行数据交换,在这种情况下,我建议向用户提供通知以要求更新本地解密密钥。或者也以这种格式交换密钥。再一次:我泄露了一些关于你的环境架构的详细信息。缺点:你不知道,
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1
3.1 扩展的安全信息交换 - 应用内购买
使用免费的应用内购买让用户将数据发送到您的手机。这里的要点:您可以轻松地提供更大的数据块,因为这应该是用户的主动请求,用户确实期望一定的处理时间,并且还应该意识到需要有效的互联网连接这一事实。缺点:用户必须故意选择它。在那之前,该应用程序将无法正常工作。
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html#//apple_ref/doc/uid/TP40008267
因此,它与方法(2)的基本思想略有不同。
简而言之:您能否提供其他信息,您需要加密/想要安全存储的数据类型以及您是否将进行网络交换?
这里需要更多信息:-)
我想再次强调,iOS 上的应用程序不再那么容易解密,即使反编译也不会得到所有内容,你希望它得到。例如,dumpdecrypt 等解密工具只能在 iOS 8.4 之前正常工作