android中的安全与SQLite

android中的安全与SQLite,android,security,sqlite,Android,Security,Sqlite,我正在为Android开发一款视频游戏。这将是一个在线游戏,将用户的统计数据、成就、对象等保存在本地SQLite数据库中 考虑到安全问题。。。我了解到,用户可以编辑保存在根安卓设备中的所有数据库。我不希望用户能够编辑游戏的数据库 那么,我能做什么?有没有办法使数据库真正安全?密码?加密 谢谢如果网上什么都没有,我不知道你能做什么。你可以让它变得更困难,但我认为它不太可能绝对安全。我想我应该做的是在检查点对数据库进行快照,并将其发送到服务器,然后(基本上)检查数据是否未被用户更改。如果散列看起来不

我正在为Android开发一款视频游戏。这将是一个在线游戏,将用户的统计数据、成就、对象等保存在本地SQLite数据库中

考虑到安全问题。。。我了解到,用户可以编辑保存在根安卓设备中的所有数据库。我不希望用户能够编辑游戏的数据库

那么,我能做什么?有没有办法使数据库真正安全?密码?加密


谢谢

如果网上什么都没有,我不知道你能做什么。你可以让它变得更困难,但我认为它不太可能绝对安全。我想我应该做的是在检查点对数据库进行快照,并将其发送到服务器,然后(基本上)检查数据是否未被用户更改。如果散列看起来不正确,您可以破坏帐户(或其他)


不过,我不会太疯狂,除非你有一个严肃的游戏。

一个坚定的攻击者可以获取设备上的任何数据。如果在将数据放入数据库之前对设备上的数据进行加密,则必须在设备上拥有密钥,并且确定的攻击者可以获取存储在设备内存中或持久化的任何密钥

如果加密和解密都不发生在不受信任的设备上,而仅仅是存储设备上,那么加密将起到帮助作用。您可以在您信任的机器上加密敏感数据,将加密的位存储在数据库中,以便稍后由您信任的机器解密

您也不能使用密码来保护此安全。存储在设备内存中或保存在设备上的密码可以像私有加密密钥一样轻松读取

如果您不关心用户是否从数据库中读取数据,但不希望他们能够写入数据,那么在存储关键数据之前,您可以通过受信任的机器获取关键数据。然后,如果设备连接到受信任的机器,它可以检查签名以验证关键数据没有被篡改

编辑:


除非您愿意公平地进行计算,否则您不能信任在不受信任的设备上执行的任何计算。您唯一能做的就是通过签名验证通过不受信任系统路由的数据,并防止不受信任的系统通过加密对通过它的数据进行窃听。

SQLite数据加密是可能的


.

没有真正安全的方法:在根设备上也可以读取您的应用程序,例如,您用于加密的密码。然而,加密会让攻击者更加困难。我不在乎用户是否能读取BD,但我不希望他们能修改它。。。我也有一个服务器,我能用它做点什么吗?我的意思是,我可以在服务器上保存一个密码,当我登录游戏时,获取密码并用它输入数据库。。。这可能是一个解决方案吗?@user949336,请看我的编辑。您需要按照自己的方式完成的任何计算都必须在您控制的服务器上完成,除非您愿意实现乱码电路或其他缓慢而复杂的方法来保护计算。您存储到DB中的任何密码都可以被具有设备文件系统root访问权限的人读取,任何具有设备物理访问权限的人都可以获得该密码。