本申请实施例涉及芯片通信技术领域,特别涉及一种多处理器通信方法及系统。
背景技术:
为了满足复杂应用的需求,片上系统(system-on-a-chip,soc)中往往需要集成多个不同类型的处理器(centralprocessingunit,cpu),甚至还需要结合片外的处理器共同工作。由于片上系统中集成了多个处理器,且每个处理器都相当于片上系统中的一个主机,所以,为片上系统内多个处理器提供可靠、高效和安全的通信方法是一个重要的课题。
当前,多个处理器之间通信可以采用共享内存通信的方法,即第一处理器将消息写入第二处理器也可以读取的存储空间,然后通过信号(例如中断)告诉第二cpu可以来读取该存储空间内的消息了。这种方法不具备高效,可靠和安全的特点。多个处理器之间通信还可以采用mailbox(信箱)硬件通信的方法,即第一处理器通过一个硬件模块mailbox向第二处理器写信。
无论是共享内存通信还是mailbox硬件通信的方法,黑客都可以利用伪造的第二处理器读取消息,从而导致消息被泄露,威胁到通信的安全性。
技术实现要素:
本申请实施例提供了一种多处理器通信方法及系统,用于解决利用共享内存通信或mailbox硬件通信时,消息容易被泄露,威胁到通信安全的问题。所述技术方案如下:
一方面,提供了一种多处理器通信方法,应用于多处理器通信系统中,所述多处理器通信系统包括硬件模块、第一处理器和n个第二处理器,n≥1;所述方法包括:
所述第一处理器获取待发送的消息、所述第一处理器的第一标识和每个第二处理器的第二标识,将所述消息、所述第一标识和n个第二标识写入第一空间中,所述第一空间是发送端隔离空间中与所述第一处理器相对应的存储空间;
所述硬件模块从所述第一空间中读取所述消息、所述第一标识和所述n个第二标识,根据所述第一标识和所述n个第二标识对所述消息进行编码,得到编码内容,将所述编码内容写入第二空间中,所述第二空间是接收端隔离空间中与所述第一处理器相对应的存储空间;
所述硬件模块获取需要从所述第二空间中读取所述消息的n个第二处理器的第二标识,根据所述第一标识和读取的n个第二标识对所述编码内容进行解码,得到所述消息;
每个第二处理器从所述硬件模块中读取所述消息。
在一种可能的实现方式中,当所述消息中包括m个消息字时,m为正整数,所述根据所述第一标识和所述n个第二标识对所述消息进行编码,得到编码内容,包括:
所述硬件模块对所述第一标识和所述n个第二标识进行哈希运算,得到第一个哈希结果,根据所述第一个哈希结果对所述消息中的第一个消息字进行编码,得到第一个编码消息字;
当对所述消息中的第k个消息字进行编码时,所述硬件模块对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据所述第k-1个哈希结果对所述第k个消息字进行编码,得到第k个编码消息字,2≤k≤m;
所述硬件模块将得到的m个编码消息字组合成所述编码内容。
在一种可能的实现方式中,所述根据所述第一标识和读取的n个第二标识对所述编码内容进行解码,得到所述消息,包括:
所述硬件模块对所述第一标识和所述n个第二标识进行哈希运算,得到第一个哈希结果,根据所述第一个哈希结果对所述编码内容中的第一个编码消息字进行解码,得到所述消息中的第一个消息字;
当对所述编码内容中的第k个编码消息字进行解码时,所述硬件模块对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据所述第k-1个哈希结果对所述第k个编码消息字进行解码,得到所述消息中的第k个消息字;
所述硬件模块将得到的所有消息字组合成所述消息。
在一种可能的实现方式中,所述方法还包括:所述硬件模块对所述消息中的第m个消息字进行哈希运算,将得到的第m个哈希结果确定为验证内容,将所述验证内容写入所述第二空间;
所述方法还包括:所述硬件模块对解码得到的所述第m个消息字进行哈希运算,得到第m个哈希结果;检测所述第m个哈希结果与所述验证内容是否相同;若所述第m个哈希结果与所述验证内容相同,则允许所述第二处理器读取所述消息;或者,所述第二处理器从所述第二空间中读取解码得到的所述第m个消息字,对所述第m个消息字进行哈希运算,得到第m个哈希结果;检测所述第m个哈希结果与所述验证内容是否相同;若所述第m个哈希结果与所述验证内容相同,则从所述第二空间中读取所述消息。
在一种可能的实现方式中,所述硬件模块对所述第一标识和所述n个第二标识进行哈希运算,得到第一个哈希结果,包括:
所述硬件模块获取随机数发生器中生成的随机数;
所述硬件模块对所述第一标识、所述n个第二标识和所述随机数进行哈希运算,得到第一个哈希结果。
在一种可能的实现方式中,在所述根据所述第一标识和读取的n个第二标识对所述编码内容进行解码,得到所述消息之前,所述方法还包括:
所述硬件模块检测读取所述消息的每个第二处理器的第二标识是否合法;
当读取所述消息的每个第二处理器的第二标识合法时,所述硬件模块触发执行所述根据所述第一标识和读取的n个第二标识对所述编码内容进行解码,得到所述消息的步骤;
当读取所述消息的第二处理器的第二标识不合法时,所述硬件模块禁止所述第二处理器从所述第二空间中读取所述消息。
在一种可能的实现方式中,在所述每个第二处理器从所述硬件模块中读取所述消息之后,所述方法还包括:
每个第二处理器设置所述第一处理器对应的第一寄存器的第一状态信息,所述第一状态信息用于指示所述第二处理器已成功接收所述第一处理器发送的消息;
所述第一处理器从所述第一寄存器中读取所述第一状态信息,根据所述第一状态信息确定所述消息发送成功。
在一种可能的实现方式中,在所述硬件模块通知每个第二处理器从所述第二空间中读取所述消息之后,所述方法还包括:
所述硬件模块开始计时;
在计时达到预定时长时,若存在未读取所述消息的第二处理器,或者,若存在已读取所述消息且未向所述第一寄存器设置所述第一状态信息的第二处理器,则所述硬件模块向所述第一处理器发送超时信号;
所述第一处理器接收所述超时信号,根据所述超时信号确定所述消息发送失败。
在一种可能的实现方式中,在所述将所述编码内容写入第二空间中之后,所述方法还包括:
所述硬件模块设置每个第二处理器对应的第二寄存器的第二状态信息,所述第二状态信息用于指示所述第一处理器向所述第二处理器发送了消息;
所述硬件模块向每个第二处理器发送中断信号;每个第二处理器接收所述中断信号,从对应的第二寄存器中读取所述第二状态信息,根据所述第二状态信息向所述硬件模块读取所述消息;或者,
每个第二处理器周期性读取对应的第二寄存器中的状态信息,当所述状态信息为用于指示所述第一处理器向所述第二处理器发送了消息的第二状态信息时,根据所述第二状态信息向所述硬件模块读取所述消息。
一方面,提供了一种多处理器通信系统,所述多处理器通信系统包括硬件模块、第一处理器和n个第二处理器,n≥1;
所述第一处理器,用于获取待发送的消息、所述第一处理器的第一标识和每个第二处理器的第二标识,将所述消息、所述第一标识和n个第二标识写入第一空间中,所述第一空间是发送端隔离空间中与所述第一处理器相对应的存储空间;
所述硬件模块,用于从所述第一空间中读取所述消息、所述第一标识和所述n个第二标识,根据所述第一标识和所述n个第二标识对所述消息进行编码,得到编码内容,将所述编码内容写入第二空间中,所述第二空间是接收端隔离空间中与所述第一处理器相对应的存储空间;
所述硬件模块,还用于获取需要从所述第二空间中读取所述消息的每个第二处理器的第二标识,根据所述第一标识和读取的所有第二标识对所述编码内容进行解码,得到所述消息;
每个第二处理器,用于从所述硬件模块中读取所述消息。
本申请实施例提供的技术方案的有益效果至少包括:
硬件模块可以从与第一处理器对应的第一空间中读取消息、第一标识和n个第二标识,再根据第一标识和n个第二标识对消息进行编码,得到编码内容,将该编码内容写入第一处理器对应的第二空间中;然后,硬件模块获取需要从第二空间中读取消息的n个第二处理器的第二标识,根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息;最后,每个第二处理器可以从硬件模块中读取消息。通过根据多个处理器的标识对消息进行编解码,这样,即使黑客利用伪造的第二处理器读取消息,也会因为无法获取到正确的第二标识而无法解码得到消息,从而提高了通信的安全性。
本实施例中基于发送和接收都被隔离的硬件模块(mailbox)设计了一套编解码方法,这样,不会对处理器之间的通信产生多余的性能和存储开销,可以实现处理器之间的端到端通信。
当n大于1时,可以实现一个处理器向多个处理器发送消息的广播通信,提高了通信效率。
由于每一个消息字的编码都依赖于前一消息字的哈希结果,所以,当消息中的消息字被伪造或篡改或故意错误注入时,会无法解码出正确的消息,从而可以保证消息不会被泄露,提高了通信的安全性。
在生成第一个哈希结果时还可以基于随机数发生器生成的随机数,可以增加编码内容的随机性,提高通信的安全性。
由于硬件模块或第二处理器还会比较解码得到的最后一个消息字的哈希结果与验证内容是否相同,在最后一个消息字的哈希结果与验证内容相同时第二处理器才会读取到消息,这样,当消息中的消息字被伪造或篡改或故意错误注入时,或者,当伪造的第二处理器来读取消息时,最后一个消息字的哈希结果与验证内容必然不同,也就可以禁止消息的读出,可以进一步提高通信的安全性。
硬件模块还可以向第一处理器发送超时信号,而超时可能是硬件损坏或者瞬态错误或者被黑客攻击导致的,第一处理器可以在接收到超时信号后处理这种错误。
硬件模块还可以在需要读取消息的第二处理器的第二标识不合法时,禁止该第二处理器读取消息,从而实现了接收端的数据隔离。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的多处理器通信方法的方法流程图;
图2是本申请一个实施例提供的多处理器通信方法的流程示意图;
图3是本申请一个实施例提供的编解码的流程示意图;
图4是本申请一个实施例提供的多处理器通信系统的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图1,其示出了本申请一个实施例提供的多处理器通信方法的方法流程图,该多处理器通信方法可以应用于多处理器通信系统中,该多处理器通信系统包括硬件模块、第一处理器和n个第二处理器,n≥1。该多处理器通信方法,可以包括:
步骤101,第一处理器获取待发送的消息、第一处理器的第一标识和每个第二处理器的第二标识,将消息、第一标识和n个第二标识写入第一空间中,第一空间是发送端隔离空间中与第一处理器相对应的存储空间。
多处理器通信系统中可以包括多个处理器,本实施例中将发送消息的处理器称为第一处理器,将接收消息的处理器称为第二处理器。其中,第二处理器的数量可以为一个,也可以为多个。当存在第二处理器时,可以实现一个第一处理器向多个第二处理器发送消息的广播通信,提高了通信效率。
多处理器通信系统中还可以包括存储器,该存储器中设置有发送端隔离空间和接收端隔离空间,发送端隔离空间用于缓存第一处理器写入的原始的消息,接收端隔离空间用于缓存对消息进行编码得到的编码内容。其中,每个处理器在发送端隔离空间和接收端隔离空间中都对应有一个存储空间,且只能向与处理器对应的一个存储空间中写入消息或编码内容,以起到数据隔离的作用。
为了便于区分,本实施例中将发送端隔离空间中与第一处理器对应的存储空间称为第一空间,将接收端隔离空间中与第一处理器对应的存储空间称为第二空间。
请参考图2,图2中的发送端隔离空间中包括多个消息发送端消息空间(也即存储空间),假设cpux正在写入消息,则以填充白色的矩形框表示匹配cpux的消息发送端消息空间,也即第一空间;以填充灰色的矩形框表示未匹配的多个cpu的消息发送端消息空间;接收端隔离空间中包括消息接收端空间地址(也即存储空间),以填充白色的矩形框表示cpux的消息发送端空间地址,也即第二空间;以填充灰色的矩形框表示未匹配的多个cpu的消息接收端空间地址。
第一处理器在确定需要向n个第二处理器发送消息时,可以将消息、第一标识和n个第二标识一起写入第一空间中。其中,第一标识是为第一处理器分配的唯一身份标识,第二标识是为第二处理器分配的唯一身份标识,上述标识可以采用硬件的方式进行识别,软件不可控制。
步骤102,硬件模块从第一空间中读取消息、第一标识和n个第二标识,根据第一标识和n个第二标识对消息进行编码,得到编码内容,将编码内容写入第二空间中,第二空间是接收端隔离空间中与第一处理器相对应的存储空间。
具体的,当消息中包括m个消息字时,m为正整数,根据第一标识和n个第二标识对消息进行编码,得到编码内容,可以包括以下的子步骤。
子步骤1021,硬件模块对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,根据第一个哈希结果对消息中的第一个消息字进行编码,得到第一个编码消息字。
其中,消息字的长度可以根据软硬件系统进行调节。比如,消息字可以是8bit的字节、16bit的半字节、32bit的字或其他字长的内容,本实施例不作限定。
其中,硬件模块可以采用第一hash函数对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果。
可选的,硬件模块对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,可以包括:硬件模块获取随机数发生器中生成的随机数;硬件模块对第一标识、n个第二标识和随机数进行哈希运算,得到第一个哈希结果。由于每次传输消息时采用的随机数不同,所以,通过在计算第一个哈希结果的过程中引入随机数,可以增加第一个哈希结果的随机性,从而增加编码内容的随机性,提高了通信的安全性。
在得到第一个哈希结果后,硬件模块可以根据第一个哈希结果对消息中的第一个消息字进行编码,得到第一个编码消息字。其中,编码方式有很多种,比如,异或运算等等,本实施例不限定具体的编码方式。
子步骤1022,当对消息中的第k个消息字进行编码时,硬件模块对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据第k-1个哈希结果对第k个消息字进行编码,得到第k个编码消息字,2≤k≤m。
消息中剩余的m-1个消息字的编码方式是相同的。若对第二个消息字进行编码,硬件模块可以先采用第二hash函数对第一个消息字进行哈希运算,得到第二个哈希结果,再根据第二个哈希结果对第二个消息字进行编码,得到第二个编码消息字;若对第三个消息字进行编码,硬件模块可以先采用第二hash函数对第二个消息字进行哈希运算,得到第三个哈希结果,再根据第三个哈希结果对第三个消息字进行编码,得到第三个编码消息字,依此类推,可以对m-1个消息字进行编码来得到m-1个编码消息字。第二hash函数与第一hash函数可以相同,也可以不同。
子步骤1023,硬件模块将得到的m个编码消息字组合成编码内容。
请参考图3,图3中的左半部分示出了编码流程,且原始消息m表示消息中的第m个消息字,hashm表示第m个哈希结果,protectedm表示第m个编码消息字。
本实施例中,硬件模块还可以对消息中的第m个消息字进行哈希运算,将得到的第m个哈希结果确定为验证内容,将验证内容写入第二空间。
假设原始的消息采用从0x00–0x6的100byte数据,随机数选用0x85564be5,cpuid选取0x00030201,且第一hash函数=crc32(data_word,rnd_num)=crc32(0x00030201,rnd_num),第二hash函数hashn=(hashn-1+data_word>>25)%0x100000000,这里右移采用循环右移,请参考表一中所示的编码内容。
表一
本实施例中,硬件模块在得到编码内容后,先将该编码内容写入第二空间中。然后,硬件模块可以设置每个第二处理器对应的第二寄存器的第二状态信息,该第二状态信息用于指示第一处理器向第二处理器发送了消息。最后,硬件模块可以通知n个第二处理器来读取消息,或者,n个第二处理器可以自动从第二空间中读取消息。
在设置第二状态信息时,由于第二寄存器中设置有多个比特位,每个比特位对应于一个处理器,所以,当第一处理器向第二处理器发送了消息时,硬件模块可以对第二寄存器中与第一处理器对应的比特位进行设置,即设置第二状态信息。
当硬件模块通知每个第二处理器从第二空间中读取消息时,硬件模块可以向每个第二处理器发送中断信号;每个第二处理器接收中断信号,从对应的第二寄存器中读取第二状态信息,根据第二状态信息向硬件模块读取消息。即,在设置完第二状态信息之后,硬件模块可以向第二处理器发送中断信号。第二处理器在接收到终端信号后,从自身对应的第二寄存器中读取第二状态信息,根据该第二状态信息确定第一处理器向自身发送了消息,再访问第二空间以读取消息。
当第二处理器自动从第二空间中读取消息时,每个第二处理器周期性读取对应的第二寄存器中的状态信息,当该状态信息为用于指示第一处理器向第二处理器发送了消息的第二状态信息时,根据第二状态信息向硬件模块读取消息。即,每个第二处理器都周期性读取自身对应的第二寄存器中的状态信息,并判断该状态信息是否是第二状态信息,当该状态信息为第二状态信息时,再访问第二空间以读取消息。
步骤103,硬件模块获取需要从第二空间中读取消息的n个第二处理器的第二标识,根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息。
本实施例中,在根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息之前,硬件模块还检测读取消息的每个第二处理器的第二标识是否合法;当读取消息的每个第二处理器的第二标识合法时,硬件模块触发执行步骤104;当读取消息的第二处理器的第二标识不合法时,硬件模块禁止第二处理器从第二空间中读取消息。
在检测时,硬件模块可以读取访问第二空间的处理器的标识,当该标识与第一处理器所指定的第二处理器的第二标识相同时,确定该处理器为第二处理器,该标识为合法的第二标识。当该标识与第一处理器所指定的第二处理器的第二标识不同时,向该处理器返回错误,拒绝该处理器访问第二空间来读取消息,以实现接收端的数据隔离。
具体的,根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息,可以包括以下的子步骤。
子步骤1031,硬件模块对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,根据第一个哈希结果对编码内容中的第一个编码消息字进行解码,得到消息中的第一个消息字。
其中,硬件模块可以采用第一hash函数对第一标识和读取消息的n个第二处理器的第二标识进行哈希运算,得到第一个哈希结果。
可选的,若编码过程中计算第一个哈希结果时引入了随机数,对应的,硬件模块对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,可以包括:硬件模块获取随机数发生器中生成的随机数;硬件模块对第一标识、n个第二标识和随机数进行哈希运算,得到第一个哈希结果。
在得到第一个哈希结果后,硬件模块可以根据第一个哈希结果对第一个编码消息字进行解码,得到消息中的第一个消息字。其中,解码方式与编码方式对应,本实施例不限定具体的解码方式。
子步骤1032,当对编码内容中的第k个编码消息字进行解码时,硬件模块对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据第k-1个哈希结果对第k个编码消息字进行解码,得到消息中的第k个消息字。
消息中剩余的m-1个编码消息字的解码方式是相同的。若对第二个编码消息字进行解码,硬件模块可以先采用第二hash函数对第一个消息字进行哈希运算,得到第二个哈希结果,再根据第二个哈希结果对第二个编码消息字进行解码,得到第二个消息字;若对第三个编码消息字进行解码,硬件模块可以先采用第二hash函数对第二个消息字进行哈希运算,得到第三个哈希结果,再根据第三个哈希结果对第三个编码消息字进行解码,得到第三个消息字,依此类推,可以对m-1个编码消息字进行解码来得到m-1个消息字。
子步骤1033,硬件模块将得到的所有消息字组合成消息。
请参考图3,图3中的右半部分示出了解码流程,且原始消息m表示消息中的第m个消息字,hashm表示第m个哈希结果,protectedm表示第m个编码消息字。
仍然以上文中的消息为例,则请参考表二所示的解码内容。
表二
本实施例中,硬件模块或第二处理器还可以根据解码得到的第m个消息字和验证内容对消息进行验证。具体的,硬件模块还可以对解码得到的第m个消息字进行哈希运算,得到第m个哈希结果;检测第m个哈希结果与验证内容是否相同;若第m个哈希结果与验证内容相同,则确定此笔数据传输正确,允许第二处理器读取消息;若第m个哈希结果与验证内容不同,则确定此笔数据传输错误,禁止第二处理器读取消息。或者,第二处理器从第二空间中读取解码得到的第m个消息字,对第m个消息字进行哈希运算,得到第m个哈希结果;检测第m个哈希结果与验证内容是否相同;若第m个哈希结果与验证内容相同,则确定此笔数据传输正确,从第二空间中读取消息;若第m个哈希结果与验证内容不同,则确定此笔数据传输错误,不读取消息。
步骤104,每个第二处理器从硬件模块中读取消息。
通常,在每个第二处理器从硬件模块中读取消息之后,每个第二处理器设置第一处理器对应的第一寄存器的第一状态信息,第一状态信息用于指示第二处理器已成功接收第一处理器发送的消息;第一处理器从第一寄存器中读取第一状态信息,根据第一状态信息确定消息发送成功。
具体的,第一寄存器中设置有多个比特位,每个比特位对应于一个处理器。当第二处理器接收到消息后,第二处理器可以对第一寄存器中与自身对应的比特位进行设置,即设置第一状态信息。
由于第一寄存器位于硬件模块中,所以,硬件模块可以在监测到所有的第二处理器都设置第一状态信息后,向第一处理器发送中断信号,第一处理器根据该中断信号读取第一状态信息。或者,第一处理器可以在写入消息后开始计时,在计时达到一定时长后读取第一状态信息。
若因为硬件损坏或者瞬态错误或被黑客攻击,而导致第二处理器一直无法接收到消息,硬件模块可以检测到这种错误,并向第一处理器发送超时信号。具体的,在硬件模块通知每个第二处理器从第二空间中读取消息之后,硬件模块开始计时;在计时达到预定时长时,若存在未读取消息的第二处理器,或者,若存在已读取消息且未向第一寄存器设置第一状态信息的第二处理器,则硬件模块向第一处理器发送超时信号;第一处理器接收超时信号,根据超时信号确定消息发送失败。
在第一处理器确定消息发送失败时,可以根据通信策略重发消息。如果不是硬件损坏导致的错误,系统可以正常恢复运行。如果是硬件损坏导致的错误,即使重发消息还是会产生同样的错误,这时就可以检测到错误的发送,从而控制系统进入安全的状态,从而可以实现高效、可靠、安全的通信。
综上所述,本申请实施例提供的多处理器通信方法,硬件模块可以从与第一处理器对应的第一空间中读取消息、第一标识和n个第二标识,再根据第一标识和n个第二标识对消息进行编码,得到编码内容,将该编码内容写入第一处理器对应的第二空间中;然后,硬件模块获取需要从第二空间中读取消息的n个第二处理器的第二标识,根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息;最后,每个第二处理器可以从硬件模块中读取消息。通过根据多个处理器的标识对消息进行编解码,这样,即使黑客利用伪造的第二处理器读取消息,也会因为无法获取到正确的第二标识而无法解码得到消息,从而提高了通信的安全性。
本实施例中基于发送和接收都被隔离的硬件模块(mailbox)设计了一套编解码方法,这样,不会对处理器之间的通信产生多余的性能和存储开销,可以实现处理器之间的端到端通信。
当n大于1时,可以实现一个处理器向多个处理器发送消息的广播通信,提高了通信效率。
由于每一个消息字的编码都依赖于前一消息字的哈希结果,所以,当消息中的消息字被伪造或篡改或故意错误注入时,会无法解码出正确的消息,从而可以保证消息不会被泄露,提高了通信的安全性。
在生成第一个哈希结果时还可以基于随机数发生器生成的随机数,可以增加编码内容的随机性,提高通信的安全性。
由于硬件模块或第二处理器还会比较解码得到的最后一个消息字的哈希结果与验证内容是否相同,在最后一个消息字的哈希结果与验证内容相同时第二处理器才会读取到消息,这样,当消息中的消息字被伪造或篡改或故意错误注入时,或者,当伪造的第二处理器来读取消息时,最后一个消息字的哈希结果与验证内容必然不同,也就可以禁止消息的读出,可以进一步提高通信的安全性。
硬件模块还可以向第一处理器发送超时信号,而超时可能是硬件损坏或者瞬态错误或者被黑客攻击导致的,第一处理器可以在接收到超时信号后处理这种错误。
硬件模块还可以在需要读取消息的第二处理器的第二标识不合法时,禁止该第二处理器读取消息,从而实现了接收端的数据隔离。
下面例举两个例子来分析本实施例中对消息的保护效果。
第一个例子中,当黑客成功破解了消息读取端的隔离,可以利用一个非消息合法接收的cpu04读取消息,且cpu04的标识为0x04030201,与消息合法接收的cpu的标识0x00030201不同时,读取数据结果如表三所示。
表三
表三中加下划线的数据是与表二相比出错的数据,从表三中可以看出,cpu04完全无法恢复原始的消息,并且最后的验证内容也不同,导致验证失败。本实施例提供的编解码方法可以与隔离一起对抗非法读取的问题。
第二个例子中,当由于某种原因,发送的编码消息字发生了1比特翻转,有可能是因为黑客注入错误,或者由于外界干扰或者系统出错导致的比特翻转后,合法的cpu读取数据并解码后的结果如表四所示。
表四
与表二相比可知,正确的第十一个编码消息字应该为0x5e1bdc4a,表四中第十一个编码消息字发生了比特翻转,变为0x5e1bdcca,表四中加下划线的数据是与表二相比出错的数据,可以发现在比特翻转后数据会出错,并且最终的验证也会失败,接收方可以通知发送方重发消息进行恢复。
请参考图4,其示出了本申请一个实施例提供的多处理器通信系统的结构框图。该多处理器通信系统包括硬件模块410、第一处理器420和n个第二处理器430,n≥1。
第一处理器420,用于获取待发送的消息、第一处理器420的第一标识和每个第二处理器430的第二标识,将消息、第一标识和n个第二标识写入第一空间中,第一空间是发送端隔离空间中与第一处理器420相对应的存储空间;
硬件模块410,用于从第一空间中读取消息、第一标识和n个第二标识,根据第一标识和n个第二标识对消息进行编码,得到编码内容,将编码内容写入第二空间中,第二空间是接收端隔离空间中与第一处理器420相对应的存储空间;
硬件模块410,还用于获取需要从第二空间中读取消息的每个第二处理器430的第二标识,根据第一标识和读取的所有第二标识对编码内容进行解码,得到消息;
每个第二处理器430,用于从硬件模块410中读取消息。
在一个实施例中,当消息中包括m个消息字时,m为正整数,硬件模块410,还用于对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,根据第一个哈希结果对消息中的第一个消息字进行编码,得到第一个编码消息字;
当对消息中的第k个消息字进行编码时,硬件模块410,还用于对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据第k-1个哈希结果对第k个消息字进行编码,得到第k个编码消息字,2≤k≤m;
硬件模块410,还用于将得到的m个编码消息字组合成编码内容。
在一个实施例中,硬件模块410,还用于对第一标识和n个第二标识进行哈希运算,得到第一个哈希结果,根据第一个哈希结果对编码内容中的第一个编码消息字进行解码,得到消息中的第一个消息字;
当对编码内容中的第k个编码消息字进行解码时,硬件模块410,还用于对第k-1个消息字进行哈希运算,得到第k-1个哈希结果,根据第k-1个哈希结果对第k个编码消息字进行解码,得到消息中的第k个消息字;
硬件模块410,还用于将得到的所有消息字组合成消息。
在一个实施例中,硬件模块410,还用于对消息中的第m个消息字进行哈希运算,将得到的第m个哈希结果确定为验证内容,将验证内容写入第二空间;
硬件模块410,还用于对解码得到的第m个消息字进行哈希运算,得到第m个哈希结果;检测第m个哈希结果与验证内容是否相同;若第m个哈希结果与验证内容相同,则允许第二处理器430读取消息;或者,
第二处理器430,还用于从第二空间中读取解码得到的第m个消息字,对第m个消息字进行哈希运算,得到第m个哈希结果;检测第m个哈希结果与验证内容是否相同;若第m个哈希结果与验证内容相同,则从第二空间中读取消息。
在一个实施例中,硬件模块410,还用于获取随机数发生器中生成的随机数;
硬件模块410,还用于对第一标识、n个第二标识和随机数进行哈希运算,得到第一个哈希结果。
在一个实施例中,硬件模块410,还用于在根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息之前,检测读取消息的每个第二处理器430的第二标识是否合法;
当读取消息的每个第二处理器430的第二标识合法时,硬件模块410,还用于触发执行根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息的步骤;
当读取消息的第二处理器430的第二标识不合法时,硬件模块410,还用于禁止第二处理器430从第二空间中读取消息。
在一个实施例中,每个第二处理器430,还用于在从硬件模块410中读取消息之后,设置第一处理器420对应的第一寄存器的第一状态信息,第一状态信息用于指示第二处理器430已成功接收第一处理器420发送的消息;
第一处理器420,还用于从第一寄存器中读取第一状态信息,根据第一状态信息确定消息发送成功。
在一个实施例中,硬件模块410,还用于在通知每个第二处理器430从第二空间中读取消息之后,开始计时;
在计时达到预定时长时,若存在未读取消息的第二处理器430,或者,若存在已读取消息且未向第一寄存器设置第一状态信息的第二处理器430,则硬件模块410,还用于向第一处理器420发送超时信号;
第一处理器420,还用于接收超时信号,根据超时信号确定消息发送失败。
在一个实施例中,硬件模块410,还用于设置每个第二处理器430对应的第二寄存器的第二状态信息,第二状态信息用于指示第一处理器420向第二处理器430发送了消息;
硬件模块410,还用于向每个第二处理器430发送中断信号;每个第二处理器430,还用于接收中断信号,从对应的第二寄存器中读取第二状态信息,根据第二状态信息向硬件模块410读取消息;或者,
每个第二处理器430,还用于周期性读取对应的第二寄存器中的状态信息,当状态信息为用于指示第一处理器420向第二处理器430发送了消息的第二状态信息时,根据第二状态信息向硬件模块410读取消息。
综上所述,本申请实施例提供的多处理器通信系统,硬件模块可以从与第一处理器对应的第一空间中读取消息、第一标识和n个第二标识,再根据第一标识和n个第二标识对消息进行编码,得到编码内容,将该编码内容写入第一处理器对应的第二空间中;然后,硬件模块获取需要从第二空间中读取消息的n个第二处理器的第二标识,根据第一标识和读取的n个第二标识对编码内容进行解码,得到消息;最后,每个第二处理器可以从硬件模块中读取消息。通过根据多个处理器的标识对消息进行编解码,这样,即使黑客利用伪造的第二处理器读取消息,也会因为无法获取到正确的第二标识而无法解码得到消息,从而提高了通信的安全性。
本实施例中基于发送和接收都被隔离的硬件模块(mailbox)设计了一套编解码方法,这样,不会对处理器之间的通信产生多余的性能和存储开销,可以实现处理器之间的端到端通信。
当n大于1时,可以实现一个处理器向多个处理器发送消息的广播通信,提高了通信效率。
由于每一个消息字的编码都依赖于前一消息字的哈希结果,所以,当消息中的消息字被伪造或篡改或故意错误注入时,会无法解码出正确的消息,从而可以保证消息不会被泄露,提高了通信的安全性。
在生成第一个哈希结果时还可以基于随机数发生器生成的随机数,可以增加编码内容的随机性,提高通信的安全性。
由于硬件模块或第二处理器还会比较解码得到的最后一个消息字的哈希结果与验证内容是否相同,在最后一个消息字的哈希结果与验证内容相同时第二处理器才会读取到消息,这样,当消息中的消息字被伪造或篡改或故意错误注入时,或者,当伪造的第二处理器来读取消息时,最后一个消息字的哈希结果与验证内容必然不同,也就可以禁止消息的读出,可以进一步提高通信的安全性。
硬件模块还可以向第一处理器发送超时信号,而超时可能是硬件损坏或者瞬态错误或者被黑客攻击导致的,第一处理器可以在接收到超时信号后处理这种错误。
硬件模块还可以在需要读取消息的第二处理器的第二标识不合法时,禁止该第二处理器读取消息,从而实现了接收端的数据隔离。
需要说明的是:上述实施例提供的多处理器通信系统在进行多处理器通信时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将多处理器通信系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的多处理器通信系统与多处理器通信方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。