Mqtt精髓系列之安全 - 04stone37 - CSDN博客

标签: | 发表时间:2019-07-05 17:02 | 作者:
出处:https://blog.csdn.net

翻译: https://www.hivemq.com/blog/mqtt-security-fundamentals/

面临的挑战

  在IOT场景中,设备资源受限(计算能力、耗电量等)和网络受限(带宽、稳定性等),这些因素使得高安全性和高可用性更加难以权衡。

安全方案概览

  Mqtt的安全可以在应用层、传输层和网络层进行保证,如下图所示:
这里写图片描述

身份认证

方式一:用户名和密码

   正确:客户端按一定规则生成签名作为密码,然后Broker进行验签;
   错误:用户名和密码直接使用明文;

方式二:TLS/SSL

  客户端使用Broker证书校验Broker身份;Broker使用客户端证书校验客户端证书;

权限校验

  为了限制客户端发布和订阅Topic的权限,Broker必须具备Topic权限管理的功能,而且这些权限可以在运行时动态配置和调整的。对于每个客户端,Topic的权限管理主要包括:

  1. 允许的Topic(明确Topic、带有通配符的Topic);
  2. 允许的操作(发布、订阅和两者);
  3. 允许的Qos等级;

权限校验不通过时的处理:

无Publish权限的处理

  1. Broker直接断开与客户端的连接;
  2. Broker向发布方返回正常的响应,但是不再向订阅方投递消息;

MQTT 3.1.1协议并没有提供一种方式让Broker通知客户端没有Publish权限。

The current MQTT 3.1.1 specification does not define a broker-independent way to inform clients about the unauthorized publish, except disconnecting the client, which may be improved in upcoming MQTT versions.

无Subscribe权限处理

  在SUBACK消息中返回错误码和错误消息即可。

In the case of subscribing to a topic, the broker needs to acknowledge each subscription with a return code. There are 4 different codes for acknowledging each topic with a granted QoS or sending an error code. So if the client has no right to subscribe a specific topic, the broker can notify the client that the subscription was denied.

消息体加密

  采用这种方式时,建议 只针对消息体加密,不要加密消息头中的其它字段(避免Broker进行一次解密)。主要使用场景是 设备资源受限无法采用TLS机制时

场景1:End-to-End (E2E)

这里写图片描述

E2E encryption is broker implementation independent and can be applied to any topic by any MQTT client. If you can’t use authentication and authorization mechanisms or you are using a public broker (like the MQTTDashboard), you can protect your application data from suspicious eyes and MQTT clients.

场景2:Client-to-Broker

这里写图片描述

A Client-to-Broker approach makes sure that the payload of the message is encrypted in the communication between one client and the broker. The broker is able to decrypt the message before distributing the message, so all subscribers receive the original, unencrypted message. This may be a good alternative if you can’t use TLS and want to protect important data from eavesdroppers on the publishing side. (Please read our post about TLS to make sure you understand the risks of not using TLS!) The trusted subscribers are connected via a secure channel (TLS) and thus they are allowed to receive the data in plain text.

数据完整性校验

方式1:使用MACs(推荐)

原因:快速、安全且消耗资源小

  Message Authentication Code Algorithms (like HMAC) are typically very fast compared to digital signatures and provide good security if the shared secret key was exchanged securely prior to the MQTT communication. HMAC calculates the MAC with a cryptographic Hash Function and a cryptographic key. Only senders which know the secret key can create a valid stamp. The disadvantage is, that all clients who are aware of the secret key can sign and verify, since the same key is involved for both processes.
  HMACs work great with MQTT PUBLISH messages and can be used securely even if you don’t have TLS deployed. HMACs are pretty fast to calculate and don’t use much resources on constrained devices.

方式2:使用Checksums (不推荐)

原因:快速但不安全

方式3:使用Digital signatures

原因:极特殊情况使用

  Digital Signatures use public / private key cryptography. The sender signs the message with its private key and the receiver validates the stamp (signature) with the public key of the sending client. Only the private keys can create the signature and thus it’s not possible to fake the signature if an attacker did not obtain the private key.
  As seen in the client certificate blog post, provisioning and revocation of public / private keys is a challenge and adds complexity to the system. Another challenge is, that in Publish / Subscribe Systems like MQTT, the receiver of a message typically is not aware of the identity of the sender, since the communication is decoupled via topics. If it’s guaranteed that only a specific client can publish to a specific topic (e.g. by authorization mechanisms), digital signatures may be a good (and secure!) fit, though.

TLS/SSL补充

