上次提到HTTPS加密传输数据,HTTPS就是相当于HTTP+SSL/TLS,目前还是被论证是安全的信息传输模式。关于SSL/TLS又是什么呢?
图片
Netscape 在90年代初就开发了原始的 SSL 协议,SSL 1.0 因为存在严重的安全缺陷从未公开发布,SSL 2.0于 1995年发布,但其中仍包含许多安全缺陷,于是在1996年发布了SSL 3.0。随着加密与解密安全攻防战的博弈,SSL 协议的安全性逐渐满足不了需求,SSL 2.0 在 2011 年被RFC 6176弃用,SSL 3.0 于 2015 年被RFC 7568弃用。
TLS 1.0 在 1999 年发布于RFC 2246中,TLS 1.0 和 SSL 3.0 之间的差异并不显著(TLS 1.0 等同于 SSL 3.1),改名主要是为了和Netscape撇清关系(SSL协议由Netscape主导开发),表示一个新时代的来临(TLS协议由 IETF 进行标准化)。
随着网络攻击技术的发展,TLS 加密算法也需要进行升级,TLS 1.1 于 2006 年在RFC 4346中定义,TLS 1.2 于 2008 年在RFC 5246中定义,并于2011年在RFC 6176中完成优化,最新版本的TLS 1.3 于 2018 年在RFC 8446中定义。早在2018年10月,苹果、谷歌、微软和Mozilla就联合宣布,将在2020年3月弃用TLS 1.0和TLS 1.1,目前TLS1.3已经是不管是HTTPS还是各种不同的物联网协议中广泛应用的标准。
图片
TLS (Transport Layer Security)协议是由TLS 记录协议(TLS Record Protocol)和TLS 握手协议(TLS Handshake Protocol)这两层协议叠加而成的,位于底层的TLS 记录协议负责进行信息传输和认证加密,位于上层的TLS 握手协议则负责除加密以外的其它各种操作,比如密钥协商交换等。
TLS记录报文的字段可以用如下数据结构定义:
图片
TLS的握手协议包括密钥交换协议,密码规格变更协议,警告协议以及应用数据协议,下面是密钥交换的流程图:
图片
既然是加密传输协议,加密算法必不可少,非对称加密主要是基于ECC或RSA,TLS中有加密算法的协商,但是考虑到各种不同的算法的执行效率和加密效果,ECC被更多的使用,尤其是在嵌入式物联网领域。
图片
而对于对称加密算法,AES128在嵌入式中是是比较主流的加解密算法。
图片
更具体的TLS的细节就不展开了,物联网领域可以参考Arm的开源软件mbedtls实现(https://github.com/ARM-softwa...),也是目前最主流的IoT领域的通信加密实现。MbedTLS的前身是Arm在2015年2月收购的荷兰公司Offspark的商业PolarSSL软件,现在是作为开源软件贡献给社区,实现的效率和稳定性已经得到广大物联网操作系统平台的认可。
图片
Arm关于安全的开源软件除了mbedTLS之外,还有TFA,TFM, OP-TEE, Halnium, TrustedServices,Open CI等,在https://www.trustedfirmware.org/,后续逐步做相关的介绍。