我如何存储数据以便用户不能轻易篡改它?
How Can I store data so users can't easily tamper with it?
我是 Python 的新手,作为一个项目,我正在开发一款小游戏。我想确保我的数据以一种我不会 运行 进入问题的格式存储。
我需要存储的数据对于通过程序生成生成一些游戏内元素是不可或缺的——主要是存储这些对象的名称、属性和可能的行为。我不希望玩家能够轻松地编辑文件并更改值,以至于一个普通的 1 级生物突然掉落 200 万金币。
我的意图是最终使用 Py2Exe 或 PyInstaller。我考虑过 XML、YAML 和 JSON,但我不确定我应该往哪个方向走,或者我可能不知道什么。
我敢肯定,如果用户非常想这么做,他们可以想出办法——但是让普通用户不方便篡改所述数据的最佳方法是什么?
这是不可能解决的。您应该使用某种加密或签名方案来确保数据不被篡改并结合混淆,以便无法从密文中轻松提取秘密算法或密钥。
由于这是关于篡改保护而不是数据机密性,我建议您使用数字签名算法。您将生成一个开发人员私有+public 密钥对,使用私有密钥对静态数据进行签名,然后将 public 密钥以混淆的方式放入代码中。
在 假设 下 比简单地反编译和读取更难操纵程序 源代码.
例如,如果您使用对称密码来加密该数据并将密钥存储在您的代码中,则恶意用户可以从您的代码中推断出算法和密钥并实施此操作。然后用户将解密静态数据,对其进行操作并再次重新加密。您的未被操纵的程序永远不会知道内容已更改。
它还必须是非对称的(例如 RSA 签名或 ECDSA),因此在您的静态数据上使用 HMAC 会遇到与对称加密相同的问题。
我是 Python 的新手,作为一个项目,我正在开发一款小游戏。我想确保我的数据以一种我不会 运行 进入问题的格式存储。
我需要存储的数据对于通过程序生成生成一些游戏内元素是不可或缺的——主要是存储这些对象的名称、属性和可能的行为。我不希望玩家能够轻松地编辑文件并更改值,以至于一个普通的 1 级生物突然掉落 200 万金币。
我的意图是最终使用 Py2Exe 或 PyInstaller。我考虑过 XML、YAML 和 JSON,但我不确定我应该往哪个方向走,或者我可能不知道什么。
我敢肯定,如果用户非常想这么做,他们可以想出办法——但是让普通用户不方便篡改所述数据的最佳方法是什么?
这是不可能解决的。您应该使用某种加密或签名方案来确保数据不被篡改并结合混淆,以便无法从密文中轻松提取秘密算法或密钥。
由于这是关于篡改保护而不是数据机密性,我建议您使用数字签名算法。您将生成一个开发人员私有+public 密钥对,使用私有密钥对静态数据进行签名,然后将 public 密钥以混淆的方式放入代码中。
在 假设 下 比简单地反编译和读取更难操纵程序 源代码.
例如,如果您使用对称密码来加密该数据并将密钥存储在您的代码中,则恶意用户可以从您的代码中推断出算法和密钥并实施此操作。然后用户将解密静态数据,对其进行操作并再次重新加密。您的未被操纵的程序永远不会知道内容已更改。
它还必须是非对称的(例如 RSA 签名或 ECDSA),因此在您的静态数据上使用 HMAC 会遇到与对称加密相同的问题。