0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何快速安全地将物联网应用连接到 Google Cloud

丫丫119 来源:未知 作者:肖冰 2019-08-13 10:46 次阅读

Google Cloud 之类的企业级云服务为物联网开发人员提供了各种功能服务,从可扩展虚拟机服务到交钥匙型人工智能 (AI) 应用,不一而足。而这些服务的基本要求则是使用特定的安全方法来建立并维护物联网设备与云端之间的安全连接。但是对开发人员而言,实施适当的安全机制可能会导致延迟,从而增加本就交期紧迫的设计项目的复杂性。

Microchip TechnologyPIC-IoT WG开发板采用专用安全 IC 构建,为 Google Cloud 连接提供交钥匙型解决方案。该套件使用专用安全 IC,可提供一个综合性平台,用于加速开发能够安全连接到 Google Cloud 服务的物联网设计。本文介绍了安全连接的关键要求,并阐示了开发人员如何在典型的物联网设计中使用 PIC-IoT WG 来满足这些要求。

安全的复杂性

确保物联网设备与远程主机服务器之间安全连接的能力,是全面保护物联网应用和相关网络企业资源的基础。对于这些服务器和其他企业级系统可以提供的功能和性能,以资源有限的微控制器和最小内存构建的物联网设备则完全无法提供。若是希冀简单的物联网设备能传送传感器数据或实时操控致动器,而出于物联网设备本身的性质局限,即使只是实现最基本的安全算法,可能也无法达到处理要求。

安全方法所依赖的基本原则,即突破安全屏障所付出的代价应比屏障保护的资产价值更高昂。对于基于算法的安全方法,这意味着解密加密信息或破坏认证协议在计算方面应该是令人望而却步的。至少,破坏基于算法的安全性应当需要一定水平的计算资源和所需时间,其代价超过受保护数据或通信通道的价值或时效。因此,加密算法试图将有价值的数据掩藏在一系列复杂的计算密集型处理步骤之下,且必须使用密钥才能解开。例如,广泛使用的高级加密标准 (AES) 算法对数据进行多轮循环处理,各轮循环均包含数个步骤,即首先生成密钥,然后再进行字节替换、移位和矩阵计算(图 1)。

加密算法专门采用一系列复杂操作的示意图

图 1:为了使解密难以实现,甚至无法实现,加密算法专门采用一系列复杂操作,比如 AES 算法的这个步骤,将数据与私钥生成的字节相结合。(图片来源:Wikimedia Commons)

对于诸如 AES 一类的对称加密算法,加密信息接收者需使用相同的密钥才能解密数据。相反,非对称算法使用一对密钥,一个私钥和一个公钥,消除了因使用共享密钥可能造成的风险,可代价却是使计算变得更为复杂。采用这种算法时,发送者和接收者在交换公钥的同时,对各自持有的私钥保密。因此,其中一方可以使用另一方的公钥来加密信息,但信息只能使用另一方的私钥进行解密。

为了进一步提供保护,高级算法会建立在非对称公钥加密算法之上,仅在特定的信息交换会话期间,才允许安全交换用于加密数据的短期共享私钥。考虑到这些密钥交换的关键性,如椭圆曲线 Diffie-Hellman 算法 (ECDH) 等更高级的算法可将密钥深深掩藏在复杂的椭圆曲线计算之下。诸如传输层安全 (TLS) 之类的认证协议通过使用数字证书,将 Diffie-Hellman 密钥交换之类的机制与正式验证方法相结合;而数字证书可在公钥中嵌入来自认证机构(CA,可证明证书的真实性)的可验证数字签名。

正如简要说明所述,安全方法依赖于各层的加密算法和协议,而最终仍取决于私钥。虽然这些层次能经受住黑客的持续攻击,但如若私钥被发现了,整个安全结构顷刻就会分崩离析。

因此,基于硬件的安全密钥存储是物联网设备安全性的基本要求。此外,这些算法和协议的计算复杂性决定了对专用加密引擎的需求,这些引擎必须能够为资源有限的微控制器分担复杂的计算。

基于硬件的安全

专用安全元件硬件设备,如 Microchip Technology 的ATECC608ACryptoAuthentication IC,具备保护密钥和提高加密算法执行速度所需的特性。除了这些特性外,ATECC608A 还提供片上 EEPROM,可安全存储多达 16 个密钥、证书和其他数据,以及其他必要的功能,包括符合 NIST SP 800-90A/B/C 标准的随机数发生器。

