前言
为何写作本书
2015年,我和本书的另一位作者崔红鹏同在无锡物联网产业研究院从事无线传感网方面的开发工作。那年,物联网概念虽然已被炒作多年,但无论是技术路线还是开发手段都还处于摸索阶段。2015年,共享单车才刚刚出现,NBIoT还在协议制定阶段,云计算也没有迎来爆发式增长。当时工作室采购了一套带网络接口的STM32F4开发板,我们想利用这块开发板进行一次HTTPS实验:把STM32F4开发板作为HTTPS服务器,用浏览器作为HTTPS客户端,通过浏览器访问开发板提供的HTTPS服务。我们想将这个嵌入式HTTPS实验作为学习物联网安全的第一步。但万事开头难,我们始终没有完成这个嵌入式HTTPS实验,冗长的调试信息和复杂的握手过程使我们不知所措。在排错过程中,我们查阅了大量的资料,发现了一个又一个新名词或概念,例如SSL、TLS、RSA加密、数字签名和椭圆曲线等,这些密码学基础知识让我们一头雾水。除了一个又一个新名词或概念之外,我们还了解到“RSA已经被破解了”或“哈希算法SHA1已经被破解”这些网络传言,这些真真假假的网络传言让我们在排错过程中束手束脚,生怕使用了不安全的算法。经过几天的努力,我们把问题总结为“TLS握手过程的证书校验出现了问题”。由于大量基础知识的缺失,我们并没有完成这次HTTPS实验。虽然嵌入式HTTPS实验并没有成功,但是我们还是总结了以下经验教训:
1)相对于资源受限制的物联网终端而言,HTTPS协议非常复杂,运行时也需要消耗大量资源。我们也开始思考是不是存在更合适的物联网终端的安全连接方案。
2)HTTPS涉及TLS协议和密码学基础知识,这些内容都需要花时间和精力系统学习。
3)该实验通过PolarSSL开源组件实现SSL/TLS,而SSL/TLS正是HTTPS的安全传输层。如果要熟练掌握嵌入式HTTPS,首先需要掌握PolarSSL。2015年,Polar更名为mbedtls,开启了物联网安全应用的新篇章。
当时我们还有另外一个共识:要想让物联网设备安全地联网,应该分为两步——第一,让物联网设备方便地连接网络;第二,让物联网设备安全地连接网络。
为了完成“两步走”的第一步,我在2016年到2017年间编写了国内第一本关于物联网专用协议CoAP的图书——《IoT开发实战:CoAP卷》,这本书解决了物联网设备方便连接网络的问题。CoAP好比互联网应用中的HTTP,而互联网应用不仅有HTTP,还有HTTPS,我想物联网应用中也应该有CoAPs。2017年到2018年间,三大运营商——中国电信、中国移动和中国联通在国内大力推进NBIoT网络建设,市面上出现了各种各样的NBIoT模组。2018年3月底,阿里巴巴宣布物联网成为继电商、金融、物流和云计算之后的第5条“主赛道”,从此,物联网进入了“云连物”时代。NBIoT和云计算的脱颖而出极大地推动了物联网的发展,当百万亿连接不再是遥不可及的梦想时,物联网应用不再满足于“方便”,同时对“安全”也提出了更高的要求。
在这种大背景下,2017年6月,我找到了本书的另一位作者崔红鹏,此时他已经在清华大学无锡应用技术研究院从事安全芯片的开发工作。我表示希望结合mbedtls写一本详细描述物联网连接安全的图书,我们很快达成了共识并付诸实践。我已经有编写技术图书的经验,我本以为上一次的成功经验可以使这次图书编写变成一次“愉快的写作之旅”,但是没过多久我就发现自己错了。物联网连接安全涉及大量密码学知识,而密码学又涉及很多数学基础知识,例如初等数论和抽象数学等。数学基础知识的缺失使得图书的编写过程举步维艰,我们花费大量的时间学习各种数论公式,甚至还研究公式或定理的证明过程。大学毕业之后很少有系统地学习数学理论知识的机会,这次特殊的自主学习经历让我们深刻体会到了数学的力量,那些经典的公式居然在几百年之后依然发挥着巨大的作用。
目标读者
本书适合物联网工程师、嵌入式工程师和Web开发工程师阅读。
·对于物联网工程师而言,通过本书可以系统地学习物联网安全连接的基础知识。本书借助深入浅出的示例讲解密码学算法,这些算法是构成物联网连接安全的利器。
·对于嵌入式工程师而言,本书详细讲解了mbedtls不同模块的使用方法,这些使用方法可以帮助你构建物联网安全应用。本书还分析各种安全算法的性能,这些分析结果将帮助你在实际项目中做出正确的选择。
·对于Web开发工程师而言,通过本书可以从设备角度了解物联网连接安全的限制条件,在这些限制条件下,物联网设备不能直接使用互联网应用中常见的安全套件。
总而言之,本书试图消除物联网工程师、嵌入式工程师与Web开发工程师之间的知识鸿沟,在物联网连接安全方面达成共识。
如何阅读本书
本书主要内容分为三部分。
第一部分:第1~3章。第一部分是全书的基础。第1章主要讲解密码学安全常识、mbedtls和OpenSSL相关基础知识。本书虽然以mbedtls为核心,但在多个章节中使用了OpenSSL工具,所以在第1章的后面部分将详细讲解OpenSSL的安装和使用方法。第2章介绍mbedtls的安装和使用方法,由于本书的大多数硬件示例均基于Zephyr构建,所以第2章还介绍了Zephyr的构建过程和使用方法。第3章讲解数论基础知识,包括素数、模运算、群、域和有限域等概念,这些数论知识是密码学算法的基础。
第二部分:第4~12章。第二部分主要讲解密码学6种主要密码技术——单向散列函数、对称加密算法、消息认证码、随机数、公钥密码和数字签名。第二部分还介绍了多种密码技术,分别是SHA256、AES、HMAC、GCM、CCM、CTR_DRBG、RSA、DH、ECDH、DSA、ECDSA和X.509,每章均包括原理说明和mbedtls示例代码,试图通过理论结合实践的方式向读者展现mbedtls的全貌,其中椭圆曲线相关的ECDH和ECDSA涉及较多数学知识,是本书较难理解的内容。
第三部分:第13~16章。第三部分主要包括mbedtls移植与性能分析、TLS/DTLS/CoAPs等内容。mbedtls性能分析部分将比较各种安全算法,这些分析结果可以帮助读者在实际项目中做出正确选择。第三部分还介绍了TLS和DTLS协议,虽然TLS协议异常复杂且仍在不断发展,但它是物联网连接安全的核心协议。第14章详细介绍TLS协议,包括TLS握手协议、密钥交换、密钥计算和对称加密等,这些是本书最复杂的内容。为了讲解CoAPs,第15章还介绍了DTLS协议,重点介绍了DTLS协议与TLS协议之间的联系与区别。最后一章介绍了CoAPs,CoAPs可被理解为CoAP协议与DTLS协议的结合,它将成为物联网连接安全的主流协议。
相关资料
本书提供多个基础示例,这些示例代码可以帮助读者更好地了解mbedtls。
示例代码仓库网址为:https://github.com/iotwuxi/iot_security。
勘误与支持
由于作者水平有限,书中难免有错误之处,恳请读者批评指正。如果读者在阅读过程中发现任何问题,可通过邮件与本书的两位作者取得联系。
徐凯的邮箱:xukai19871105@126.com
崔红鹏的邮箱:xianrenqiu90@126.com
徐凯的致谢
感谢机械工业出版社华章公司的编辑,没有他们的策划与鼓励就不会有这本书。
感谢阿里巴巴阿里云IoT无锡团队的汪亮(画安)和罗日健(悠仔),感谢他们营造了一个具有创新精神的工作环境,这种氛围激励我不断前进;感谢一起并肩战斗的小伙伴们,他们是黄浩(先道)、赵峰(新安)、林达(靖明)、龙超(瞻龙)、吴叶俊(安悟)、庞海亮(胖亮)、谢娟(无鱼)、刘愿(毕险)、李迪晞(平休)、彭微(师尘)、三帖(张云);感谢阿里云IoT的两位师兄李锟(怀明)和杨骁(羽升);感谢崔杨(懿侬),是他让我明白“传播知识比学习知识更有价值”。
感谢我的导师江南大学君远学院院长张秋菊教授,感谢您帮助我开启物联网世界的大门。
感谢我的妻子左文娟一如既往地支持我写作,感谢家人的默默付出与包容。
崔红鹏的致谢
感谢微纳电子实验室的朱敏、吴有余、张继璠和龚雪,是他们为实验室创造了良好的工作环境和学习氛围。感谢实验室与我一起工作的同事,他们是:杨锦江、王宇峰、孙进军、徐翔、张扣、姚俊、张沛、李植、章俊、李康、胡永鑫、赵新成、赵启义、徐健、郭唯、贾德存、蒋广隶。
感谢妈妈和老婆的默默付出,是她们让我有充足的时间和精力完成写作。在此祝家人健康快乐。