DTLS 是否需要会话超时?
Does DTLS require sessions to timeout?
我正在尝试找出最有效的数据使用方式来保护我们的 CoAP API。 DTLS 似乎是正确的方法,但是看看握手需要多少数据(并做出一些不知情的假设需要多久发生一次)似乎带有 X.509 证书的 DTLS 使 CoAP 的实际数据使用相形见绌本身。
最明显的解决方案是只使用在工厂编程的对称密钥,但我不喜欢强加的安全风险。据我所知,除了在所有设备上手动安装新密钥外,没有办法从服务器端入侵中恢复。
我正在考虑提出的解决方案基本上是两者的混合,使用安全 CA 分发设备,让设备进行标准握手并建立 "temporary" 对称密钥。然后,为了节省设备的带宽,我将该密钥(会话?)存储在数据库中,以便设备一次持续数月或数年,但如果我们发现任何密钥已经泄露,它仍然能够使密钥过期。
我知道我可以只使用标准会话恢复握手来恢复会话,但我不确定是否需要这样做,因为 DTLS 是无连接的,我可以假装 "connection" 始终打开。如果我可以避免重复握手,那将降低数据消耗并可能降低服务器负载。
我不知道的事情是:DTLS 是否定义了会话可以保持打开状态的时间限制?或者是否有超时,在一段时间不活动后必须删除会话?如果没有,DTLS 的实现是否自己定义了一个?
关于为什么这行不通,还有什么我可能忽略的吗?或者有什么我没有想到的更直接的东西吗?
超时是特定于应用程序的,您可以根据需要将它们设置得尽可能高,或者尽可能长时间地保持连接(例如,使用固定数量的可用连接,最近最少使用的超时一个新的打开了)。
只要双方同意恢复数据仍然有效(例如,没有基础证书已过期),会话恢复数据就可以保留。会话恢复应该至少与手动安装的对称密钥一样便宜。
因此,一个明智的方法似乎是,如果发送方仍然打开会话,则尝试继续会话,如果出现错误,则退回到会话恢复,如果这不起作用,则再次进行完整的握手。这些都不一定需要商定时间。
(and making some uninformed assumptions about how often that needs to happen)
我的感觉是,假设一个安静的周期后 ip 地址发生变化。如果假设是这样,“DTLS 会话超时”就是您的 ip 路由上“NAT(类似)s”的超时。而且 NAT 超时仍然(过于频繁)30 秒。
如果您的 ip 路由上没有“NAT(like)”,因此对等点能够通过其静态(未更改)ip 地址和端口交换 ip 消息,则不存在此类 DTLS 超时。除了,正如已经回答的那样,您的应用程序需要这样做。当出于某些安全原因交换连接密钥时,IETF 中也有一些讨论。但是这个数字相当高(除了你想使用 AES128_CCM8)。
since DTLS is connection-less
DTLS 需要具有主密钥和“关联密钥”(TLS“连接密钥”)的上下文。该主密钥被分配给 DTLS 会话 ID,“关联密钥”通常被分配给 ip 地址和端口。 DTLS 会话恢复然后用于地址可能更改的场景(例如,由于“NAT(like)s”,或者因为对等方正在进入睡眠模式并在唤醒时获得新的 ip 地址)。有了这样的 ip 地址更改,DTLS 会话恢复用于使用新地址刷新“关联密钥”的分配。 DTLS恢复比较多,它也使用了新的“关联键”,但主要是为了克服地址变化。
The most obvious solution would be to just use symmetric keys
在 PSK 和 x509 之间,还有 RPK,它提供与 x509 类似的安全性,但使用的数据更少。 PSK_ECDHE 密码套件也可能是一个选择。
并且希望 DTLS CID 会使 CoAP/DTLS 更有效率。至少对于我过去 2 年的测试、实验和使用而言,这就是让 CoAP 重新成为“必须考虑”的技术!
我正在尝试找出最有效的数据使用方式来保护我们的 CoAP API。 DTLS 似乎是正确的方法,但是看看握手需要多少数据(并做出一些不知情的假设需要多久发生一次)似乎带有 X.509 证书的 DTLS 使 CoAP 的实际数据使用相形见绌本身。
最明显的解决方案是只使用在工厂编程的对称密钥,但我不喜欢强加的安全风险。据我所知,除了在所有设备上手动安装新密钥外,没有办法从服务器端入侵中恢复。
我正在考虑提出的解决方案基本上是两者的混合,使用安全 CA 分发设备,让设备进行标准握手并建立 "temporary" 对称密钥。然后,为了节省设备的带宽,我将该密钥(会话?)存储在数据库中,以便设备一次持续数月或数年,但如果我们发现任何密钥已经泄露,它仍然能够使密钥过期。
我知道我可以只使用标准会话恢复握手来恢复会话,但我不确定是否需要这样做,因为 DTLS 是无连接的,我可以假装 "connection" 始终打开。如果我可以避免重复握手,那将降低数据消耗并可能降低服务器负载。
我不知道的事情是:DTLS 是否定义了会话可以保持打开状态的时间限制?或者是否有超时,在一段时间不活动后必须删除会话?如果没有,DTLS 的实现是否自己定义了一个?
关于为什么这行不通,还有什么我可能忽略的吗?或者有什么我没有想到的更直接的东西吗?
超时是特定于应用程序的,您可以根据需要将它们设置得尽可能高,或者尽可能长时间地保持连接(例如,使用固定数量的可用连接,最近最少使用的超时一个新的打开了)。
只要双方同意恢复数据仍然有效(例如,没有基础证书已过期),会话恢复数据就可以保留。会话恢复应该至少与手动安装的对称密钥一样便宜。
因此,一个明智的方法似乎是,如果发送方仍然打开会话,则尝试继续会话,如果出现错误,则退回到会话恢复,如果这不起作用,则再次进行完整的握手。这些都不一定需要商定时间。
(and making some uninformed assumptions about how often that needs to happen)
我的感觉是,假设一个安静的周期后 ip 地址发生变化。如果假设是这样,“DTLS 会话超时”就是您的 ip 路由上“NAT(类似)s”的超时。而且 NAT 超时仍然(过于频繁)30 秒。 如果您的 ip 路由上没有“NAT(like)”,因此对等点能够通过其静态(未更改)ip 地址和端口交换 ip 消息,则不存在此类 DTLS 超时。除了,正如已经回答的那样,您的应用程序需要这样做。当出于某些安全原因交换连接密钥时,IETF 中也有一些讨论。但是这个数字相当高(除了你想使用 AES128_CCM8)。
since DTLS is connection-less
DTLS 需要具有主密钥和“关联密钥”(TLS“连接密钥”)的上下文。该主密钥被分配给 DTLS 会话 ID,“关联密钥”通常被分配给 ip 地址和端口。 DTLS 会话恢复然后用于地址可能更改的场景(例如,由于“NAT(like)s”,或者因为对等方正在进入睡眠模式并在唤醒时获得新的 ip 地址)。有了这样的 ip 地址更改,DTLS 会话恢复用于使用新地址刷新“关联密钥”的分配。 DTLS恢复比较多,它也使用了新的“关联键”,但主要是为了克服地址变化。
The most obvious solution would be to just use symmetric keys
在 PSK 和 x509 之间,还有 RPK,它提供与 x509 类似的安全性,但使用的数据更少。 PSK_ECDHE 密码套件也可能是一个选择。
并且希望 DTLS CID 会使 CoAP/DTLS 更有效率。至少对于我过去 2 年的测试、实验和使用而言,这就是让 CoAP 重新成为“必须考虑”的技术!