在 Android 上是不是有与 iOS 的钥匙串等效的用户凭据?

Posted

技术标签:

【中文标题】在 Android 上是不是有与 iOS 的钥匙串等效的用户凭据?【英文标题】:Is there an equivalent to iOS's Keychain for user credentials on Android?在 Android 上是否有与 iOS 的钥匙串等效的用户凭据? 【发布时间】:2011-06-21 07:57:35 【问题描述】:

android 上是否有与 ios 的 Keychain 等效的功能?

我对 Preferences API 的理解是它没有加密。对于我的应用程序,这些凭据是否跨设备保留并不重要(即与iPhone-like Keychain in Android? 不同的用例)

我还查看了 KeyStore API,但它似乎将用户凭据的实际存储留给了应用程序开发人员。

【问题讨论】:

【参考方案1】:

简短的回答,没有。但是您可以期望文件系统是安全的。

每个应用都在不同的用户下运行,用于存储应用数据的文件系统受普通 UNIX 用户权限的保护。因此默认情况下,每个应用程序的文件访问都是沙盒。文件系统也可能被加密。

开发者网站的这个页面解释得更好:http://developer.android.com/guide/topics/security/security.html

【讨论】:

当您使用密码或 PIN 码锁定 iOS 设备时,这些将用作私钥的一部分。 6 分钟破解仅适用于解锁设备。 当用户更改 iOS 密码时会发生什么?它解密/重新加密钥匙串? 每个 iOS 也都在自己的 sanbox 中运行。所以 UNIX 用户分离不是借口。权限分离不是加密存储的替代方案! 即使用户卸载并重新安装应用程序,如何在 Android 上保留密钥? 有一个,看下面关于SmartLock的答案(这是正确答案)。【参考方案2】:

http://developer.android.com/reference/android/security/KeyChain.html

OS 4.0 的钥匙串

【讨论】:

... 似乎只存储密钥和证书,而 not 用户凭据,这是提问者感兴趣的。 @SixtenOtto 您可以存储使用某些密钥加密的用户凭据,并将该密钥存储在钥匙串中。当然,还有更多工作要做,但这是可行的。 @DmitryZaytsev 您 2014 年的建议现在已在 Jetpack 安全库中实施:D @JemshitIskenderov 哈哈,很好。只用了 6 年 :D【参考方案3】:

扩展@DJPlayer 的回答:

一些相关文章。第三个包括一个 github 应用程序,该应用程序演示了使用密钥库提供程序生成密钥然后加密字符串。

Android Keystore System Where is the best place to store a password in your Android app? How to use the Android Keystore to store passwords and other sensitive information

另请参阅 Android Storage Options 了解存储加密密码的方法 - 我的建议是共享首选项。

请注意,根据具有 root 访问权限的第二篇文章以及您的应用程序如何使用密钥库的一些知识(可以通过反编译您的 apk 获得),有可能劫持私钥并使用它来解密加密材料(例如:永久密码)

【讨论】:

对于第三篇文章,一旦生成了密钥,然后用来加密明文,那么加密后的字符串存储在哪里?【参考方案4】:

其实有:

通过将 Smart Lock for Passwords 集成到您的 Android 应用中,您可以 使用他们的凭据自动将用户登录到您的应用程序 已保存。用户可以保存用户名密码凭据和 联合身份提供者凭据。

使用 Smart Lock for Passwords 将 Smart Lock for Passwords 集成到您的应用中 用于在登录时检索保存的凭据的凭据 API。采用 成功检索凭据以使用户登录,或使用 凭据 API 可通过部分完成快速加入新用户 您的应用程序的登录或注册表单。登录后提示用户或 注册以存储他们的凭据以供将来自动使用 身份验证。

https://developers.google.com/identity/smartlock-passwords/android/

【讨论】:

这个 API 并不能真正促进存储任意 OAuth 令牌等。它似乎更多地为用户提供了一种登录您的应用程序的方式。对于提供对其他服务的安全访问的应用程序,它没有用。并没有真正回答最初的问题 你可以换个角度看。如果您只能存储用户和密码,为什么不只保留它并仅在内存中维护令牌。每当应用程序重新启动时,它都会重新进行身份验证。不是很出色,但目前似乎是最安全的方式。 对于此类任务,我将重申“这不是等效或不适当的方法”。 Smart Lock 相当于浏览器中的“保存凭据/密码”。您可以在移动应用程序中使用浏览器中保存的“用户名/密码”,反之亦然。此外,此库需要 Google Play 服务,这并非适用于所有设备。

以上是关于在 Android 上是不是有与 iOS 的钥匙串等效的用户凭据?的主要内容,如果未能解决你的问题,请参考以下文章

Android中是不是有类似iPhone的钥匙串?

为啥 iOS 12 在完成注册过程时将用户名而不是电子邮件保存到钥匙串?

枚举我的 iOS 应用程序中的所有钥匙串项

iOS:新设备或恢复设备上的钥匙串

在 iOS 上存储身份验证令牌 - NSUserDefaults 与钥匙串?

iOS 钥匙串替代方案,无法在另一台设备上恢复