Keeloq 滚动码协议软件解码器
本项目是一个基于 MATLAB 环境开发的 Keeloq 算法仿真与解码工具。它通过纯软件编程的方式,复现了 Microchip 公司专有的非线性跳变码加解密逻辑,旨在用于安全性研究、遥控信号分析以及物联网协议的验证。
项目介绍
本项目模拟了 Keeloq 技术的全过程,能够处理 32 位的加密跳变码(Hopping Code)并结合 64 位的厂商密钥(Manufacturer Code)进行逆向运算。程序通过精确控制位偏移和非线性逻辑滤波器(NLF),准确还原出包含了同步计数值、判别位以及按键状态在内的原始明文信息。对于研究远程无钥匙进入(RKE)系统和汽车电子锁具的逻辑漏洞具有显著的实践意义。
功能特性
- 全软件逆向解码:不依赖任何专用的硬件解码芯片,完全在 MATLAB 环境中实现 528 轮次的解密迭代。
- 高精度 NLF 仿真:精确实现 0x3A5C742E 常数定义的非线性逻辑滤波器,通过位提取与查表还原逻辑。
- 数据结构可视化:解密完成后,程序会自动生成一个位分布逻辑图,以不同颜色区分同步码(蓝色)、判别位(红色)及按键功能码(绿色)。
- 灵活的参数配置:支持 64 位十六进制密钥输入和 32 位十六进制加密数据流输入,适应不同厂商的加密方案。
- 详细的解码报告:输出详细的十进制与十六进制结果,包括同步计数器的精确值和具体的按键动作(如锁车、开锁、后备箱或恐慌模式)。
算法实现逻辑
程序的解密核心基于 Keeloq 协议的逆向移位寄存器原理,具体逻辑如下:
- 初始化:将输入的 64 位密钥和 32 位加密数据转化为二进制数组。本项目采用低位在前的排列方式,符合 Keeloq 的位流处理习惯。
- 528 轮迭代:Keeloq 标准解密过程包含 528 轮运算。在每一轮中:
- 提取当前寄存器中的特定位(第 31, 26, 20, 9, 1 位,基于 MATLAB 的 1 索引)作为 NLF 的输入。
- 通过 NLF 查找表计算出非线性逻辑输出值。
- 使用异或(XOR)运算结合寄存器的第 0 位、第 15 位、NLF 输出以及当前轮次的密钥位(由第 round mod 64 位决定)。
- 计算得到的新位存入寄存器的低位,整体寄存器向左移动。
- 明文拆解:迭代完成后,32 位寄存器被重新划分为三个功能域:
- 1-16 位:同步计数器,用于防止信号重放攻击。
- 17-26 位:判别位,通常包含序列号的后 10 位,用于验证解密的合法性。
- 29-32 位:按键码,定义了遥控器的具体指令操作。
关键过程分析
非线性滤波器 (NLF)
程序通过一个 32 长度的二进制数组实现。它将 5 个特定索引位的组合转化为一个由 0x3A5C742E 常数定义的输出位。这是 Keeloq 安全性的核心,通过非线性映射使解密过程在数学上极难预测。
位处理与转换
由于 MATLAB 常规函数处理位运算的限制,本项目使用了自定义的二进制转换逻辑。十六进制字符串被拆分为两部分处理,通过 bitget 提取每一位,并利用自定义的累加权重算法将二进制数组还原为真实的十进制数值。
按键语义识别
程序内置了针对标准遥控器按钮的映射逻辑:
- 1 代表锁车 (S0)
- 2 代表开锁 (S1)
- 4 代表后备箱 (S2)
- 8 代表恐慌模式 (S3)
- 多位组合则识别为多组合键操作。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 依赖库:无需额外工具箱,仅使用 MATLAB 基础函数库。
- 硬件要求:标准 PC 即可,内存建议 4GB 以上以确保图形界面流畅显示。
使用方法
- 打开 MATLAB 并将工作目录指向程序所在文件夹。
- 运行主入口函数。
- 程序将读取预设的 64 位密钥
0123456789ABCDEF 与 32 位跳变码 6096DD55。 - 观察命令行窗口输出的解码结果,包括同步计数器、判别位和具体的按键功能。
- 在弹出的图形化窗口中查看 32 位明文的结构化逻辑视图。