以安全格式存储游戏偏好和保存的游戏

Posted

技术标签:

【中文标题】以安全格式存储游戏偏好和保存的游戏【英文标题】:Storing game preferences and saved games in a secure format 【发布时间】:2015-02-18 09:57:51 【问题描述】:

这是来自 Apple 文档:

当您设计一款向 Game Center 报告分数的游戏时,您应该 还要考虑游戏的安全需求。你想要分数 向游戏中心报告,以准确记录玩家如何 是做。这里有两个建议:

以安全的格式存储您的游戏偏好和保存的游戏, 而不是明文。如果您的游戏数据以明文形式存储 文本,玩家可以使用iTunes下载保存的游戏数据,修改 它,并将其重新同步回设备。这可能会让玩家 获得比您预期更高的分数。始终设置合理 排行榜的最小值和最大值。

我知道数据可以存储到 .plist 文件或 .xml 或 .json 中,甚至可以存储在数据库中。但所有这些都是未加密的纯文本。什么被认为是安全格式?还有哪些方法/类/技术可用于存储敏感数据?

【问题讨论】:

【参考方案1】:

如果黑客有足够的决心并拥有适当的技能组合,那么无论采用何种存储方式,您存储的数据通常都会遭到破坏。它归结为您的应用程序的实际应用程序是什么,以及您愿意投入的时间和精力来保证数据的安全。以下是一些可供您考虑的选项:

NSUserDefaults

存储数据的最常见和最简单的方法之一。数据未加密。

Save string to the NSUserDefaults?

Plist 文件

也是一种常用的数据存储方式。数据未加密。

Storing and Retrieving from a Plist

核心数据

创建模型,管理不同类型对象之间的关系。默认情况下,数据未加密。

http://www.appcoda.com/introduction-to-core-data/

http://www.raywenderlich.com/85578/first-core-data-app-using-swift

钥匙串

可以说是在非越狱设备上存储数据的最安全方式。数据已加密。

https://***.com/questions/16459879/how-to-store-a-string-in-keychain-ios

NSCoding

正如 Whirlwind 指出的,这是另一种存储方法。

http://www.raywenderlich.com/1914/nscoding-tutorial-for-ios-how-to-save-your-app-data

http://nshipster.com/nscoding/

CommonCrypto Apple 框架

低级 C 编码。数据已加密。

https://developer.apple.com/library/ios/documentation/Security/Conceptual/cryptoservices/GeneralPurposeCrypto/GeneralPurposeCrypto.html

https://developer.apple.com/library/ios/samplecode/CryptoExercise/Listings/ReadMe_txt.html

自定义方法

将数据存储在云中,从而完全避免将其保存在设备上。使用 Touch ID 功能对用户进行身份验证并下载云数据。

http://code.tutsplus.com/tutorials/ios-8-integrating-touch-id--cms-21949

https://developer.apple.com/library/ios/samplecode/KeychainTouchID/Introduction/Intro.html

【讨论】:

您可以添加评论,如果您愿意,也可以使用这种方法(NSCoding)来提高答案质量raywenderlich.com/1914/… @Whirlwind - 出色的补充。我已将其包含在答案中。【参考方案2】:

存储数据最安全的地方是keychain,但是如果用户使用的是越狱设备,它仍然不是 100% 安全的。遵循 Apple 关于为排行榜设置最小值和最大值的指南。

Here's another SO post 描述了如何将信息存储在NSDictionary 中作为NSData,然后由您的应用加密和解密。

【讨论】:

嗨 huhitschris,感谢您的快速回复。这不仅仅是关于高分和排行榜。它涉及许多价值,即虚拟货币、玩家升级等。因此定义最小/最大值是不合适的。我将阅读有关加密的 NSData 方法并尝试查看结果。如果这不是问题,您可以发布一些用于钥匙串实现的代码吗? 钥匙串与您的密码一样安全,无论是否越狱。使用更长的密码是获得更高安全性的方法。

以上是关于以安全格式存储游戏偏好和保存的游戏的主要内容,如果未能解决你的问题,请参考以下文章

寻找管理游戏关卡视图、关卡选择视图、偏好视图、存储关卡、环境变量的概念

使用 Javascript 保存游戏

在安全且独立于平台的 Unity 中保存游戏数据的最佳方式

如何保存对象(保存/加载游戏)

如何使用 playerprefs 在统一 3d 中保存我的游戏货币

Google play 游戏服务 : 保存游戏,创建新快照