Xamarin KeyStore PasswordProtection 字段

Xamarin KeyStore PasswordProtection field

我正在使用 JAVA KeyStore class 来存储我的用户 OAUTH 令牌,用于诸如 Dropbox 之类的东西。

它按原样工作,但我担心它的安全性,因为我对它的存储方式或存储位置知之甚少。

http://www.howtobuildsoftware.com/index.php/how-do/ZPR/c-android-xamarin-monodroid-sqlcipher-correct-way-to-store-encryption-key-for-sqlcipher-database

我的代码基于上面的示例,没有提供的一件事是为什么密码字段为空。

所以我的问题是,这应该为空吗?或者它是否应该包含我的应用程序独有的密码,如果是后者,我将在哪里保护我的应用程序密码,因为我在这里有点先有鸡还是先有蛋的情况。

尼克。

one thing that is not provided is why the Password field is null.

该实施中的问题变成了 "password" 应该使用什么。

I'm in a bit of a chicken and an egg scenario here.

如果密码在应用程序中被硬编码,您也可以使用 null(恕我直言...但我曾与安全研究人员合作过,并且看到了他们的工具包和提供给方法调用的硬编码密码他们破解的时间不到 2 分钟,所以我想黑客可以在更短的时间内破解它),就好像 "password" 是通过 API 从 Web API 动态检索的一样=38=]非安全 通道。

注意:我不是说使用Null/blank密码就可以,我是NOT,继续正在阅读。

在每次使用密钥库之前提示用户输入密码(以滑动模式、密码短语、pin 等的形式)将采用这种实现方式 "more secure",但应用程序的成本是多少|用户可用性,只有您和您的用户才能确定应用程序的用例。就我个人而言,我喜欢我的银行应用程序提示我输入密码并通过短信和另一个密码验证访问权限,但那可能只是我一个人。

仅供参考:对于大多数黑客和研究人员来说,仅通过一个应用程序和密码就可以为多个站点窃取用户的 OAUTH 令牌是非常有吸引力的。

It's working as it is, but I'm concerned about the security

你应该是。

恕我直言,您所指的实施非常薄弱。至少,它应该检查并使用 Android Keystone 提供商 (AndroidKeyStore) 如果应用程序是 运行 至少 API 级别 18。如果您的应用程序仅支持 18 +(或者在 18+ 设备上是 运行),你不应该维护你自己的密钥库文件(再次恕我直言......但我无法想象安全研究人员不同意,但如果他们愿意听听他们的论点认为你应该)。

使用密钥库提供程序将您和您的应用程序从 creating/maintaining/securing 密钥库文件中删除,就像 OS 那样,它使用用户的 token/password/pin/lock-pattern/etc... 来保护实际的文件存储本身。 不再有先有鸡还是先有蛋的问题。

当然,这不包括您的应用检查 root 设备执行、恶意应用安装、当前安全漏洞测试、未打补丁 and/or 缺少安全补丁等...但至少它是开始 。 (我在一些非常安全的 devops 环境中工作过)。

此外,该实施并未检查安全硬件; IE。 KeyInfo.IsInsideSecurityHardware、KeyInfo.IsUserAuthenticationRequirementEnforcedBySecureHardware、等等……

Google 有一些很好的密钥库培训 material 涵盖了诸如密钥库提供者之类的主题:

https://developer.android.com/training/articles/keystore#java