Introduction to Security and TLS(安全性和TLS(传输层安全性)简介)

前言

物联网(IoT, Internet of Things)就是连接到互联网,而其中更重要的是安全性,没有安全性,没有加密通信,每个人都可以看到我发送或接收的内容。如果密码或用户名以未加密的方式发送,这尤其糟糕。因此加密和安全通信是关键。解决方案是使用使用TLS(Transport Layer Security,传输层安全性)协议的连接。

这篇文章可以学习到数据通信安全的东西:网络堆栈架构,对称和非对称加密和证书。

基于证书的密钥交换

概览

本文介绍了使用TLS(传输层安全性)协议进行安全通信的基本原则,并结合了MQTT。TLS是SSL(安全套接字层,Secure Sockets Layer)的后继者,通常一起使用(TLS / SSL)。TLS(如名称所示)是传输层上的加密:这意味着应用层本身不必实现加密:相反,它将传输层配置为使用加密协议。

网络堆栈架构

对于与互联网通信的应用(例如,在微控制器上运行),它需要通信栈(TCP / IP,例如lwip)以及与物理层(例如FRDM-K64F开发板)通信所需的硬件。TCP / IP本身是应用程序与另一方通信的常见“语言”:

未加密的通信堆栈

同样的原则适用于在我自己主机上运行的MQTT Mosquitto代理(或任何服务器)。

MQTT是一种使用TCP(传输控制协议,Transmission Control Protocol)的特殊“语言” ,基本上位于应用程序和TCP / IP堆栈之间:应用程序使用MQTT层来交谈和理解“MQTT语言”:

带有MQTT应用程序堆栈

TCP / IP使用“套接字”和/或“端口”。默认情况下,Mosquitto正在使用未使用加密协议的端口1883。这意味着可能每个人都可以看到MQTT代理和客户端之间的数据交换。使用MQTT进行未加密的连接非常有用,因为这很简单,并且提供了一种简单的方法来开始探索MQTT。在另一端配置加密和使用加密连接要复杂得多。但是,一旦我以未加密的方式工作以进行测试成功,我肯定还想使用加密方式通信。

而是在应用程序本身中进行“端到端”加密,更好的方法是在通信堆栈之上放置加密层:

带加密的MQTT应用程序

这样,应用程序(或MQTT语言部分)不需要实现加密协议本身,它只是与加密层对话,并且将完成所有工作。

对称和非对称加密

加密很大程度上依赖于数学,涉及到随机数生成器和加密算法。加密时需要“密钥”:一系列位和字节,用于“锁定”(加密)和“解锁”(解密)数据。

使用对称加密, 相同的密钥用于加密和解密消息:

对称加密

这意味着拥有该(蓝色)密钥的每个人都能够解密该消息。因此,安全性取决于我可以分发和保留该密钥的安全性。

使用非对称加密,我有一对数学连接的密钥:共享绿色和私有红色密钥。我将红色密钥保密,不要透露和分发。绿色钥匙是公开的:每个人都可以拥有它。每个人都可以使用绿色公钥加密消息,但只有具有红色私钥的消息才能解密它:

? 公钥和私钥构建一对密钥,它们不同,但在数学上是相关的。这样,只有私钥才能解密用公钥才能加密消息!

使用公钥和私钥进行非对称加密

证书

但我怎么知道我收到的公钥真的来自我认为它来自的人?也许我认为我已经从我认为的那个人那里收到了公钥,但事实上它是一个“中间人”拦截所有信息而我拥有的确是那些中间人的公钥呢?

中间人拦截消息

这时这里的“证书”进入了剧中。证书是一种护照,由“认证机构”(CA)提供,证明该人确实是那个人。

证书

证书本身可用于加密和验证密钥,类似于将密钥打包到证书中

基于证书的密钥交换

然后,Sue可以使用可信证书来提取密钥。如果失败,Sue知道带密钥的证书不是来自Joe。

如何分发密钥和证书有不同的方法和协议。通常,密钥/证书是预先分发的(例如,预先安装在设备上),或者使用诸如TLS的多级协议来建立和交换秘密信息。

传输层安全性(TLS)协议

TLS存在于不同的版本中(当前版本为1.3 RFC 8446,发布于2018年8月10日)。TLS使用称为“握手”的特殊协议来同意协议和交换密钥(有关详细信息,请参阅此链接)。基本上,证书用于验证服务器身份,非对称加密用于交换用于对称加密的共享密钥:

  1. 客户端向服务器发送明确(未加密)的“hello”消息,要求加密会话。
  2. 服务器响应其服务器证书,其中包含服务器公钥。
  3. 客户端验证证书并提取公钥。
  4. 客户端使用公钥将他生成的“pre-master”密钥发送到服务器。
  5. 服务器使用其私钥来提取“pre-master”密钥。
  6. 客户端和服务器都使用“pre-master”密钥来计算共享密钥。
  7. 客户端将消息发送到由该共享密钥加密的服务器。
  8. 服务器解密收到的消息并进行检查。
  9. 如果通过,服务器使用共享密钥将加密的消息发送回客户端以确认一切正常。
  10. 从此时起,客户端和服务器都使用共享密钥进行通信。

https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10660_.htm 中的图表提供了握手过程的完整概述:

SSL或TLS握手

加密中间件

我不打算实施TLS或加密算法;-)。相反,我正在寻找一个我可以使用的开源库。有不同的供应商提供加密中间件。对于我使用MQTT,lwip和FRDM-K64F的项目,有以下内容:

mbedTLS是我发现的最通用和开放的库,这就是我开始在我的项目中使用它的原因。在下一篇文章中有关它的更多信息。

总结

要使用安全的数据传输,我必须使用加密。密码算法提供了几个开源库,其中mbedTLS库似乎最符合我的需求。密钥(sic!)加密是密钥和证书的分发和处理。TLS(或传输层安全性)是一种管理mbedTLS库中提供的密钥验证和分发的协议。

链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值