如何通过 Web 使用智能卡和智能卡读卡器实现双因素身份验证

Posted

技术标签:

【中文标题】如何通过 Web 使用智能卡和智能卡读卡器实现双因素身份验证【英文标题】:How to implement a two factor authentication using smart cards and smart card readers via web 【发布时间】:2016-10-12 09:20:30 【问题描述】:

首先,请原谅我对这个话题的无知。 (related)

实现这样的流程究竟需要什么:

    客户访问登录站点 (example.com/login)。

    要登录,客户端输入其客户端 ID。此外,随机(?)代码是 向访问者显示:251 221 555

    客户拿起他的智能卡阅读器,将他的智能卡放入其中并点击“登录”按钮,输入代码251 221 555

    然后客户输入他的 PIN 码(在智能卡读卡器中) 然后返回一个令牌:922 444 113 客户端使用返回的令牌登录网站。

我猜需要:

智能卡(有 PIN 码) 智能卡读卡器(see picture 1、2)

我想知道如何在网站中验证返回的令牌,以及如何在智能卡读卡器中返回令牌? 实施上述流程的确切(或最简单)步骤是什么?

【问题讨论】:

您是否考虑过使用存储在智能卡上的客户端证书?即使使用安全的 pin 输入设备也应该是可能的,并且可能更容易实现(但需要将阅读器连接到计算机,安装一些驱动程序/中间件等 - 取决于您的用例和使用的实际组件)。对于质询-响应方法,不清楚(对我而言)您是否要实际使用 CAP(因为获得独立/即不连接 PC/支持其他协议的阅读器可能非常困难) 【参考方案1】:

最简单的实现是将密钥存储在智能卡中,然后对输入的数字触发加密或 MAC 计算。为此,PIN 输入应输入数字之前。

命令将是

验证(使用 PIN 码) 内部验证(使用输入编号) 或在 Compute Cryptographic Checksum 模式下执行安全操作。

有关更多详细信息,您应该详细了解 ISO 7816 第 4 部分(验证和内部认证)和 7816 第 8 部分(执行安全操作)。这假定一个所谓的本机卡(与 JavaCard 相对)。

【讨论】:

如果我理解正确,我需要一个智能卡 (EMV) 读卡器和类似的卡,如 SLE4442 智能卡。例如,所有 EMV 阅读器都在使用 Arduino 吗?您会为 Arduino 推荐哪种智能卡读卡器? @Kilise:对不起,我没有在嵌入式环境中使用智能卡读卡器的经验;拿一个,在那里你可以找到合适的司机。 SLE4442 作为(同步)存储卡太笨了,无法支持上述命令。您需要一个异步处理器卡。

以上是关于如何通过 Web 使用智能卡和智能卡读卡器实现双因素身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 WMI 获取系统上的所有智能卡读卡器?

如何访问 Omnikey 3121 智能卡读卡器

智能卡读卡器有啥实现方式吗?

Java Web 应用程序可以访问远程工作站上的智能卡读卡器吗?

如何区分智能卡读卡器错误和智能卡错误

如何通过读卡器使用Java激活/开启ICC卡?