
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
佛山IT培训:许多设备也在安全硬件中为密钥库密钥提供基于硬件的安全机制,这种机制将密钥资料完全存储在 Android 系统之外,因此即使 Linux 内核遭受入侵,密钥资料也不会泄漏。Android 的密钥库已经推出很多年了,它为应用开发者提供了一种使用加密密钥进行身份验证和加密的方式。
在绝大多数 Android 设备中,安全硬件都是主 CPU 的一种特殊模式,其通过硬件与 Linux 内核及 Android 用户空间强制隔离。有些设备还使用单独的安全微处理器。密钥库将密钥资料存放在应用的进程空间之外,因此,密钥资料不会在可能受到网络钓鱼攻击的情形下被应用意外透露给用户,不会通过其他某种渠道泄漏,也不会在应用遭到入侵时陷入危险之中。
Android 提供的 API 可以让应用确定给定密钥库密钥是否处于安全硬件中,但是如果操作系统受到入侵,这些 API 将变得不可靠。密钥认证让设备的安全硬件可以验证某个非对称密钥是否处于安全硬件中,从而在 Android OS 遭受入侵时为密钥提供保护。
为何使用密钥认证?
假设您正在开发一款应用,该应用让银行客户可以访问其银行余额、交易历史记录和账单支付系统。安全性至关重要;您肯定不希望捡到用户电话的任何人都能访问用户的银行账户。一种应对方式是使用用户的网站密码。但是这种方式对用户来说通常不方便,因为网站经常需要复杂的长密码,在小型触摸屏上输入这类密码不是很方便。
借助 Android 密钥库,您可以生成一个非对称的身份验证密钥(例如 256 位 ECDSA 密钥),让每位用户使用他们的复杂网络密码登录一次,然后在银行的客户账户数据库中注册公钥。在用户每次打开应用时,您都可以使用该 ECDSA 密钥执行一次质询-响应身份验证协议。而且,如果您进行密钥身份验证绑定,用户在每次打开应用时还可以使用他们的锁定屏幕密码或指纹进行身份验证。这样一来,他们可以在自己的电话上使用更简单、更方便的身份验证机制。
如果攻击者入侵 Android 并尝试提取密钥,他们可能会无功而返,因为密钥储存在安全硬件中。
作为一名应用开发者,您可以利用密钥验证在自己的服务器上验证您的应用请求的 ECDSA 密钥确实位于安全硬件中。请注意,在您的应用中使用验证意义不大;如果 Android OS 未被入侵并值得信赖,那么您可以直接使用 6.0 中引入的 KeyInfo 类来确定密钥是否处于安全硬件中。如果系统已被入侵,那么该 API 与您在设备上验证密钥认证的任何尝试都是不可靠的。
请注意,密钥认证与 SafetyNet 认证不同。SafetyNet 认证旨在声明设备是真实设备(不是模拟器)并且设备正在运行已知软件。SafetyNet 在幕后也使用密钥库密钥认证,因此,如果您想要了解设备完整性,请使用这种认证。如果您想要确认您的密钥位于安全硬件中,请使用密钥认证。
佛山IT培训:它们的理念相同,不过认证的对象不同,来源也不同。密钥库密钥认证旨在声明加密密钥位于安全硬件中并且具备指定的某些特性。学习Android开发,就来佛山达内。