自从开始学习移动计算以来,我经常错过有关安全性的讨论。然而,在我看来,这是移动计算的一个主要话题。开发安全的移动应用程序有几个方面:
- 如何在设备和服务器之间创建保存通信?
- 如何识别设备以及如何验证移动设备上的用户?
- 如何处理设备被盗的可能性以及随之而来的滥用设备上存储的数据和授予设备的访问权限?
可能还有更多,但我认为这些是关键问题。到目前为止,我想出了这个解决方案:
- SSL。
- 使用 OAuth 授予对设备的访问权限,然后存储访问 token AES 加密。通过请求解密 key (很可能是 PIN,因为在移动设备上更容易输入 PIN),在允许他访问应用程序之前检查用户的身份。
- 如果无法避免存储数据,请使用AES 加密。使用 2. 中提到的 key ,或者将解密 key 存储在服务器上,让应用程序每次都从那里请求它。万一被盗,请撤销 OAuth key 。 (这也将防止小偷从服务器检索解密 key 。)
您是否发现此方法有任何缺陷或可以改进该策略的任何地方?我试图在可用性和安全性之间找到平衡,因为它们似乎是对立的概念。
注意:这是一个通用概念,并非专门为某个操作系统设计。
最佳答案
这是开放式的并且非常笼统,所以 SO 可能不是最好的地方。你真的认为你可以用 3 个要点来概括吗?如果不指定具体的指导方针、参数和实践,您甚至不能尝试 promise 安全性。
- “使用 SSL”本身没有任何意义。有一百种滥用 SSL 的方法:信任每个证书、使用弱密码、使用易受攻击的协议(protocol)版本(SSLv2 等)、不检查吊销等等。
- 使用 AES 也不能保证太多:如果您使用 ECB 模式,或者在 CBC 模式下重复使用相同的 IV,您可能会受到攻击,或者您的 IV 不是真正随机的(真实示例:TLS 试图削减角与这个),等等,等等。
- 如果您将加密 key 存储在服务器上,那只是另一种攻击媒介:您真的相信服务器(您如何确保它是您自己的?)来存储/管理您的 key 吗?
所以,是的,有很多潜在缺陷,答案很简单:没那么简单。
关于android - 如何在移动应用中实现高安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886687/