有很多资源讨论指纹的安全性,但我还没有找到一个非常基本的问题的答案。
在最简单的密码验证场景中,密码从客户端发送到服务器,服务器验证其正确性。因此,如果有人不知道密码,他们就无法访问。
然而,就指纹而言,据我所知,指纹只存储在设备本身上,因此该设备负责验证指纹是否正确。那么,服务器如何确保设备已经验证了指纹,而不只是一个总是返回“指纹有效=真”的假指纹呢?
发布于 2022-04-06 18:51:23
这完全取决于它是如何实现的。一个简单的实现可能将用户的手指模板存储在服务器端,并且每次都将用户的指纹发送到服务器进行身份验证。
更好的实现将使用像FIDO这样的标准,FIDO依赖于公钥加密技术。当用户向服务注册时,FIDO客户端生成一个公钥对,将公钥发送到服务,并将私钥安全地存储在设备上。随后,每当用户试图对服务进行身份验证时,该服务将向用户发送随机挑战。用户的FIDO客户端将用私钥签名挑战,并将其发送回服务器。服务器将使用公钥验证签名,如果签名有效,则将对用户进行身份验证。
请注意,此过程并不能证明指纹的有效性,它只证明客户拥有原始私钥。验证指纹取决于客户端,客户端通常通过将私钥和指纹模板存储在单独的防篡改设备或安全飞地中来完成。在安全飞地中也进行指纹验证和身份验证挑战签名,以便外部恶意进程不能干扰。用户的职责是确保他们只使用可信赖的客户端。这与传统的基于密码的系统没有什么不同,在这种系统中,使用恶意客户端也会导致密码受到破坏。
https://security.stackexchange.com/questions/260989
复制相似问题