首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向嵌入式设备验证消息

向嵌入式设备验证消息
EN

Cryptography用户
提问于 2013-08-11 05:42:27
回答 1查看 328关注 0票数 2

我正在建立一个嵌入式设备,我计划分发。设备将定期轮询我的服务器,以检查更新和命令。我希望设备验证任何消息(由用Go编写的客户端解析的JSON字符串)和更新实际上都来自我。

我的计划是使用Go的密码/ecdsa库为每个设备生成一个私钥/公钥对,将公钥存储在嵌入式设备上,并使用私钥对每条消息进行签名。然后,该设备将使用其公钥验证接收到的任何消息。

从我到目前为止所了解到的情况来看,RNG (在对消息进行签名的服务器上)可能是一个潜在的弱点。我还有其他明显的缺点/问题吗?

EN

回答 1

Cryptography用户

回答已采纳

发布于 2013-08-11 08:55:01

由于您通常会问“我缺少其他明显的缺陷/问题”,所以我建议您对整个更新流程进行批判性的检查。我不认为您服务器上的PRNG的质量是一个明显的弱点,只要它是相当强的,因为在服务器上,您可以选择相当好的例程来生成一个公平的PRN (请注意,在常规服务器或客户端机器上生成一对好的PGP密钥是可以接受的)。

对整个更新进程进行的批判性审查应考虑到以下清单,绝不是详尽无遗的:

  1. 向公共互联网开放的服务器通常表现出相当广泛的攻击面--操作系统、应用程序、服务、开放端口等。如果我是攻击者,我会首先尝试穿透您的服务器,并使用您的私钥发送恶意更新命令。
  2. 您需要保护嵌入式处理器的环境。我假设您将直接物理访问的可能性降低到嵌入式系统(否则所有安全赌注都取消),但您确实需要考虑其他问题,如攻击者生成的糟糕签名的消息淹没设备的通信通道,从而导致您的嵌入式系统上出现DOS。您可能会通过一个看门狗计时器来减轻这一点,这个定时器将在设定时间后终止update循环。
  3. 我同意maeher -质疑是否需要为每个设备生成一个密钥对。这将是管理层相对于私钥妥协的可能性的梦魇:您如何远程识别客户端,以便知道要将哪个私钥用于该特定客户端的签名?您是否会为每个客户端发送一堆记录来测试它们,以便在它们中找到一个已识别的sig?您会首先在清除中发送客户端ID并使用适当的签名消息进行响应吗?我还建议,正如maeher建议的那样,所有客户端的一个密钥对将具有相同的公共key.,如果您真的担心有人偷了您的私钥,您可能会考虑在每次更新后将所有密钥过期,并在下一个更新周期重新生成一个新的密钥对(新的密钥将在过期之前由旧的密钥签名)。对于每个客户端,这并不是唯一的一对,但肯定更易于管理。

当您考虑以上情况时,如果您的嵌入式应用程序只是一个工业控制器,或者系统由于流氓更新而失败,则会造成地区性的灾难,这将产生很大的影响。

票数 3
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/9676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档