利用增强型身份验证提升MQTT安全性

iotforall 20230725

  • MQTT
  • SASL
  • SCRAM
插图:© IoT For All --> 增强型身份验证是MQTT 5.0中引入的一种全新的身份验证框架。它提供了一系列比传统密码身份验证更安全的替代方法。然而,更高的安全性也带来了更多的复杂性。某些身份验证方法,比如SCRAM,需要多次交换身份验证数据。这使得CONNECT和CONNACK数据包中单次交换身份验证框架过时了。为了解决这个局限性,MQTT 5.0引入了AUTH数据包,以支持多次交换身份验证数据。它使得在MQTT中可以使用SASL(Simple Authentication and Security Layer,简单身份验证和安全层)机制中的挑战-响应风格。增强型身份验证解决了哪些问题?在深入了解增强型身份验证之前,我们必须了解传统密码身份验证在安全性方面的不足之处。实际上,尽管使用诸如Salt和Hash等技术来安全地存储密码,客户端仍然必须在网络上传输明文密码,从而使其容易被盗取。即使在使用TLS加密通信的情况下,由于SSL版本过旧、弱密码套件或存在伪造的CA证书,攻击者仍有可能获取密码等敏感信息。此外,简单的密码身份验证只能让服务器验证客户端的身份,而不能反过来验证服务器,这就允许攻击者伪装成服务器从客户端获取敏感信息。这就是我们常说的中间人攻击。增强型身份验证使用户可以在SASL框架内使用高安全性的身份验证方法。这些方法具有许多优势,例如消除了密码在网络上的传输,并实现了客户端与服务器之间的相互身份验证。通过提供这些选项,用户可以自由选择与自身特定需求和安全偏好相匹配的身份验证方法。用于增强型身份验证的常见SASL机制 **DIGEST-MD5** DIGEST-MD5是SASL框架中的一种身份验证方法。它使用消息摘要5(MD5)哈希算法和挑战-响应机制来验证客户端和服务器之间的身份。一个显著的优势是客户端不需要通过网络传输明文密码。简单来说,当客户端想要访问受保护资源时,服务器将发送一个挑战,包括一个一次性随机数和一些所需参数。客户端利用这些参数、用户名和密码生成一个响应,然后将其发送回服务器。服务器用相同的方法独立生成一个预期响应,并将其与接收到的响应进行比较。如果匹配,身份验证成功。这种方法有效降低了密码通过网络嗅探暴露的风险。此外,通过为每次连接使用一次性随机数,增强了对重放攻击的防护。然而,需要注意的是,DIGEST-MD5虽然能够实现服务器对客户端身份的验证,但无法实现客户端对服务器身份的验证。这一限制为中间人攻击留下了可能性。此外,由于MD5已不再安全,建议强烈将其替换为对碰撞攻击具有更强抵抗力的哈希函数,例如SHA-256。**SCRAM** SCRAM(Salted Challenge Response Authentication Mechanism,加盐的挑战响应身份验证机制)是SASL框架中的另一种身份验证方法。它在方法上与DIGEST-MD5相似。SCRAM通过让客户端使用一次性随机数生成响应,从而避免在网络上传输明文密码。然而,SCRAM通过引入Salt(盐值)、Iterations(迭代次数)以及更强大的哈希算法(例如SHA-256和SHA-512)进一步增强了安全性。这些改进显著提升了密码存储的安全性,有效降低了离线攻击、重放攻击及其他潜在漏洞的风险。此外,SCRAM引入了一个更为复杂的挑战-响应过程,包括服务器向客户端发送的验证信息。客户端可以利用该信息验证服务器是否拥有正确的密码,从而实现相互身份验证。这一步骤进一步降低了中间人攻击的风险。然而,SCRAM中使用哈希算法(如SHA256)会带来额外的计算开销,这可能会对资源受限的设备性能产生影响。**Kerberos** Kerberos利用一个可信的第三方Kerberos服务器来提供身份验证服务。服务器向经过验证的用户颁发令牌,使其能够访问资源服务器。一个显著的优势是用户可以通过一次身份验证访问多个系统和服务,实现单点登录(SSO)的便利性。Kerberos服务器颁发的令牌具有有限的生命周期,客户端只能在特定时间内使用该令牌访问服务,从而防止由于令牌泄露带来的安全问题。当然,虽然较短的生命周期可以增强安全性,但这也牺牲了一些便利性。用户需要在这之间做出权衡。Kerberos的核心在于使用对称加密算法。服务器使用本地存储的密码哈希加密身份验证数据,然后将其发送给客户端。客户端通过哈希其密码并使用该密码解密接收到的身份验证数据。这个过程具有多项优势,包括消除了在网上传输明文密码的需求,并实现了服务器和客户端之间对正确密码的相互验证。此外,通过对称加密,服务器和客户端可以安全地共享会话密钥,用于后续的加密通信。因此,Kerberos还提供了在身份验证之外保护后续通信的安全措施。MQTT中增强型身份验证的工作方式 我们以SCRAM为例,来看看MQTT中增强型身份验证是如何工作的。尽管本文不会深入探讨SCRAM的具体原理,但需要明确的是,SCRAM需要以下四条消息来完成身份验证: - client-first-message(客户端首条消息) - server-first-message(服务器首条消息) - client-final-message(客户端最终消息) - server-final-message(服务器最终消息) EMQ Technologies Inc. 为了启动SCRAM身份验证,客户端将发送一个CONNECT数据包,并将身份验证方法属性设置为SCRAM-SHA-256,表明其打算使用SCRAM身份验证。SHA-256表示所使用的哈希函数。身份验证数据属性用于存储客户端首条消息的内容。身份验证方法属性决定了服务器应该如何解析和处理身份验证数据字段中的数据。如果服务器不支持SCRAM身份验证,或者客户端首条消息的内容被发现无效,服务器将返回一个包含原因代码的CONNACK数据包,指示身份验证失败的原因,然后关闭网络连接。否则,服务器将继续下一步:返回一个AUTH数据包,并设置原因代码为0x18,表示身份验证继续。数据包中的身份验证方法将与CONNECT数据包相同,身份验证数据属性将包含服务器首条消息的内容。在验证了服务器首条消息内容的正确性后,客户端也将返回一个AUTH数据包,原因代码为0x18,身份验证数据属性将包含客户端最终消息的内容。在验证了客户端最终消息内容的正确性后,服务器完成对客户端身份的验证。此时,服务器将不会返回AUTH数据包,而是返回一个原因代码为0的CONNACK数据包,表示身份验证成功,并通过数据包中的身份验证数据属性传递服务器最终消息。如果服务器身份成功验证,客户端可以继续订阅主题或发布消息。但如果验证失败,客户端将发送一个DISCONNECT数据包以终止连接。更多身份验证方法 增强型身份验证为用户提供引入更多身份验证方法的可能性。您可以选择适合自己特定需求的身份验证方法,从而进一步增强系统的安全性。推特 分享 邮件 网络安全 数据分析 网络与协议 安全

