Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 使用nRF24L01模块在PIC微控制器之间安全地传输命令_Security_Wireless_Pic - Fatal编程技术网

Security 使用nRF24L01模块在PIC微控制器之间安全地传输命令

Security 使用nRF24L01模块在PIC微控制器之间安全地传输命令,security,wireless,pic,Security,Wireless,Pic,我用一些PIC微控制器和nRF24L01无线射频模块创建了一个小型无线网络。其中一个PIC为PIC18F46K22,用作向所有其他PIC发送命令的主控制器。所有其他(从)微控制器都是PIC16F1454,目前有5个。这些从控制器连接到各种设备(主要是灯)。主微控制器用于向这些设备发送命令,例如打开或关闭灯。这些设备还向主控制器报告连接设备的状态,然后在LCD屏幕上显示。整个设置工作得非常好 问题是,任何拥有这些廉价nRF24L01模块的人都可以简单地聆听主控制器发送的命令,然后重复这些命令来控制

我用一些PIC微控制器和nRF24L01无线射频模块创建了一个小型无线网络。其中一个PIC为PIC18F46K22,用作向所有其他PIC发送命令的主控制器。所有其他(从)微控制器都是PIC16F1454,目前有5个。这些从控制器连接到各种设备(主要是灯)。主微控制器用于向这些设备发送命令,例如打开或关闭灯。这些设备还向主控制器报告连接设备的状态,然后在LCD屏幕上显示。整个设置工作得非常好

问题是,任何拥有这些廉价nRF24L01模块的人都可以简单地聆听主控制器发送的命令,然后重复这些命令来控制设备

对命令进行加密没有什么帮助,因为这些命令都是简单的指令,如果加密,它们看起来总是一样的,并且不需要解密就可以重新传输消息


那么,我如何在这个系统中实现一个安全级别呢?

您试图做的是防止。解决这一问题的一般办法包括两件事:

  • 在所有消息中包括时间戳和/或正在运行的消息编号。拒绝太旧或到达时出现问题的邮件

  • 在每条消息中包含一个密码。拒绝任何没有正确MAC的邮件

  • MAC的长度应至少为64位,以防止暴力伪造企图。是的,我知道,对于小消息来说,这是一个很大的问题,但是要尽量克制住对它略知一二的诱惑。48位可能是可以接受的,但32位肯定会进入危险区域,至少除非您对传入消息实施某种速率限制

    如果您也在加密您的消息,您可以通过使用MAC与用于加密的相结合的模式来节省一些字节。SIV是加密小消息的一个不错的选择,因为它的设计非常“万无一失”。如果您不需要加密,这是MAC算法的一个好选择,也是SIV内部使用的MAC

    大多数Mac,包括CMAC,都是基于这样的,所以你需要为你的微控制器找到这样一个密码的实现。一个快速的谷歌搜索出现了,以及。也有专门为微控制器设计的小分组密码,但这种密码往往没有AES进行彻底的分析,并且可能存在安全弱点;如果你能用AES,我会的。注意,许多MAC算法(以及SIV模式)只在一个方向上使用分组密码;分组密码的解密部分从不使用,因此不需要实现

    时间戳或消息编号应足够长,以防止其缠绕。但是,有一个技巧可以用来避免在每条消息中传输整个数字:基本上,您只发送数字中最低的一个或两个字节,但在MAC计算中还包括数字中较高的字节(如果使用SIV,则作为关联数据)。收到消息时,根据传输的值和当前时间/上次接受的消息编号重建较高的字节,然后验证MAC以检查重建是否正确以及消息是否过时

    如果这样做,最好让设备定期发送包含完整时间戳/消息编号的同步消息。这使它们能够恢复,例如,从长时间的消息丢失中恢复,从而导致被截断的计数器缠绕。对于基于顺序消息编号的方案,典型的同步消息将包括设备迄今为止发送的最高消息编号以及它们将接受的最低编号

    为防止意外断电,应定期将消息编号写入永久存储器,例如。由于您可能不希望在每次发送消息后都执行此操作,因此一个常见的解决方案是仅在每次(比如)1000条消息后保存数字,并在保存的值上添加1000的安全裕度(对于传出的消息)。您还应该设计数据存储模式,以避免直接覆盖旧数据,从而最大限度地减少内存磨损,并避免在写入过程中断电时数据损坏。然而,这方面的细节有点超出了这个答案的范围

    另外,当然,MAC计算还应始终包括发送者和预期接收者的身份,以便攻击者不会通过将消息回显给发送者等方式欺骗设备