你真的了解Android**库吗?

Android 的**库已经推出很多年了,它为应用开发者提供了一种使用加***进行身份验证和加密的方式。**库将**资料存放在应用的进程空间之外,因此,**资料不会在可能受到网络钓鱼攻击的情形下被应用意外透露给用户,不会通过其他某种渠道泄漏,也不会在应用遭到入侵时陷入危险之中。


许多设备也在安全硬件中为**库**提供基于硬件的安全机制,这种机制将**资料完全存储在 Android 系统之外,因此即使 Linux 内核遭受入侵,**资料也不会泄漏。在绝大多数 Android 设备中,安全硬件都是主 CPU 的一种特殊模式,其通过硬件与 Linux 内核及 Android 用户空间强制隔离。有些设备还使用单独的安全微处理器。

Android 提供的 API 可以让应用确定给定**库**是否处于安全硬件中,但是如果操作系统受到入侵,这些 API 将变得不可靠。**认证让设备的安全硬件可以验证某个非对称**是否处于安全硬件中,从而在 Android OS 遭受入侵时为**提供保护。



**库历史

**库最初在 Android 4.0 中引入,**采用用户的密码进行加密。Android 4.1 添加了使用设备安全硬件的基础架构。

在 Android 6.0 之前,**库仅支持 RSA 和 ECDSA。在 Android 6.0 中,**库得到显著增强,增加了对 AES 和 HMAC 的支持。此外,加密运算的其他关键要素(例如 RSA 补位1 和 AES 区块链接2 模式)也移入安全硬件中。

在 Android 6.0 中,**库还能够限制特定**的使用方式。可以应用的最有用限制是 用户身份验证绑定。这种限制允许将**的使用“绑定”到用户密码(他们的 PIN 码、图案或口令)或者指纹。对于密码身份验证绑定,应用开发者可以指定一个超时(以秒为单位)。如果自用户上次输入密码以来所经历的时间已超过指定时间,安全硬件将拒绝要求使用**的任何请求。指纹绑定**在每次使用**时都会要求新的用户身份验证。

还可以向 Android 6.0+ **应用其他更多技术限制。特别是,在创建或导入**时,需要指定**可用于哪些加密目的(加密、解密、签名或验证),为初始化向量或随机数指定补位与分组加密模式、摘要和熵源以及加密运算的其他详细信息。由于指定的信息以加密方式永久绑定到**资料上,**库将不允许以任何其他方式使用此**。因此,已经获取应用或系统控制权限的攻击者无法滥用**。为了帮助防止攻击,开发者应为给定**指定尽可能窄的用户范围。

Android 7.0 中引入了 Android **库最重要的变更之一。预装 Android 7.0+ 并带有安全锁定屏幕的新发布设备必须具有安全硬件,并支持基于硬件的密码身份验证和**库**。在 Android 7.0 之前,安全硬件支持比较分散,不过在未来几年,这项功能将逐渐统一。

在 Android 8.0 中,**认证已成为预装 Google Play 的所有新设备的强制选项。



为何使用**认证?

假设您正在开发一款应用,该应用让银行客户可以访问其银行余额、交易历史记录和账单支付系统。安全性至关重要;您肯定不希望捡到用户电话的任何人都能访问用户的银行账户。一种应对方式是使用用户的网站密码。但是这种方式对用户来说通常不方便,因为网站经常需要复杂的长密码,在小型触摸屏上输入这类密码不是很方便。

借助 Android **库,您可以生成一个非对称的身份验证**(例如 256 位 ECDSA **),让每位用户使用他们的复杂网络密码登录一次,然后在银行的客户账户数据库中注册公钥。在用户每次打开应用时,您都可以使用该 ECDSA **执行一次质询-响应身份验证协议。而且,如果您进行**身份验证绑定,用户在每次打开应用时还可以使用他们的锁定屏幕密码或指纹进行身份验证。这样一来,他们可以在自己的电话上使用更简单、更方便的身份验证机制。

如果攻击者入侵 Android 并尝试提取**,他们可能会无功而返,因为**储存在安全硬件中。

作为一名应用开发者,您可以利用**验证在自己的服务器上验证您的应用请求的 ECDSA **确实位于安全硬件中。请注意,在您的应用中使用验证意义不大;如果 Android OS 未被入侵并值得信赖,那么您可以直接使用 6.0 中引入的 KeyInfo 类来确定**是否处于安全硬件中。如果系统已被入侵,那么该 API 与您在设备上验证**认证的任何尝试都是不可靠的。

请注意,**认证与 SafetyNet 认证不同。它们的理念相同,不过认证的对象不同,来源也不同。**库**认证旨在声明加***位于安全硬件中并且具备指定的某些特性。SafetyNet 认证旨在声明设备是真实设备(不是模拟器)并且设备正在运行已知软件。SafetyNet 在幕后也使用**库**认证,因此,如果您想要了解设备完整性,请使用这种认证。如果您想要确认您的**位于安全硬件中,请使用**认证。

如需了解详细信息和示例代码,请关注本公众号并回复**” 了解我们的**认证培训文章。


查看全文及文中链接,请点击文末“阅读原文”。


推荐文章:

谷歌开发者快讯 #083

Android 支持库 v26 有哪些变化?

发布 Android Wear 公测版

中文视频首发 | Android 8.0 Oreo 推送通知的变化


你真的了解Android**库吗?