java - Xamarin KeyStore PasswordProtection 字段
问题描述
我正在使用 JAVA KeyStore 类来存储我的用户 OAUTH 令牌,用于诸如 Dropbox 之类的东西。
它按原样工作,但我担心它的安全性,因为我对它的存储方式或存储位置知之甚少。
我的代码基于上面的示例,没有提供的一件事是为什么密码字段为空。
所以我的问题是,这应该为空吗?或者它是否应该包含我的应用程序独有的密码,如果是后者,我将在哪里保护我的应用程序密码,因为我在这里有点鸡和蛋的情况。
缺口。
解决方案
未提供的一件事是为什么密码字段为空。
该实现中的问题变成了应该使用什么“密码”。
我在这里有点鸡和蛋的场景。
如果密码是在应用程序中硬编码的,您不妨使用null
(恕我直言……但我曾与安全研究人员合作过,并且看过他们的工具包,并且提供给方法调用的硬编码密码对他们来说只需不到 2 分钟的时间就可以完成破解,所以我想黑客可以在更短的时间内获得它),就像通过非安全通道从 Web API 动态检索“密码”一样。
注意:我不是说使用 Null/空白密码是可以的,我不是,继续阅读。
在每次使用密钥库之前提示用户输入密码(以刷卡模式、密码短语、pin 等的形式)将使该实施方式“更安全”,但应用程序|用户可用性的代价是什么,只有你并且您的用户可以确定应用程序的用例。就我个人而言,我喜欢我的银行应用程序提示我输入密码并通过 SMS 和另一个密码验证访问权限,但这可能只是我。
仅供参考:对于大多数黑客和研究人员来说,仅通过一个应用程序和密码就能够为多个站点盗取用户的 OAUTH 令牌将非常诱人。
它按原样工作,但我担心安全性
你应该是。
恕我直言,您所指的实现非常薄弱。如果应用程序至少在 API 级别 18 上运行,它应该检查并使用 Android Keystone 提供程序 ( AndroidKeyStore
)。如果您的应用程序仅支持 18+(或在 18+ 设备上运行),则不应维护你自己的密钥库文件(再次恕我直言......但我无法想象安全研究人员不同意,但如果他们认为你应该听到他们的论点,我很想听听他们的论点)。
使用密钥库提供程序可以让您和您的应用程序像操作系统那样创建/维护/保护该密钥库文件,并且它使用用户的令牌/密码/pin/lock-pattern/etc... 来保护实际的文件存储本身。没有更多的鸡蛋问题。
当然,这不包括您的应用程序检查 root 设备执行、恶意应用程序安装、当前安全漏洞测试、未打补丁和/或缺少安全补丁等……但至少这是一个开始。(我曾在一些非常安全的 devops 环境中工作过)。
此外,该实现不检查安全硬件;IE。KeyInfo.IsInsideSecurityHardware、KeyInfo.IsUserAuthenticationRequirementEnforcedBySecureHardware 等......
谷歌有一些很好的密钥库培训材料,涵盖了密钥库提供者等主题:
https://developer.android.com/training/articles/keystore#java
推荐阅读
- arrays - 按双值Swift对字典进行排序
- java - 如何比较 Java 中的值数组以找到列表中的最大值?
- java - 如何传递 ArrayList
? - typescript - Typescript 未从“node_modules”文件夹中找到第 3 方模块
- prolog - 如何变成规则(Prolog)
- python - 在 Python 中绘制时间 AM/PM
- c++ - 如何使用 std::initializer_list 初始化结构?
- c# - TextBlock 与 TextBox 填充 - XAML WPF
- django - django template access to list item by forloop.counter
- c++ - 删除数组时出现strncpy char字符串问题