保护你的植物安全 本课概览的速写笔记 速写笔记由 Nitya Narasimhan 创作。点击图片查看大图。 预习测验 预习测验 引言 在过去的几节课中,你已经创建了一个土壤监测物联网设备并将其连接到云端。但如果一个竞争对手农民雇佣的黑客成功控制了你的物联网设备,会发生什么?他们可能会发送高土壤湿度读数,导致你的植物得不到浇水,或者启动你的灌溉系统使其一直运行,从而导致植物因过度浇水而死亡,并且耗费大量水费。 在本课中,你将学习如何保护物联网设备。由于这是本项目的最后一课,你还将学习如何清理你的云资源,以减少潜在的成本。 本课我们将涵盖以下内容: 为什么需要保护物联网设备? 密码学 保护你的物联网设备 生成和使用X.

速写笔记由 Nitya Narasimhan 创作。点击图片查看大图。
在过去的几节课中,你已经创建了一个土壤监测物联网设备并将其连接到云端。但如果一个竞争对手农民雇佣的黑客成功控制了你的物联网设备,会发生什么?他们可能会发送高土壤湿度读数,导致你的植物得不到浇水,或者启动你的灌溉系统使其一直运行,从而导致植物因过度浇水而死亡,并且耗费大量水费。
在本课中,你将学习如何保护物联网设备。由于这是本项目的最后一课,你还将学习如何清理你的云资源,以减少潜在的成本。
本课我们将涵盖以下内容:
这是本项目中的最后一课,所以完成本课和作业后,请记得清理你的云服务。你需要这些服务来完成作业,所以在完成作业后再进行清理。
参阅 清理项目指南,如有必要,获取有关如何执行此操作的说明。
物联网安全包括确保只有预期的设备可以连接到你的云物联网服务并发送遥测数据,而且只有你的云服务能够向你的设备发送命令。物联网数据也可能包含个人数据,如医疗或私人信息,因此你的整个应用程序都需要考虑安全性,以防止这些数据泄露。
如果你的物联网应用不安全,会面临多种风险:
这些都是现实世界中的场景,经常发生。一些示例在之前的课程中已经给出,这里还有一些:
✅ 做一些研究:搜索更多关于物联网黑客和物联网数据泄露的例子,特别是涉及个人物品的,如联网牙刷或秤。思考这些黑客可能对受害者或客户造成的影响。
安全是一个庞大的话题,本课只会介绍连接设备到云端的一些基础知识。其他未涵盖的主题包括传输过程中数据变化的监控、直接黑客攻击设备或设备配置的变化。由于物联网黑客构成了如此大的威胁,已经开发出了工具,如Azure Defender for IoT。这些工具类似于你在计算机上使用的反病毒和安全工具,只是专为小型、低功耗的物联网设备设计。
当设备连接到物联网服务时,它使用一个ID来识别自己。问题是这个ID可以被克隆——黑客可以设置一个恶意设备,使用与真实设备相同的ID但发送虚假数据。

解决这个问题的方法是将发送的数据转换成一种加密格式,使用设备和云端都知晓的一个值进行加密。这个过程称为 加密,用于加密数据的值称为 加密密钥。

然后,云服务可以使用一个过程称为 解密,用相同的加密密钥或 解密密钥 将数据转换回可读格式。如果加密的消息不能用密钥解密,设备就被认为已被黑客入侵,消息将被拒绝。
执行加密和解密的技术称为 密码学。
最早的密码学类型是替代密码,可以追溯到3500年前。替代密码涉及用一个字母替换另一个字母。例如,凯撒密码 涉及将字母表按一定量移动,只有发送加密消息的人和预期的接收者知道要移动多少个字母。
Vigenère密码 进一步发展了这一点,使用单词来加密文本,因此原始文本中的每个字母都以不同的量移动,而不是总是移动相同数量的字母。
密码学被广泛应用于各种目的,例如保护古代美索不达米亚陶工釉料配方,印度的秘密情书,以及保存古埃及魔法咒语的秘密。
现代密码学更加先进,比早期方法更难破解。现代密码学使用复杂的数学来加密数据,密钥的数量太多,使得暴力攻击变得不可能。
密码学在许多不同的方式中用于安全通信。如果你正在GitHub上阅读这篇文章,你可能会注意到网站地址以 HTTPS 开头,这意味着浏览器与GitHub的Web服务器之间的通信是加密的。如果有人能够读取在你的浏览器和GitHub之间流动的互联网流量,他们也无法读取数据,因为它是加密的。你的电脑甚至可能加密硬盘上的所有数据,这样如果有人偷走它,没有你的密码就无法读取任何数据。
HTTPS 代表超文本传输协议 安全
不幸的是,并非一切都是安全的。有些设备没有任何安全措施,有些设备则使用容易破解的密钥,有时甚至所有同一类型的设备都使用相同的密钥。曾有报道说,非常私人的物联网设备都使用相同的WiFi或蓝牙连接密码。如果你能连接到自己的设备,你也可以连接到别人的设备。一旦连接,你就可以访问非常私密的数据,或者控制他们的设备。
尽管现代密码学复杂且声称破解加密可能需要数十亿年,量子计算的兴起使得在短时间内破解所有已知加密成为可能!
加密有两种类型:对称和非对称。
对称 加密使用相同的密钥来加密和解密数据。发送者和接收者都需要知道相同的密钥。这是最不安全的一种类型,因为密钥需要以某种方式共享。为了发送加密消息,发送者可能需要首先将密钥发送给接收者。

