我有一个应用程序,可以将机密信息存储在位于应用程序私有数据文件夹中的文件中。
我想知道这样做有多安全。
据我所知,在Android设备上,其他应用程序无法访问该文件。
假设:
以某种方式获取该文件会有什么样的技巧?我的意思是:
是否有可能以某种方式完全保护该文件? 也许应用程序可以有一个自动启动服务来监视root用户身份。如果设备获得root权限,则服务会立即删除该文件。
谢谢!
答案 0 :(得分:2)
是否可以将设备设置为root(在此方案中),然后获取该文件?
是的,假设:
黑客能否从设备中取出闪存芯片,然后使用任何工具对其进行分析。
从理论上讲,如果没有物理损害它就不容易做到。
Android是否会进行任何加密以防止这种情况发生?
Android提供全盘加密,默认情况下在新的Android 5.0设备上启用。较旧的Android设备的全盘加密可能是强制性的;在这方面,Android 5.0似乎更强大,但只有时间会证明它是否也有缺陷。
是否有可能以某种方式完全保护该文件?
首先不要将文件放在设备上。
或者,使用足够强大的用户已知密码短语自行加密。你最终会达到a $5 wrench比试图破解设备更可行的方法。
也许该应用程序可以拥有一个监视root权限的自动启动服务。如果设备获得root权限,则服务会立即删除该文件。
您的应用程序在某些情况下没有运行,部分原因是操作系统不一定在正常模式下运行。
此外,即使您的应用程序正在运行,攻击者也会在通过锁定屏幕之后和尝试设置root访问权限之前强制停止它。
并且,这假设您的应用知道检测根访问的所有可能方法,这似乎不太可能。
我的应用程序需要读取和写入该文件,因此从黑客的角度来看加密是无用的
仅当您的应用程序需要“读取和写入该文件”而无需用户提供密码时。在这种情况下,你唯一的绝对防御就是没有文件。其他一切只会减慢攻击速度,但无法阻止它们。
答案 1 :(得分:1)
在非root用户设备上,应用程序在进程和文件系统级别进行沙盒处理。每个应用程序都有自己的文件系统空间,只有它可以访问。应用程序可以选择使文件世界读/写,但默认情况下不是。但是,正如一些评论和原始帖子中所述,如果设备已植根,则攻击者几乎可以在文件系统的任何位置访问文件。 Android 5.0通过启用完整的Linux SE策略来缓解这种情况,因此如果利用特权系统进程,它将受SE策略的限制。
话虽如此,最佳做法是假设一旦数据到达文件系统,如果没有受到保护,就可以读取它。您可以使用javax加密包来加密文件数据。最好通过正确散列的密码(PBKDF2)来保护它,以便为文件创建密钥,而不是在应用程序中对其进行硬编码。关于这方面的最佳方法有很多文章。
请注意,Android 5.0“加密文件系统”不是故障保护。加密文件系统为您提供的是在设备启动时保护数据分区。用户提供的密码在引导时用于挂载加密分区(就像桌面操作系统加密卷一样。)一旦挂载,它就像任何其他挂载的文件系统一样。