我可以在我的网站上使用指纹扫描器吗?

22

我正在制作一个Web应用程序,并希望拥有一个安全区域,您只能使用指纹登录。我的最初想法是只使用USB条形码阅读器进行扫描,然后将其输出到文本框中的ID,但这并不太安全。因此,我想使用USB指纹阅读器来为每个人生成哈希值,并将其存储在文本框中,然后针对具有每个人哈希值的数据库进行检查。是否有人知道是否有可以实现这一点的指纹阅读器,或者有没有办法将读卡器轻松集成到网站中?

编辑: 这个网站的想法就像一个登录系统(有点像您如果按小时计费,则可以打卡上下班)。这个想法是没有人可以代表别人签到和签退。如果您只使用密码,那么某个人可以告诉他们的朋友密码,让他们输入。这就是为什么我想到了指纹或类似物的原因...我愿意听取其他建议

另外,我正在使用PHP

编辑2:基本想法是我必须想出一种方法来证明某人在那里签到。我不想使用密码,因为某人可以告诉其他人他们的密码以输入。还有其他建议吗?不一定是指纹。


这可能是个冒险,但你可以考虑一下ActiveX吗?它需要在客户端进行打印,然后我猜你可以上传到服务器进行验证? - Mr Shoubs
对于任何说“这是不可能的”的人,我不同意,因为今天我在伊斯坦布尔的一个政府机构亲眼看到了,他们使用连接到普通Windows PC的生物识别读卡器获取了我的生物特征信息,并且他们运行的应用程序是在Google Chrome中运行的常规网页。 - Normal
这是一篇写于2022年11月11日的参考资料,供任何可能会发现此内容有用的人使用 https://stackoverflow.blog/2022/11/16/biometric-authentication-for-web-devs/ - Normal
6个回答

20

生物特征识别作为身份验证的方式有很多缺点:

  1. 本质上它们只是你永远无法更改的密码。(至少不会没有痛苦地更改!)使用传统密码方案时,如果你的密码被盗或猜中,你至少可以更改它。但是如果有人偷了你的指纹,你该怎么办呢?
  2. 生物特征并不是秘密的。每次你接触某些东西时,都会留下你的密码。每次拍照时,你的面部图像/视网膜图像都会被复制。为了有用,密码必须保持秘密。

  3. 就像Borealid所说的那样,生物特征在扫描时永远不会完全相同。因此,在进行匹配时,必须允许输入一些模糊因素。这样:

    1. 只会使攻击者更容易复制您的数据并重放它,因为他们不必获得完全匹配。攻击者只需要接近就能够被接受。

    2. 它强制身份验证服务器以明文存储您的生物特征信息。您不能像密码一样散列生物特征数据,因为那样你就必须与散列值完全匹配。

所以不要这样做!


我认为生物识别作为多因素身份验证中的一个因素仍然很有用。 - Mohayemin
我认为如果一个人可以复制指纹,那么密码也一样。这不是指纹数据不安全的问题,而是在线处理方式的问题。如果从扫描仪到服务器的信息通过多级保护进行安全传输,就像http://camsunit.com/application/html-based-fingerprint-scanner-for-website-authentication-and-attendance.html中所解释的那样,我相信它比密码更安全。 - Ravanan

18

您不能完全做您想做的事情。

指纹永远不会完全匹配。 即使您连续两次扫描自己右手食指,扫描结果也不会相同。 因此,“对指纹进行散列”将不起作用- 由同一指纹生成的两个哈希将无法从两个不同指纹的哈希中区分出来(使用强加密哈希)。

指纹阅读器通过在设备上存储一些密钥,并仅在所给的指纹与预期接近时才放行该密钥。 指纹本身不用于获取除读卡器之外的任何直接访问。

不可接受的是将由读卡器记录的指纹通过网络发送-人们不愿意向警方提供他们的指纹信息。 您认为他们会愿意将它们提供给您吗?

另外,读卡器说“指2可以”,这也是不可接受的。 这很容易被欺骗。

相反,让用户使用X.509(SSL)客户端证书访问您的站点。 如果他们愿意,他们可以通过指纹阅读器控制对其私钥的访问。

编辑:更新此答案。现在,2014年有来自FIDO联盟的名为“UAF”的标准,使站点可以以跨不同站点工作的方式使用指纹身份验证。 据传Paypal即将开始使用它。


我同意,人们不想分享自己的指纹,所以我考虑使用哈希值,因为那是一个数字,对于除了进行身份验证的数据库之外的任何人来说都没有意义。但是我理解您所说的它们不匹配的问题。 - Bill
3
使用智能卡。它们设计用于您尝试完成的任务。 - Borealid
“指纹永远不完全匹配。”我认为在哈希之前使用某种形式的错误校正可以解决这个问题。 - CodesInChaos
当然,在哈希之前而不是之后进行错误校正是必要的。我认为在输入上进行错误校正应该可行。在原始测量之后,您可以创建一些错误校正位,用户可以将其应用于其测量,以使所有足够接近原始测量的测量都与其相同。用户在哈希之前应用此错误校正。 - CodesInChaos
@CodeInChaos:存储/比较指纹特征的表示而不是实际指纹是行不通的,因为有组合上许多不同的方法来比较两个指纹。如果存在单一的“规范”向量表示,能够代表一个指纹,难道你不认为警方(以及类似Clear Registered Traveler的程序)会使用它,而不是通过数据库进行漫长且计算复杂的搜索来寻找指纹匹配?找到一个已经完成你所建议的事情的人,或者甚至是提出这种可能性的研究论文。可惜的是,没有这样的论文。 - Borealid
显示剩余4条评论

4
远程身份验证的生物识别技术永远不安全。你无法确定读取器中是否有真实的指纹,或者用户是否只发送了一张图片。因此,指纹只成为用户无法更改的密码,对于您登录的每个服务来说都是相同的,并且留在用户接触的每个物体上。
生物识别只能用于本地认证,您信任读取器未被黑客攻击(即您对读取器具有物理控制权),并且读取器可以区分真实的手指/眼睛/...和假的手指/眼睛/...。但大多数读取器都做不到。
可以创建指纹的单向哈希值。首先,您需要提取一些可观察值,就像您可能会为模糊匹配所做的那样。但由于哈希需要精确匹配,因此您需要将错误代码应用于提取的值,然后可以更正每次测量的小差异。虽然编码不容易,也无法解决上述基本问题,但应该是可能的。

1

这太虚假了。为什么不能加密指纹?您的主密钥已被加密存储,您向服务器发送加密的指纹。服务器软件对两者进行解密并进行比较。简单明了。您所谓的“专家”解决方案是虚假的。


1

所以你想使用本地身份验证机制来验证远程资源?这里有很多问题表明这不是一个明智的选择。例如,Web应用程序如何知道哈希属于原始用户而不是拥有副本的其他人?

我建议的是走银行几年前的路线,当时他们向信用卡客户发送了智能卡读卡器。使用指纹扫描仪存储用户登录名的本地副本,需要第二种身份验证方式,例如密码。


0

那也可以...我只需要能够通过Web界面与它进行交互。 - Bill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接