首页 > 解决方案 > Xamarin KeyStore PasswordProtection 字段

问题描述

我正在使用 JAVA KeyStore 类来存储我的用户 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

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

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

缺口。

标签: javaxamarinkeystoreandroid-keystore

解决方案


未提供的一件事是为什么密码字段为空。

该实现中的问题变成了应该使用什么“密码”。

我在这里有点鸡和蛋的场景。

如果密码是在应用程序中硬编码的,您不妨使用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


推荐阅读