查看原文
其他

Android Pie 引入 Keystore 新特性,安全防护再升级

Android 谷歌开发者 2019-05-01

作者: Lilian Young 和 Shawn Willden, Android 安全团队;Frank Salim, Google Pay 团队


我们希望更深入的了解您的开发实践与体验,以便为您构建更好的开发工具。所以我们诚挚的邀请您参与 Android 开发者问卷调研。您的回复是匿名的,我们仅进行汇总分析。此调查仅需 5-10 分钟即可完成。


长按下方☟二维码

参与 Android 开发者问卷调研



Android Pie 加入 Keystore 新特性


Android Keystore 为应用开发者们提供了许多加密工具来保护用户数据。Keystore 将软件库中的密码学原语从 Android OS 移植到安全硬件中,从硬件层面为密钥资料提供额外的安全防护,并确保密钥仅能够在安全硬件中被使用,因此即使设备遭受攻击,应用的机密数据也不会泄露。此外,Keystore 还允许应用限定密钥的使用方式和时间。


到了 Android Pie 之后,Keystore 也相应加入了一些新功能。在这篇文章中,我们会详细介绍其中的两项新功能: 其一是通过限制密钥的使用来达到保护敏感信息的目的;其二则是能够在简化安全密钥使用的同时,防止应用和操作系统访问密钥资料。


  • Android Keystore

    https://source.android.google.cn/security/keystore



键盘锁绑定密钥


如果用户当前并未在使用设备,移动端应用可选择延迟处理已经接收到的数据。Android Pie 利用键盘锁绑定密钥技术来保护应用在锁屏时收到的敏感信息,直至用户开始访问它们。当设备处于锁屏状态时,密钥可用于加密或认证操作,但是却不可用于解密或者签名。如果设备当前被 PIN, 图形或者密码锁定,任何试图使用这些密钥的操作都会失效。键盘锁绑定密钥可以在设备锁屏时保护用户数据,直到用户需要这些数据。


键盘锁绑定和验证绑定的功能类似,唯一需要着重强调的区别在于键盘锁绑定将密钥可用性与锁屏状态绑定在一起,而验证绑定则采用常量超时机制。当密钥键盘锁绑定功能启用后,一旦设备进入锁屏状态,密钥便会失效,直至用户重新解锁设备。


另外,还有一点请各位读者注意,鉴于安全硬件无法获知屏幕何时被锁定,因此键盘锁绑定由操作系统负责来强制执行而非安全硬件。但验证绑定的情况则与之不同,它是一款由硬件强制执行的 Android Keystore 特性。当验证绑定与键盘锁绑定配合使用时,设备将具备更高的安全防护级别。而且,由于键盘锁绑定属于操作系统功能,因此所有 Android Pie 设备都可以使用该功能。


任何由设备支持算法所编写的密钥均可启动键盘锁绑定功能。如果您需要生成或导入键盘锁绑定密钥,请在设置 KeyGenParameterSpec 或 KeyProtection 的 builder 对象时,调用 setUnlockedDeviceRequired(true) 方法。


  • KeyGenParameterSpec

    https://developer.android.google.cn/reference/android/security/keystore/KeyGenParameterSpec.Builder

  • KeyProtection

    https://developer.android.google.cn/reference/android/security/keystore/KeyProtection.Builder

  • setUnlockedDeviceRequired(true) 

    https://developer.android.google.cn/reference/android/security/keystore/KeyGenParameterSpec.Builder#setUnlockedDeviceRequired(boolean)



安全密钥导入


安全密钥导入是 Android Pie 引入的另一项新特性,它允许应用以一种更加安全的方式将现有密钥配置到密钥库中。密钥源可能是位于本地数据中心或云端的某台服务器,它会通过用户设备中的公共包装密钥来加密安全密钥,并生成 SecureKeyWrapper 格式的文件,其中包含了被导入密钥所允许的使用方式,而 SecureKeyWrapper 密钥只有在生成包装密钥的设备上的 Keystore 硬件中才能被解密。密钥在传输过程中完成加密,且对应用和操作系统均不可见,也就是说只有在导入到的安全硬件后才能使用这些密钥。

如果应用试图与 Android 设备分享密钥,但同时又想避免密钥在离开设备后被拦截,安全密钥导入功能便是这中情形下理想的选择。Google Play 已经利用该技术在 Pixel 3 手机上配置部分密钥,以确保密钥不会被拦截或者从内存中被提取。此外,安全密钥导入的企业用例也很广泛,比如,您可以从 CA 认证中心托管方恢复 S/MIME 加密密钥,以便使用同一把密钥在多个设备上解密电子邮件。


如果您想了解该特性的具体使用方法,请仔细阅读教程文档《Android 密钥库系统》中的相关部分。请注意,由于安全密钥导入是一款安全硬件特性,因此部分 Android Pie 设备可能无法使用该功能。应用可以调用 PURPOSE_WRAP_KEY 来生成一个密钥对,以此来鉴别所用设备是否支持安全密钥导入。


  • SecureKeyWrapper

    https://developer.android.google.cn/reference/android/security/keystore/WrappedKeyEntry

  • Android 密钥库系统

    https://developer.android.google.cn/training/articles/keystore#ImportingEncryptedKeys

  • PURPOSE_WRAP_KEY

    https://developer.android.google.cn/reference/android/security/keystore/KeyProperties#PURPOSE_WRAP_KEY



点击屏末 | 阅读原文 | 参与 Android 开发者问卷调研

推荐阅读


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存