如果密钥在传输过程中被盗,或者发送者或接收者被黑客攻击并发现密钥,加密就会被破解。

非对称 加密使用两个密钥——加密密钥和解密密钥,称为公私密钥对。公钥用于加密消息,但不能用于解密它;私钥用于解密消息,但不能用于加密。

接收者分享他们的公钥,发送者使用这个公钥来加密消息。消息发送后,接收者使用他们的私钥解密它。非对称加密更安全,因为私钥由接收者保密,从不共享。任何人都可以拥有公钥,因为它只能用来加密消息。
对称加密比非对称加密更快,但非对称加密更安全。一些系统会同时使用这两种方法——使用非对称加密来加密和共享对称密钥,然后使用对称密钥来加密所有数据。这使得在发送者和接收者之间共享对称密钥更安全,同时加密和解密数据也更快。
物联网设备可以通过对称或非对称加密来保护。对称加密更容易,但安全性较低。
当你设置物联网设备以与IoT Hub交互时,你使用了一个连接字符串。一个示例连接字符串如下:
HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=
这个连接字符串由三部分组成,每部分由分号分隔,每部分都是一个键和一个值:
| 键 | 值 | 描述 |
|---|---|---|
| HostName | soil-moisture-sensor.azure-devices.net |
The URL of the IoT Hub |
| DeviceId | soil-moisture-sensor |
The unique ID of the device |
| SharedAccessKey | Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0= |
A symmetric key known by the device and the IoT Hub |
The last part of this connection string, the SharedAccessKey, is the symmetric key known by both the device and the IoT Hub. This key is never sent from the device to the cloud, or the cloud to the device. Instead it is used to encrypt data that is sent or received.
✅ Do an experiment. What do you think will happen if you change the SharedAccessKey 部分的连接字符串是什么?试着找一下。
当设备第一次尝试连接时,它会发送一个共享访问签名(SAS)令牌,其中包括IoT Hub的URL、一个将在当前时间一天后的过期时间戳以及一个签名。这个签名是由连接字符串中的共享访问密钥加密的URL和过期时间组成的。
IoT Hub使用共享访问密钥解密这个签名,如果解密后的值与URL和过期时间匹配,设备就可以连接。它还会验证当前时间是否在过期时间之前,以防止恶意设备捕获真实设备的SAS令牌并使用它。
这是一种优雅的方式来验证发送者是正确的设备。通过发送一些已知的数据,在解密和未加密的形式中,服务器可以通过确保解密加密数据的结果与发送的解密版本匹配来验证设备。如果匹配,则发送者和接收者都具有相同的对称加密密钥。
因为有过期时间,你的物联网设备需要知道准确的时间,通常从NTP服务器读取。如果时间不准确,连接将会失败。
连接之后,从设备发送到IoT Hub的所有数据,或从IoT Hub发送到设备的所有数据都将使用共享访问密钥加密。
✅ 如果多个设备共享相同的连接字符串,你认为会发生什么?
存储此密钥在代码中是一种不良的安全实践。如果黑客获得了你的源代码,他们可以获取你的密钥。这也会使发布代码变得更加困难,因为你需要为每个设备重新编译并更新密钥。最好从硬件安全模块加载此密钥——一种存储加密值的芯片,可以通过你的代码读取。
在学习物联网时,通常将密钥放在代码中会更简单,就像你在早先的课程中做的那样,但你必须确保此密钥不会被提交到公共源代码控制。
设备有两个密钥和两个对应的连接字符串。这允许你轮换密钥——也就是说,如果第一个密钥被泄露,你可以切换到另一个密钥,并重新生成第一个密钥。
当你使用公私钥对进行非对称加密时,你需要将你的公钥提供给任何想要向你发送数据的人。问题是,接收你的公钥的人如何确定它确实是你的公钥,而不是其他人冒充你?与其提供一个密钥,不如将你的公钥放入一个由可信第三方验证的证书中,这种证书称为X.509证书。
X.509证书是包含公私钥对中公钥部分的数字文档。它们通常由称为认证机构(CA)的多个可信组织之一签发,并由CA进行数字签名,以表明密钥有效并且来自你。你信任证书,相信公钥来自证书所说的来源,因为你也信任CA,类似于你信任护照或驾照是因为你信任签发国一样。证书需要花钱,所以你也可以“自签名”,即你自己创建一个由你签名的证书,用于测试目的。
你永远不应该在生产版本中使用自签名证书。
这些证书包含几个字段,包括公钥的来源、签发它的CA的详细信息、有效期以及公钥本身。在使用证书之前,最好通过检查它是否由原始CA签名来验证它。
✅ 你可以在微软理解X.509公钥证书教程中阅读证书中所有字段的完整列表。
使用X.509证书时,发送者和接收者都会有各自的公钥和私钥,以及各自包含公钥的X.509证书。然后,他们将以某种方式交换X.509证书,使用对方的公钥加密发送的数据,并使用自己的私钥解密收到的数据。

