如何创建安全的UART通信协议?


8

我想知道如何创建安全的UART / USB通信协议。我需要它来实现微控制器和PC之间的通信。我有大约10个命令,并认为我将为每个命令使用10个单独的确认命令。

交换应该像这样:

  • PC通过UART发送唤醒命令
  • µC识别出PC已连接,并将其命令发送到PC,例如。 0x01
  • PC会执行要求的操作(一些硬件任务),并~0x01在完成后做出响应(我将数字取反以在两个数字之间创建更大的“距离”)
  • µC知道它已发送0x01并且期望~0x01PC 发出请求。如果除了~0x01返回以外的内容,µC会知道出了点问题,并会发送新的请求或错误消息

µC发送的情况下,0x01PC可以理解0x02并发送~0x02回去,但是~0x01由于某些噪声而导致µC读取会非常糟糕。

就传输而言,这有多安全?或者我怎样才能使其更加安全?


1
您可能想复习一下我的相关问题及其很好的答案。
尤金(Eugene Sh)。

1
“更安全”是指您更不容易发生传输错误,不添加加密货币等以防止窃听,反之亦然。即使那是一个非常广阔的领域:en.wikipedia.org/wiki/Error_detection_and_correction
Fizz

2
您可能需要查找汉明编码。它将占用多达16个命令(4位),并以系统的方式将其扩展为7位(可以通过标准UART传输)。您可以选择更正任何一位错误,或检测是否接收了任何两位错误。
Neil_UK,2015年

2
1)7位+奇偶校验位是一种方法,它很简单。它不会捕获所有可能的错误,但是会捕获许多错误。2)一种更健壮的方法是发送两个字节,第一个字节与实际命令一起发送,第二个字节与第一个命令的“非”发送。3)更好的方法是发送“命令来临”字节,后跟命令,接着是命令的补全,然后是“命令末尾”。应该选择“命令即将到来”和“命令结束”字节,以使其不覆盖任何命令和补充命令字节
user3629249 2015年

1
如果只需要10个命令,则每个字节可容纳两个副本(以确保冗余),再加上奇偶校验位。或者,由于您拥有256个符号的符号空间,并且只需要10个符号,因此您可以简单地选择最大不同的符号(所有符号相差多个位),或者仅选择偶数个零和零的符号。您当然不必担心单位错误。
mkeith 2015年

Answers:


1

我认为您应该定义更长的命令,包括可能的校验和或CRC,并等待ACK / NACK或错误情况。

您可以从简单的协议中获取示例,例如TFTP(RFC 1350


1

为了安全通信,应考虑通信线路上所有可能的螺纹。因此,您需要定义系统是否可以从外部访问(第三方系统,例如无线系统)

通常,您必须考虑以下线程:

  • 重复
  • 渗透
  • 重新排序
  • 操纵
  • 延迟
  • 插入
  • 腐败

针对线程的标准措施是:

  • 排序或时间戳
  • 时间监督
  • 唯一的源代码和目标代码
  • 响应
  • 识别程序
  • 某种校验和,哈希码...
  • 低温摄影技术,其中一些您已经通过简单的协议实现了。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.