滚动密码锁和接收器如何同步?

信息安全 无线的 车辆
2021-09-06 05:54:10

这是我之前的问题的后续问题:多次按下汽车遥控器是否会针对滚动代码提供拒绝服务攻击?

我想强调的是,我问这个问题更多的是为了弥补我对滚动代码的学术(错误)理解中的漏洞,而不是作为一个实用的“我如何启动我的汽车?” 问题。

许多(旧)汽车和车库遥控器使用滚动代码系统,因此每次按下遥控钥匙按钮时,都会发送不同的代码,以防止重放攻击。

共享秘密?

我最初对滚动代码的理解是,在 fob 和汽车之间有一个共享的秘密(也许是序列号?),这被用来在双方加密生成相同的无限滚动代码序列。

这样一来,简单的重放攻击就行不通了。(接收方不会两次接受相同的代码。)

我还认为,攻击者需要先嗅探一段非常长的代码序列,然后才能对原始秘密进行逆向工程,从而在序列中生成新项目。

通过默默无闻的安全?

我现在认为我高估了这项技术,因为似乎可以通过相对简单的过程训练接收器来接受新的 fob,不需要传输秘密——你只需要按下 fob 一次即可。 car/garage 相当于“更改密码”模式。

这向我表明,没有共享的秘密,只有一个非常长的(算法生成的?)序列,两个设备需要同步。

如果汽车可以听一次 fob 并预测未来的代码,那么嗅探器肯定可以做到吗?

如果我的新理解是正确的: * 所有 fobs 使用相同的生成序列。该算法可能是晦涩难懂的,但它不是由秘密定制的 - 唯一的“秘密”是 fob 的当前内部状态,并且在每次按下按钮时都会广播。* 虽然幼稚的嗅探器无法使用重放攻击,但复杂的嗅探器可以从单个代码生成整个未来序列。* 我对汽车/车库安全系统感到失望。

汽车/车库 fobs 是否使用共享密钥,并基于该密钥生成序列?如果是这样,在同步过程中允许遥控器和 fob 共享密钥的内部过程是什么?

1个回答

Keeloq 用于许多但不是所有的遥控钥匙/车库开门器。本文由创建 keeloq终极 KEELOQ 技术介绍的 microchip 撰写。

tl;博士

遥控器(遥控钥匙/车库门开启器)和接收器(汽车/车库电机单元)使用相同的 64 位密钥进行加密和解密。“序列号”用于识别特定的遥控器。每次按下按钮时,遥控器的“同步计数器”都会增加 1。如果遥控器的“同步计数器”在接收器“同步计数器”之前为 0 到 ~250,那么它会接受代码并更新该遥控器的同步计数器. 由于“同步计数器”是使用只有远程和接收者知道的密钥加密的,因此即使嗅探器知道下一个“同步计数器”,它也无法伪造代码,因为它没有 64 位密钥。

keeloq包结构

我最初对滚动代码的理解是,在 fob 和汽车之间有一个共享的秘密(也许是序列号?),这被用来在双方加密生成相同的无限滚动代码序列。

遥控器加密数据包的“加密部分”并将其和固定部分发送给接收器,然后接收器使用遥控器使用的相同 64 位密钥解密“加密部分”。这是一种与通常用于 Web 身份验证的一次性密码不同的方案。

好吧,它不是无限的。每次按下按钮时,“同步计数器”都会增加 1。“同步计数器”的范围可以从 0 到 65535。因此,在 65536 次传输之后,您会看到相同的代码重复。如果您捕获了 65536 个解锁传输,您将能够通过播放该序列中的下一个原始捕获来解锁汽车/车库,因为它只是环绕。

我现在认为我高估了这项技术,因为似乎可以通过相对简单的过程训练接收器来接受新的 fob,不需要传输秘密——你只需要按下 fob 一次即可。 car/garage 相当于“更改密码”模式。

的种类。你是对的,没有共享秘密被交换或交流。遥控器和接收器最终如何使用相同的 64 位密钥取决于方案。

pdf 描述了 3 种学习模式“简单”“正常”“安全”。

  1. 简单的

简单密钥生成方案是 KEELOQ 技术系统支持的最简单的方案。使用简单密钥生成时,所有编码器都使用一个密钥,发射器仅通过序列号进行区分。用户准确理解使用这种密钥生成方案的含义是非常重要的。这可能是潜在的安全风险。如果任何编码器被泄露并找到加密密钥,那么所有编码器都被泄露,因为它们使用完全相同的密钥。

所有遥控器和接收器都使用完全相同的 64 位密钥来加密和解密数据包。

  1. 普通的

Normal 密钥生成方案是 KEELOQ 技术系统的通用密钥生成方案。在正常学习期间,使用主密钥(称为“制造商代码”)。当使用正常的学习机制时,解码器使用制造商代码和序列号来计算每个发射器的解密密钥。使用每个编码器的序列号和制造商代码,计算每个编码器的唯一加密密钥。编码器仅存储序列号和计算的加密密钥。解码器需要使用此制造商代码进行编程,以便能够计算单独的加密密钥。为了计算加密密钥,在 28 位序列号中填充 0x6000000 和 0x20000000,并使用制造商代码作为解密密钥进行解密。

64 位密钥是使用“序列号”和“制造商代码”导出的。遥控器只存储派生密钥而不是主密钥,但接收者知道主密钥,因此它可以派生任何特定的远程密钥。所以它“学习”遥控器的“序列号”,然后派生出遥控器的 64 位密钥。

  1. 安全的

安全密钥生成方案是更高级的密钥生成方案。当使用正常的密钥生成方案时,密钥是由序列号和制造商代码生成的。由于序列号在任何数据包中传输,密钥生成方案的一部分总是暴露出来的。但更安全的方法是生成一个随机数(称为“种子”)。根据种子的长度,有三种密钥生成方案:32位种子、48位种子和60位种子。在正常操作期间,不会传输种子。传输种子的唯一时间是在学习/配对阶段。因此,用于生成加密密钥的信息是保密的。一些实现进一步提高了安全级别,

使用种子而不是“序列号”来派生 64 位密钥。该种子的唯一传输时间是在学习/配对时间。

作为最后的说明。还有其他方案比keeloq 更好。甚至 pdf 也描述了使用 AES 而不是 keeloq 的方案,但也有更糟糕的方案。一些车库仍然使用固定代码。

我对汽车/车库安全系统感到失望。

我也是。