ATECC608A 不仅是一种安全存储设备,还可以提高多种算法的执行速度,包括用于对称加密的 AES 和非对称加密的 ECDH。此外,该器件还支持更高级别的服务,包括安全引导(请参阅“使用加密芯片为物联网器件设计增加安全引导”)。

除了通过分担这些算法的执行任务所获得的直接性能优势之外,ATECC608A 还具备加密引擎、安全存储和其他功能,将安全性从根本上提升到另一个层次:密钥与不受信任的实体保持隔离。这些实体包括不特别注重安全性的微控制器、微控制器上运行的软件以及使用软件的个人。设备还能生成私钥,这为制造或分销设施的部署提供更进一步的安全性。

与传统基于软件的安全方法相比,结果是减少了威胁向量的数量。这进而支持纵深防御原则,即有效安全策略的核心。

ATECC608A 的这种功能全面集成方式简化了硬件接口的要求。该器件可作为另一个 I2C 外设运行,甚至可以与其他器件共享微控制器的 I2C 总线,如 Microchip Technology 的MCP9808等数字传感器(图 2)。

Microchip Technology 的 ATECC608A CryptoAuthentication IC 示意图

图 2:由于 Microchip Technology 的 ATECC608A CryptoAuthentication IC(左)完全在片上完成安全处理,因此可以提供简单的 I2C 硬件接口,与其他 I2C 器件一起使用,如 Microchip Technology 的 MCP9808 I2C 数字温度传感器(右)。(图片来源:Microchip Technology)

然而,就软件层面而言,ATECC608A 丰富的功能会使接口复杂化。Microchip Technology 的CryptoAuthLib库将接口抽象为一组直观函数调用,可在 CryptoAuthLib 应用程序编程接口 (API) 中使用。该库与 Microchip Technology 的MPLAB X集成开发环境 (IDE) 中的相关驱动程序和中间件捆绑在一起。虽然 CryptoAuthLib API 和驱动程序可为采用 ATECC608A 的定制设计提供基础元素,但在实现安全连接到 Google Cloud 所需的完整安全链方面,开发人员仍面临着其他挑战。而 Microchip Technology 的 PIC-IoT WG 开发板也能消除这一障碍。

开发端到端的物联网应用

PIC-IoT 板基于 ATECC608A 和 Microchip Technology 的低成本PIC24FJ128GA70516 位微控制器,这款无线物联网设计包含了 Microchip Technology 的ATWINC1510Wi-Fi 模块、Vishay SemiconductorTEMT6000X01环境光传感器和 MCP9808 I2C 温度传感器。此外,开发人员通过添加数百种MikroElektronikaClick板提供的传感器和致动器,可以轻松扩展硬件基础平台。对于软件开发,Microchip Technology 提供了 MPLAB X IDE 及相关的MPLAB 代码配置器(MCC) 快速原型开发工具。

该电路板和相关软件可以为基本端到端物联网应用评估提供交钥匙型平台,而这类应用的运行建立在物联网传感器设备与 Google Cloud 服务的安全连接基础之上。该套件以独特的方法实现了相互身份验证,即使对于资源受限的物联网设备也能进行验证。使用该方法,物联网设备可以使用轻型 TLS 服务来验证 Google 端的连接,并用 JavaScript Object Notation (JSON) Web Token (JWT),向 Google 服务器证明自身身份(请参阅“将 IoT 设备安全连接到云端的更简单的解决方案”)。除了器件驱动程序、板级支持包和中间件服务外,Microchip Technology 还通过 MPLAB 开发套件,并作为适用于 PIC-IoT 板的完整样例物联网应用一部分来演示该方法。

通过样例应用程序,开发人员不仅可以获得使用云应用的经验,还可以获得主要云服务提供商提供的物联网专用服务,将物联网设备连接到云端的经验。例如,物联网设备可通过 Google Cloud IoT Core 访问 Google Cloud 资源,该 IoT Core 提供了设备连接、相关元数据管理等所需的一系列服务(图 3)。

Google Cloud 提供专用服务 Google Cloud IoT Core 的示意图

图 3:与其他企业云提供商一样,Google Cloud 也提供专用服务 Google Cloud IoT Core,旨在满足将物联网设备与云资源结合相关的独特要求。(图片来源:Google)

使用云服务

在后端,Google Cloud IoT Core 使用发布/订阅模式,通过数据代理为设备提供对 Google Cloud 高级资源的访问权限。在前端,IoT Core 采用超文本传输协议 (HTTP) 或消息队列遥测传输 (MQTT),为物联网设备起到了桥接作用。MQTT 是国际标准化组织 (ISO) 的标准消息传输协议,旨在以最小通信带宽和物联网设备资源运行。Microchip Technology 的 PIC-IoT 板软件应用演示了如何采用在传输控制协议/网际协议 (TCP/IP) 套接字连接上运行的 MQTT,而该连接采用上述的 TLS/JWT 双向认证方法来确保安全。