TLS对Mqtt性能损

结论:建立连接阶段,TLS很消耗CPU
https://www.hivemq.com/blog/how-does-tls-affect-mqtt-performance/

相关 [mqtt 系列 安全] 推荐:

Mqtt精髓系列之安全 - 04stone37 - CSDN博客

- -
  在IOT场景中,设备资源受限(计算能力、耗电量等)和网络受限(带宽、稳定性等),这些因素使得高安全性和高可用性更加难以权衡.   Mqtt的安全可以在应用层、传输层和网络层进行保证,如下图所示:. 正确:客户端按一定规则生成签名作为密码,然后Broker进行验签;. 错误:用户名和密码直接使用明文;.

MQTT协议 - 安全问题

- - ITeye博客
        物联网的核心是连接万物,通过交换并分析数据使得生活更舒适与便捷. 不过,敏感数据泄露或者设备被非法控制可不是闹着玩的. 比如前段时间国内某著名家电企业的智能洗衣机,使用了某著名电商基于XMPP协议的物联网平台,不费吹灰之力便被黑客攻破并远程遥控,给智能家居的发展带来了一些阴影. 究其本质,并不是物联网技术本身有缺陷,而是在物联网系统的设计中最基本的安全设计被工程师轻视了,才导致整个系统的崩塌.

GitHub - GruppoFilippetti/vertx-mqtt-broker: Vert.x based MQTT Broker

- -

activeMQ 推送之mqtt客户端

- - ITeye博客
使用activeMQ进行android推送. activeMQ下载地址:http://activemq.apache.org/download.html. 下载后是一个压缩包:apache-activemq-5.9.0-bin.zip. 解压缩,进入apache-activemq-5.9.0-bin\apache-activemq-5.9.0\bin,双击activemq.bat,即可启动activeMQ服务.

Android推送方案分析(MQTT/XMPP/GCM)

- - 移动开发 - ITeye博客
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1、使用GCM服务(Google Cloud Messaging). 简介:Google推出的云消息服务,即第二代的C2DM. 优点:Google提供的服务、原生、简单,无需实现和部署服务端.

建立一个高可用的MQTT物联网集群How to Build an High Availability MQTT Cluster for the Internet of Things

- -
建立一个高可用的MQTT物联网集群. We were searching for a secure (auth based), customisable (communicating with our REST API) and easy to use solution (we knew Node.js).

网络安全系列 之 密钥安全管理 - eaglediao - 博客园

- -
最近涉及到安全相关的知识,这里对安全秘钥管理要点做简单记录:. 加密技术 是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密). 一个加密算法是将消息与密钥(一串数字)结合,产生不可理解的密文的步骤. 密钥是结合密码算法一起使用的参数,拥有它的实体可以加密或恢复数据.

MQTT协议笔记之mqtt.io项目TCP协议支持

- - BlogJava-首页技术区
MQTT定义了物联网传输协议,其标准倾向于原始TCP实现. 构建于TCP的上层协议堆栈,诸如HTTP等,在空间上多了一些处理路径,稍微耗费了CPU和内存,虽看似微乎其微,但对很多处理能力不足的嵌入式设备而言,选择原始的TCP却是最好的选择. 但单纯TCP不是所有物件联网的最佳选择,提供构建与TCP基础之上的传统的HTTP通信支持,尤其是浏览器、性能富裕的桌面涉及领域,还是企业最 可信赖、最可控的传输方式之一.

使用ActiveMQ+MQTT实现Android点对点消息通知-转载

- - 开源软件 - ITeye博客
ActiveMQ使用MQTT协议,加上android上的paho包,即可简单实现消息通知功能,但是mqtt协议只支持topic,而且不能用selector,使得点对点的消息投递变成问题. 1、每个clientId,建一个topic...这个办法对解决消息点对点投递非常有效,但是有两个大问题:. 随着用户数增多,topic数量增多,对管理性要求增大,对内存的管理也有问题.

MQTT 3.1.1,值得升级的6个新特性

- - BlogJava-首页技术区
以前看英文文章或资料,看完之后,摘要或者忘记. 这一次选择感兴趣的MQTT 3.1.1介绍文章资料,引文见文末,作为练手;非完全翻译,去除掉一些广告性描述,若侵权,请告知. 在沉寂了四年之后, QTT 3.1.1规范于2014年10月30号正式发布,与此同时MQTT 3.1.1已成为OASIS(结构化信息标准促进组织)开放物联网消息传递协议标准( 连接1 连接2),换种说法就是MQTT 3.1.1已升级为国际物联网标准.