我无法通过搜索网络找到我一直在寻找的内容。基本上,我正在制作一个使用数字货币的应用程序,我不希望用户能够破解并向其帐户添加硬币。我想到了两种方法来做到这一点,我想知道你对它们的看法以及如何让它们尽可能安全。我不太确定他们,但他们在这里:
使用加密将数据存储在用户的设备上。这个问题是,如果用户具有root访问权限,他们可能会对其进行解密。
为每部手机提供UUID并将其“硬币”信息存储在数据库中。每次打开应用程序时,它们都会使用UUID自动登录。这可以防止创建密码和用户名的需要。这个问题是有人可以从其他人的设备上解密UUID并自己使用它来窃取它。这也会使体验变得更慢,而且我的成本会更高。
那么什么是最好的解决方案?你知道其他任何方式吗?提前谢谢。
额外信息:我计划使用LibGDX,因为它是跨平台的,可能是一个很好的起点,但它也可能限制我能做的事情。我愿意使用原生的android,并最终在iOS上做同样的事情,如果它允许更安全的体验。
答案 0 :(得分:2)
您无法在本地存储数据100%安全。一旦你的应用程序本身可以读取/写入本地硬币计数,攻击者就会#34;也可以。
唯一安全的选择是将其保存在服务器上。当然,硬币计数的每次增加/减少都必须在服务器本身上进行,并在保存之前检查其有效性。
注意:只要服务器安全,您就无法"解密其他人的设备" 。
答案 1 :(得分:0)
UUID(通用唯一标识符)在空间和时间上是唯一的。它们就是,没有什么可以解密的。
数字货币的问题已经解决:比特币,Litecoin和分拆。创造并不是一件容易的事。如果你正在处理"硬币"你需要付出数千美元才能获得由数字安全领域专家审查的方案和安全性。
Root访问不保护加密数据,数据只能用正确的密钥解密,一般为128到256位的随机数据。保护问题转移到保护密钥。关于你能做的最好的事情是创建一个随机密钥使用并将其保存在钥匙串中(iOS,Android钥匙串的使用限制更多)。但是,如果设备没有良好的密码(或任何或好的),几乎没有安全性。通常,保护有效用户的数据很困难,通常属于DRM,需要服务器和身份验证。
LibGDX:您使用的编码系统越简陋,可用的帮助越少,请仔细考虑。此外,如果您有竞争,UI非常重要。虽然人们普遍认为你只有一次机会给用户留下深刻印象,但你有很多机会让他们感到不快/愤怒的前用户。跨平台系统往往在每个平台上的本机UI中具有较差的UI和更多的非标准。