【发布时间】:2017-03-21 20:39:10
【问题描述】:
我在 Android 应用开发方面几乎没有经验,而在 iOS 方面几乎没有经验。我正在编写一个必须存储某个“密钥”的应用程序,我希望这个密钥以安全的方式存储。尽可能安全,合理的开发工作。必须存储密钥:重点是用户无需在线即可从服务器获取密钥。
我不确定哪个是两个平台的最佳解决方案。我已经阅读了一些关于 Android 中的 Keystore 和 iOS 中的 Keychain 的信息,但我不太了解它们的安全性。许多人说它们都不是真正安全的,因为攻击者可以对应用程序进行逆向工程,找到文件,访问......但最终人们已经将密码和密钥存储在 PC 上的某个地方几十年了,没有一种方法是 100%安全,所以我不明白这是否只是移动应用程序的偏执*(嗯,比平时更偏执),或者移动平台是否真的那么不安全。
假设 Keystore 和 Keychain 会为我提供保护密钥免受不太先进(或昂贵)攻击所需的安全性,是否合理安全?
PS不要误会,我和任何人一样重视安全性,而且我一直在努力。但是读到应用程序“不安全”“因为手机可能会被盗”,这让我开始质疑我们是否应该编写软件:)
【问题讨论】:
-
密钥的用途是什么?
-
另外,您的威胁向量是什么?你想保护谁不得到这把钥匙?
-
在 iOS 上,钥匙串是最好的安全性。但是它不会保护设备所有者,因为需要 DRM。
-
@Simone:在 Android 上,您可以在
AndroidKeyStore中生成SecretKey并使用它来加密/解密您的秘密字符串。通常只有您的应用程序才能使用此密钥 - 但是我不完全确定如果某些应用程序设法获得 root 权限是否是这种情况,因此您可能需要对此进行调查。 -
我担心的是,某些具有 root 权限的应用程序通过运行您的应用程序的 uid(或任何 Android 用于分隔 KeyStores 的方式)来管理获取您的应用程序的 KeyStore。不过,我不确定您是否可以对此做任何事情,只要您不切换到某种密码派生密钥。