Pie*_*888 10 sqlite security encryption android
我需要将敏感数据存储在Android应用程序的sqlite数据库中.
我怎样才能确定这些数据是否安全?我知道我可以使用密钥加密数据,但是我在哪里存储该密钥?我也不想要求用户填写密钥,我只是想让它自己动手.因为我害怕逆向工程,所以我也不想在代码中加入加密密钥.
我发现了SQLCipher.它说这是加密数据库中数据的一种非常安全的方式,但为什么会这样呢?我还需要保留一把钥匙来解锁这些信息吗?或者这真的是确保数据安全的完美方式吗?
而如果不是,什么是在SQLite数据库中存储的敏感数据的(几乎)防故障的方式?
小智 12
你说...
我也不想要求用户填写密钥,我只是想让它自己动手.因为我害怕逆向工程,所以我也不想在代码中加入加密密钥.
不幸的是,你需要做其中一件事(很可能).您可以向用户询问密码,然后使用为此目的设计的算法(即所谓的基于密码的加密 - PBE - 并且Android包括一些良好的PBE算法标准)从中导出密钥.您可以将密钥存储在代码中或作为APK中的资源存储,但是有人可以对其进行逆向工程.你可以这样做并混淆你的代码,这将减慢逆向工程过程,但你不能让它变得不可能(你的代码需要在某个时候确定密钥,所以这只是一个攻击者弄清楚它是如何做的问题它).
此处尝试过的其他方法包括强制客户端连接回服务器以通过网络检索密钥......但是如果网络连接中断会导致服务器将密钥输出给任何人,例如攻击者?好吧,那么你可以使用相互认证的SSL来确保只允许你的客户端获取它...但是你需要存储客户端SSL私钥...这就是你现在遇到的完全相同的问题.:)
所以......最重要的是你需要一个密钥(或类似的东西)来加密/解密数据.您可以存储它并使某人更难以对其进行逆向工程.您可以给用户带来不便,并让他们输入密码.但是......你需要某种秘密知识.