【问题标题】:How to store secretkey in Android securely?如何安全地在 Android 中存储密钥?
【发布时间】:2016-12-28 04:10:20
【问题描述】:

我正在阅读有关存储密钥(用于加密/解密数据)的信息,但似乎没有办法实现这一点。攻击者实现这一点只会增加难度。

真的是这样吗?

到目前为止我得到了什么:

以共享偏好存储(私人模式)- Root 的手机将能够检索它。

NDK C/C++ 原生代码,创建 .so 文件 - 难以反编译,但可以调用此 .so 文件并检索它。

用于存储密钥的网络服务器看起来没用,如果必须发送凭据,恶意软件可能会记录密钥窃听。

我是不是太偏执了?

【问题讨论】:

  • 你从不偏执,但你必须与可用性合作
  • @pedrofb 我想是的......

标签: android security android-ndk cryptography


【解决方案1】:

为什么不使用 Android Keystore?它就是为此目的而设计的 https://developer.android.com/training/articles/keystore.html

Android Keystore 系统可让您将加密密钥存储在容器中,从而更难从设备中提取密钥

与共享首选项或私有文件(例如防止提取或密钥使用授权)相比,它具有相当大的优势我不考虑将私钥存储在服务器上

安全功能

Android Keystore 系统可保护密钥材料免遭未经授权的使用。首先,Android Keystore 通过防止从应用程序进程和整个 Android 设备中提取密钥材料,减少了在 Android 设备之外未经授权使用密钥材料的情况。其次,Android KeyStore 通过让应用指定对其密钥的授权使用,然后在应用进程之外实施这些限制,从而减少在 Android 设备上未经授权使用密钥材料的情况

在某些具有专用硬件的设备中,它是在其上实现的。作为程序员,您可以知道密钥是受硬件保护的

概念类似于 iOS KeyChain,但 IOS KeyChain 可以存储密码、生成和导入加密密钥,而 Android KeyStore 只允许应用程序生成加密密钥(没有导入功能)

也可以保护密钥,要求用户解锁设备和/或出示指纹

例如,为了保护密码,可以生成一个受指纹保护的密码密钥,并使用它来加密可以存储在首选项中的用户凭据

【讨论】:

  • 我读到了 Keystore。这是一个不错的功能,但仅适用于 Marshmallow 以后。因此,您将应用限制在非常小的群体中。
  • Android KeyStore 从 Android 18 (4.3 JellyBean MR2) 开始可用。在棉花糖中,可以使用指纹授权密钥使用。大约85%的用户至少在这个版本statista.com/statistics/271774/…
  • 对不起,你是对的。重读developer.android.com/training/articles/keystore.html我找到了。
  • 我在想……如果我的应用被篡改了怎么办?它仍然能够访问 Keystore,或者进行某种检查,例如针对 .apk 的哈希 SHA1 检查?
  • 由于攻击者没有您的签名证书,因此即使使用您的ID创建应用程序,他也无法替换您已安装的应用程序。在这种情况下,密钥库是安全的。如果用户直接安装未签名的 apk 或从商店下载已签名的应用程序,该应用程序是您的应用程序的黑客版本,则它可以创建和使用新密钥。您可以保护自己免受此验证签名和预期安装程序的影响。看这篇文章airpair.com/android/posts/…
【解决方案2】:

你是对的。大多数安全专家会告诉你,没有绝对安全的系统。考虑它的正确方法是攻击者必须使用多少资源来破坏您的系统。

然后,您可以在数据价值和其他考虑因素(例如解决方案的复杂性和其他成本)之间平衡您的安全措施。

为了详细说明您的示例,假设您不担心手机的合法所有者/用户是攻击者,您可以进行如下评估:

  1. 如果攻击者获得物理所有权,则对手机进行 Root 是一种风险。为了评估数据的价值与手机丢失/被盗的可能性之间的关系,然后负责获取密钥并知道如何获取手机的人。
  2. 掩盖秘密信息通常被认为是无用的。我个人认为这取决于具体情况。在这里,攻击者再次需要 root 手机等。隐藏秘密信息的问题是只需要一个人就能弄清楚你做了什么,并让这些信息完全可用,从而完全失去这样做的价值。
  3. 如果您有键盘记录器,您有什么安全措施?

您应该考虑使用“安全元素”的可能性。请参阅安全堆栈交换上的this post 以获取一些有用的信息。

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 2018-03-16
    • 2015-07-21
    • 2014-10-18
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多