Google Cloud 之類的企業(yè)級云服務(wù)為物聯(lián)網(wǎng)開發(fā)人員提供了各種功能服務(wù),從可擴(kuò)展虛擬機(jī)服務(wù)到交鑰匙型人工智能 (AI) 應(yīng)用,不一而足。而這些服務(wù)的基本要求則是使用特定的安全方法來建立并維護(hù)物聯(lián)網(wǎng)設(shè)備與云端之間的安全連接。但是對開發(fā)人員而言,實施適當(dāng)?shù)陌踩珯C(jī)制可能會導(dǎo)致延遲,從而增加本就交期緊迫的設(shè)計項目的復(fù)雜性。
Microchip Technology的PIC-IoT WG開發(fā)板采用專用安全 IC 構(gòu)建,為 Google Cloud 連接提供交鑰匙型解決方案。該套件使用專用安全 IC,可提供一個綜合性平臺,用于加速開發(fā)能夠安全連接到 Google Cloud 服務(wù)的物聯(lián)網(wǎng)設(shè)計。本文介紹了安全連接的關(guān)鍵要求,并闡示了開發(fā)人員如何在典型的物聯(lián)網(wǎng)設(shè)計中使用 PIC-IoT WG 來滿足這些要求。
安全的復(fù)雜性
確保物聯(lián)網(wǎng)設(shè)備與遠(yuǎn)程主機(jī)服務(wù)器之間安全連接的能力,是全面保護(hù)物聯(lián)網(wǎng)應(yīng)用和相關(guān)網(wǎng)絡(luò)企業(yè)資源的基礎(chǔ)。對于這些服務(wù)器和其他企業(yè)級系統(tǒng)可以提供的功能和性能,以資源有限的微控制器和最小內(nèi)存構(gòu)建的物聯(lián)網(wǎng)設(shè)備則完全無法提供。若是希冀簡單的物聯(lián)網(wǎng)設(shè)備能傳送傳感器數(shù)據(jù)或?qū)崟r操控致動器,而出于物聯(lián)網(wǎng)設(shè)備本身的性質(zhì)局限,即使只是實現(xiàn)最基本的安全算法,可能也無法達(dá)到處理要求。
安全方法所依賴的基本原則,即突破安全屏障所付出的代價應(yīng)比屏障保護(hù)的資產(chǎn)價值更高昂。對于基于算法的安全方法,這意味著解密加密信息或破壞認(rèn)證協(xié)議在計算方面應(yīng)該是令人望而卻步的。至少,破壞基于算法的安全性應(yīng)當(dāng)需要一定水平的計算資源和所需時間,其代價超過受保護(hù)數(shù)據(jù)或通信通道的價值或時效。因此,加密算法試圖將有價值的數(shù)據(jù)掩藏在一系列復(fù)雜的計算密集型處理步驟之下,且必須使用密鑰才能解開。例如,廣泛使用的高級加密標(biāo)準(zhǔn) (AES) 算法對數(shù)據(jù)進(jìn)行多輪循環(huán)處理,各輪循環(huán)均包含數(shù)個步驟,即首先生成密鑰,然后再進(jìn)行字節(jié)替換、移位和矩陣計算(圖 1)。
圖 1:為了使解密難以實現(xiàn),甚至無法實現(xiàn),加密算法專門采用一系列復(fù)雜操作,比如 AES 算法的這個步驟,將數(shù)據(jù)與私鑰生成的字節(jié)相結(jié)合。(圖片來源:Wikimedia Commons)
對于諸如 AES 一類的對稱加密算法,加密信息接收者需使用相同的密鑰才能解密數(shù)據(jù)。相反,非對稱算法使用一對密鑰,一個私鑰和一個公鑰,消除了因使用共享密鑰可能造成的風(fēng)險,可代價卻是使計算變得更為復(fù)雜。采用這種算法時,發(fā)送者和接收者在交換公鑰的同時,對各自持有的私鑰保密。因此,其中一方可以使用另一方的公鑰來加密信息,但信息只能使用另一方的私鑰進(jìn)行解密。
為了進(jìn)一步提供保護(hù),高級算法會建立在非對稱公鑰加密算法之上,僅在特定的信息交換會話期間,才允許安全交換用于加密數(shù)據(jù)的短期共享私鑰??紤]到這些密鑰交換的關(guān)鍵性,如橢圓曲線 Diffie-Hellman 算法 (ECDH) 等更高級的算法可將密鑰深深掩藏在復(fù)雜的橢圓曲線計算之下。諸如傳輸層安全 (TLS) 之類的認(rèn)證協(xié)議通過使用數(shù)字證書,將 Diffie-Hellman 密鑰交換之類的機(jī)制與正式驗證方法相結(jié)合;而數(shù)字證書可在公鑰中嵌入來自認(rèn)證機(jī)構(gòu)(CA,可證明證書的真實性)的可驗證數(shù)字簽名。
正如簡要說明所述,安全方法依賴于各層的加密算法和協(xié)議,而最終仍取決于私鑰。雖然這些層次能經(jīng)受住黑客的持續(xù)攻擊,但如若私鑰被發(fā)現(xiàn)了,整個安全結(jié)構(gòu)頃刻就會分崩離析。
因此,基于硬件的安全密鑰存儲是物聯(lián)網(wǎng)設(shè)備安全性的基本要求。此外,這些算法和協(xié)議的計算復(fù)雜性決定了對專用加密引擎的需求,這些引擎必須能夠為資源有限的微控制器分擔(dān)復(fù)雜的計算。
基于硬件的安全
專用安全元件硬件設(shè)備,如 Microchip Technology 的ATECC608ACryptoAuthentication IC,具備保護(hù)密鑰和提高加密算法執(zhí)行速度所需的特性。除了這些特性外,ATECC608A 還提供片上 EEPROM,可安全存儲多達(dá) 16 個密鑰、證書和其他數(shù)據(jù),以及其他必要的功能,包括符合 NIST SP 800-90A/B/C 標(biāo)準(zhǔn)的隨機(jī)數(shù)發(fā)生器。
ATECC608A 不僅是一種安全存儲設(shè)備,還可以提高多種算法的執(zhí)行速度,包括用于對稱加密的 AES 和非對稱加密的 ECDH。此外,該器件還支持更高級別的服務(wù),包括安全引導(dǎo)(請參閱“使用加密芯片為物聯(lián)網(wǎng)器件設(shè)計增加安全引導(dǎo)”)。
除了通過分擔(dān)這些算法的執(zhí)行任務(wù)所獲得的直接性能優(yōu)勢之外,ATECC608A 還具備加密引擎、安全存儲和其他功能,將安全性從根本上提升到另一個層次:密鑰與不受信任的實體保持隔離。這些實體包括不特別注重安全性的微控制器、微控制器上運(yùn)行的軟件以及使用軟件的個人。設(shè)備還能生成私鑰,這為制造或分銷設(shè)施的部署提供更進(jìn)一步的安全性。
與傳統(tǒng)基于軟件的安全方法相比,結(jié)果是減少了威脅向量的數(shù)量。這進(jìn)而支持縱深防御原則,即有效安全策略的核心。
ATECC608A 的這種功能全面集成方式簡化了硬件接口的要求。該器件可作為另一個 I2C 外設(shè)運(yùn)行,甚至可以與其他器件共享微控制器的 I2C 總線,如 Microchip Technology 的MCP9808等數(shù)字傳感器(圖 2)。
圖 2:由于 Microchip Technology 的 ATECC608A CryptoAuthentication IC(左)完全在片上完成安全處理,因此可以提供簡單的 I2C 硬件接口,與其他 I2C 器件一起使用,如 Microchip Technology 的 MCP9808 I2C 數(shù)字溫度傳感器(右)。(圖片來源:Microchip Technology)
然而,就軟件層面而言,ATECC608A 豐富的功能會使接口復(fù)雜化。Microchip Technology 的CryptoAuthLib庫將接口抽象為一組直觀函數(shù)調(diào)用,可在 CryptoAuthLib 應(yīng)用程序編程接口 (API) 中使用。該庫與 Microchip Technology 的MPLAB X集成開發(fā)環(huán)境 (IDE) 中的相關(guān)驅(qū)動程序和中間件捆綁在一起。雖然 CryptoAuthLib API 和驅(qū)動程序可為采用 ATECC608A 的定制設(shè)計提供基礎(chǔ)元素,但在實現(xiàn)安全連接到 Google Cloud 所需的完整安全鏈方面,開發(fā)人員仍面臨著其他挑戰(zhàn)。而 Microchip Technology 的 PIC-IoT WG 開發(fā)板也能消除這一障礙。
開發(fā)端到端的物聯(lián)網(wǎng)應(yīng)用
PIC-IoT 板基于 ATECC608A 和 Microchip Technology 的低成本PIC24FJ128GA70516 位微控制器,這款無線物聯(lián)網(wǎng)設(shè)計包含了 Microchip Technology 的ATWINC1510Wi-Fi 模塊、Vishay Semiconductor的TEMT6000X01環(huán)境光傳感器和 MCP9808 I2C 溫度傳感器。此外,開發(fā)人員通過添加數(shù)百種MikroElektronika的Click板提供的傳感器和致動器,可以輕松擴(kuò)展硬件基礎(chǔ)平臺。對于軟件開發(fā),Microchip Technology 提供了 MPLAB X IDE 及相關(guān)的MPLAB 代碼配置器(MCC) 快速原型開發(fā)工具。
該電路板和相關(guān)軟件可以為基本端到端物聯(lián)網(wǎng)應(yīng)用評估提供交鑰匙型平臺,而這類應(yīng)用的運(yùn)行建立在物聯(lián)網(wǎng)傳感器設(shè)備與 Google Cloud 服務(wù)的安全連接基礎(chǔ)之上。該套件以獨特的方法實現(xiàn)了相互身份驗證,即使對于資源受限的物聯(lián)網(wǎng)設(shè)備也能進(jìn)行驗證。使用該方法,物聯(lián)網(wǎng)設(shè)備可以使用輕型 TLS 服務(wù)來驗證 Google 端的連接,并用 JavaScript Object Notation (JSON) Web Token (JWT),向 Google 服務(wù)器證明自身身份(請參閱“將 IoT 設(shè)備安全連接到云端的更簡單的解決方案”)。除了器件驅(qū)動程序、板級支持包和中間件服務(wù)外,Microchip Technology 還通過 MPLAB 開發(fā)套件,并作為適用于 PIC-IoT 板的完整樣例物聯(lián)網(wǎng)應(yīng)用一部分來演示該方法。
通過樣例應(yīng)用程序,開發(fā)人員不僅可以獲得使用云應(yīng)用的經(jīng)驗,還可以獲得主要云服務(wù)提供商提供的物聯(lián)網(wǎng)專用服務(wù),將物聯(lián)網(wǎng)設(shè)備連接到云端的經(jīng)驗。例如,物聯(lián)網(wǎng)設(shè)備可通過 Google Cloud IoT Core 訪問 Google Cloud 資源,該 IoT Core 提供了設(shè)備連接、相關(guān)元數(shù)據(jù)管理等所需的一系列服務(wù)(圖 3)。
圖 3:與其他企業(yè)云提供商一樣,Google Cloud 也提供專用服務(wù) Google Cloud IoT Core,旨在滿足將物聯(lián)網(wǎng)設(shè)備與云資源結(jié)合相關(guān)的獨特要求。(圖片來源:Google)
使用云服務(wù)
在后端,Google Cloud IoT Core 使用發(fā)布/訂閱模式,通過數(shù)據(jù)代理為設(shè)備提供對 Google Cloud 高級資源的訪問權(quán)限。在前端,IoT Core 采用超文本傳輸協(xié)議 (HTTP) 或消息隊列遙測傳輸 (MQTT),為物聯(lián)網(wǎng)設(shè)備起到了橋接作用。MQTT 是國際標(biāo)準(zhǔn)化組織 (ISO) 的標(biāo)準(zhǔn)消息傳輸協(xié)議,旨在以最小通信帶寬和物聯(lián)網(wǎng)設(shè)備資源運(yùn)行。Microchip Technology 的 PIC-IoT 板軟件應(yīng)用演示了如何采用在傳輸控制協(xié)議/網(wǎng)際協(xié)議 (TCP/IP) 套接字連接上運(yùn)行的 MQTT,而該連接采用上述的 TLS/JWT 雙向認(rèn)證方法來確保安全。
建立安全連接后,該軟件采用 MQTT 與 Google Cloud IoT Core 服務(wù)進(jìn)行通信,建立通道或“主題”,用于將傳感器數(shù)據(jù)發(fā)送到 Google Cloud 并響應(yīng)來自云服務(wù)的命令。Google 調(diào)用物聯(lián)網(wǎng)設(shè)備軟件進(jìn)行訂閱,然后將數(shù)據(jù)發(fā)送到表單/devices/{deviceID}/events的指定主題,并在寬泛的events主題下提供了子主題選項。除了設(shè)備管理功能等其他主題外,Google 還指定了/devices/{device-id}/commands主題,可用于將命令從云端發(fā)送到物聯(lián)網(wǎng)設(shè)備。Google 甚至提供了一個全能主題 (/devices/{device-id}/commands/#),允許物聯(lián)網(wǎng)設(shè)備接收通過任何子主題發(fā)送的命令。
PIC-IoT 應(yīng)用使用基于定時器和回調(diào)的可擴(kuò)展軟件架構(gòu)演示了這些不同的程序。基于這種架構(gòu),主模塊 (main.c) 只需提供主例程 (main()) 以及用于發(fā)送 (sendToCloud()) 和接收 (receivedFromCloud()) 消息的應(yīng)用級例程。在進(jìn)入運(yùn)行計時器調(diào)度程序的無限循環(huán)之前,main()主例程本身只調(diào)用一對初始化例程,并為用戶例程提供占位符(清單 1)。
復(fù)制void receivedFromCloud(uint8_t *topic, uint8_t *payload) { char *toggleToken = ""toggle":"; char *subString; if ((subString = strstr((char*)payload, toggleToken))) { LED_holdYellowOn( subString[strlen(toggleToken)] == '1' ); } debug_printer(SEVERITY_NONE, LEVEL_NORMAL, "topic: %s", topic); debug_printer(SEVERITY_NONE, LEVEL_NORMAL, "payload: %s", payload); } // This will get called every 1 second only while we have a valid Cloud connection void sendToCloud(void) { static char json[70]; // This part runs every CFG_SEND_INTERVAL seconds int rawTemperature = SENSORS_getTempValue(); int light = SENSORS_getLightValue(); int len = sprintf(json, "{"Light":%d,"Temp":"%d.%02d"}", light,rawTemperature/100,abs(rawTemperature)%100); if (len >0) { CLOUD_publishData((uint8_t*)json, len); LED_flashYellow(); } } #include "mcc_generated_files/application_manager.h" /* Main application */ int main(void) { // initialize the device SYSTEM_Initialize(); application_init(); while (1) { // Add your application code runScheduler(); } return 1; }
清單 1:Microchip Technology 的 PIC-IoT 板樣例應(yīng)用程序使用一系列定時器和回調(diào)來簡化主循環(huán),并且開發(fā)人員可輕松添加自己的服務(wù)和應(yīng)用例程。(代碼來源:Microchip Technology)
在進(jìn)入無限循環(huán)之前,調(diào)用SYSTEM_Initialize()例程初始化硬件組件,包括時鐘、模數(shù)轉(zhuǎn)換器 (ADC)、中斷等。application_init()例程初始化各種包括 CryptoAuthentication 庫在內(nèi)的軟件系統(tǒng),并連接到 Wi-Fi 和云本身。最后,application_init()設(shè)置一個 100 毫秒 (ms) 的計時器來執(zhí)行MAIN_dataTask()。計時器到期并調(diào)用MAIN_dataTask()時,該例程檢查云連接,并且每秒調(diào)用一次sendToCloud(),視具體情況設(shè)置電路板 LED,以指示應(yīng)用的當(dāng)前運(yùn)行狀態(tài)(清單 2)。接著,開發(fā)人員可以通過 Microchip Technology 在 Google Cloud 上提供的免費(fèi)沙盒帳號來查看傳感器值。
復(fù)制// This gets called by the scheduler approximately every 100ms uint32_t MAIN_dataTask(void *payload) { static time_t previousTransmissionTime = 0; // Get the current time.This uses the C standard library time functions time_t timeNow = time(NULL); // Example of how to send data when MQTT is connected every 1 second based on the system clock if (CLOUD_isConnected()) { // How many seconds since the last time this loop ran?int32_t delta = difftime(timeNow,previousTransmissionTime); if (delta >= CFG_SEND_INTERVAL) { previousTransmissionTime = timeNow; // Call the data task in main.c sendToCloud(); } } if(shared_networking_params.haveAPConnection) { LED_BLUE_SetLow(); } else { LED_BLUE_SetHigh(); } if(shared_networking_params.haveERROR) { LED_RED_SetLow(); } else { LED_RED_SetHigh(); } if (LED_isBlinkingGreen() == false) { if(CLOUD_isConnected()) { LED_GREEN_SetLow(); } else { LED_GREEN_SetHigh(); } } // This is milliseconds managed by the RTC and the scheduler, this return makes the // timer run another time, returning 0 will make it stop return MAIN_DATATASK_INTERVAL; }
清單 2:使用定時器和回調(diào)機(jī)制,Microchip Technology 的 PIC-IoT 樣例應(yīng)用程序每秒向云端發(fā)送一次傳感器數(shù)據(jù) (CFG_SEND_INTERVAL=1),并更新電路板 LED 狀態(tài)以指示當(dāng)前運(yùn)行狀態(tài)。(代碼來源:Microchip Technology)
處理來自云端的命令同樣簡單。樣例應(yīng)用程序演示了如何關(guān)聯(lián)回調(diào)例程,例如receivedFromCloud()可用于處理接收到的消息。在初始化階段,上述的application_init()例程調(diào)用例程 (CLOUD_subscribe()) 來執(zhí)行 Google Cloud 訂閱。在此過程中,軟件回調(diào)receivedFromCloud()來更新表格 (imqtt_publishReceiveCallBackTable)(清單 3)。在本例中,樣例應(yīng)用程序使用config主題,并從NUM_TOPICS_SUBSCRIBE=1開始將索引硬編碼到表中,但使用一般命令主題和派生子主題也是另一種選擇。
復(fù)制void CLOUD_subscribe(void) { mqttSubscribePacket cloudSubscribePacket; uint8_t topicCount = 0; // Variable header cloudSubscribePacket.packetIdentifierLSB = 1; cloudSubscribePacket.packetIdentifierMSB = 0; // Payload for(topicCount = 0; topicCount < NUM_TOPICS_SUBSCRIBE; topicCount++) { sprintf(mqttSubscribeTopic, "/devices/%s/config", deviceId); cloudSubscribePacket.subscribePayload[topicCount].topic = (uint8_t *)mqttSubscribeTopic; cloudSubscribePacket.subscribePayload[topicCount].topicLength = strlen(mqttSubscribeTopic); cloudSubscribePacket.subscribePayload[topicCount].requestedQoS = 0; imqtt_publishReceiveCallBackTable[0].topic = mqttSubscribeTopic; imqtt_publishReceiveCallBackTable[0].mqttHandlePublishDataCallBack = receivedFromCloud; MQTT_SetPublishReceptionHandlerTable(imqtt_publishReceiveCallBackTable); } if(MQTT_CreateSubscribePacket(&cloudSubscribePacket) == true) { debug_printInfo("CLOUD: SUBSCRIBE packet created"); sendSubscribe = false; } }
清單 3:Microchip Technology 樣例應(yīng)用程序顯示了開發(fā)人員如何將回調(diào)例程與接收到的 MQTT 消息輕松關(guān)聯(lián)在一起,在本例中,定義receivedFromCloud()函數(shù)來回調(diào)從默認(rèn)主題接收到的消息。(代碼來源:Microchip Technology)
開發(fā)人員可以使用交付的 PIC-IoT 硬件和軟件包,即刻就可開始探索從 Google Cloud 發(fā)送和接收數(shù)據(jù)的各種方案。PIC-IoT 硬件包括 ATECC608A CryptoAuthentication 器件,并且已預(yù)先配置為支持 Google Cloud IoT Core 及此使用模型。開發(fā)人員可以輕松使用 MPLAB X IDE 和 MPLAB 代碼配置器來修改或構(gòu)建安全連接到 Google Cloud 的全新物聯(lián)網(wǎng)應(yīng)用。
總結(jié)
在物聯(lián)網(wǎng)設(shè)備與網(wǎng)絡(luò)資源之間提供安全連接,對于任何網(wǎng)絡(luò)服務(wù)環(huán)境都是極其重要的,對于使用商業(yè)云服務(wù)而言更是必不可少。構(gòu)建安全連接所需的軟件服務(wù)層可能會致使物聯(lián)網(wǎng)項目嚴(yán)重延遲,對于資源有限的物聯(lián)網(wǎng)設(shè)計,甚至難以實現(xiàn)。使用如 Microchip Technology 的 PIC-IoT 等開發(fā)板(包含專用安全 IC),開發(fā)人員可以快速開發(fā)出能夠安全連接到 Google Cloud 的物聯(lián)網(wǎng)應(yīng)用。
-
微控制器
+關(guān)注
關(guān)注
48文章
7555瀏覽量
151430 -
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2909文章
44640瀏覽量
373441
發(fā)布評論請先 登錄
相關(guān)推薦
評論