很多物联网 (IoT) 设备都是我们日常生活中所使用的,例如家电和恒温器等,因此,网络安全应是 IoT 系统供应商首先要考虑的问题。人们在日常生活中遇到问题最容易让人沮丧:如果您的冰箱由于软件缺陷而停止工作,这是不是也会成为头版头条!
IoT 产品在安全上有各种层面的考虑,从基本的数据流加密到用户和设备级的认证等。在这篇文章中,我们重点介绍网络级安全。
一个典型的 IoT 设备位于私有网路中,在防火墙的后面。这种体系结构既有优点也有问题。一方面,它减少了设备与防火墙和 Wi-Fi 网络本身的安全接触,无论如何,减轻了网络供应商的安全责任。安全代理有助于降低 CPU 成本。另一方面,防火墙阻止了云服务器出于通过移动应用程序进行控制的目的而直接连接 IoT 设备。
有些技术能够帮助旁路防火墙,支持从云端到IoT设备的输入连接。但是,很多这类技术利用了漏洞,并不是所有网络都支持这样做,而且,这种体系结构很难设计一种真正安全的 IoT 设备。旁路防火墙最简单、最安全、最可靠的方法是IoT设备符合 “仅输出连接” 规则:所有连接都是从设备向云端发起,然后,设备应保持这一连接是开放的。这一方法简单而且更安全,这是因为它不依靠防火墙的开放端口,也不依靠让防火墙完成数据流路由的技术,例如,NAT 会话穿越 (STUN) 方法等。
建立连接后,我们应选择怎样高效的使用连接,在响应和资源占用之间达到均衡。HTTP 长轮询是一种双向通信,基于 “由内而外输出” 标准的方法 (图1)。 (图片)
图1. 双向通信,基于由内而外标准的方法 在长轮询模型中,IoT 设备向服务器发出 HTTP 请求。服务器延迟对 HTTP 请求的响应,直至经过了预先设定的时间周期,或者直至收到要求响应 IoT 设备的命令或者请求。如果命令是必须的,服务器会立即响应命令,IoT 客户端处理命令。IoT 客户端会立即发出另一服务器 HTTP 请求,开始循环。如果命令或者请求需要向服务器提供结果,那么,它会在新的长轮询请求中进行。
这一方法有几种优点。从 IoT 设备的角度看,HTTP 简单,轻量,而且还有很多支持库。HTTP 还提供了互联网路由功能,包括对长轮询所需要的持续连接的支持。
HTTP 还支持任意负载,您可以灵活的选择与设备相关的消息。我们成功的在长轮询上使用了 JSON/REST 语法,以及谷歌协议缓冲消息。
从云端服务器的角度看,大部分工作框架都是设计成处理 HTTP 请求,支持服务器开发人员自由的使用现有工作框架和库以加速开发。
HTTP 长轮询还支持服务器通过简单的实现更长的响应延时,从而控制带宽利用率。而且,通过增加简单的 “轮询定时器” ,迫使 IoT 客户端延时 HTTP 请求,这样,您很容易获得真轮询模型,一方面,牺牲响应时间,而另一方面,降低了对资源的占用,可以使用电池供电。
WebSockets 是另一种选择,与 HTTP 长轮询非常相似。WebSockets 与 HTTP 帧头配合使用,效率非常高。WebSockets 还提供实时设备至服务器提醒功能,某些应用会需要这一功能。为获得长轮询模型的实时提醒功能,必须使用单独的套接字,以保持服务器控制的长轮询通道。
然而,并不是所有服务器工作框架都支持 WebSockets ,在很少的一些实际应用中,网络布线会成为问题。在不远的将来,WebSockets 会是很好的选择,但是目前而言,我不会使用它,除非您的目标环境支持它。
这些技术的基础都是传输控制协议 (TCP) 套接字。合理可行的安全模型在这一套接字连接上对数据流进行加密。虽然最近有些不好的消息,但是安全套接字层 (SSL) 或者传送层安全 (TLS) 仍然是加密层最好的选择。SSL 通过的审查最多,支持最多,也最被容易理解。
您想过要发明自己的协议?考虑到最近的安全缺陷,例如,目前出名的 “Heartbleed” 缺陷,它来自一些大公司的 SSL 和开放源库,这说明了很难开发一种真正安全的协议,更不用说正确的实现它。因此,在尝试自己的安全方案之前一定要三思。
然而,SSL 本质上是一种大规模协议,在连接建立过程中需要很多次握手。这种开销进一步说明所有通信应使用持续连接方法,好在 HTTPS 长轮询 (结合 TCP 套接字 “保持连接”,因此,每次轮询不会重新打开) 适合这一应用。
SSL 还会占用大量的代码空间和运行时存储器。对于资源丰富的云服务器,SSL 资源开销并不是太大的问题,但是对于低成本 IoT 设备却不然,这是因为存储器和 CPU 功耗是首当其冲要考虑的。当考虑 IoT 设备的 SSL 库时,如果您选择的 SSL 库提供了选项来禁用您不使用的功能,那么应评估您需要使用 SSL 的哪些功能。您还应该看看目标硬件能否帮助您减轻负载。SSL 基于高级加密标准 (AES)、安全哈希算法 (SHA),以及其他标准密码算法。很多硬件平台提供专门的加密硬件,把这些计算从 CPU 中卸载下来。
最后,这些方法实际上是在资源和理解安全需求之间达到均衡。认真的思考,提前规划好有助于解决很多棘手的问题。
Matt Osminer 简介
Matt Osminer 是 Cardinal Peak 公司的合伙人兼工程主任,这家工程服务公司专业从事嵌入式设备、移动应用软件和数字视频产品的开发。在 Cardinal Peak 公司中,Osminer 掌管多个物联网系统的开发,包括,开发连接设备、云服务器以及移动应用软件等。在加入 Cardinal Peak 之前,Osminer 是时代华纳有线公司 (Time Warner Cable) 的软件工程总监,负责有线电视平台上大量的应用软件开发。在职业生涯的早期,他曾是几家初创公司的嵌入式软件工程师。
1/21/2015
|