以性能、安全為先:MQTT + 證書鑒權 +TLS加密 + 一機一密
以開發效率、成本為先:HTTP + 用戶名/密碼 + TLS加密 + 一型一密
其他基于安全效率平衡的考慮:HTTPS + 用戶名/密碼 + 一機一密
當前業務現狀:
-
多家智能抓拍機公司并存,提交數據方式以http為主;
-
項目初期階段,快速接入;
-
產品半年預期500家門店,需支持接入方自助接入;
鑒權方式:
目前主流的http接口鑒權方式分為3種:1.基于base64編碼的HTTP基本編碼 2. 基于簽名認證思想的鑒權 3. 基于OAUTH2.0的鑒權。 各種方案的優劣比對如下表
|
http基本編碼/摘要驗證
|
簽名認證
|
oauth
|
|
|
性能
|
高
|
中
|
低
|
|
安全
|
低
|
高
|
中
|
|
適用范圍
|
私有系統中可信網絡環境
|
公網環境
|
公網環境
|
|
缺點
|
容易被攔截
明文秘鑰暴露后,對系統危害大,危害范圍廣
|
接入方需要針對平臺做sdk整合
需要在每個服務中做解析和簽名生成,只能模塊級重用
|
客戶端如頻繁申請token容易被截獲,并且token泄露后果相對嚴重(在token過期之前,黑客可改變input參數進行重放)
每次請求都要與比對服務做一次交互,接入總qps限制整體團隊項目
|
|
優點
|
實現簡單
協議人眼可讀,便于診斷
|
每一個請求都得到鑒權
可以防止秘鑰泄露,并且利用timestamp過期可以防止請求重放
|
多個服務間共享,并且鑒權集中管理,可以實現服務及的重用
|
由于方案1不適用于公網環境,不予考慮。
方案2:
-
設備客戶端在平臺獲取全局唯一id & secretCode;
-
客戶端將請求中的通用信息+當前時間戳+隨機字串和scretCode拼接后進行sha256/sha1/md5計算得到sign
-
客戶端對服務端發起請求,在head中攜帶該sign
-
服務端根據參數中的id獲取secretCode,計算出sign進行比對,如果sign相同,且時間戳在過期時間內,則鑒權成功。
方案3:
-
設備客戶端在平臺獲取全局唯一id & secretCode;
-
客戶端利用請求中的通用信息+當前時間戳+隨機字串和scretCode拼接后進行sha256/sha1/md5計算得到sign
-
客戶端對服務端auth服務發起請求,在header中攜帶該sign,獲取一個有過期時間的token(一段時間內只需調用一次);
-
客戶端利用該token調用上行接口,服務端auth進行比對,若對應id的token正確且未過期,則鑒權成功。
目前在設備數量較少(低于500),且希望通過服務方式提供iot設備的鑒權,初步設計使用方案3,單一服務(單一域名)提供id、secret生成、token生成以及token驗證的服務。
背景:
因為是設備(攝像頭)通過公網環境與IDC通信,因此需要對以下方面進行設計:
-
數據安全(加密)
-
身份驗證(鑒權)
-
風險接口隔離
-
監控,限流與限速
物聯網常用通信協議:
會話層協議:MQTT COAP DDS XMPP AMQP HTTP FTP Telnet SSH
網絡/傳輸層協議:IPv4 IPv6 6LoWPAN RPL
數據鏈路層協議
近距離:Dash7 NFC Bluetooth/BTLE NFC RFID IRdA
遠距離蜂窩:GSM CDMA WiMax LTE NB-IoT
遠距離非蜂窩:Weightless ZigBee Z-Wave Insteon Neul wHART ANT/ANT+ 802.15.4e WiFi EnOcean RFMesh
物聯網中通信主要鏈路包括:“設備-設備”、“設備-用戶應用”、“設備-云”、“用戶應用-云”
各云廠商IOT通信協議以及數據安全方案、身份驗證方案對比一覽:
|
物聯網平臺
|
通信協議(設備->云)
|
通信安全(設備->云)
|
身份認證(設備-> 云)
|
|
百度物接入IOT HUB
|
MQTT
TCP:端口1883,不支持傳輸數據加密,可以通過MQTT.fx客戶端連接。
SSL:端口1884,支持SSL/TLS加密傳輸,MQTT.fx客戶端連接
WSS:端口8884,支持WebSocket瀏覽器方式連接,同樣包含SSL加密
|
雙向安全連接、SSL傳輸
|
設備級認證、策略授權;
|
|
ali物聯網套件
|
MQTT、CoAP、HTTPS
|
支持TLS(MQTT\HTTP)、DTLS(CoAP)數據傳輸通道,保證數據的機密性和完整性,適用于硬件資源充足、對功耗不是很敏感的設備。安全級別高。
支持TCP(MQTT)、UDP(CoAP)上自定義數據對稱加密通道,適用于資源受限、功耗敏感的設備。安全級別普通。
支持設備權限管理機制,保障設備與云端安全通信。
支持設備級別的通信資源(TOPIC等)隔離,防止設備越權等問題。
|
提供芯片級安全存儲方案(ID²)及設備秘鑰安全管理機制,防止設備密鑰被破解。安全級別很高。
提供一機一密的設備認證機制,降低設備被攻破的安全風險,適合有能力批量預分配ID密鑰燒入到每個芯片的設備。安全級別高。
提供一型一密的設備預燒,認證時動態獲取三元組,適合批量生產時無法將三元組燒入每個設備的情況。安全級別普通。
|
|
tx物聯網通信
|
MQTT 基于 TCP 和 TLS 加密接入,主流的物聯通信協議,適用于設備間消息通信,或需要收取反向控制信令、配置場景。
CoAP 基于 UDP 和 DTLS 加密接入,適用于設備純數據上報場景,對資源的消耗和要求更低。
MQTT 基于 WebSocket 接入,適用于瀏覽器類應用與物聯網通信平臺建立連接與通信能力。
http 接入,接入協議門檻低,適用低功耗、短連接的數據上報場景。(實際在官網的設備接入中,只有MQTT與CoAP2協議的接入說明,待求證)
|
基于 TLS、DTLS 協議進行客戶端和服務器端的雙向鑒權、數據加密傳輸,防范非法接入和數據竊取、篡改等風險。介于設備資源和使用場景的多樣性,支持選擇非對稱(設備證書加密驗證、適用高安全要求場景)和對稱加密(密鑰加密驗證、適用資源受限設備)方式。
|
設備級粒度身份認證,保證云到設備和設備到云的消息的保密性。
|
|
AWS iot hub
|
MQTT、HTTP 或 WebSockets。AWS IoT Core 也支持其他行業標準和自定義協議,而且即使設備使用不同的協議,也可以相互通信。
|
TLS(注冊CA證書)
1、使用CA證書對產品證書認證
2、使用產品證書認證
3、使用私匙簽名
4、交換AES對稱加密密匙
5、通信
|
AWS IoT 在所有連接點處提供相互身份驗證和加密。AWS IoT 支持 AWS 身份驗證方法(稱為"SigV4")以及基于身份驗證的 X.509 證書。使用 HTTP 的連接可以使用任一方法,使用 MQTT 的連接可以使用基于證書的身份驗證,使用 WebSockets 的連接可以使用 SigV4。
使用 AWS IoT 生成的證書以及由首選證書頒發機構 (CA) 簽署的證書,將所選的角色和/或策略映射到每個證書,以便授予設備或應用程序訪問權限,或撤消訪問權限。
通過控制臺或使用 API 創建、部署并管理設備的證書和策略。這些設備證書可以預配置、激活和與使用 AWS IAM 配置的相關策略關聯。
AWS IoT 還支持用戶移動應用使用 Amazon Cognito 進行連接,Amazon Cognito 將負責執行必要的操作來為應用用戶創建唯一標識符并獲取臨時的、權限受限的 AWS 憑證。
|
|
IBM Watson IOT
|
MQTT與HTTP
|
提供了針對通過 TLS (V1.2) 的連接的完全支持。
|
設備通過只有用戶知道的 clientId 和認證令牌的唯一組合進行連接。
|
|
AZURE IOT
|
MQTT、AMQP 和 HTTP
|
TLS·
|
每個設備設置獨有的安全密鑰,IoT 中心標識注冊表會存儲設備標識和密鑰,后端可將個別設備加入允許列表或方塊列表,以便完全控制設備訪問權限。
|
從上表可以得出以下結論:
-
通信協議以MQTT為行業既定標準,除百度和騰訊外也支持HTTP協議
-
安全統一使用TLS協議
-
鑒權方法則種類較多,從算法上區分有用戶名+密碼與使用證書,從策略上有一機一密與一型一密。
|
協議名稱
|
效率
|
靈活性
|
標準化
|
第三方接入成本
|
|
MQTT
|
高
吞吐量:93倍
發送數據電量消耗: 1/11
接收數據電量消耗:1/170
連接保持電量消耗:1/2
網絡開銷:1/8
|
支持服務質量配置
最多一次 (QoS0)
至少一次 (QoS1)
恰好一次 (QoS2)
|
IOT行業標準
|
普通
|
|
HTTPS
|
低
|
需業務邏輯實現重放策略
|
通用標準
|
低
|
|
鑒權算法
|
安全系數
|
計算資源成本
|
復雜度
|
第三方接入成本
|
|
用戶名 + 密碼
|
高
|
普通
|
普通
|
普通
|
|
證書
|
普通
|
高
|
高
|
高
|
|
鑒權策略
|
安全系數
|
復雜度
|
第三方接入成本
|
|
一機一密
|
高
|
高
|
高
|
|
一型一密
|
普通
|
普通
|
普通
|
具體鑒權算法流程,以ali iot,用戶名+密碼鑒權為例:
-
云控制臺注冊設備,獲取 productKey,deviceName
-
設備端將步驟1中2個字串設置到設備中
-
設備端根據兩者生成sign串調用auth接口生成token(48小時超時,只需調用1次)
-
設備調用HTTPS上行將生成的臨時token塞到header內,以post方式將數據上傳到云平臺。(token超時更新)