通过HTTP加密数据和防止重播攻击的最佳方法

通过HTTP加密数据和防止重播攻击的最佳方法,http,security,encryption,iot,gateway,Http,Security,Encryption,Iot,Gateway,我正在开发物联网网关,它将从物联网设备收集数据。物联网设备是受限制的设备,无法使用HTTPS。 它周期性地从传感器发送少量数据,以及一些传统信息,如时间、消息id、单元id等 现在我们已经有了一个网关的实现,它是Java中的RESTAPI,面向所有人开放。因此,它接受来自任何设备的JSON请求,而不确保来自我们设备的数据不会被破坏或泄露 如果不具备通过HTTPS保护数据的能力,那么设计网关和设备之间接口的最佳方法是什么?如果设备无法使用HTTPS(使用任何一组密码套件),则您可能必须做出严重的妥

我正在开发物联网网关,它将从物联网设备收集数据。物联网设备是受限制的设备,无法使用HTTPS。 它周期性地从传感器发送少量数据,以及一些传统信息,如时间、消息id、单元id等

现在我们已经有了一个网关的实现,它是Java中的RESTAPI,面向所有人开放。因此,它接受来自任何设备的JSON请求,而不确保来自我们设备的数据不会被破坏或泄露


如果不具备通过HTTPS保护数据的能力,那么设计网关和设备之间接口的最佳方法是什么?

如果设备无法使用HTTPS(使用任何一组密码套件),则您可能必须做出严重的妥协,并且没有安全连接的某些方面。虽然有点简化,但https几乎是实现它的最基本的完整套件,没有什么“不必要的”。您可能不需要所有东西,但这完全取决于您的用例和威胁模型。在实现这一点之前,您应该完全了解https提供了什么以及如何提供,以便可以使用适用的部分。还要注意的是,这一点也不容易实现,自定义实现可能会受到攻击。

如果设备无法使用https(使用任何一组密码套件),您可能需要做出严重的妥协,并且没有安全连接的某些方面。虽然有点简化,但https几乎是实现它的最基本的完整套件,没有什么“不必要的”。您可能不需要所有东西,但这完全取决于您的用例和威胁模型。在实现这一点之前,您应该完全了解https提供了什么以及如何提供,以便可以使用适用的部分。还要注意的是,这一点也不容易实现,自定义实现很可能容易受到攻击

如果不具备通过HTTPS保护数据的能力,那么设计网关和设备之间的接口的最佳方法是什么

您仍然可以使用对称加密/身份验证来确保完整性和机密性,即使对于低端设备也是可行的

作为一个灵感,你可能会有一个战利品

您可以使用一些时间戳/计数器或具有幂等消费者来限制重播

不管怎样,丢失的tls/https ypu必须处理很多事情,例如如何保护共享密钥,如果被撤销则更新,等等

如果不具备通过HTTPS保护数据的能力,那么设计网关和设备之间的接口的最佳方法是什么

您仍然可以使用对称加密/身份验证来确保完整性和机密性,即使对于低端设备也是可行的

作为一个灵感,你可能会有一个战利品

您可以使用一些时间戳/计数器或具有幂等消费者来限制重播


不管怎样,丢失的tls/https ypu必须处理很多事情,例如如何保护共享密钥、撤销时更新等

您的设备到底有多受限?有一些TLS的小型实现不需要您在安全性方面妥协,例如

wolfSSL的封装外形大小(编译后的二进制大小)范围在20-100kB之间,具体取决于构建选项和所使用的编译器。
关于运行时内存使用,wolfSSL通常会在每个SSL/TLS会话中消耗1-36 kB的内存


无论如何,我不建议您尝试实现自己的密码套件,除非您真的知道自己在做什么。

您的设备到底有多受限?有一些TLS的小型实现不需要您在安全性方面妥协,例如

wolfSSL的封装外形大小(编译后的二进制大小)范围在20-100kB之间,具体取决于构建选项和所使用的编译器。
关于运行时内存使用,wolfSSL通常会在每个SSL/TLS会话中消耗1-36 kB的内存


无论如何,我不建议您尝试实现自己的密码套件,除非您真的知道自己在做什么。

鉴于您提到的能够访问(HTTP/JSON)的工具类型,我建议查看JOSE,这是一种对此类数据进行签名和加密的标准化方法。特别是你会感兴趣的,和。不幸的是,JOSE的学习曲线有点陡峭,文档也有点稀疏,但它非常有效,可以在各种平台上实现,并且可以在发明自己的协议时为您省去很多麻烦(这很难正确实现)。我很幸运在JOSE附近建立了定制系统

您需要问一些关键问题:

  • 您需要相互身份验证,还是只需要设备的身份验证?如果设备只写不读,那么您可能只需要验证设备,而不需要验证服务器

  • 你能接受一个单一的共享秘密烘焙到设备中的风险吗?单一共享秘密的问题在于,如果任何设备是反向工程的,那么所有保护都将丢失,直到您逐步淘汰使用该密钥的所有设备

  • 你能接受每台设备的制造成本吗?根据您的制造过程,为每个设备生成唯一的秘密可能会很困难

  • 您能否接受客户端证书的设备存储空间和处理要求?如果没有,您能否接受维护每个设备密钥的服务器端数据库的后勤工作?(如果两者都可以,那么就必须为整个系统使用一个共享秘密。)

我的直觉是,你所说的设备可以处理客户端证书的复杂性,但不能处理完整的HTTPS堆栈。如果您还可以处理在制造过程中生成证书的复杂性,或者您的客户愿意注册他们的设备,那么我建议您:

  • 杜尔