【问题标题】:Serverless fingerpint auth无服务器指纹认证
【发布时间】:2021-10-07 20:31:52
【问题描述】:

In something like Android,可以简单地检查有效的指纹扫描并根据是否发生匹配来确定能力。据我所知,webauthn 似乎需要一台服务器来进行任何指纹扫描。真的吗?有没有办法简单地让一行代码不执行,除非发生操作系统认为有效的指纹扫描?

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

【问题讨论】:

  • 所以你的意思是你不在乎谁的指纹?还是你?您的问题在这方面是自相矛盾的:如果您隐含地信任客户而不是验证自己,您就无法安全地确保任何特定用户都提供了他们的指纹。
  • 操作系统(比如 touchID)是否不知道指纹是否与用于登录计算机的手指库匹配?
  • 确实如此,但在 WebAuthn 上下文中,TouchID/FaceID(或 PIN 码)仅用于保护存储在设备上的凭据,然后用于签署断言,然后在您的后端使用公钥。如果没有生成和验证断言的能力,您就没有保护任何东西,并且有人可以轻松绕过客户端检查。您暗示您有一个后端正在使用(AJAX 请求),所以正确执行此操作不可行吗?
  • @richie 是什么阻止我编译我自己的操作系统,它总是告诉您的应用“是的,这与我的数据库匹配”,即使我不是当前登录的用户......?跨度>
  • 没什么,但在这种情况下我不需要那么多的安全性。这是一个内部工具,需要有代码、在 vpn 上、手头有预共享的凭据等。我只是在寻找一种“是的,我确定”的行为,这种行为比简单的确认对话框更有意。跨度>

标签: javascript webauthn


【解决方案1】:

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

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

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

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

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

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

如果您在实施过程中遇到困难,我建议您选择许多现有的开源服务器之一:https://github.com/herrjemand/awesome-webauthn,或者这里有一篇关于如何验证断言的好文章 https://medium.com/webauthnworks/verifying-fido2-responses-4691288c8770(附注:您不需要证明)

【讨论】:

    【解决方案2】:

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

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

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

    您可以在没有后端服务器的情况下在本地请求 WebAuthn(并且互联网上有关于此效果的演示)。但是,您实际上不会对任何东西进行身份验证,因此它将是安全剧院。通常,后端是请求实际身份验证的后端,因此它会提供安全挑战。

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2017-12-10
      • 1970-01-01
      • 2021-12-14
      • 2019-06-03
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多