一种SOC芯片的加密自启动方法
文献发布时间:2024-04-18 20:00:50
技术领域
本发明涉及嵌入式技术领域,尤其涉及一种SOC芯片的加密自启动方法。
背景技术
SOC芯片(System on Chip)又称系统级芯片、片上集成系统等,可以将系统级包含的微处理器CPU、数字信号处理、接口、存储等部件集成在一颗芯片上,是芯片设计领域中的一种典型产品类型,由于具备高性能、低成本、开发周期短等优势,SOC已逐渐成为当前芯片设计的主流。
以现有技术,只要使用者取得SOC芯片元器件本身,通过使用者的经验和一定的尝试,就可以初步摸清SOC芯片的部分功能,但是在实际应用的过程中,芯片设计方并不清楚使用者的身份,使用者可以通过多种途径取得SOC芯片本身,竞争对手是可以较为轻松的取得SOC芯片,并对其功能进行初步分析的,这显然对芯片设计方的利益是有所损害的。
SOC芯片设计需要投入大量的人力物力,作为芯片设计方,是不希望任何取得SOC芯片元器件的人尤其是自己的竞争对手均可以对芯片情况有初步的认识的,因此对于SOC芯片,对其进行一定程度的加密是很有必要的。但是当前SOC芯片中,虽然有很多加密芯片,但是其针对的领域是通信、音频、视频等领域传输中的加密等场景,而非对于上述场景下芯片自身启动情况的一种加密,因此针对上述需求场景提出一种行之有效的SOC芯片加密方法,是有着切实的市场与应用需求的。
发明内容
本发明要解决的技术问题是,如何配置密钥启动引导程序完成SOC芯片正常工作,并阻止非理想用户完成启动的目的;有鉴于此,本发明提供一种SOC芯片的加密自启动方法。
本发明采用的技术方案是,一种SOC芯片的加密自启动方法,包括:
步骤S1,在SOC芯片内配置用于加密启动的flash程序,其中,所述flash程序为只读模式,内容采取随机数烧写;
步骤S2,在SOC芯片嵌入设备的引导程序中,写入均为32bit的第一解密参考数以及第二解密参考数;
步骤S3,利用所述第一解密参考数的高16bit数据矩阵以及4bit所述第二解密参考数构成的矩阵的卷积值,确定第一密钥地址,利用所述第二解密参考数的高16bit数据矩阵以及4bit所述第一解密参考数构成的矩阵的卷积值,确定第二密钥地址;
步骤S4,基于所述第一密钥地址以及所述第二密钥地址,确定所述flash程序中的密钥值存储地址;
步骤S5,响应于所述引导程序的自启动请求,重复步骤S3,当获取的第一解密参考数以及第二解密参考数与所述密钥值存储地址匹配时,进入执行引导程序的搬移操作,以完成SOC芯片的加密自启动。
在一个实施方式中,所述步骤S3中,4bit所述第一解密参考数以及所述第二解密参考数具体包括:将所述第一解密参考数以及所述第二解密参考数由高到底,分为8组4bit数据,选取的4bit数据,依次为第一组的第一个数据,第二组的第二个数据,第三组的第三个数据,第四组的第四个数据,。
在一个实施方式中,所述步骤S3具体包括:
利用所述第一解密参考数的高16bit数据矩阵以及4bit所述第二解密参考数构成的矩阵的卷积值,构成3×3的第一密钥矩阵,将所述第一密钥矩阵的元素倒序排列,其中每个元素占用3bit,并高位补零,以构成32bit的所述第一密钥地址;
利用所述第二解密参考数的高16bit数据矩阵以及4bit所述第一解密参考数构成的矩阵的卷积值,构成3×3的第二密钥矩阵,将所述第二密钥矩阵的元素倒序排列,其中每个元素占用3bit,并高位补零,以构成32bit的所述第一密钥地址。
在一个实施方式中,所述步骤S4包括:
将所述第一密钥地址与所述flash基地址的和,确定为所述密钥值存储地址的第一部分;
将所述第二密钥地址与所述flash基地址的和,确定为所述密钥值存储地址的第二部分。
在一个实施方式中,所述步骤S2中,对所述第一解密参考数以及所述第二解密参考数的配置过程包括:
将所述第一解密参考数的低16bit配置为与所述所述密钥值存储地址的第一部分的低16bit相同;
将所述第二解密参考数的低16bit配置为与所述所述密钥值存储地址的第二部分的低16bit相同。
在一个实施方式中,所述步骤S5中,当获取的第一解密参考数以及第二解密参考数与所述密钥值存储地址匹配,包括:
所述第一解密参考数的低16bit与所述所述密钥值存储地址的第一部分的低16bit相同;
所述第二解密参考数的低16bit与所述所述密钥值存储地址的第二部分的低16bit相同。
在一个实施方式中,所述方法还包括;
将第一解密参考数以及第二解密参考数在引导程序预先配置为随机数值。
在一个实施方式中,基于SWD协议,写入第一解密参考数以及第二解密参考数。
本发明的另一方面还提供了一种电子设备,所述电子设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上任一项所述的SOC芯片的加密自启动方法的步骤。
本发明的另一方面还提供了一种计算机存储介质,所述计算机存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的SOC芯片的加密自启动方法的步骤。
采用上述技术方案,本发明至少具有下列优点:
本发明利用SOC芯片中引导程序设置全局变量配合片内flash存储密钥的方法进行加密,首先不带来额外的硬件外设,相较于一些需要专用解密设备启动的方法,本方法更便于用户在多种场景下进行使用;其次加密本身的操作复杂点也在设计过程中和交付用户前配置密钥隐藏参数和flash的过程中进行,对于正常用户使用时,仅需要利用SWD通用协议写入密钥隐藏参数,操作简单便捷,便于用户使用,不会因为加密的相关设计在正常用户解密启动中带来过多的操作困扰。
附图说明
图1为根据本发明实施例的SOC芯片的加密自启动方法的流程示意图;
图2为根据本发明实施例的SOC芯片的加密自启动方法的逻辑框架示意图;
图3为根据本发明实施例的电子设备结构示意图。
具体实施方式
为更进一步阐述本发明为达成预定目的所采取的技术手段及功效,以下结合附图及较佳实施例,对本发明进行详细说明如后。
在附图中,为了便于说明,已稍微夸大了物体的厚度、尺寸和形状。附图仅为示例而并非严格按比例绘制。
还应理解的是,用语“包括”、“包括有”、“具有”、“包含”和/或“包含有”,当在本说明书中使用时表示存在所陈述的特征、整体、步骤、操作、元件和/或部件,但不排除存在或附加有一个或多个其它特征、整体、步骤、操作、元件、部件和/或它们的组合。此外,当诸如“...中的至少一个”的表述出现在所列特征的列表之后时,修饰整个所列特征,而不是修饰列表中的单独元件。此外,当描述本申请的实施方式时,使用“可以”表示“本申请的一个或多个实施方式”。并且,用语“示例性的”旨在指代示例或举例说明。
如在本文中使用的,用语“基本上”、“大约”以及类似的用语用作表近似的用语,而不用作表程度的用语,并且旨在说明将由本领域普通技术人员认识到的、测量值或计算值中的固有偏差。
除非另外限定,否则本文中使用的所有用语(包括技术用语和科学用语)均具有与本申请所属领域普通技术人员的通常理解相同的含义。还应理解的是,用语(例如在常用词典中定义的用语)应被解释为具有与它们在相关技术的上下文中的含义一致的含义,并且将不被以理想化或过度正式意义解释,除非本文中明确如此限定。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本发明第一实施例,一种SOC芯片的加密自启动方法,如图1所示,包括以下步骤:
步骤S1,在SOC芯片内配置用于加密启动的flash程序,其中,所述flash程序为只读模式,内容采取随机数烧写;
步骤S2,在SOC芯片嵌入设备的引导程序中,写入均为32bit的第一解密参考数以及第二解密参考数;
步骤S3,利用所述第一解密参考数的高16bit数据矩阵以及4bit所述第二解密参考数构成的矩阵的卷积值,确定第一密钥地址,利用所述第二解密参考数的高16bit数据矩阵以及4bit所述第一解密参考数构成的矩阵的卷积值,确定第二密钥地址;
步骤S4,基于所述第一密钥地址以及所述第二密钥地址,确定所述flash程序中的密钥值存储地址;
步骤S5,响应于所述引导程序的自启动请求,重复步骤S3,当获取的第一解密参考数以及第二解密参考数与所述密钥值存储地址匹配时,进入执行引导程序的搬移操作,以完成SOC芯片的加密自启动。
具体地,步骤S3中,4bit所述第一解密参考数以及所述第二解密参考数具体包括:将所述第一解密参考数以及所述第二解密参考数由高到底,分为8组4bit数据,选取的4bit数据,依次为第一组的第一个数据,第二组的第二个数据,第三组的第三个数据,第四组的第四个数据,。
本实施例中,步骤S3可以具体包括:
利用所述第一解密参考数的高16bit数据矩阵以及4bit所述第二解密参考数构成的矩阵的卷积值,构成3×3的第一密钥矩阵,将所述第一密钥矩阵的元素倒序排列,其中每个元素占用3bit,并高位补零,以构成32bit的所述第一密钥地址;
利用所述第二解密参考数的高16bit数据矩阵以及4bit所述第一解密参考数构成的矩阵的卷积值,构成3×3的第二密钥矩阵,将所述第二密钥矩阵的元素倒序排列,其中每个元素占用3bit,并高位补零,以构成32bit的所述第一密钥地址。
本实施例中,所述步骤S4可以进一步包括:
将所述第一密钥地址与所述flash基地址的和,确定为所述密钥值存储地址的第一部分;
将所述第二密钥地址与所述flash基地址的和,确定为所述密钥值存储地址的第二部分。
在一个实施方式中,所述步骤S2中,对所述第一解密参考数以及所述第二解密参考数的配置过程包括:
将所述第一解密参考数的低16bit配置为与所述所述密钥值存储地址的第一部分的低16bit相同;
将所述第二解密参考数的低16bit配置为与所述所述密钥值存储地址的第二部分的低16bit相同。
本实施例中,当获取的第一解密参考数以及第二解密参考数与所述密钥值存储地址匹配,可以具体包括:
所述第一解密参考数的低16bit与所述所述密钥值存储地址的第一部分的低16bit相同;
所述第二解密参考数的低16bit与所述所述密钥值存储地址的第二部分的低16bit相同。
本实施例中,为了提高保密性,需要将第一解密参考数以及第二解密参考数在引导程序预先配置为随机数值。
本实施例中,可以基于SWD协议,写入第一解密参考数以及第二解密参考数。
参考图2,下面将对本实施例所提供的方法进行详细说明。
SOC芯片在启动过程中,首先执行引导程序,将引导程序对应的比特文件搬移到内存中去,再去根据比特文件执行程序的内容,完成用户程序的搬移、载入与执行。通过SWD接口协议,可以配置内存中各个地址对应的数值,这就为SOC芯片的加密启动提供的基础,本发明基于上述过程提出了一种加密自启动方法;基于该方法,对于任何一颗芯片,在交付用户前,按照下述步骤进行加密处理,然后将该颗芯片专用的密钥告诉用户,用户按照SWD协议写入密钥,可以完成正常启动,达到了每个芯片都有独立的加密效果;
在SOC芯片内部设计一个加密启动专用flash,用来存储密钥隐藏参数,flash中的内容是交付用户前烧写进去的,内容采取随机数烧写,并且配置为只读模式,避免用户误擦除。
在引导程序中设计全局变量32bit(比特)位宽的解密参考数A(第一解密参考数),B(第二解密参考数);A,B的高16bit存储地址解析信息,低16bit存储密钥值;能够完成正确启动的A,B的数值是根据加密启动专用flash中的内容计算出来的,因为flash存储空间大,通过不同的A,B组合,能够很好的完成每颗芯片的独立加密,使得解密时密钥值都互不相同,有效提升加密的效果;解密参考数用来完成正常用户的解密执行,正常用户会获得每颗芯片对应的A,B的地址和数值;
对于32bit的数据A,其数据由高到底,分为4bit一组记为A11、A12、A13、A14,第二组记为A21、A22、A23、A24,以此类推,一直到A81、A82、A83、A84共有8组二进制数,组成了数据A;同理,数据B也由同样的数据形式组成,记为B11、B12、B13、B14到B81、B82、B83、B84;
对于数据A,取出其中高16bit数据,组成矩阵A如下:
对于数据B,取出其中的B11,B22,B33,B44,组成矩阵B如下:
B11 B22
B33 B44
对矩阵A和矩阵B求卷积,得到新的3X3的矩阵C(第一密钥矩阵),具体运算为对
对于矩阵C的任意元素,其依次倒序排列,并且每个元素占用3bit组成密钥地址C,具体为C11对于地址C的第0位、第1位和第2位,C12对于地址C的第3位、第4位和第5位,C13对于地址C的第6位、第7位和第8位,以此类推,C33对于地址C的第24位、第25位和第26位,由于地址是32bit数据,对于剩下的高位补0,组成了密钥地址C(第一密钥地址)。
对于数据B,取出其中高16bit数据,组成矩阵B*如下:
对于数据A,取出其中的A11,A22,A33,A44,组成矩阵A*如下:
A11 A22
A33 A44
对矩阵A*和矩阵B*求卷积,得到新的3X3的矩阵D(第二密钥矩阵),具体运算为对
对于矩阵D的任意元素,其依次倒序排列,并且每个元素占用3bit组成密钥地址D,具体为C11对于地址D的第0位、第1位和第2位,D12对于地址D的第3位、第4位和第5位,D13对于地址D的第6位、第7位和第8位,以此类推,D33对于地址D的第24位、第25位和第26位,由于地址是32bit数据,对于剩下的高位补0,组成了密钥地址D(第二密钥地址)。
密钥地址C和密钥地址D的高位补0后,加上flash基地址base地址,即可作为专用加密启动flash中存储密钥值的地址,具体为flash内的密钥C*(密钥值存储地址的第一部分)=flash基地址base+地址C,地址D*(密钥值存储地址的第二部分)=flash基地址base+地址D,在设计A,B的过程中,对于A,B的低16bit,让A的低16bit和C*的低16bit相同,B的低16bit和D*的低16bit相同;对于每一个芯片,其数据A和B在步骤3中所述是独立的,因此每颗芯片写入密钥的地址也是不同的,因此交付用户前需要对每颗芯片单独操作加密启动flash,把密钥按照密钥地址写入,这样即使非理想用户通过手段遍历读取了flash的内容,也无法获知密钥,可以有效加强加密的效果。
在引导程序中设计启动判定程序,根据A,B的高16bit按照上述方法计算出C*和D*的地址,并进行判定:只有当A的低16位等于C*的低16位,并且B的低16位等于D*的低16位时,才能正常进入执行引导程序的搬移操作;
对于A,B的初始值,在设计过程中在引导程序中将其初始配置为一个不能完成启动的随机数值,因此必须通过上述步骤,将A,B写入对应的解密参考数才能完成正常启动,非理想用户不清楚上述的A,B,X与专用加密flash的配置和每颗芯片对应的解密参考数,无法达到破解的目的,交付正常用户的每颗芯片都会按照上述的加密方法进行运算解密出对应的解密参考数A,B,并把全局变量A,B的地址对应的解密参考数的值告知用户,用户需要对每颗芯片写入独立的密钥值,才能符合9中的启动配置,正常执行引导程序。
具体应用时,正常用户写入密钥值的具体方法为:利用SWD协议,依次对地址A、B写入提供的芯片对应的解密参考数值,其中SWD协议为一种通用串行接口调试协议,可以完成对指定内存地址的数据读写操作,用户只需要了解这一协议,并按照协议标准即可完成写入解密参考数,为了便于用户操作,会提供给用户一个示范用例,因为SWD协议为通用协议,用户可以自行根据协议进行读写,也可以利用提供的示范用例读写程序进行读写;写入完成后用户对芯片执行上电复位,此时全局变量A,B的值保持为写入的解密参考数,芯片上电复位后重新执行引导程序,A,B的数值正确,引导程序控制继续执行搬移,进而执行用户程序,完成芯片的自启动。
相较于现有技术,本实施例至少具有以下优点:
1)本实施例中,利用SOC芯片中引导程序设置全局变量配合片内flash存储密钥的方法进行加密,首先不带来额外的硬件外设,相较于一些需要专用解密设备启动的方法,本方法更便于用户在多种场景下进行使用;
2)本实施例中,加密本身的操作复杂点也在设计过程中和交付用户前配置密钥隐藏参数和flash的过程中进行,对于正常用户使用时,仅需要利用SWD通用协议写入密钥隐藏参数,操作简单便捷,便于用户使用,不会因为加密的相关设计在正常用户解密启动中带来过多的操作困扰;
3)本实施例中,利用密钥隐藏参数和片内加密启动专用flash的配合验证密钥,已及本发明对密钥隐藏参数和flash烧写内容的相关设计,对非理想用户采用遍历尝试、暴力破解等的角度进行了有效封锁;
4)本实施例中,每个芯片都有着单独的密钥,相较于其它加密方法中往往是一批芯片都有着相同的加密,做到了每个芯片的加密独立。。
本发明第二实施例,一种电子设备,如图3所示,可以作为实体装置来理解,包括处理器以及存储有处理器可执行指令的存储器,当指令被处理器执行时,执行如下操作:
步骤S1,在SOC芯片内配置用于加密启动的flash程序,其中,所述flash程序为只读模式,内容采取随机数烧写;
步骤S2,在SOC芯片嵌入设备的引导程序中,写入均为32bit的第一解密参考数以及第二解密参考数;
步骤S3,利用所述第一解密参考数的高16bit数据矩阵以及4bit所述第二解密参考数构成的矩阵的卷积值,确定第一密钥地址,利用所述第二解密参考数的高16bit数据矩阵以及4bit所述第一解密参考数构成的矩阵的卷积值,确定第二密钥地址;
步骤S4,基于第一密钥地址以及第二密钥地址,确定flash程序中的密钥值存储地址;
步骤S5,响应于所述引导程序的自启动请求,重复步骤S3,当获取的第一解密参考数以及第二解密参考数与所述密钥值存储地址匹配时,进入执行引导程序的搬移操作,以完成SOC芯片的加密自启动。
本发明第三实施例,本实施例的SOC芯片的加密自启动方法的流程与第一、二实施例相同,区别在于,在工程实现上,本实施例可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的所述方法可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台设备执行本发明实施例所述的方法。
通过具体实施方式的说明,应当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图示仅是提供参考与说明之用,并非用来对本发明加以限制。
- 一种智能车锁开关装置、智能车锁、车辆及控制方法
- 智能开关控制调度储能控制方法
- 智能开关控制调度储能控制电路