无服务器指纹认证

Serverless fingerpint auth

In something like Android,可以简单地检查有效的指纹扫描和基于是否匹配的能力。据我对 webauthn 的了解,看起来任何指纹扫描都需要服务器。真的吗?有没有办法简单地让一行代码不执行,除非发生 OS 认为有效的指纹扫描?

我不需要存储凭据,我只想在指纹扫描有效时发出 AJAX 请求,作为一种“是的,我确定我想这样做,并且OS 说我是登录用户”——即使这只是客户端检查。在这种情况下我可以接受。

您需要询问为什么要进行指纹扫描。

如果你没有服务器,你要求用户验证什么?您是否只是要求指纹作为超越 phone 锁定屏幕的任意障碍,让用户“感觉”他们更加安全?

无论如何,WebAuthn 旨在提供一种用户选择的身份验证机制。您没有关于用户身份验证方式的策略控制 - 例如,它可以通过输入 PIN 码来进行。

您可以在没有后端服务器的情况下在本地请求 WebAuthn(互联网上有这方面的演示)。但是,您实际上不会对任何内容进行身份验证,因此这将是一个安全问题。通常,后端是请求实际身份验证的后端,因此它会提供安全挑战。

所以首先让我们分开在 FIDO2/Webauthn 中执行的两个不同的操作。

  1. 用户验证 - 是一种验证用户真实性的行为。真的是里奇还是其他人?这是“生物识别”发生的地方,但它可以是例如个人识别码。指纹生物识别技术只是其中一种用户验证方法。用户验证由设备在设备上执行。服务器永远不会,也绝不能收到任何用户验证信息,因为这将严重侵犯隐私和安全。

  2. 身份验证 - 是一种证明您真实性的行为。在 FIDO2/Webauthn 的情况下,这是通过对挑战执行加密签名来完成的。

正在对某人进行身份验证。您去银行并向银行出示您的护照以验证您自己的方式与您去 FIDO 服务器并使用您的设备验证它的方式完全相同。

您无法在没有 FIDO 服务器的情况下进行身份验证,原因与您无法向银行验证自己的身份相同,并且在未经银行批准的情况下贷款 100,000 美元。

从更深入的技术角度来看:FIDO 身份验证器有一个私钥,而服务器有一个 public 密钥和一个凭证 ID。服务器生成一个随机的、每个会话的质询,并且设备的相应签名包含该质询。服务器保证挑战没有被修改,因为,好吧,服务器会做这些事情。如果你尝试实现客户端(浏览器)端验证,就像在浏览器端实现密码验证一样,一点也不安全。

如果您在实现方面遇到困难,我建议您选择众多现有开源服务器之一:https://github.com/herrjemand/awesome-webauthn, or here is a good article on how to verify assertions https://medium.com/webauthnworks/verifying-fido2-responses-4691288c8770(P.S。您不需要证明)