查看全文

点赞

iotforall

作者最近更新

  • 如何实现Sigfox与LoRaWAN的设备融合
    iotforall
    2023-12-22
  • 2024年边缘计算与物联网预测
    iotforall
    2023-12-22
  • 物联网设备安全挑战:呼吁消费者提高警惕
    iotforall
    2023-12-20

期刊订阅

相关推荐

  • HTTP 与 MQTT:物联网中的对比# 示例输入与输出 **输入** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。 **输出** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。

    2023-06-16

  • 深入解析MQTT中的基于令牌的认证与OAuth 2.0# 示例输入和输出 **输入** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。 **输出** 人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。

    2023-07-28

  • **USP技术**:实现无缝互操作性,开启连接未来的无限可能

    2023-08-05

  • MQTT与Kafka:为物联网数据集成注入强大动力# 示例输入与输出**输入**人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。**输出**人工智能(AI)是计算机科学的一个分支,旨在开发表现出人类智能的软件或机器。这包括从经验中学习、理解自然语言、解决问题以及识别模式。

    2023-08-21

评论0条评论

×
私信给iotforall

点击打开传感搜小程序 - 速览海量产品,精准对接供需

  • 收藏

  • 评论

  • 点赞

  • 分享

收藏文章×

已选择0个收藏夹

新建收藏夹
完成
创建收藏夹 ×
取消 保存

1.点击右上角

2.分享到“朋友圈”或“发送给好友”

×

微信扫一扫,分享到朋友圈

推荐使用浏览器内置分享功能

×

关注微信订阅号

关注微信订阅号,了解更多传感器动态

  • #{faceHtml}

    #{user_name}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 查看评论 回复

    共#{comment_count}条评论

    加载更多

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} #{reback} 回复

  • #{ahtml}#{created_at}

    #{content}

    展开

    #{like_count} #{dislike_count} 回复

  • 关闭
      广告