低功耗微控制器如何针对服务器进行身份验证?

时间:2010-11-25 19:53:47

标签: authentication encryption microcontroller

目前我正在开发一个嵌入式项目。客户端是8位MCU,服务器端是计算机。

作为目标的一部分,我希望尽量减少人们复制产品的机会。在初始化阶段,服务器将其序列号发送给客户端,客户端使用其序列号进行一些简单的计算,然后将结果发送回服务器。如果匹配客户端是可信的,服务器会将结果检查为预先计算的硬编码值。

问题是发送回服务器的计算序列号始终是固定的。任何模仿公司都可以使用逻辑分析仪轻松搞清楚。我想让发送的序列号不时出现随机位,但仍然可以解密回原来的值。 A good example using AES encryption(请注意,每次按加密按钮时,都会生成一个看似随机的文本,但在您解密时,它会恢复为原始文本。)

由于8位MCU中的ROM / RAM和过程功率限制,我无法在其中安装完整的AES例程,因此AES不在解决方案之内。是否有简单而有效的算法来随机化传输?

3 个答案:

答案 0 :(得分:1)

使用密钥对。初始化时:

  • 客户告诉服务器“我在线”
  • 服务器加密验证邮件,只有客户端才能解码
  • 客户端发回已解密的消息

不需要对服务器密钥进行硬编码 - 可以根据时间戳生成(只接受可接受范围内的答案),也可以根据需要生成代码并超时防止它们长期存放。

答案 1 :(得分:0)

让服务器向客户端发送单调增加的计数器或时间戳,以及序列号。然后客户端在其执行的计算中包括它。

因为服务器总是发送不同的请求,所以响应总是不同的(当然,如果市场足够有利可图,竞争对手总是可以反汇编你的MCU代码并弄清楚如何复制它,但实际上并没有停止)。

答案 2 :(得分:0)

另一个想法可能是要求8位控制器将日期,时间和序列号的CRC发送到服务器。服务器可以验证它是唯一的串行并发送带有日期,时间和授权码的CRC。

您还可以查看用于车库门开启器的滚动代码algorythms,看看它们是否可以应用于您的应用程序。