我正在开发安全的短信消息应用程序,所有的数据都加密使用AES密钥,这是从RSA密钥派生。我想使应用程序密码保护,因此这些密钥密码保护,这样就不可能提取密钥没有密码,即使设备是根等。所以我计划让用户输入密码在应用程序启动/恢复,如果密码是正确的,提取密钥,存储在内存中,使用密钥;当应用程序关闭/销毁时,删除密钥。
我想使用keystore,但是不知道它有多安全。
这是用https://developer.android.com/training/articles/keystore.html写的:如果应用程序的进程被攻破,攻击者可能能够使用应用程序的密钥,但无法提取他们的密钥材料(例如,在安卓设备之外使用)。如果Android操作系统被攻破,或者攻击者可以读取设备的内部存储,攻击者可能能够在Android设备上使用任何应用程序的Android Keystore密钥,但不能从设备中提取它们。
它的真正含义是什么?
什么是正确和安全的方法来解决我的问题?
发布于 2017-03-01 01:59:07
简而言之,Keystore允许您的应用程序将加密和解密视为黑匣子;您的应用程序可以指定操作、算法,甚至密钥id,但不能观察或干扰操作本身。这可以防止攻击者窃取您的密钥,即使是控制您的应用程序进程的攻击者;他们可以在设备上任意执行加密/解密,但无法看到实际使用的密钥。当然,一个有足够资金和动机的攻击者最终将能够提取密钥,但您的用户不太可能面对这样的攻击者,除非他们引起了一个规模庞大的政府的愤怒。
在您的场景中,将密钥存储在密钥链中将是降低大多数攻击者的风险的有效方法,即使是那些可以直接访问设备的攻击者,也可以窃取您的应用程序使用的密钥。与将它们存储在文件系统中或对它们进行硬编码相比,这是一种更安全的解决方案。对于您描述的场景,它应该足够了。
https://stackoverflow.com/questions/42509592
复制相似问题