本发明涉及soc领域,特别涉及一种存储数据读取控制方法和装置。
背景技术:
在基于soc的嵌入式系统中,经常需要对于从外部存储的文件进行完整性校验,包括但不限于:系统启动过程中,对各个阶段的固件进行完整性校验,如常见的安全启动(其是基于完整性校验的基础上进行合法性校验)、系统使用过程中对关键系统文件进行完整性校验、多媒体播放时对版权音视频文件进行完整性和合法性校验等。
一般的soc设计是有独立的存储控制器对不同的外设进行数据读写,有独立的加解密引擎来运算哈希值、rsa等。典型的固件完整性校验流程包括以下步骤:1.从外部存储设备读取下一阶段固件以及该固件对应的哈希值到内部ram;2.使用cpu软件运算或者调用专用硬件加速引擎来计算ram中固件的指定模式哈希值;3.将步骤2计算得到的哈希值与直接读取得到的哈希值进行对比,如果相等说明固件是合法的。
如图1所示,以外部存储是emmc为例的固件读取和校验流程。对于支持安全启动的设备,外部存储放的是固件的签名及签名用的公钥,然后使用cpu软件运算或者调用专用硬件加速引擎将固件签名使用公钥进行解密,得到一份哈希值然后进行对比。在嵌入式系统中,往往对于启动时间等性能要求很高,同时能提供的硬件资源能力却比较有限,性能要求高和资源能力不足是矛盾的,而典型的固件完整性校验流程中的三个步骤是串行执行,想要加快速度只能通过提高cpu或者硬件加速引擎的性能来实现,但实际上嵌入式系统往往硬件性能较弱,无法满足需求。
技术实现要素:
为此,需要提供一种存储数据读取控制的技术方案,用以减少在存储数据读取控制过程中数据搬移带来的数据带宽消耗
为实现上述目的,第一方面,发明人提供了一种存储数据读取控制装置,所述装置包括外部存储器、存储控制器、内存和处理单元;所述存储控制器包括哈希引擎和缓存模块,所述缓存模块包括数据缓存模块和哈希值缓存模块;所述外部存储器通过存储控制器与所述内存连接;
所述处理单元用于先将外部存储器中的存储数据读取至存储控制器的数据缓存模块中,而后再将数据缓存模块中的外部存储数据写入内存中;
当每次哈希引擎被使能时,将所有读取的数据流作为输入,按预设的哈希算法以当前哈希值缓存模块的数据作为初始值计算得到新的第一哈希值,并将新的第一哈希值更新至哈希缓存模块中;所述处理单元还用于在外部存储器中的存储数据全部被读取完毕后,从所述哈希值缓存模块中获取第一哈希值以及从外部存储器中读取第二哈希值,并判断所读取的第一哈希值和第二哈希值是否一致,若是则校验通过,否则校验失败。
作为一种可选的实施例,所述处理单元还用于先将哈希值缓存模块清零后,再从所述外部存储器读取存储数据至数据缓存模块中,而后再将数据缓存模块中的存储数据写入内存中。
作为一种可选的实施例,当每次存储数据被读取到数据缓存模块中时,判断是否需要对当前数据缓存模块中的存储数据进行哈希值计算,若是则哈希引擎执行步骤s1:根据当前数据缓存模块中的存储数据计算第一哈希值,否则哈希引擎不执行步骤s1。
作为一种可选的实施例,所述处理单元还用于在哈希值缓存模块清零后,设置哈希引擎使能标志;并在外部存储器中的存储数据全部被读取完毕后,清楚哈希引擎使能标志。
作为一种可选的实施例,所述哈希引擎采用哈希算法计算第一哈希值,所述哈希算法包括sha1、sha3、sha256、sha384、sha512、mactripledes、md5、ripemd160中的任意一种。
作为一种可选的实施例,所述存储控制器包括mmc控制器、spi控制器、nand控制器、sata控制器、pci控制器、usb控制器、ufs控制器中的任意一种。
第二方面,发明人还提供了一种存储数据读取控制方法,所述方法应用于如前文所述的存储数据读取控制装置,所述方法包括以下步骤:
将外部存储器中的存储数据读取至存储控制器的缓存模块中,而后将缓存模块中的存储数据写入内存中;
哈希引擎被使能时,将所有读取的数据流作为输入,按预设的哈希算法以当前哈希值缓存模块的数据作为初始值计算得到新的第一哈希值,并将新的第一哈希值更新至哈希缓存模块中;从外部存储器中读取第二哈希值,并判断最终得到的第一哈希值和第二哈希值是否一致,若是则校验通过,否则校验失败。
作为一种可选的实施例,所述方法包括以下步骤:
将哈希值缓存模块中的数据清零,设置哈希引擎使能标志;
每次从外部存储器中读取一定大小的存储数据至数据缓存模块中;
在每次读取完毕后,判断当前外部存储器中的存储数据是否全部读取完成,若是则从哈希值缓存模块中读取最终得到的第一哈希值,并清除哈希引擎使能标志;否则继续从外部存储器中读取下一存储数据,并将所有读取的数据流作为输入,按指定的算法以哈希值缓存区数据作为初始值计算得到新的哈希值输出到哈希值缓存区。
区别于现有技术,本发明涉及的存储数据读取控制方法和装置,述装置包括外部存储器、存储控制器、内存和处理单元;所述存储控制器包括哈希引擎和缓存模块,所述缓存模块包括数据缓存模块和哈希值缓存模块;所述外部存储器通过存储控制器与所述内存连接。本申请通过在存储控制器中设置哈希引擎,并通过哈希引擎直接计算哈希值,而不用将数据搬移到另一个计算单元(如cpu、独立的硬件加速单元)来生成固件哈希值,有效减少了额外数据搬移带来的数据带宽消耗。
附图说明
图1为现有技术涉及的一种存储数据读取控制方法的流程图;
图2为本发明一实施例涉及的存储数据读取控制方法的流程图;
图3为本发明另一实施例涉及的存储数据读取控制方法的流程图;
图4为本发明另一实施例涉及的存储数据读取控制方法的流程图;
图5为本发明另一实施例涉及的存储数据读取控制方法的流程图;
图6为本发明一实施例涉及的存储数据读取控制装置的结构示意图。
附图标记:
1、外部存储器;
2、存储控制器;
21、哈希引擎;
22、缓存模块;221、数据缓存模块;222、哈希值缓存模块。
3、内存;
4、处理单元。
具体实施方式
为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。
请参阅图5,本发明提供了一种存储数据读取控制装置,所述装置包括外部存储器1、存储控制器2、内存3和处理单元4;所述存储控制器2包括哈希引擎21和缓存模块22,所述缓存模块22包括数据缓存模块221和哈希值缓存模块222;所述外部存储器1通过存储控制器2与所述内存3连接;
所述处理单元4用于先将外部存储器1中的存储数据读取至存储控制器2的数据缓存模块221中,而后再将数据缓存模块221中的外部存储数据写入内存3中;所述处理单元为cpu或独立的硬件加速单元。
当每次哈希引擎被使能时,存储控制器2将所有读取的数据流作为输入,按预设的哈希算法以当前哈希值缓存模块222的数据作为初始值计算得到新的第一哈希值,并将新的第一哈希值更新至哈希缓存模块222中。
所述处理单元4还用于在外部存储器1中的存储数据全部被读取完毕后,从所述哈希值缓存模块222中获取第一哈希值以及从外部存储器1中读取第二哈希值,并判断所读取的第一哈希值和第二哈希值是否一致,若是则校验通过,否则校验失败。所述处理单元为具有数据读写控制功能的元件,如可以是cpu,或具有硬件加速功能的独立电路。
第一哈希值是根据读取的数据实时计算得到的哈希值,第二哈希值为校验值,通过将第一哈希值和第二哈希值进行比对,可以实现对读取数据的完整性进行校验。通过在存储控制器中设置哈希引擎,哈希引擎直接利用当前数据缓存模块中的存储数据以及哈希值缓存模块中的哈希值计算生成新的哈希值,从而实现无需将存储数据搬移到另一个计算单元(软解使用cpu,硬件使用独立的硬件加速单元)来生成第一哈希值,有效减少了额外数据搬移带来的数据带宽消耗。
在某些实施例中,所述处理单元还用于先将哈希值缓存模块清零后,再从所述外部存储器读取存储数据至数据缓存模块中,而后再将数据缓存模块中的存储数据写入内存中。这样,可以保证每次数据读取之前哈希值缓存模块存储的哈希值为空,不会受到上一次缓存哈希值的影响,提高校验的完整性和准确性。
在某些实施例中,当每次存储数据被读取到数据缓存模块中时,判断是否需要对当前数据缓存模块中的存储数据进行哈希值计算,若是则哈希引擎执行步骤s1:根据当前数据缓存模块中的存储数据计算第一哈希值,否则哈希引擎不执行步骤s1。简言之,当需要对读取的数据进行完整性校验时,则哈希引擎执行步骤s1,否则不执行步骤s1,从而可以适应更多应用场景的需求。
在某些实施例中,所述处理单元还用于在哈希值缓存模块清零后,设置哈希引擎使能标志;并在外部存储器中的存储数据全部被读取完毕后,清除哈希引擎使能标志。简言之,通过设置哈希引擎使能标志,可以有效获悉当前哈希引擎是否处于工作,在外部存储器中的存储数据全部被读取完毕后,清除哈希引擎使能标志,停止哈希引擎工作,从而达到节省功耗的目的。
在某些实施例中,所述哈希引擎采用哈希算法计算第一哈希值,所述哈希算法包括sha1、sha3、sha256、sha384、sha512、mactripledes、md5、ripemd160中的任意一种。
在某些实施例中,所述存储控制器包括mmc控制器、spi控制器、nand控制器、sata控制器、pci控制器、usb控制器、ufs控制器中的任意一种。
如图5所示,本发明还提供了一种存储数据读取控制方法,所述方法应用于如前文所述的存储数据读取控制装置,所述方法包括以下步骤:
首先进入步骤s501将外部存储器中的存储数据读取至存储控制器的缓存模块中,而后将缓存模块中的存储数据写入内存中;
而后进入步骤s502哈希引擎被使能时,将所有读取的数据流作为输入,按预设的哈希算法以当前哈希值缓存模块的数据作为初始值计算得到新的第一哈希值,并将新的第一哈希值更新至哈希缓存模块中;
而后进入步骤s503从外部存储器中读取第二哈希值,并判断最终得到的第一哈希值和第二哈希值是否一致,若是则校验通过,否则校验失败。
通过在存储控制器中设置哈希引擎,哈希引擎直接利用当前数据缓存模块中的存储数据以及哈希值缓存模块中的哈希值计算生成新的哈希值,从而实现无需将存储数据搬移到另一个计算单元(软解使用cpu,硬件使用独立的硬件加速单元)来生成第一哈希值,有效减少了额外数据搬移带来的数据带宽消耗。
在某些实施例中,所述方法包括以下步骤:将哈希值缓存模块中的数据清零,设置哈希引擎使能标志;每次从外部存储器中读取一定大小的存储数据至数据缓存模块中;在每次读取完毕后,判断当前外部存储器中的存储数据是否全部读取完成,若是则从哈希值缓存模块中读取最终得到的第一哈希值,并清除哈希引擎使能标志;否则继续从外部存储器中读取下一存储数据,并将所有读取的数据流作为输入,按指定的算法以哈希值缓存区数据作为初始值计算得到新的哈希值输出到哈希值缓存区。这样,可以保证每次数据读取之前哈希值缓存模块存储的哈希值为空,不会受到上一次缓存哈希值的影响,提高校验的完整性和准确性。
如图2、3、4所示,以外部存储单元是emmc为例,对带哈希引擎的emmc控制器(即前文提及的“存储控制器”)进行固件读取和校验进行说明。
由于需要进行校验的文件或固件数据的大小,可能从几kb到几gb甚至更大,所以本方案的实现难点之一就在于嵌入到存储控制器的哈希引擎是否可以灵活的支持任意大小数据的哈希计算。而作为数据完整性校验的哈希算法是一种累进式的算法,也就是不需要一次性准备所有数据才能运算得到结果,而是可以基于已有结果对任意大小的新增数据进行运算累加,得到最终结果。因此,在电路实现上可以在emmc控制器中增加一个哈希引擎、一个哈希计算使能位并指定一段哈希缓存空间。
如图3所示,以带哈希引擎的emmc控制器为例进行控制器读取流程说明,由于emmc控制器的fifo一般不大(如在某些soc芯片中是1kb),而一个mmc命令可能读取几十mb的数据,emmc控制器与外部emmc器件之间通过硬件握手信号来控制数据读取进度,哈希引擎可以通过对每一段进入fifo的数据进行累积计算。
以图4为例,如果一个固件数据(假设被读取的存储数据为“固件数据”)大小是512mb,底层emmc读驱动支持读取的单次最大数据量为32mb,系统需要调用16次emmc读接口驱动才能完成固件读取。在读取固件数据之前将哈希缓存清零,并设置哈希引擎使能标志,以及在所有固件数据读取完成后,从哈希缓存读取固件哈希数据并清除哈希引擎使能标志。
本发明提供了一种存储数据读取控制方法和装置,述装置包括外部存储器、存储控制器、内存和处理单元;所述存储控制器包括哈希引擎和缓存模块,所述缓存模块包括数据缓存模块和哈希值缓存模块;所述外部存储器通过存储控制器与所述内存连接。本申请通过在存储控制器中设置哈希引擎,并通过哈希引擎直接计算哈希值,而不用将数据搬移到另一个计算单元(如cpu、独立的硬件加速单元)来生成固件哈希值,有效减少了额外数据搬移带来的数据带宽消耗。
需要说明的是,尽管在本文中已经对上述各实施例进行了描述,但并非因此限制本发明的专利保护范围。因此,基于本发明的创新理念,对本文所述实施例进行的变更和修改,或利用本发明说明书及附图内容所作的等效结构或等效流程变换,直接或间接地将以上技术方案运用在其他相关的技术领域,均包括在本发明的专利保护范围之内。