本发明涉及固态硬盘技术领域,特别是涉及一种基于固态硬盘的固件自动加密方法、装置、计算机设备和存储介质。
背景技术:
目前,ssd在出厂之前,都会对ssd控制器做开卡处理,将bootloader和固件烧录到nandflash或norflash中。
参考图1,在传统技术中,ssd在开卡之前首先会通过gpio引脚将控制器bootrom配置成强制下载模式,开卡人员再通过uart接口将开卡工程ramloader下载至芯片中运行,ramloader再将固件和bootloader下载至flash中。最后通过gpio引脚将bootrom配置成加载模式。芯片重新上电之后,便会从flash中加载bootloader运行,bootloader再加载固件运行。
ssd在出厂之后,uart接口和模式配置的gpio引脚都是不会再使用。一旦固件代码发现uart接口有数据传输或者模式配置的gpio引脚值变化的话,极有可能黑客在对控制器进行破解,尝试获取flash中的固件文件。
目前的方法对于flash中的固件没有有效的保护机制,一旦ssd控制器被配置成强制下载模式,控制器便可通过uart下载并运行非法代码,获取flash中的固件代码,固件文件便被破解。
技术实现要素:
基于此,有必要针对上述技术问题,提供一种可以实现提高固态硬盘的加密可靠性的基于固态硬盘的固件自动加密方法、装置、计算机设备和存储介质。
一种基于固态硬盘的固件自动加密方法,所述方法包括:
从flash中加载bootloader和固件;
固件运行时判断是否触发自动加密机制;
若触发自动加密机制则将所述flash中的固件读取到ddr中,并对固件文件进行加密,生成密文固件;
擦除所述flash中原有的固件,并将所述密文固件写到所述flash中。
在其中一个实施例中,所述固件运行时判断是否触发自动加密机制的步骤还包括:
检测串口是否有数据传输;
若检测到串口有数据传输,则判断触发了所述自动加密机制;
若没有检测到串口有数据传输,则判断未触发所述自动加密机制。
在其中一个实施例中,所述固件运行时判断是否触发自动加密机制的步骤还包括:
检测gpio引脚电压值是否有变化;
若检测gpio引脚电压值发生变化,则判断触发了所述自动加密机制;
若没有检测到gpio引脚电压值发生变化,则判断未触发所述自动加密机制。
在其中一个实施例中,所述从flash中加载bootloader和固件的步骤包括:
配置gpio模式引脚,将控制器bootrom配置成加载模式;
芯片上电,同时所述控制器bootrom运行在加载模式;
所述控制bootrom加载flash中的bootloader,同时bootloader运行;
bootloader加载flash中的固件。
一种基于固态硬盘的固件自动加密装置,所述基于固态硬盘的固件自动加密装置包括:
加载模块,所述加载模块用于从flash中加载bootloader和固件;
判断模块,所述判断模块用于固件运行时判断是否触发自动加密机制;
读取模块,所述读取模块用于若触发自动加密机制则将所述flash中的固件读取到ddr中;
加密模块,所述加密模块用于对固件文件进行加密,生成密文固件;
擦除模块,所述擦除模块用于擦除所述flash中原有的固件;
写入模块,所述写入模块用于将所述密文固件写到所述flash中。
在其中一个实施例中,所述判断模块还包括串口检测模块,所述串口检测模块用于:
检测串口是否有数据传输;
若检测到串口有数据传输,则判断触发了所述自动加密机制;
若没有检测到串口有数据传输,则判断未触发所述自动加密机制。
在其中一个实施例中,所述判断模块还包括电压检测模块,所述电压检测模块用于:
检测gpio引脚电压值是否有变化;
若检测gpio引脚电压值发生变化,则判断触发了所述自动加密机制;
若没有检测到gpio引脚电压值发生变化,则判断未触发所述自动加密机制。
在其中一个实施例中,所述加载模块还用于:
配置gpio模式引脚,将控制器bootrom配置成加载模式;
芯片上电,同时所述控制器bootrom运行在加载模式;
所述控制bootrom加载flash中的bootloader,同时bootloader运行;
bootloader加载flash中的固件。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一项方法的步骤。
上述基于固态硬盘的固件自动加密方法、装置、计算机设备和存储介质,通过从flash中加载bootloader和固件;固件运行时判断是否触发自动加密机制;若触发自动加密机制则将所述flash中的固件读取到ddr中,并对固件文件进行加密,生成密文固件;擦除所述flash中原有的固件,并将所述密文固件写到所述flash中。本发明通过加载bootloader和固件,在固件运行时判断是否触发自动加密机制,自动触发固件自动加密机制,防止黑客获取固件文件,提高了固态硬盘加密的可靠性。
附图说明
图1为传统技术中开卡以及固件运行的流程示意图;
图2为一个实施例中基于固态硬盘的固件自动加密方法的流程示意图;
图3为另一个实施例中基于固态硬盘的固件自动加密方法的流程示意图;
图4为再一个实施例中基于固态硬盘的固件自动加密方法的流程示意图;
图5为又一个实施例中基于固态硬盘的固件自动加密方法的流程示意图;
图6为一个实施例中基于固态硬盘的固件自动加密方法的具体流程图;
图7为一个实施例中基于固态硬盘的固件自动加密装置的结构框图;
图8为一个实施例中判断模块的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本发明提出了一种固件自动加密的保护机制,固态硬盘一旦检测到uart接口有数据传输或者模式配置的gpio引脚值变化,便触发固件自动加密机制,将存储在flash中的固件自动加密,擦除flash中原有的明文固件,再将密文固件重新烧写至flash中,防止固件文件被破解。
此外,为了更清楚的说明本发明的内容,本发明中英文缩写的解释如下:
ssd:固态硬盘。
bootrom:固化在微控制器内部,用于芯片正常工作的代码。
norflash:一种非易失性的存储器。
nandflash:一种非易失性存储器,具有容量大,改写速度快等优点。
bootloader:用于加载固态硬盘全系统固件的加载工程。
ramloader:用于固态硬盘开卡的工程,烧录bootloader和固件到flash中。
gpio:通用输入输出。
uart:通用异步收发传输器,简称串口。
aes:高级加密标准。
ddr:动态随机存储器。
在一个实施例中,如图2所示,提供了一种基于固态硬盘的固件自动加密方法,该方法包括:
步骤202,从flash中加载bootloader和固件;
步骤204,固件运行时判断是否触发自动加密机制;
步骤206,若触发自动加密机制则将flash中的固件读取到ddr中,并对固件文件进行加密,生成密文固件;
步骤208,擦除flash中原有的固件,并将密文固件写到flash中。
具体地,从flash中加载bootloader和固件,首先,配置gpio模式引脚,将控制器bootrom配置成加载模式。接着,芯片上电,控制器中的bootrom正常运行,此时bootrom运行在加载模式。然后,bootrom加载flash中的bootloader,bootloader运行。bootloader加载flash中的固件,固件正常运行。
固件运行时判断是否触发自动加密机制,不触发,则固件继续正常运行。一旦触发自动加密机制,则固件读取flash中的固件,保存在固态硬盘的ddr中,并对读取的固件做aes加密。接着,擦除flash中的原有固件。最后,将中生成的密文固件烧写至flash中。即使黑客运行了非法代码读取了flash中的固件。所获得的固件文件也是密文的,只要aes的密钥不泄露,黑客仍然无法获取自主知识产权极高的明文固件文件。
在本实施例中,通过从flash中加载bootloader和固件;固件运行时判断是否触发自动加密机制;若触发自动加密机制则将flash中的固件读取到ddr中,并对固件文件进行加密,生成密文固件;擦除flash中原有的固件,并将密文固件写到flash中。本实施例通过加载bootloader和固件,在固件运行时判断是否触发自动加密机制,自动触发固件自动加密机制,防止黑客获取固件文件,提高了固态硬盘加密的可靠性。
在一个实施例中,如图3所示,提供了一种基于固态硬盘的固件自动加密方法,其中固件运行时判断是否触发自动加密机制的步骤还包括:
步骤302,检测串口是否有数据传输;
步骤304,若检测到串口有数据传输,则判断触发了自动加密机制;
步骤306,若没有检测到串口有数据传输,则判断未触发自动加密机制。
在一个实施例中,如图4所示,提供了一种基于固态硬盘的固件自动加密方法,其中固件运行时判断是否触发自动加密机制的步骤还包括:
步骤402,检测gpio引脚电压值是否有变化;
步骤404,若检测gpio引脚电压值发生变化,则判断触发了自动加密机制;
步骤406,若没有检测到gpio引脚电压值发生变化,则判断未触发自动加密机制。
具体地,本实施例中,在现有固件运行的基础上,提出了固件自动加密保护机制。固件正常运行后,一旦固件一旦检测到停用的uart接口重新被使用,或者模式配置的gpio引脚电压值有变化,便通过中断的方式自动出发触发加密机制,将flash中的固件读取到ddr中,对其使用aes进行加密,再擦除flash中原有的固件,将加密的固件烧录到flash中。这样,即使黑客运行了非法代码读取了flash中的固件。所获得的固件文件也是密文的,只要aes的密钥不泄露,黑客仍然无法获取自主知识产权极高的明文固件文件。
在本实施例中,通过固态硬盘控制器检测到uart接口有数据传输或者模式配置的gpio引脚值变化,自动触发固件自动加密机制,防止黑客获取固件文件。
在一个实施例中,如图5所示,提供了一种基于固态硬盘的固件自动加密方法,其中从flash中加载bootloader和固件的步骤包括:
步骤502,配置gpio模式引脚,将控制器bootrom配置成加载模式;
步骤504,芯片上电,同时控制器bootrom运行在加载模式;
步骤506,控制bootrom加载flash中的bootloader,同时bootloader运行;
步骤508,bootloader加载flash中的固件。
具体地,参考图6,本实施例中的基于固态硬盘的固件自动加密方法的步骤流程具体包括:
1.首先配置gpio模式引脚,将控制器bootrom配置成加载模式。下一步执行流程2。
2.芯片上电,控制器中的bootrom正常运行,此时bootrom运行在加载模式。下一步执行流程3。
3.bootrom加载flash中的bootloader,bootloader运行。下一步执行流程4。
4.bootloader加载flash中的固件。下一步执行流程5。
5.固件正常运行。一旦触发自动加密机制,下一步执行流程6。不触发,则继续执行流程5。
6.固件读取flash中的固件,保存在固态硬盘的ddr中。下一步执行流程7。
7.对读取的固件做aes加密。下一步执行流程8。
8.擦除flash中的原有固件。下一步执行流程9。
9.将流程7中生成的密文固件烧写至flash中。
应该理解的是,虽然图2-6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种基于固态硬盘的固件自动加密装置700,该装置包括:
加载模块701,用于从flash中加载bootloader和固件;
判断模块702,用于固件运行时判断是否触发自动加密机制;
读取模块703,用于若触发自动加密机制则将flash中的固件读取到ddr中;
加密模块704,用于对固件文件进行加密,生成密文固件;
擦除模块705,用于擦除flash中原有的固件;
写入模块706,用于将密文固件写到flash中。
在一个实施例中,如图8所示,判断模块702还包括串口检测模块702a,用于:
检测串口是否有数据传输;
若检测到串口有数据传输,则判断触发了自动加密机制;
若没有检测到串口有数据传输,则判断未触发自动加密机制。
在一个实施例中,如图8所示,判断模块702还包括电压检测模块702b,用于:
检测gpio引脚电压值是否有变化;
若检测gpio引脚电压值发生变化,则判断触发了自动加密机制;
若没有检测到gpio引脚电压值发生变化,则判断未触发自动加密机制。
在一个实施例中,加载模块701还用于:
配置gpio模式引脚,将控制器bootrom配置成加载模式;
芯片上电,同时控制器bootrom运行在加载模式;
控制bootrom加载flash中的bootloader,同时bootloader运行;
bootloader加载flash中的固件。
关于基于固态硬盘的固件自动加密装置的具体限定可以参见上文中对于基于固态硬盘的固件自动加密方法的限定,在此不再赘述。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器以及网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于固态硬盘的固件自动加密方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以上各个方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上各个方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。