安卓应用安全

5

我希望开发一个应用程序,其中用户数据非常敏感。我是开发新手,不确定以下技术是否对安全或效率必要。请留下你的评论。先谢谢。

  1. 为了提高安全性,我们可以避免使用市场(Play Store),并在个人设备上安装应用程序。这样做是否更安全?

  2. 我需要将数据存储在设备上。如何使数据安全,以便其他应用程序无法读取它?

1个回答

3
  1. 是的,你可以在不使用Google Play应用的情况下安装你的应用。这是否更安全取决于您的安全要求。一般来说,从谷歌市场安装应用程序比从其他来源更安全。如果你想避免任何形式的安装,你可以考虑使用/实现一个应用程序阻止器(例如AppLock)或Kiosk模式应用程序(SureLock Kiosk Lockdown)。

    安装的应用程序越少,受到攻击的可能性就越小(恶意软件,木马,潜在的不需要的程序)。因此从这个角度来看:是的,确实如此。然而,只要您没有root设备,应用程序数据(数据库,首选项)是相当安全的。写入SD卡的数据可以加密。

  2. 说到非Root设备:应用程序数据(首选项和数据库)以相当安全的方式保存。没有其他应用程序可以访问它。从SD卡中写入的数据可以通过具有许可android.permission.READ_EXTERNAL_STORAGEandroid.permission.WRITE_EXTERNAL_STORAGE的任何其他应用程序读取。您必须加密此数据。

    看看Root设备:你(几乎)没有机会以安全的方式存储数据,因为用户/攻击者可以安装任何工具来分析完整的内存和存储。在这里“几乎”意味着,您可以尽可能地隐藏您的加密/解密算法,使得很难在SD卡上解密数据。最终,破解您的加密只是努力的问题。

p.s.如果您想深入了解技术细节,您可以查看此书

p.p.s. 想象一下以下的情况:有人偷走并对您的手机进行 root 处理。在这种情况下,窃贼很容易复制数据库并读取您表中的所有内容。让我补充一点:这是一件非常容易做到的事情,因为现在互联网上存在许多 rooting 工具和手册,同样适用于之后访问应用程序数据。

加密可以使应用程序数据更难读取,如果您在每次应用程序启动时要求用户输入加密密码,那么它甚至可能达到 100% 安全(假设密码强度高且未存储在应用程序中,并且应用程序在偷窃时未运行)。当然,您还必须选择一个强大的加密算法(如 AES,Twofish 等)。

但是,只要您不失去手机并且手机没有被 root,您的数据就是安全的 - 很可能是这样。我说“很可能”是因为过去曾经出现过一些漏洞,可以获得系统范围内的访问权限。

因此,您可以看到这严重取决于您的需求以及数据的敏感程度。


非常感谢您提供的信息丰富的回复。我正在开发的应用程序将在未经root处理的设备上运行,并且数据将存储在手机内存而不是SD卡中。我是否仍应考虑加密?如果是,哪种加密方式最佳实践? - Salah
非常感谢Trinimon!更具体地说,我正在开发的应用程序是这样的:1.用户回答一些查询,如果用户有数据连接,则在提交后将其发送到远程服务器(https)。所以这对于安全性来说很好。如果用户没有数据连接,则该应用程序将其存储在设备内存中。因此,我的问题是,在存储之前,我应该如何加密它?当数据连接时,它会发送到服务器。基本上,我想保护数据,使其他应用程序无法读取它。而且设备肯定没有被root。 - Salah
诚然,我上面的场景有点偏执,但如果您处理极其敏感的数据(现金交易等),可能需要使用最大的安全性。如果手机没有被root并且被视为安全设备,则应用程序数据由于沙盒原则而是安全的。这里没有问题。我喜欢有一种安全网,因此我会使用强密码加密敏感数据,并将其隐藏在代码中,以使重构更加困难。如果您需要更高的安全性,请让用户在应用程序启动时输入一个PIN码,该码是加密密码的一部分。 - Trinimon
我所说的应用程序每次用户想要填写表单时都需要密码才能进入。一旦连接到数据,提交后将发送到服务器。如果没有数据,则需要在设备上临时存储。根据您的答案和特定情况,我们不必过于关注安全性。我是新手。为了使这个表单数据更加安全,最好的加密实践是什么?我的意思是,在用户提交表单后,所有数据都需要加密以存储在设备上。并在发送到服务器之前进行解密。我应该遵循什么技术? - Salah
你可以将数据存储在首选项、数据库表或文件中。你的选择有点取决于数据量和是否有结构化数据或只有二进制流。无论如何,你都可以使用AES-256。请查看http://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja或https://dev59.com/f-o6XIcBkEYKwwoYQibQ。 - Trinimon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接