Android,如何为离线应用保留本地加密数据库的密钥?
我正在编写简单的脱机字典应用程序。所有数据都存储在SQLite数据库中 若我们假设数据库是加密的,那个么应用程序必须使用某种Android,如何为离线应用保留本地加密数据库的密钥?,android,database,sqlite,encryption,Android,Database,Sqlite,Encryption,我正在编写简单的脱机字典应用程序。所有数据都存储在SQLite数据库中 若我们假设数据库是加密的,那个么应用程序必须使用某种密钥,才能访问它。此外,我们假设此应用程序完全处于脱机状态,并且不访问任何远程服务器 这意味着键将存储在应用程序本身中。我试图找出很多在应用程序中隐藏这个键的方法,但它们都有缺陷 甚至可以在应用程序本身中隐式隐藏此键吗?如果应用程序自动显示数据,则无法保护该数据 你的应用程序必须将密钥存储在某个位置。无论您试图对代码进行多少模糊处理,仍然可以对其进行反编译(或者只执行模糊处
密钥
,才能访问它。此外,我们假设此应用程序完全处于脱机状态
,并且不访问任何远程服务器
这意味着键
将存储在应用程序本身中。我试图找出很多在应用程序中隐藏这个键的方法,但它们都有缺陷
甚至可以在应用程序本身中隐式隐藏此键吗?如果应用程序自动显示数据,则无法保护该数据
你的应用程序必须将密钥存储在某个位置。无论您试图对代码进行多少模糊处理,仍然可以对其进行反编译(或者只执行模糊处理的部分,直到密钥出来)
或者从另一个角度来看:隐藏密钥是加密的一种形式。因此,现在需要第二个密钥来加密/解密第一个密钥。(但在模糊处理中,“密钥”是程序结构,比真正的加密算法更不安全。)
保护数据的唯一方法是在使用应用程序时,通过要求用户输入密钥(作为密码或某些单独的令牌)来避免存储密钥。
这意味着信任用户不会泄露密钥。您想要一个常量密钥来解密数据库吗?不,不可能。但即使是这样,你怎么能防止暴力强迫密钥解密数据库呢?看看这个:@JörnBuitink,我认为如果我们使用正确的密钥组合,AES-256可以很好地防止暴力。加密应该完成什么?如果你的应用程序自动解密并显示数据,它不会受到太多保护,是吗?隐藏是不可能的,因为你的应用程序必须能够实际使用密钥。即使我通过服务器向用户发送密钥,它仍然可以被破解,仅仅因为数据库存储在应用程序的本地?服务器如何区分真正的应用程序和邪恶的应用程序?