将新设备连接到代理时,如果可能的话,如何使用2FA(两因素身份验证)?

因为看起来更容易,所以第二个因素可以首先是软件解决方案,但我会欢迎有关如何引入硬令牌(可能是RFID)的想法。

如果设备仅在第一次连接时进行身份验证并且服务器会记住“旧”客户端,这将是有意义的。

这个想法可能不寻常或不合适-如果这是一个坏主意,请告诉我原因。

评论

您能告诉我们您认为一台设备可以实现2FA的原因吗?

@Goufalite例如,当我安装新设备时,我必须手动提供密钥(例如通过RFID标签),该密钥将在身份验证期间使用。至于软件2FA,我不知道是否可以在家里建立某种服务,新设备可以从中请求软令牌,例如私钥服务器。

#1 楼

您需要代理代理或Web服务器...

首先,您绝对需要在与代理连接的某处进行身份验证服务,以使用特定主题(/auth/RFID,...)执行2FA。然后,它将允许客户端发布信息(请参见下文)。

我在这里看到的第一个问题是,订阅该主题的任何人都可以阅读该主题的信息,但是您可以锁定主题!

然后您可以告诉(强制)所有设备将信息发布到/proxy/mytopic。使用mqtt的clientId功能,身份验证服务可以检查从该主题发送的消息是否来自先前使用2FA的经过身份验证的设备,然后代表该设备将其自己的消息发布到/proxyout/mytopic,其中该设备的ID在有效负载中。

现在的问题是检查是否可以通过身份验证接收消息的设备,因为MQTT完全是关于批量发布的。身份验证服务需要具有经过身份验证的设备的列表,并检查它们是否符合接收条件。同样,有效载荷加密和解密在设备端...

我认为我的解决方案对于MQTT功能而言过于矫kill过正。因此,您应该使用套接字或Web服务器...

评论


@ tim3in很抱歉收到您的回复。毕竟,这是2.5年前给出的答案……也许情况已经改变了,这只是一个通用的体系结构建议。您是否使用解决方案进行了POC?

–古法利特
19年7月17日在9:16

我已经计划好了您可以查看它吗?

–tim3in
19年7月17日在10:03

#2 楼

即将发布的MQTT v5规范增加了对AUTH控制数据包的支持,从而允许质询/响应身份验证。由于MQTT v5尚未最终确定,支持仍可能会发生变化,但是可以合理地假设AUTH仍将保持某种形式,并且可以使用2FA添加2FA。

您可以看到当前的OASIS MQTT委员会文档页面上的规范工作草案。

#3 楼

根据规范,连接消息可以选择提供用户名和密码。将针对保存在代理中某处的ACL进行验证。因此,这是您可以利用的身份验证的第一个因素。如果通过身份验证,则来自代理的CONNACK消息将做出响应。

要实现身份验证的第二个因素,最好的方法应该是发送带有其他因素的自定义连接消息。在这种情况下,CONNACK消息应指的是认证的第二个因素的成功或失败。因此,代理和客户端应在规范之外实现自定义消息。

#4 楼

为了在MQTT网络中实现2FA,我创建了以下用于身份验证的服务,这些服务已连接到Broker。


ID验证程序
令牌生成器
令牌验证程序

当MQTT客户端通过SSL / TLS连接到代理时,它首先将自己的ID发布到device_id主题,ID验证程序验证它是真实的客户端,然后调用令牌生成器,该令牌生成器生成令牌并在锁定时发布令牌主题device_token。

客户端设备获取此令牌并将其进一步发布到主题verify_token。主题在verify_token上发布后,令牌验证程序将比较主题device_token和verify_token上的值(如果匹配),将设备的ID添加到已验证的设备池中并允许设备发布数据。因为只有经过验证的设备可以连接到主题以发布数据,所以可以提高安全性。

我还使用了MQTT_KEEPALIVE配置选项来使客户端在未发送或接收数据时保持活动状态,以使客户端设备在设备池中保持活动状态,并防止将其添加到设备后再次进行验证池。但是出于安全考虑,我每24小时将设备冻结到2FA。

评论


如何确保只有正确的客户端才能获得令牌?

– Helmar♦
19年6月27日在18:28

@Helmar使用唯一的clientID和单独的主题来存储设备注册时预定义的每个客户端的令牌。客户实际上订阅了该主题。重新发布令牌进行检查时,它会添加其ID和令牌数据,以便验证者知道哪个客户端已发布了此令牌。在数据库中的服务器上注册了相同的id后,可以使用设备端的Secure Element保护clientid。

–tim3in
19-6-28在9:31



@Helmar您想在此添加您的评论吗?我很感谢大家对我的解决方案的看法。

–tim3in
19-6-28在9:41



是的,但是是什么阻止我订阅“#”来查看所有令牌响应

– hardillb
19年6月28日在10:31

正如Goufalite所述,具有令牌响应的@hardillb主题被锁定。因此,只有受害的设备才能看到。在注册阶段,将设备绑定到特定主题,并且每个设备都为令牌响应分配了单独的主题。

–tim3in
19年6月28日在12:14