SpriteKit 级数据安全
SpriteKit Level Data Security
我阅读了许多不同的帖子、主题等,了解存储要在整个游戏应用程序中使用的关卡数据(关卡边界数据、图像、角色、时间等)的最佳实践。
- 许多人建议使用
Property List (.plist)
是合适的,因为存储游戏信息然后在需要时读取它非常简单。虽然这很容易创建和引用,但 plist
文件在任何方面都不完全 安全 ,除了简单的 AES 加密字符串内容。
- 另一种方法可能是将此数据硬编码到一个单独的 class 文件中,标题为
LevelData.m
并直接引用 class 来读取关卡数据,作为存储这种方式应该是 "safer",因为(据我所知)一旦应用程序被打包和分发,用户就无法直接或根本无法访问这些 class 文件,比如 iOS 应用商店。
- 我还阅读了如何使用 SpriteKit 的内置 NSCoding,其中数据可以存档到文件(或 NSData object)中,然后从该存档中取消存档。
我的问题是,任何人都可以建议最好的方法,或者我没有提到的方法吗?是的,我知道它们都是保存大数据的完全有效的方法,特别是 non-trivial 和一些只需要读取的重复数据,并且在 安全性方面都各有利弊 措施。我只是想找到最安全的方法来存储这些数据,而用户不能以任何方式从可能遇到过类似问题并找到理想解决方案的其他人那里篡改它。
注意:我确信托管此数据服务器端并在应用程序启动时检索数据将是理想安全方法.但是,我只是想看看哪种方法应该是 最佳 安全实践 strictly 通过在设备上存储数据。谢谢!
如果您不信任用户,如何签署您不信任的完整性数据并使用 public 密钥加密(在二进制文件中使用固定证书)验证签名?
因此,只能使用具有您有效签名的数据。
然而,毕竟,如果用户反汇编您的二进制文件并修改 public 密钥,那也不起作用。
与这些问题一样,问题是:你让对手破坏你的安全措施的难度有多大 - 什么样的难度才有用?
我知道你已经得到了答案,但我个人使用 GameData Singleton class 和 NSCoding。我将 encoded/archived 数据保存到 iOS 钥匙串中(而不是 NSUserDefaults、NSBundlePath 等)。
要保存到钥匙串中,您可以使用此助手
https://github.com/jrendel/SwiftKeychainWrapper
这是我用于我的应用程序的那个。它的工作原理与 NSUserDefaults 非常相似,因此非常易于使用。
您还可以在此处获得更复杂、功能更丰富的版本。
我阅读了许多不同的帖子、主题等,了解存储要在整个游戏应用程序中使用的关卡数据(关卡边界数据、图像、角色、时间等)的最佳实践。
- 许多人建议使用
Property List (.plist)
是合适的,因为存储游戏信息然后在需要时读取它非常简单。虽然这很容易创建和引用,但plist
文件在任何方面都不完全 安全 ,除了简单的 AES 加密字符串内容。 - 另一种方法可能是将此数据硬编码到一个单独的 class 文件中,标题为
LevelData.m
并直接引用 class 来读取关卡数据,作为存储这种方式应该是 "safer",因为(据我所知)一旦应用程序被打包和分发,用户就无法直接或根本无法访问这些 class 文件,比如 iOS 应用商店。 - 我还阅读了如何使用 SpriteKit 的内置 NSCoding,其中数据可以存档到文件(或 NSData object)中,然后从该存档中取消存档。
我的问题是,任何人都可以建议最好的方法,或者我没有提到的方法吗?是的,我知道它们都是保存大数据的完全有效的方法,特别是 non-trivial 和一些只需要读取的重复数据,并且在 安全性方面都各有利弊 措施。我只是想找到最安全的方法来存储这些数据,而用户不能以任何方式从可能遇到过类似问题并找到理想解决方案的其他人那里篡改它。
注意:我确信托管此数据服务器端并在应用程序启动时检索数据将是理想安全方法.但是,我只是想看看哪种方法应该是 最佳 安全实践 strictly 通过在设备上存储数据。谢谢!
如果您不信任用户,如何签署您不信任的完整性数据并使用 public 密钥加密(在二进制文件中使用固定证书)验证签名?
因此,只能使用具有您有效签名的数据。
然而,毕竟,如果用户反汇编您的二进制文件并修改 public 密钥,那也不起作用。
与这些问题一样,问题是:你让对手破坏你的安全措施的难度有多大 - 什么样的难度才有用?
我知道你已经得到了答案,但我个人使用 GameData Singleton class 和 NSCoding。我将 encoded/archived 数据保存到 iOS 钥匙串中(而不是 NSUserDefaults、NSBundlePath 等)。
要保存到钥匙串中,您可以使用此助手
https://github.com/jrendel/SwiftKeychainWrapper
这是我用于我的应用程序的那个。它的工作原理与 NSUserDefaults 非常相似,因此非常易于使用。
您还可以在此处获得更复杂、功能更丰富的版本。