我有一个集线器,它可以与IoT设备通信,并且需要频繁地更改设备上的加密密钥。
消息是使用旧密钥加密的AES-256-CBC,新密钥包含在这些消息中。
一旦新的密钥被发送,我需要绝对确保集线器和设备在使用什么密钥时是同步的。为什么?连接可以在任何时候下降。
既然如此,以下是我想过的一些事情:
在我看来,不管发生什么,最终的沟通都会导致一方无法确认更新。有什么办法能确保吗?
发布于 2017-01-18 22:49:37
我假设您使用的是HMAC或经过身份验证的加密,这样消息就不会受到修改,因此您可以干净地检测失败的解密。
每个设备一次只需要记住一个活动密钥。
这意味着,即使在主键A->B->C之间的集线器循环,并且设备在中心宣布C键之后才能确认切换到B键的情况下,事情仍在继续工作。
发布于 2017-01-19 13:11:51
在现实世界中,密码密钥的用户可能会给您以下建议:
除了提供组成密钥的比特(128位、256位或其他任何东西)外,还可以提供元数据,该元数据以对系统中的每个密钥都是唯一的方式标识密钥,并且最好包括计划的采用日期。这个元数据应该绑定到键位,这样它们就不会分离,例如,它们是同一个数据块的一部分,元数据作为“报头”部分。
应对加密数据进行格式化,以标识用于加密数据的密钥。然后,每个远程节点可以检测未来密钥何时已被采用以供使用(即现在是活动密钥)。然后,可以调度以前活动的密钥,以便从该节点的本地存储中安全擦除。
这意味着每个节点必须跟踪当前采用的密钥(活动的)和下一个已发出的密钥(未来)。在计划的通过日期/时间,负责分发的中心节点可以决定采用未来密钥,如果需要它的每个节点已经确认收到它(例如,通过在确认消息中引用元数据)。这要求中心节点跟踪每个键、已发送副本的节点以及已确认接收的节点。
这真是最简单的模型。如果您的节点更受信任,则可以发出一个包含多个未来密钥的管道,并在元数据中给出稍后和以后的采用日期。
https://security.stackexchange.com/questions/148741
复制相似问题