如何保护我的应用不受Google本身的侵害?

时间:2019-11-06 15:48:42

标签: android

我制作了一个简单的应用程序,用于存储银行帐户,货币交易和其他敏感数据。存储的数据已被加密,根本没有网络访问权限,并且自身无法访问。但是,如何确保其他应用程序或操作系统本身不尝试读取该应用程序生成的数据?是否有可信赖的方法来查看何时和/或如何跟踪我的应用程序,甚至通过操作系统来跟踪我的应用程序,并记录该“可疑”活动?

我尝试去google并阅读了开发人员手册,但一无所获。

5 个答案:

答案 0 :(得分:4)

如果您说自己的数据是

已经加密

而不是寻找更好的加密方法。然后,您基本上会问一个与以下内容相差无几的问题:“我可以禁止操作系统访问屏幕缓冲区,而直接在硬件上呈现解密的数据吗?”

解决此问题的唯一完全安全的方法是创建自己的操作系统。

但是再说一次...您必须问自己:您是否信任硬件制造商?否则您的硬件将不会受到感染。 https://www.symantec.com/connect/forums/bios-level-malware

其他选项是:

  1. 信任开源。
  2. 参加您正在使用的开源和审核软件。
  3. 总有一种默默无闻的安全措施:如果您不是百万富翁,那么坏蛋将不会浪费时间来破坏最简单的保护措施。

答案 1 :(得分:3)

保护其他应用程序的数据是操作系统的工作。要确保这一点,您需要采取一些正确的措施,例如保护用于签名apk的密钥。用户还必须做一些事情(这是您无法控制的),例如不对他们的手机进行root操作,然后向其他应用授予root用户访问权限。在编程方面,没有什么太具体的。大多数应用程序间数据共享是选择加入的。

从操作系统保护应用程序的数据是一个很高的门槛-尤其是您所描述的:操作系统是否要尝试查看您的应用程序的数据。为了进行分析,通常会假设它了解有关您应用程序设计的所有信息,并且可能是任意不诚实的。我们假设采取了一些咨询措施,例如选择退出应用程序数据备份和在屏幕键盘上设置“私有”模式,这并没有达到他们的要求。

不幸的是,Android并未很好地保护您的应用不受操作系统/供应商的侵害。并且,根据您的个人观点,您可能会认为操作系统具有访问应用程序数据的权限,等同于操作系统供应商(实际上是Pixel手机,是Google)有权访问您应用程序的数据-尤其是如果他们可以提供操作系统会自动升级。

一个关键问题是输入和输出通过操作系统。用户在屏幕上的点击会先通过操作系统,然后再由操作系统将其传送到您的应用。然后,您可以对其进行加密,但是为时已晚。稍后,您将解密某些内容以显示给用户。但是,要在屏幕上显示的内容的描述会在操作系统将其传送到屏幕之前先经过操作系统。

当问题询问有关Android的当前状态时,答案是没有(通用)方法可将应用程序的数据与操作系统隔离。

但是我想在这个答案中指出两个积极的方面:

  1. 希望某些特定种类的数据。
    • 您可以隔离加密密钥。 Android随附与操作系统完全隔离的密钥库系统。借助此功能,例如,您可以创建数字签名而无需将密钥暴露给操作系统。
    • 如果仅在设备之外生成并加密了某些内容,则您可能能够显示它们。数字版权管理(DRM)是指试图使人们免于盗版电影的技术,它被认为是一条从内容所有者到屏幕的安全路径,而没有其他东西能够“看到”它。我对此没有太多细节,也不知道是否有任何方法使操作系统无法按实际实施方式进行部署
  2. 如果您愿意考虑使用一个较弱的威胁模型,即您说操作系统先“好”然后在以后变坏(例如,它被攻击者破坏),那么您也可以做一些事情。 。在这种情况下,您提到的加密开始有用。您可以这样做,以使攻击者无法立即访问应用程序的数据。他们必须等待用户输入加密密码或类似的密码。但是您必须弄清楚这有多少价值。

答案 2 :(得分:1)

在您的应用逻辑中使用 SHA256 加密方法。

此加密算法需要才能对文本进行加密和解密。

没有这种麻烦, 没有人 即使您的情况下的Google或OS也无法访问您的敏感数据。

如果您在Github上有项目,则将其放入 file_name.env (环境文件的扩展名)中,然后将此文件添加到 .gitignore 中,以便盐专用密钥不会存储在服务器上,而是您自己拥有!

因此,没有人可以访问您的加密敏感数据!

关注官方android文档: Android Developer doc for SHA256 Message Digest

答案 3 :(得分:0)

您可能还想使用一些依赖于自定义秘密密钥的加密,并且该秘密密钥的一部分已由用户本人提供。另外,请注意具有屏幕记录权限的应用程序,它们可能会运行前台服务,并假装在尝试在显示信息上捕获您的应用程序时做其他事情(截屏)。这是一种罕见的情况,我想我只是想在这里进行超级保护

答案 4 :(得分:0)

如果您的应用要保留数据,请使用EncryptedSharedPreferences

如果您的应用程序正在将数据发送到云,则会使用SSL / HTTPS对其进行加密。您可以在API调用中进一步编写encrypt / decrypt逻辑,以添加另一个间接级别。