Android P 安全性更新

2018 年 7 月 5 日 谷歌开发者

Android P 引入了若干可提升应用和运行应用的设备安全性的功能。 本页面介绍对第三方应用开发者最重要的变化,需要他们牢记在心。



统一的指纹身份验证对话框

在 Android P 中,系统代表应用提供指纹身份验证对话框。 此功能会创建标准化的对话框外观、风格和位置,让用户可以更放心地确信,他们是在根据可信的指纹凭据检查程序验证身份。


如果您的应用使用 FingerprintManager 向用户显示指纹身份验证对话框,请迁移应用的逻辑以改用 FingerprintDialog,后者依赖系统来显示该对话框。 注:在应用中使用 FingerprintDialog 之前,应该先使用 hasSystemFeature() 函数以确保设备支持 FEATURE_FINGERPRINT。


如果设备不支持指纹身份验证,可以回退为使用 createConfirmDeviceCredentialIntent() 函数验证用户的 PIN 码、图案或密码。



高可信度用户确认

发布时安装有 Android P 的受支持设备赋予您使用 Protected Confirmation API 的能力。 借助这个新增的 API,应用可以利用 ConfirmationDialog 的实例向用户显示提示,请他们批准一个简短的声明。 应用可以通过这个声明再次确认,用户确实想完成一项敏感事务,例如付款。


如果用户接受该声明,应用会收到由密钥哈希消息身份验证代码 (HMAC) 保护的加密签名。 该签名由可信执行环境 (TEE) 生成,该环境会对显示的确认对话框以及用户输入进行保护。 该签名具有很高的可信度,它表示用户已看过声明并同意其内容。


注意:Protected Confirmation API 不会为用户提供安全信息通道。 应用无法承担 Android 平台所提供机密性保证之外的任何其他保证。 具体地讲,请勿使用该 API 显示您通常不会显示在用户设备上的敏感信息。

用户确认消息后,其完整性将得到保证,但应用必须仍使用传输中数据加密来确保已签署消息的机密性。


要在应用中提供高可信度用户确认,请完成以下步骤:

1. 使用 KeyGenParameterSpec.Builder 类生成一个非对称签名密钥。 创建该密钥时,将 true传入 setUserConfirmationRequired()。 此外,调用 setAttestationChallenge() 以传递由依赖方提供的合适私钥保护值;

2. 向相应的依赖方登记新生成的密钥和密钥的认证证书;

3. 将事务详情发送至服务器,并让其生成并返回一个额外数据 blob。 例如,一项金融事务的额外数据可能包括金额、来源帐户和目标帐户。 该 blob 应包含加密随机数以防范重播攻击 {: .external-link},并且该 blob 还可包含应用特有数据。 服务器应将该 blob 和事务详情存储在本地;

4. 设置 ConfirmationCallback 对象,让它在用户已接受确认对话框中显示的提示时通知应用:

如果用户批准该对话框,则会调用 onConfirmedByUser() 回调。 dataThatWasConfirmedblob 是一个 CBOR 数据结构, {: .external-link} 其中包含用户看到的提示文本以及您传入 ConfirmationDialog 构建器的额外数据,还包含其他详细信息。 应用应使用之前创建的密钥签署 dataThatWasConfirmed blob。 然后您应该将该 blob 连同签名和事务详情回传给依赖方。


:由于密钥是使用 setUserConfirmationRequired() 创建的,因此只能用于签署以 dataThatWasConfirmed 参数形式返回的数据。


签署任何其他种类数据的尝试不会获得成功。 收到签名后,您的服务器应对其进行检查。 如果签名有效,您即可从 dataThatWasConfirmed 中提取 extraData 和 promptText,并验证 extraData 与之前存储的内容是否匹配。作为最后一项检查,服务器应检查 promptText 是否与出现在额外数据中的事务详情一致。如果此步骤成功,则服务器可以执行该事务,因为它已获得高可信度的确认,用户已看到并批准了 promptText 中的消息;

5. 添加与以下代码段所示内容类似的逻辑以显示对话框本身:

:包含全屏对话框的确认提示界面无法进行自定义。 但框架会为您处理按钮文本的本地化。



硬件安全性模块

发布时安装了 Android P 的受支持设备可拥有 StrongBox Keymaster,这个 Keymaster HAL 的实现位于一个硬件安全性模块内。 该模块包含自己的 CPU、安全存储空间、真实随机数生成器以及抵御软件包篡改和未经授权线刷应用的附加机制。 检查存储在 StrongBox Keymaster 中的密钥时,系统会通过可信执行环境 (TEE) 证实密钥的完整性。


