目前我正在开发一个嵌入式项目。客户端是8位MCU,服务器端是计算机。
作为目标的一部分,我希望尽量减少人们复制产品的机会。在初始化阶段,服务器将其序列号发送给客户端,客户端使用其序列号进行一些简单的计算,然后将结果发送回服务器。如果匹配客户端是可信的,服务器会将结果检查为预先计算的硬编码值。
问题是发送回服务器的计算序列号始终是固定的。任何模仿公司都可以使用逻辑分析仪轻松搞清楚。我想让发送的序列号不时出现随机位,但仍然可以解密回原来的值。 A good example using AES encryption(请注意,每次按加密按钮时,都会生成一个看似随机的文本,但在您解密时,它会恢复为原始文本。)
由于8位MCU中的ROM / RAM和过程功率限制,我无法在其中安装完整的AES例程,因此AES不在解决方案之内。是否有简单而有效的算法来随机化传输?
答案 0 :(得分:1)
使用密钥对。初始化时:
不需要对服务器密钥进行硬编码 - 可以根据时间戳生成(只接受可接受范围内的答案),也可以根据需要生成代码并超时防止它们长期存放。
答案 1 :(得分:0)
让服务器向客户端发送单调增加的计数器或时间戳,以及序列号。然后客户端在其执行的计算中包括它。
因为服务器总是发送不同的请求,所以响应总是不同的(当然,如果市场足够有利可图,竞争对手总是可以反汇编你的MCU代码并弄清楚如何复制它,但实际上并没有停止)。
答案 2 :(得分:0)
另一个想法可能是要求8位控制器将日期,时间和序列号的CRC发送到服务器。服务器可以验证它是唯一的串行并发送带有日期,时间和授权码的CRC。
您还可以查看用于车库门开启器的滚动代码algorythms,看看它们是否可以应用于您的应用程序。