Xamarin KeyStore PasswordProtection字段

时间:2019-01-27 09:34:52

标签: java xamarin keystore android-keystore

我正在利用JAVA KeyStore类为诸如Dropbox之类的东西存储用户的OAUTH令牌。

它一直在工作,但是我担心它的安全性,因为我对它的存储方式或存储位置知之甚少。

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

我基于上面的示例创建代码,未提供的一件事是“密码”字段为空的原因。

所以我的问题是,这应该为空吗?还是应该包含我的应用程序专用的密码,如果是后者,我应该在哪里保护我的应用程序密码,因为我在这里遇到了麻烦。

尼克。

1 个答案:

答案 0 :(得分:2)

  

未提供的一件事是“密码”字段为空的原因。

该实现中的问题在于应使用什么“密码”。

  

我在这里有点鸡和蛋的情况。

如果在应用程序中对密码进行了硬编码,则最好使用null(恕我直言...,但是我与安全研究人员合作,看到了他们的工具包,并且提供给方法调用的硬编码密码较少他们花了不到2分钟的时间才能破解,所以我可以想象黑客可以在更短的时间内拥有它),就像“密码”是通过 non-secure 频道。

注意:这并不是说使用空/空白密码是可以的,不是,继续阅读。

提示用户在每次使用密钥库之前输入密码(以滑动方式,口令,密码等形式输入)将使该实现方式“更加安全”,但以用户易用性为代价,只有您和您的用户才能确定该应用程序的用例。就个人而言,当我的银行应用提示我输入密码并通过短信和另一个密码输入来验证该访问权限时,我会喜欢它,但这可能仅是我自己。

仅供参考:对于大多数黑客和研究人员而言,仅通过一个应用程序和密码就能够为多个站点昵称用户的OAUTH令牌十分诱人。

  

它一直在工作,但我担心安全性

你应该的。

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

使用密钥库提供程序会使您和您的应用在操作系统执行操作时就无法创建/维护/保护该密钥库文件,并且使用用户的令牌/密码/ PIN /锁模式/等来保护实际的文件存储本身。 没有鸡蛋问题。

当然,这并不涵盖您的应用检查root设备执行情况,恶意应用安装,当前的安全漏洞利用测试,未打补丁的安全补丁和/或缺少的安全补丁等...,但这至少是一个开始。 (我曾在一些非常安全的devops环境中工作过。)

此外,该实现不检查安全硬件;即。 KeyInfo.IsInsideSecurityHardware,KeyInfo.IsUserAuthenticationRequirementEnforcedBySecureHardware等...

Google提供了一些不错的密钥库培训材料,涵盖了诸如密钥库提供者之类的主题:

  

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