为支持低能耗的 StrongBox 实现,为一部分算法和密钥长度提供了支持:

  • RSA 2048

  • AES 128 和 256

  • ECDSA P-256

  • HMAC-SHA256 (支持 8-64 字节密钥长度,含首末值)

  • Triple DES 168

使用 KeyStore 类生成或导入密钥时,您需要通过将 true 传递给 KeyGenParameterSpec.Builder类或 KeyProtection.Builder 类中的 setIsStrongBoxBacked() 函数,指示在 StrongBox Keymaster 中存储密钥的偏好。


:如果 StrongBox Keymaster 不可用于特定算法和与密钥关联的密钥长度,框架会引发一个 StrongBoxUnavailableException。



保护对密钥库进行的密钥导入

Android P 增加了密钥加密的安全性,添加了利用新增的 ASN.1 编码密钥格式将已加密密钥安全导入密钥库的功能。 Keymaster 随后会在密钥库中将密钥解密,因此密钥的内容永远不会以明文形式出现在设备的主机内存中。


:只有附带 Keymaster 4 的新发布设备支持此功能。


要支持以安全方式将已加密密钥导入密钥库,请完成以下步骤:

1. 生成一个使用 PURPOSE_WRAP_KEY 目的的密钥对。 建议也为该密钥对添加认证;

2. 在您信任的服务器或机器上,生成 SecureKeyWrapper 应包含的 ASN.1 消息。

该包装器包含以下架构:

3. 创建一个 WrappedKeyEntry 对象以传入字节数组形式的 ASN.1 消息;

4. 将该 WrappedKeyEntry 对象传入接受 Keystore.Entry 对象的 setEntry() 的重载。



 点击屏末  | 前往 “Android Developers 官方文档” 查看详细信息



推荐阅读:

· Android P Beta 3 现已发布!

登录查看更多
0

相关内容

Android(安卓)是一种以 Linux 为基础开发的开放源代码的操作系统,主要应用于便携设备。2005 年,Android 公司被 Google 收购,随后 Google 联合制造商组成开放手机联盟。Android 已从智能手机领域逐渐扩展到平板电脑、智能电视(及机顶盒)、游戏机、物联网、智能手表、车载系统、VR以及PC等领域。
【干货书】现代数据平台架构,636页pdf
专知会员服务
254+阅读 · 2020年6月15日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
大数据安全技术研究进展
专知会员服务
93+阅读 · 2020年5月2日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【论文推荐】小样本视频合成,Few-shot Video-to-Video Synthesis
专知会员服务
23+阅读 · 2019年12月15日
专知会员服务
36+阅读 · 2019年12月13日
AWVS12 V12.0.190530102 windows正式版完美破解版
黑白之道
29+阅读 · 2019年8月24日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
Advances in Online Audio-Visual Meeting Transcription
Arxiv
4+阅读 · 2019年12月10日
Arxiv
35+阅读 · 2019年11月7日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Monocular Plan View Networks for Autonomous Driving
Arxiv
6+阅读 · 2019年5月16日
Arxiv
136+阅读 · 2018年10月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
5+阅读 · 2016年10月24日
VIP会员
相关VIP内容
【干货书】现代数据平台架构,636页pdf
专知会员服务
254+阅读 · 2020年6月15日
Python导论,476页pdf,现代Python计算
专知会员服务
260+阅读 · 2020年5月17日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
大数据安全技术研究进展
专知会员服务
93+阅读 · 2020年5月2日
【实用书】流数据处理,Streaming Data,219页pdf
专知会员服务
76+阅读 · 2020年4月24日
深度神经网络实时物联网图像处理,241页pdf
专知会员服务
76+阅读 · 2020年3月15日
【论文推荐】小样本视频合成,Few-shot Video-to-Video Synthesis
专知会员服务
23+阅读 · 2019年12月15日
专知会员服务
36+阅读 · 2019年12月13日
相关资讯
AWVS12 V12.0.190530102 windows正式版完美破解版
黑白之道
29+阅读 · 2019年8月24日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
超级!超级!超级好用的视频标注工具
极市平台
8+阅读 · 2018年12月27日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
免费云真机测试 | 让您的应用完美适配 Android Oreo
引力空间站
3+阅读 · 2018年2月2日
相关论文
Advances in Online Audio-Visual Meeting Transcription
Arxiv
4+阅读 · 2019年12月10日
Arxiv
35+阅读 · 2019年11月7日
Area Attention
Arxiv
5+阅读 · 2019年5月23日
Monocular Plan View Networks for Autonomous Driving
Arxiv
6+阅读 · 2019年5月16日
Arxiv
136+阅读 · 2018年10月8日
Feature Selection Library (MATLAB Toolbox)
Arxiv
7+阅读 · 2018年8月6日
Arxiv
5+阅读 · 2016年10月24日
Top
微信扫码咨询专知VIP会员