建立安全连接后,该软件采用 MQTT 与 Google Cloud IoT Core 服务进行通信,建立通道或“主题”,用于将传感器数据发送到 Google Cloud 并响应来自云服务的命令。Google 调用物联网设备软件进行订阅,然后将数据发送到表单/devices/{deviceID}/events的指定主题,并在宽泛的events主题下提供了子主题选项。除了设备管理功能等其他主题外,Google 还指定了/devices/{device-id}/commands主题,可用于将命令从云端发送到物联网设备。Google 甚至提供了一个全能主题 (/devices/{device-id}/commands/#),允许物联网设备接收通过任何子主题发送的命令。

PIC-IoT 应用使用基于定时器和回调的可扩展软件架构演示了这些不同的程序。基于这种架构,主模块 (main.c) 只需提供主例程 (main()) 以及用于发送 (sendToCloud()) 和接收 (receivedFromCloud()) 消息的应用级例程。在进入运行计时器调度程序的无限循环之前,main()主例程本身只调用一对初始化例程,并为用户例程提供占位符(清单 1)。

复制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 板样例应用程序使用一系列定时器和回调来简化主循环,并且开发人员可轻松添加自己的服务和应用例程。(代码来源:Microchip Technology)

在进入无限循环之前,调用SYSTEM_Initialize()例程初始化硬件组件,包括时钟模数转换器 (ADC)、中断等。application_init()例程初始化各种包括 CryptoAuthentication 库在内的软件系统,并连接到 Wi-Fi 和云本身。最后,application_init()设置一个 100 毫秒 (ms) 的计时器来执行MAIN_dataTask()。计时器到期并调用MAIN_dataTask()时,该例程检查云连接,并且每秒调用一次sendToCloud(),视具体情况设置电路板 LED,以指示应用的当前运行状态(清单 2)。接着,开发人员可以通过 Microchip Technology 在 Google Cloud 上提供的免费沙盒帐号来查看传感器值。

复制// 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:使用定时器和回调机制,Microchip Technology 的 PIC-IoT 样例应用程序每秒向云端发送一次传感器数据 (CFG_SEND_INTERVAL=1),并更新电路板 LED 状态以指示当前运行状态。(代码来源:Microchip Technology)

处理来自云端的命令同样简单。样例应用程序演示了如何关联回调例程,例如receivedFromCloud()可用于处理接收到的消息。在初始化阶段,上述的application_init()例程调用例程 (CLOUD_subscribe()) 来执行 Google Cloud 订阅。在此过程中,软件回调receivedFromCloud()来更新表格 (imqtt_publishReceiveCallBackTable)(清单 3)。在本例中,样例应用程序使用config主题,并从NUM_TOPICS_SUBSCRIBE=1开始将索引硬编码到表中,但使用一般命令主题和派生子主题也是另一种选择。

复制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 样例应用程序显示了开发人员如何将回调例程与接收到的 MQTT 消息轻松关联在一起,在本例中,定义receivedFromCloud()函数来回调从默认主题接收到的消息。(代码来源:Microchip Technology)

开发人员可以使用交付的 PIC-IoT 硬件和软件包,即刻就可开始探索从 Google Cloud 发送和接收数据的各种方案。PIC-IoT 硬件包括 ATECC608A CryptoAuthentication 器件,并且已预先配置为支持 Google Cloud IoT Core 及此使用模型。开发人员可以轻松使用 MPLAB X IDE 和 MPLAB 代码配置器来修改或构建安全连接到 Google Cloud 的全新物联网应用。

总结

在物联网设备与网络资源之间提供安全连接,对于任何网络服务环境都是极其重要的,对于使用商业云服务而言更是必不可少。构建安全连接所需的软件服务层可能会致使物联网项目严重延迟,对于资源有限的物联网设计,甚至难以实现。使用如 Microchip Technology 的 PIC-IoT 等开发板(包含专用安全 IC),开发人员可以快速开发出能够安全连接到 Google Cloud 的物联网应用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6734

    浏览量

    147371
  • 物联网
    +关注

    关注

    2860

    文章

    41250

    浏览量

    357360
收藏 人收藏

    评论

    相关推荐

    使用全球蜂窝无线电模块将物联网设备快速安全地连接到云端

    作者:Jens Wallmann 如需将便携式或远程网络终端设备连接到联网 (IoT),或使用机对机通信 (M2M) 远程控制机器,通过云端进行数据交换的移动无线电连接是一个不错的选择。然而,这一
    的头像 发表于 01-01 17:04 417次阅读
    使用全球蜂窝无线电模块将物<b class='flag-5'>联网</b>设备<b class='flag-5'>快速</b><b class='flag-5'>安全地</b><b class='flag-5'>连接到</b>云端

    Google Cloud 线上课堂 | Google Cloud 迁移最佳实践

    数据中心的数千个复杂工作负载,将这些应用及数据迁移到新环境时面临各种挑战:如何降低迁移复杂性并控制成本?如何保证业务连续性及数据安全...... Google Cloud 通过经过验证的企业级工具和方法,帮助组织将工作负载顺利从
    的头像 发表于 11-28 17:45 218次阅读

    新知同享|Cloud 开发加速创新,更加安全

    安全 关注 Google Cloud 的 3 个 AI 重点发展领域 了解生成式 AI 功能如何助推创意落地 精彩大会现场一览 AI 始终是 Google
    的头像 发表于 09-08 20:10 252次阅读

    新唐对应四大联网安全攻击的保护措施

    的防护。 Platform Security Architecture (PSA) 为联网装置定义了安全基础,是 Arm 于 2017 年所提出,主要希望提供一个清晰的框架来保护及整合连接
    发表于 08-21 08:14

    Arm Keil Studio Cloud用户指南

    Arm Keil Studio Cloud是一个免费使用的、基于浏览器的集成开发环境 (IDE)用于评估和开发嵌入式,联网和机器学习软件Cortex-M设备。为您的代码提供云托管的工作空间,全面
    发表于 08-02 08:34

    使用BerryLan快速无头WiFi连接到Raspberry Pi

    电子发烧友网站提供《使用BerryLan快速无头WiFi连接到Raspberry Pi.zip》资料免费下载
    发表于 07-12 14:27 0次下载
    使用BerryLan<b class='flag-5'>快速</b>无头WiFi<b class='flag-5'>连接到</b>Raspberry Pi

    如何安全地将Arduino MKR GSM 1400板与GCP IoT Core结合使用

    设备可以使用 HTTP 或MQTT连接到 GCP IoT Core 。本教程将带您了解如何使用 MQTT 客户端将Arduino MKR GSM 1400开发板安全地连接到 GCP IoT Core。
    发表于 06-21 16:11 0次下载
    如何<b class='flag-5'>安全地</b>将Arduino MKR GSM 1400板与GCP IoT Core结合使用

    cdn如何才能快速、可靠、安全地交付内容

    的需求。但是,cdn如何才能快速、可靠、安全地交付内容呢?   关键术语 内容分发网络(CDN):一组相互连接的服务器,从离用户最近的位置提供和缓存互联网内容,旨在提高web性能,增强
    的头像 发表于 06-14 09:53 333次阅读

    如何模块连接到联网和Arduino板?

    我如何模块连接到联网和 Arduino 板
    发表于 06-12 06:12

    将WizFi360 EVB Pico连接到Azure IoT Cloud

    电子发烧友网站提供《将WizFi360 EVB Pico连接到Azure IoT Cloud.zip》资料免费下载
    发表于 06-09 14:25 0次下载
    将WizFi360 EVB Pico<b class='flag-5'>连接到</b>Azure IoT <b class='flag-5'>Cloud</b>

    如何安全地为NodeMCU供电?

    我正在开发一个项目,其中 NodeMCU 位于开关盒内。为了为其提供动力,我计划使用类似 (Hlk-pm01) 的东西。我的问题是:为 NodeMCU 供电, Hlk-pm01 连接到电网
    发表于 06-02 06:08

    如何配置ESP8266以连接到VPN?

    ioBroker 的 Rasperry Pi。我能够通过互联网数据从他的 Ahoy DTU 发送到我的 ioBroker MQTT 服务器,使用端口转发(两侧都是 1883)和 DynDNS。 在我的地方
    发表于 06-01 10:16

    如何房间的窗户连接到联网

    看看我是如何制作一个很棒的项目的,我房间的窗户连接到联网
    发表于 05-22 07:40

    如何ESP8266连接到Google表格?

    我正在尝试通过 ESP8266 模块数据从 arduino 连接到 google 表格。我没有使用节点 mcu,这是大多数教程的基础。我有一个连接到 arduino mega
    发表于 05-08 08:13

    联网和智能电网之间的关系是什么

    本文介绍了智能电网与联网连接所需的集成。简单来说,联网(IoT)是一个巨大的互
    发表于 04-07 09:22