使用X.509证书的一大优势是可以跨设备共享。你可以创建一个证书,上传到IoT Hub,并用它为所有设备服务。每个设备只需要知道私钥来解密从IoT Hub接收到的消息。
你的设备用于加密发送到IoT Hub的消息的证书是由微软发布的。许多Azure服务都使用相同的证书,有时甚至内置在SDK中。
请记住,公钥只是公钥。Azure公钥只能用于加密发送到Azure的数据,不能用于解密,所以它可以到处共享,包括源代码中。例如,你可以在Azure IoT C SDK源代码中看到它。
✅ 关于X.509证书有很多术语。你可以在门外汉指南:X.509证书术语中阅读你可能遇到的一些术语的定义。
生成X.509证书的步骤如下:
创建一个公钥/私钥对。最广泛使用的生成公钥/私钥对的算法之一是Rivest–Shamir–Adleman(RSA)算法。
提交带有相关数据的公钥以供签名,无论是由CA签名还是自签名
Azure CLI 命令可以创建新的IoT设备标识,并自动生成公钥/私钥对并创建自签名证书。
如果你想查看详细的步骤而不是使用Azure CLI,可以在Azure IoT Hub文档中的使用OpenSSL创建自签名证书教程中找到。
运行以下命令以注册新设备标识,自动生成密钥和证书:
az iot hub device-identity create --device-id soil-moisture-sensor-x509 \ --am x509_thumbprint \ --output-dir . \ --hub-name <hub_name>
替换 <hub_name> with the name you used for your IoT Hub.
This will create a device with an ID of soil-moisture-sensor-x509 to distinguish from the device identity you created in the last lesson. This command will also create 2 files in the current directory:
soil-moisture-sensor-x509-key.pem - this file contains the private key for the device.soil-moisture-sensor-x509-cert.pem - 这是设备的X.509证书文件。请妥善保管这些文件!私钥文件不应提交到公共源代码控制。
按照相关指南连接你的物联网设备到云端,使用X.509证书:
以下是翻译后的Markdown文件:
创建、管理和删除Azure服务(如资源组和IoT Hub)有多种方法。一种方式是使用Azure门户——一个基于Web的界面,它为你提供了一个GUI来管理你的Azure服务。
前往portal.azure.com并探索该门户。看看你是否能通过门户创建一个IoT Hub,然后将其删除。
提示——当你通过门户创建服务时,不需要提前创建资源组,可以在创建服务时创建一个。完成后务必将其删除!
你可以在Azure门户文档中找到大量文档、教程和指南。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。