如何在MQTT网络中使用2FA?


12

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

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

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

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


你能告诉我们你是怎么想的设备可以做到2FA,因为它是一个设备吗?
Goufalite

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

Answers:


8

您需要经纪人代理或网络服务器...

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

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

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

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

我认为我的解决方案对于MQTT功能来说是非常过分的。因此,您应该使用套接字或Web服务器...


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

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

7

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

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


5

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

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


4

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

  1. 身份验证者
  2. 代币生成器
  3. 令牌验证者

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

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

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


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

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

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

2
是的,但是阻止我订阅“#”以查看所有令牌响应的原因是什么
hardillb

如Goufalite所述,具有令牌响应的@hardillb主题被锁定。因此,只有受害的设备才能看到。在注册阶段,设备绑定到特定主题,并且每个设备都为令牌响应分配了单独的主题。
tim3in
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.