【问题标题】:Is it really that hard to securely store a secret key in mobile platforms?在移动平台上安全地存储密钥真的那么难吗?
【发布时间】: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。不过,我不确定您是否可以对此做任何事情,只要您不切换到某种密码派生密钥。

标签: android ios security


【解决方案1】:

首先,Keystore 用于在将应用程序发送到商店之前对其进行签名,例如,如果您将应用程序发送到 paly/apple 商店,则使用 keystore/keychain 保护您的应用程序留在免受恶意软件的侵害,因为有人可以下载它,放置恶意软件并再次将其发送到存储! 另外,如果您更新旧应用程序的版本,您的客户无法更新旧应用程序,他们将同时安装两个版本,因为您的应用程序没有使用 keyStore/Keychain 链接,希望我清楚.

你在看什么:是一个带有加密信息的存储,在这种情况下我使用 Realm 因为 Realm 文件可以通过传递 512 位加密密钥加密存储在磁盘上(64 字节)。

【讨论】:

  • 我认为 OP 指的是this Keystore(特别是AndroidKeyStore)。
  • 他说:必须存储密钥:重点是用户不需要在线就可以从服务器获取它。,所以我认为他谈加密数据
  • 好吧,就像我说的,我相信问题中的“密钥库”是指应用程序可以在设备上存储加密对象的位置,而不是您用来签署 APK 的文件。跨度>
  • @Michael 是正确的。密钥应在第一次从网络中检索,然后存储在设备上。每次用户想要采取涉及密钥的操作时,都不需要联系服务器。对不起,如果我不够清楚。
猜你喜欢
  • 1970-01-01
  • 2015-11-24
  • 1970-01-01
  • 2014-10-18
  • 2015-07-04
  • 2015-07-21
  • 2020-12-21
  • 1970-01-01
相关资源
最近更新 更多