注意:这个问题是对这个答案上的评论的接踵而至,这些评论非常宽泛,足以成为一个单独的问题。
据我所知,KeeLoq是一种设计用于汽车工业的分组密码,特别是用于无键进入系统,其中一个主接收器(汽车?)需要能够在现场注册和认证发射机(密钥)。
从链接的答案中重新引用制造商文档:
通常的密钥生成方案是KEELOQ技术系统中常见的密钥生成方案。在正常学习期间,使用主键(称为“制造商代码”)。当使用正常学习机制时,解码器使用制造商代码和序列号来计算每个发射机的解密密钥。使用每个编码器的序列号和制造商代码,计算每个编码器的唯一加密密钥。编码器只存储序列号和计算的加密密钥。为了能够计算出单独的加密密钥,解码器需要使用此制造商代码进行编程。
所以我的问题是:这个密码是如何工作的?更具体而言:
我知道wikipedia/KeyLoq,但这是一篇短小的文章。
发布于 2019-02-05 06:54:18
这个密码是怎么工作的?
假设您讨论的是经典(中断)算法,KeeLoq是一个使用32位非线性反馈移位寄存器 (NLFSR)和64位循环移位寄存器 (密钥寄存器,使用密钥数据初始化)的528轮分组密码。它有一个32位的块大小,采用64位键.下面是一个KeeLoq加密循环的图表,显示NLFSR和密钥寄存器:

如何从主密钥和序列号计算派生密钥?
密钥来自种子,一个或多或少的随机值,通常包括来自非秘密序列号和一些填充的位,以及硬编码的主密钥。根据协议的不同版本,可以通过直接XORing主密钥和种子来派生密钥,或者使用KeeLoq算法本身用主密钥解密种子的前半部分和下半部分:


根据版本的不同,种子可能包含0、32、48或60随机位。当这个种子在“学习”过程中被编程时,它与遥控器共享频带外的种子。如果制造商的密钥是已知的,那么解密就像蛮力地强迫种子一样容易,正如前面提到的,种子包含0到60位不等。然而,根据本论文的说法,在发现上述信息的地方,所有的IC都由Eisenbarth等人分析。使用仅由序列号组成的种子,没有随机位。因此,这些集成电路使用的密钥只基于具有唯一每个设备序列号的硬编码制造商密钥,使得窃取该密钥足以解密通信。
另一篇论文的第2.2节更详细地介绍了密钥派生方案。
序列号什么?是否需要告知接收者与其配对的每个密钥fob的序列号?
序列号是遥控器的序列号。它是用明文对每一个发送的数据包进行编码的。每次按下遥控器上的按钮时,接收器获得序列号。下面是协议使用的66位数据包的图表,显示以明文方式传输的28位序列号:

https://security.stackexchange.com/questions/202930
复制相似问题