gpt4 book ai didi

android - 使用软件/硬件支持的 Android Keystore 和可能的安全/可用性缺陷

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:10 24 4
gpt4 key购买 nike

我目前正在研究在 Android 应用程序中存储/使用 key 的可能性。我找到了 Nikolay Elenkov's blog关于这个主题非常有帮助,我学到了很多关于 Android keystore 和一些基于硬件的实现的知识。

我仍然对安全和用户体验方面有一些疑问。

软件 keystore

据我了解,在此配置中,从用户密码(加上盐以防止彩虹表攻击)派生出一个主 key (使用 PBKDF2)并用于加密 secret 。据我所知,密码是用于锁定屏幕的密码。

在非 root 手机上,只有用户“keystore”能够读取/写入加密文件,并且每当应用程序想要访问文件时,它必须调用 keystore 守护进程来检查它的 UID 是否被授权访问此文件(授权存储在 sqlite 数据库中)。

但是还有一些细节我想不通:

  • 使用 keystore 是否会强制使用受密码保护的锁定屏幕?
  • 每次需要访问加密 key 时,用户是否都必须输入他/她的密码?
  • 鉴于它是一种纯软件机制,我认为无论何时用于加密操作的 secret key 最终都会在 RAM 中解密,对吗?

基于硬件的 keystore

至于基于硬件的实现,SoC 制造商似乎提供了符合 [Global Platform TEE][2](可信执行环境)的解决方案,其中嵌入了可信应用程序和 API,使 Google 能够提供其 keystore 的硬件支持实现。因此可以在 TEE 中存储 key ,在 TEE 中请求创建 RSA key 对,并使用存储在 TEE 中的 key 对数据进行签名或检查。这样一来,人们就可以使用 key 进行基本的加密操作,而无需离开 TEE。

如果我没记错的话,对这些 key 的访问控制是由 Google keystore 守护程序使用与软件实现中相同的机制提供的。唯一的区别是使用对存储在 TEE 中的 key 的引用,而不是加密 key 本身。

如果前面所述的一切都是正确的,我猜想可以在 root 手机上修改权限数据库,以便具有任意 UID 的应用程序可以使用存储在 TEE 中的任何 key 对数据进行签名。我说得对吗?

感谢您的宝贵时间!

最佳答案

  • 使用 keystore 是否强制使用密码保护锁屏幕?

是的,用户被迫使用锁定屏幕,通过密码、个人识别码或图案进行保护。

  • 用户每次访问时是否都必须输入他/她的密码需要加密 key ?

不,一旦设备解锁,KeyStore 也会解锁,无需输入额外的密码。但是,应用程序应检查 KeyStore 是否已解锁,因为用户可以在设置中禁用锁屏保护。一旦 key 锁定被禁用,KeyStore 将变得未初始化,必须再次解锁。

有几次我遇到了一个奇怪的行为,当 KeyStore 被锁定时,但我没有设置锁屏保护。系统提示我输入密码或 PIN 码以进入 KeyStore。但是,这是不可能的,因为我没有任何密码。我假设某些系统应用程序正在锁定 KeyStore。我必须重置它才能重新初始化。

  • 鉴于它是一种纯软件机制,我认为 key 可以每当用于加密时,总是在 RAM 中解密操作,对吗?

是的,从 KeyStore 检索到的所有 key 都将驻留在 RAM 中,直到被垃圾收集或取消初始化。但是您可以在每次需要时获取 key ,而不是将其保存在某个长期存在的变量中。

不幸的是,我不熟悉硬件支持的 KeyStore。不能说什么。

关于android - 使用软件/硬件支持的 Android Keystore 和可能的安全/可用性缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com