首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确保新密钥已传播

如何确保新密钥已传播
EN

Security用户
提问于 2017-01-18 21:55:14
回答 2查看 168关注 0票数 2

我有一个集线器,它可以与IoT设备通信,并且需要频繁地更改设备上的加密密钥。

消息是使用旧密钥加密的AES-256-CBC,新密钥包含在这些消息中。

一旦新的密钥被发送,我需要绝对确保集线器和设备在使用什么密钥时是同步的。为什么?连接可以在任何时候下降。

既然如此,以下是我想过的一些事情:

  • 集线器发送密钥,更新自己的密钥,然后如果接收到新键,设备将更新到新密钥。(如果设备没有收到密钥怎么办?)
  • 集线器发送密钥,等待更新,然后设备更新其密钥,然后返回“接收到的密钥”,集线器在该密钥上更新自己的密钥。(如果设备的消息没有被接收到,会发生什么?)

在我看来,不管发生什么,最终的沟通都会导致一方无法确认更新。有什么办法能确保吗?

EN

回答 2

Security用户

发布于 2017-01-18 22:49:37

我假设您使用的是HMAC或经过身份验证的加密,这样消息就不会受到修改,因此您可以干净地检测失败的解密。

  1. 集线器有一个连接设备列表,对于每个连接的设备,要在发送给它的消息中使用的活动密钥,以及试图解密消息的附加密钥列表。
  2. 集线器决定一个新的密钥,对于每个连接的设备,将其添加到附加密钥列表的末尾。(通过在这里做一个小小的更改,您可以轻松地改进:您可以为每个设备创建一个新的单独的键。您不需要在设备之间共享密钥。)
  3. 每当设备有非零数量的附加密钥时,集线器定期发送一条消息(用该设备的活动密钥加密),其中包含切换到新密钥(附加密钥列表中的最后一个密钥)的请求。
  4. 每当集线器从连接的设备接收到消息时,它将尝试用活动密钥对其进行解密,然后再对每个附加密钥进行解密,直到解密成功。如果使用附加密钥之一成功解密,则用该密钥替换活动密钥,然后从附加密钥列表中删除该密钥及其前面的所有密钥。

每个设备一次只需要记住一个活动密钥。

这意味着,即使在主键A->B->C之间的集线器循环,并且设备在中心宣布C键之后才能确认切换到B键的情况下,事情仍在继续工作。

票数 1
EN

Security用户

发布于 2017-01-19 13:11:51

在现实世界中,密码密钥的用户可能会给您以下建议:

  • 对于发出的每一个密钥副本,必须向发行人确认该密钥的成功(完整)接收。
  • 只有当所有收件人都已确认收到时,才允许使用密钥。

除了提供组成密钥的比特(128位、256位或其他任何东西)外,还可以提供元数据,该元数据以对系统中的每个密钥都是唯一的方式标识密钥,并且最好包括计划的采用日期。这个元数据应该绑定到键位,这样它们就不会分离,例如,它们是同一个数据块的一部分,元数据作为“报头”部分。

应对加密数据进行格式化,以标识用于加密数据的密钥。然后,每个远程节点可以检测未来密钥何时已被采用以供使用(即现在是活动密钥)。然后,可以调度以前活动的密钥,以便从该节点的本地存储中安全擦除。

这意味着每个节点必须跟踪当前采用的密钥(活动的)和下一个已发出的密钥(未来)。在计划的通过日期/时间,负责分发的中心节点可以决定采用未来密钥,如果需要它的每个节点已经确认收到它(例如,通过在确认消息中引用元数据)。这要求中心节点跟踪每个键、已发送副本的节点以及已确认接收的节点。

这真是最简单的模型。如果您的节点更受信任,则可以发出一个包含多个未来密钥的管道,并在元数据中给出稍后和以后的采用日期。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/148741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档