滚动代码解释

电器工程 协议
2022-01-11 00:27:16

有人能解释一下像 KeeLoq 这样的滚动代码协议是如何工作的吗?我了解他们每次使用不同代码的基本前提,因此您不能只使用重放攻击,但我不明白一方如何验证正确的代码等。

此外,如果事先不知道/共享滚动代码的索引,他们如何执行初始同步?

如果非要以 Keeloq 为例来解释就好了,但我更喜欢滚动代码的一般解释。

2个回答

滚动代码需要几个部分才能正常运行。在这里,我将描述一个以特定方式使用所有部分的通用实现。其他系统是这个主题的变体,但通常以类似的方式采用许多相同的技术。我不会尝试立即描述完整的实现及其工作原理,而是描述一个简单的系统,并在我们进行过程中增加复杂性,直到我们达到密码安全系统。

非加密滚动码只是使用相同伪随机数生成器 (PRNG) 的发送器和接收器。这个生成器有两条重要信息:一个计算和先前生成的数字。计算一般是一个可以用单个数字表示的线性反馈方程。通过向 PRNG 提供先前的编号,并保持反馈编号相同,生成特定的编号序列。该序列没有重复的序列,直到它遍历了它可以生成的每个数字,然后它以相同的序列重新开始。

如果遥控器和发射器都知道反馈号码和当前号码,那么当遥控器发送下一个号码时,接收器可以根据自己的发生器对其进行测试。如果匹配,则激活。如果没有,它会遍历序列,直到找到远程发送的号码。如果你再次按下遥控器,那么它应该匹配,并且它会激活,因为之前的传输已经同步了数字生成器。这就是为什么您有时必须按两次解锁按钮 - 您的接收器或发射器不同步。

这是代码的滚动部分。如果PRNG足够长,连续序列中没有很多数字的反馈号是很难找到的,在正常使用中很难获得。但它不是加密安全的。

最重要的是,您添加了典型的加密。车辆制造商为发射器和接收器使用特定的密钥。根据制造商的不同,您可能会发现每个型号和年份都有不同的代码,或者他们可能会在多个型号的车辆和几年内共享代码。权衡是每个人都需要一个不同的遥控器来储存,但是在许多模型上共享一个代码的问题是,如果它坏了,那么更多的汽车很容易受到攻击。

加密背后有按钮信息、PRNG 生成的编号以及一些关于反馈编号的信息。不足以从头开始制作 PRNG,但足以在按下一定次数的按钮后,以及关于有限空间的一些内部信息,反馈编号可能涉及(再次,制造商,特定于线路),然后接收器可以,经过几次培训传输,确定反馈编号,并开始跟踪该遥控器的 PRNG。

滚动代码仅用于阻止重放攻击。加密旨在保护滚动代码以避免其被破坏。仅使用其中一个,系统太容易被破坏。由于制造商控制发射器和接收器,因此培训不涉及公钥加密或任何特别涉及的内容。它还可以防止售后市场的遥控钥匙在具有这种系统的汽车上工作。

不过,滚动代码并非不可渗透。旧的keeloq系统在几年前(使用十年后)被成功攻击,因此可以找到制造商的加密代码,并且更容易找到滚动代码。在此之前,它曾以允许人们在不实际破坏代码的情况下乘坐车辆的方式受到攻击。作为响应,新的加密密钥是 60 位。不像许多现代加密系统那样安全,但足够安全,它可能会在它被破坏之前持续很多年。

我第一次遇到 KeeLoq 是在研究车库开门器中的芯片时。Microchip 数据表很好地解释了它的工作原理。

简而言之:

  • 接收器维护所有发射器的数据库,并输入其序列号。
  • 每个发射器都与一个对称加密密钥(64 位)相关联,该密钥位于芯片上,也位于接收器的数据库中。
  • 每个发射器都与一个 16 位循环序列号相关联,该序列号也存储在芯片和数据库中。
  • 当发射器被激活时,它会增加其序列号模 65536(环绕 16 位),并发送一个数据包,该数据包由一个位掩码组成,该位掩码表示按下了哪些按钮,它的序列号和序列号的加密版本。
  • 接收器匹配数据库中的序列号,取出密钥并解密序列号。
  • 序列号必须是新的;它不能是最近使用的序列号,它可以防止重放攻击。(参见数据表中的图 7.3)。
  • 如果序列号得到验证,则接收器可以根据按下的按钮的位掩码激活功能。
  • 如果新的序列号提前超过 16 个值(用户在远离接收器时不小心多次按下按钮),则必须进行额外的握手以重新同步,这需要额外按下按钮。(用户将执行额外的按钮按下,认为接收不良)。

将新的发射器添加到接收器数据库在高层次上与将客户端添加到 Wi-Fi 接入点的按钮配置方法模糊地相似。接收器以某种方式被告知进入其接受新发射器的模式。

如果接收器和发送器共享相同的秘密制造商 ID,则可以从普通激活消息中传递的信息中接受新的发送器。这是因为 64 位加密密钥来自接收器的制造商 ID 和序列信息。(见第 7.1 节)。

有一个更安全的替代方案:“安全学习”。这是在发射器上以特殊方式启动的(一次按下三个按钮)。发送器发送一个特殊的数据包:一个 60 位的种子值,从中派生出加密密钥,可能与制造商 ID 或序列号无关。

当接收器不处于学习模式时,它当然会拒绝来自它不知道的发射器的传输。