algorithm - 保护无线协议(protocol)的最佳实践

标签 algorithm security md5

我正在开发两个微 Controller 之间的无线通信协议(protocol),使用 433Mhz 调制解调器,它可以发送原始格式的串行数据(如果需要,可以是纯文本)。我知道这听起来更像是一道电子题,但我的问题出在编码部分,让我自己解释一下。

假设单元一向单元 2 发送此命令 “0x001/0x010/LIGHT1/ON”(这是纯文本),第一个是单元 1 名称,第二个是单元 2 名称,第三个执行器和最后一个 Action 。一切正常,工作正常,但我想给系统一点安全级别,因为如果有人使用“中间人”之类的技术收听该频率,他可以随时轻松复制命令并重新发送想要。

我正在考虑加密通过空中传输的消息,但话又说回来,这不会保护系统免受相同类型的攻击,假设我使用 MD5 之类的东西加密消息,我将传输类似 的东西“767b79ebb8061054d3ad1eaef428b469”,攻击者只需复制该字符串并重新发送即可获得相同的结果。

那我该如何解决呢?考虑到我不控制核 react 堆,所以我不需要非常高的安全级别。

最佳答案

我假设,每个节点“知道”它应该从哪些节点接收命令——在这种情况下,让接收节点为每个它将接收命令的节点存储一个(简单的) key ,然后将三个字段添加到协议(protocol):

  • 一个盐(由发送者创建的随机数)
  • 序列号
  • 认证字段

发送方和接收方都为 tx->rx 关系存储最后使用的序列号,发送方在每个命令中增加它。

发送方和接收方都创建了一个连接SequenceNumber+Command+SequenceNumber+salt+nodekey的散列(SHA1?)

编辑 nodekey发送节点的 key

发送方将其作为身份验证字段发送,接收方将其与身份验证字段进行比较,如果序列号高于 LRU 序列号并且身份验证字段检查为 OK,则仅接受命令。

这对于重放攻击是安全的,因为它会涉及序列号重用。

编辑:

关于序列号同步丢失的评论中存在担忧,但提议的解决方案对此有弹性:只有发送者会增加 SN,接收者将接受所有 SN高于上次使用。消息丢失会使 SN 跳跃,但仍会被接受为高于 LRU。

关于algorithm - 保护无线协议(protocol)的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566805/

相关文章:

algorithm - 删除无效括号 - Leetcode 时间复杂度

vba - 如何在不使自己暴露于宏的情况下找出宏的作用?

python - Python 的 string .format() 可以安全地用于不受信任的格式字符串吗?

php - 敏感数据的基本安全加密?

javascript - 为什么 canvas.toDataURL() 不会为图像生成与 Ruby 中相同的 base64?

algorithm - 将 K 个元素插入到 N 个元素的排序列表中,时间复杂度为 O(klogk+n)

从许多数据库条目中聚合股票图表数据点的算法

php - 如何验证我的 PHP 应用程序的用户?

c# - 使用 C# 从文件中读取前 10MB

algorithm - 计算一组被随机子集覆盖的概率