SpriteKit级别数据安全性

时间:2016-01-26 16:23:06

标签: ios security encryption plist

我一直在阅读许多不同的帖子,帖子等关于存储在整个游戏应用程序中使用的级别数据的最佳实践(级别边界数据,图像,角色,时间等)。

  • 许多人建议使用Property List (.plist)是合适的,因为存储游戏信息非常简单,然后在需要时阅读。虽然这很容易创建和引用,但除了简单的AES加密字符串内容之外,plist文件不会以任何方式完全安全
  • 另一种方法可能是将这些数据硬编码到一个单独的类文件中,标题为LevelData.m并直接引用该类来读取级别数据,因为以这种方式存储它应该“更安全”,如(据我所知,一旦应用程序打包并通过iOS App Store进行分发,用户就没有对这些类文件的直接访问或任何访问。
  • 我还读过使用SpriteKit的内置NSCoding,其中数据可以存档到文件(或NSData对象)中,然后从该存档中取消存档。

我的问题是,任何人都可以提出最好的方法,或者也许是我没有提到过的方法吗?是的,我知道它们都是保存大数据的完全有效的方法,特别是非平凡的,有些重复的数据只需要阅读,并且在安全性措施方面都有其优缺点。我只是试图找到最安全的方式来存储这些数据,而无需用户以任何方式篡改它可能遇到类似问题并找到理想解决方案的其他人。

注意:我确信托管此数据服务器端并在应用程序启动时检索数据将是理想的安全方法。但是,我只是想通过在设备上存储数据来确定哪种方法应该是最佳在安全严格方面的做法。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您不信任用户,那么如何签署您不信任的完整性数据并使用公钥加密验证签名(在二进制文件中使用固定证书)?

因此,只能使用带有有效签名的数据。

然而,毕竟,如果用户传播您的二进制文件并修改公钥,那么这也不起作用。

与这些问题一样,问题是:你为对手打破安全措施有多难 - 以及硬度有用吗?

答案 1 :(得分:1)

我知道你已经得到了答案,但我个人使用带有NSCoding的GameData Singleton类。我将编码/存档数据保存到iOSs Keychain(而不是NSUserDefaults,NSBundlePath等)。

要保存到钥匙串,您可以使用此帮助

https://github.com/jrendel/SwiftKeychainWrapper

这是我用于我的应用程序的那个。它的工作原理与NSUserDefaults非常相似,因此非常易于使用。

您还可以在此处获得更复杂且功能更丰富的内容。

https://github.com/matthewpalmer/Locksmith