【问题标题】:How can a low-power microcontroller authenticate itself against a server?低功耗微控制器如何针对服务器验证自己?
【发布时间】:2010-11-25 19:53:46
【问题描述】:

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

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

问题是发送回服务器的计算序列号始终是固定的。任何山寨公司都可以用逻辑分析仪轻松搞定。我想让传输的序列号不时看起来是随机位,但仍然能够解密回其原始值。 A good example using AES encryption(请注意,每次按下加密按钮时,都会生成看似随机的文本,但当你解密它时,它会恢复为原始文本。)

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

【问题讨论】:

  • 客户端(8bits MCU)端使用 C 语言编码,提供数学库和真随机数生成器 (TRNG)。

标签: authentication encryption microcontroller


【解决方案1】:

使用密钥对。初始化时:

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

不需要对服务器的密钥进行硬编码 - 它可以基于时间戳生成(仅接受可接受范围内的答案),或者可以根据需要在超时的情况下生成代码防止它们被长期存放。

【讨论】:

    【解决方案2】:

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

    因为服务器总是发送不同的请求,所以响应总是不同的(当然,如果市场足够有利可图,你的竞争对手总是可以拆解你的 MCU 代码并找出如何复制它,但真的没有停止)。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-28
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-14
        • 1970-01-01
        • 2016-12-22
        相关资源
        最近更新 更多