Android Fingerprint Security
安全性一直是移动开发的关键部分,正确实现它绝非易事。智能手机最初使用4位PIN码进行破解,最多需要10,000次破解。然后是锁定模式,尽管基本的人性极大地降低了这个数字,但锁定模式却将标准提高到了惊人的389112种不同的模式。 与PIN和锁定模式不同,指纹身份验证要提前数年。一个人的指纹确实是独一无二的,无法猜测。这项技术在消费类设备上正变得越来越流行,并且使用棉花糖,比以往任何时候都更容易在您的应用程序中实现它。
然后
除了我们已经写过的 iOS Touch ID之外,Android上指纹扫描的早期实现还不够。每个供应商都有其独特的方法来确保流程的安全性和实施,最重要的是,如何存储用户的私有数据。
现在
随着棉花糖的到来,人们期待已久的通过标准API对指纹认证的本机支持。最终,Android开发人员被允许对解锁设备,Play Store和Android Pay购买的产品实施基于指纹的身份验证,并在移动银行等安全性高的应用程序中提供自定义身份验证。
Google首次在Nexus 5X和Nexus 6P上推出,并推出了快速安全的Nexus Imprint指纹传感器,该技术还带来了Android 6.0棉花糖指纹传感器API的首个实现。可以在不到600毫秒的时间内识别出指纹,从而提供快速舒适的用户体验。
指纹存储安全
Android上的大多数存储策略都是不安全的,尤其是考虑到root用户访问权限的可能性时。但是Google已通过将所有打印数据操作移至可信执行环境 (TEE)并为制造商必须遵循的指纹数据存储提供了严格的指导方针,朝着正确的方向迈出了显着的一步。
三通
TEE是智能手机主处理器的安全区域。它保证了内部加载的代码和数据的机密性和完整性。这种分离可实现安全性和保护,免受黑客,恶意软件和root用户访问。
- 所有指纹数据操作均在TEE中执行
- 必须将所有指纹数据保护在传感器硬件或受信任的内存中,以便无法访问指纹图像
- 指纹数据只能以加密形式存储在文件系统上,而不管文件系统本身是否已加密
- 删除用户必须导致删除用户现有的指纹数据
- 根访问不得破坏指纹数据
指纹模板
指纹模板是原始指纹数据的已处理版本。为了遵守准则,必须对它们进行密码认证。这意味着必须使用专用于设备的私钥和足够的其他数据(绝对文件系统路径,finger ID和组)对它们进行签名,以明确定义它们的绑定关系。结果,如果将这些模板复制到另一个设备或另一个用户尝试使用它们,则这些模板将变得无用。
最后,指纹数据不会备份到用户的计算机或Google的服务器上。它不会被设备上的任何其他应用程序同步,共享或使用,也不会离开设备。应用程序收到的唯一信息是指纹是否已通过验证。这也意味着用户必须在每个新设备上设置指纹认证。
听起来不错,该如何实施?
指纹认证无非就是数据加密。它涉及一个密钥,一个执行加密的密码以及一个处理整个过程的指纹管理器。从开发人员的角度来看,该过程有些广泛,但它包含相对简单的步骤。
在项目AndroidManifest文件中请求指纹身份验证权限。
启用任何锁定屏幕安全机制(PIN,图案或密码)。
在设备上注册至少一个指纹。
创建的实例FingerprintManager。
使用Keystore实例来访问Android Keystore容器。
使用KeyGenerator该类生成加密密钥,并将其存储在Keystore容器中。
Cipher使用先前生成的加密密钥初始化该类的实例。
使用Cipher实例创建一个CryptoObject并将其分配给实例化FingerprintManager。
调用实例的authenticate()方法FingerprintManager。
成功完成身份验证后处理回调,从而提供对受保护的内容或功能的访问。
Google提供了全面的指纹认证示例,并且在线提供了一些教程,可以助您一臂之力。
Android的指纹认证和支持实现的设计和执行非常好。将其用作任何形式的多因素身份验证的拥有元素,已足以为您提供快速,可靠和安全的身份验证体验。
您可以在科罗拉多州丹佛市举行的360andev会议上听到我们谈论指纹安全性和应用程序安全性最佳实践的信息。
那有什么收获呢?
只有一个,并且其他所有方法都具有相同的缺陷。指纹认证只有一个故障点。就像用手指来解锁设备一样吸引人,您到处都是手指。潜在的攻击者可以毫不费力地举起您的指纹,然后使用它来控制您的设备和应用程序。
不幸的是,与密码不同,您的指纹显然是无法更改的。