CN113486360B - 基于risc-v的安全启动方法及系统 - Google Patents
基于risc-v的安全启动方法及系统 Download PDFInfo
- Publication number
- CN113486360B CN113486360B CN202110795350.1A CN202110795350A CN113486360B CN 113486360 B CN113486360 B CN 113486360B CN 202110795350 A CN202110795350 A CN 202110795350A CN 113486360 B CN113486360 B CN 113486360B
- Authority
- CN
- China
- Prior art keywords
- public key
- mirror
- mirror image
- version number
- image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/575—Secure boot
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于RISC‑V的安全启动方法及系统,包括:步骤S1:基于RISC‑V的物理内存保护机制和RISC‑V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;步骤S2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则执行步骤S3;验证失败,则启动失败;步骤S3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则执行步骤S4;验证失败,则启动失败;步骤S4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御;本发明保证了镜像的权威性和完整性;其中版本号的完整性可进一步用于防回滚。
Description
技术领域
本发明涉及安全启动技术领域,具体地,涉及基于RISC-V的安全启动方法及系统,更为具体地,涉及RISC-V安全存储。
背景技术
设备在启动时一般会经历从固件引导至特权级应用程序这一步。固件通常是厂家固化在硬件中的可信程序,且不可被更改,所以可以视为整个系统的信任根。为了确保控制权从固件交接给特权级应用程序后系统仍处于可信状态,首先需要确保特权应用程序的镜像是可信的。
为了验证镜像的可信性,可以使用数字签名的方式。镜像发布方持有私钥,镜像发布时需要携带镜像哈希值的数字签名。固件里存放着授权方的公钥,启动时通过公钥对签名进行验证。
专利文献CN112632562A(申请号:202011585531.3)公开了一种设备启动方法、设备管理方法和嵌入式设备,该设备启动方法包括:在目标设备的启动过程中,在所述目标设备的处理器芯片进入机器模式时,启动所述目标设备的引导程序,所述处理器芯片是采用RISC-V架构的处理器;通过所述引导程序对所述目标设备的系统固件代码进行验证;在所述系统固件代码通过验证时,将所述处理器芯片的当前特权模式从所述机器模式切换到用户模式;在所述处理器芯片的当前特权模式被切换至所述用户模式时,启动所述系统固件代码。该专利定义了一种安全启动链条上不同环节的职责和分工;而本发明更专注于启动链条中的首个环节的软硬件相关逻辑以及功能。
现有技术不支持版本回滚攻击的防御;且在片上存储公钥占用存储空间较高;将公钥固化在ROM中,而非OTP中;后者支持在ROM相同的情况下,根据具体的场景选择不同的公钥,同时可以将公钥的选择延后;因此后者支持更灵活的秘钥管理策略,变相提高了安全性;此外,将公钥的选择延后,可以减少设备生产过程中生产失败造成的废料,因为一旦烧录ROM或者OTP后,其内容就无法被更改,此时如果设备的其他硬件出现问题或者秘钥需要更换,OTP或者ROM就会被作废,如果能延后该操作,则可保证OTP的利用率是较高的。现有技术不支持公钥废弃的功能,因此无法处理秘钥泄露的情况;安全启动通常由多个环节的软硬件逻辑组成,且每个环节构成了系统启动链条中的一环。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于RISC-V的安全启动方法及系统。
根据本发明提供的一种基于RISC-V的安全启动方法,包括:
步骤S1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
步骤S2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发步骤S3;验证失败,则启动失败;
步骤S3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发步骤S4;验证失败,则启动失败;
步骤S4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御。
优选地,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值;
所述设备启动模式用于选配安全启动和防回滚模式。
优选地,所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;监控器模式拥有最高的权限级别;用户模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:在监控者模式和用户模式下访问总线地址时,需要通过物理内存保护机制的检查;通过配置物理内存保护机制让监控者模式和用户模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得监控者模式和用户模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
优选地,所述镜像格式包括:镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名;
所述镜像魔数用于初步检验镜像格式的正确性;
所述镜像版本号用于标识标识镜像的版本;当镜像发布新的版本时,版本号递增;且镜像版本号用于放回滚攻击;
所诉模式用于标识镜像是否被签名;
所述程序入口点用于标识成功引导镜像后执行的第一条指令的地址;
所述镜像长度用于记录镜像数据区的长度,不包含头部长度;
所述镜像数据用于存放镜像的数据区;
所述镜像公钥是生成镜像签名所使用的私钥的对应公钥,用于镜像签名验证;
所述镜像签名使用私钥对以上所有字段进行签名生成,用于验证镜像完整性。
优选地,所述步骤S2采用:
步骤S2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
步骤S2.2:读取OTP中的公钥位图和所有公钥哈希值;
步骤S2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发步骤S3;否则启动失败;当查找失败时,则启动失败。
优选地,所述步骤S3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败。
优选地,所述步骤S4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
根据本发明提供的一种基于RISC-V的安全启动系统,包括:
模块M1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
模块M2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发模块M3;验证失败,则启动失败;
模块M3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发模块M4;验证失败,则启动失败;
模块M4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御;
所述镜像格式包括镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名。
优选地,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值;
所述设备启动模式用于选配安全启动和防回滚模式;
所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;监控器模式拥有最高的权限级别;用户模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:在监控者模式和用户模式下访问总线地址时,需要通过物理内存保护机制的检查;通过配置物理内存保护机制让监控者模式和用户模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得监控者模式和用户模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
优选地,所述模块M2采用:
模块M2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
模块M2.2:读取OTP中的公钥位图和所有公钥哈希值;
模块M2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发模块M3;否则启动失败;当查找失败时,则启动失败;
所述模块M3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败;
所述模块M4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
与现有技术相比,本发明具有如下的有益效果:
1、本发明授权的公钥哈希值都存储在OTP中,确保无法伪造公钥;存储公钥的哈希值以压缩存储体积;
2、本发明用位图标识有效性以便在公钥失效时丢弃公钥;
3、本发明保证了镜像的权威性和完整性;其中版本号的完整性可进一步用于防回滚;
4、本发明BOOTBOM配合OTP布局和镜像布局,使用严密的安全启动逻辑完成了整套安全启动方案。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为OTP布局示意图。
图2为镜像布局示意图。
图3为安全启动流程图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1
根据本发明提供的一种基于RISC-V的安全启动方法,包括:
步骤S1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
步骤S2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发步骤S3;验证失败,则启动失败;
步骤S3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发步骤S4;验证失败,则启动失败;
步骤S4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御。
优选地,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值,存放公钥哈希值较存放完整公钥而言具有占用空间小的优点;
所述设备启动模式用于选配安全启动和防回滚模式。
优选地,所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;其中监控器模式简称为M模式;监管者模式简称为S模式;用户模式简称为U模式;M模式拥有最高的权限级别;U模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:物理内存保护机制简称为PMP;在S模式和U模式下访问总线地址时,需要通过PMP的检查;通过配置PMP让S模式和U模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得S模式和U模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
优选地,所述镜像格式包括:镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名;
所述镜像魔数用于初步检验镜像格式的正确性;
所述镜像版本号用于标识标识镜像的版本;当镜像发布新的版本时,版本号递增;且镜像版本号用于放回滚攻击;
所诉模式用于标识镜像是否被签名;
所述程序入口点用于标识成功引导镜像后执行的第一条指令的地址;
所述镜像长度用于记录镜像数据区的长度,不包含头部长度;
所述镜像数据用于存放镜像的数据区;
所述镜像公钥是生成镜像签名所使用的私钥的对应公钥,用于镜像签名验证;
所述镜像签名使用私钥对以上所有字段进行签名生成,用于验证镜像完整性。
优选地,所述步骤S2采用:
步骤S2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
所有的哈希算法都可以如sha-256等。初次计算公钥哈希值写入OTP和后续BOOTROM验证公钥时计算哈希值使用的哈希算法一致即可。
步骤S2.2:读取OTP中的公钥位图和所有公钥哈希值;
步骤S2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发步骤S3;否则启动失败;当查找失败时,则启动失败。
优选地,所述步骤S3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败。
优选地,所述步骤S4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
根据本发明提供的一种基于RISC-V的安全启动系统,包括:
模块M1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
模块M2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发模块M3;验证失败,则启动失败;
模块M3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发模块M4;验证失败,则启动失败;
模块M4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御;
所述镜像格式包括镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名。
优选地,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值,存放公钥哈希值较存放完整公钥而言具有占用空间小的优点;
所述设备启动模式用于选配安全启动和防回滚模式。
优选地,所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;其中监控器模式简称为M模式;监管者模式简称为S模式;用户模式简称为U模式;M模式拥有最高的权限级别;U模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:物理内存保护机制简称为PMP;在S模式和U模式下访问总线地址时,需要通过PMP的检查;通过配置PMP让S模式和U模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得S模式和U模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
优选地,所述镜像格式包括:镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名;
所述镜像魔数用于初步检验镜像格式的正确性;
所述镜像版本号用于标识标识镜像的版本;当镜像发布新的版本时,版本号递增;且镜像版本号用于放回滚攻击;
所诉模式用于标识镜像是否被签名;
所述程序入口点用于标识成功引导镜像后执行的第一条指令的地址;
所述镜像长度用于记录镜像数据区的长度,不包含头部长度;
所述镜像数据用于存放镜像的数据区;
所述镜像公钥是生成镜像签名所使用的私钥的对应公钥,用于镜像签名验证;
所述镜像签名使用私钥对以上所有字段进行签名生成,用于验证镜像完整性。
优选地,所述模块M2采用:
模块M2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
所有的哈希算法都可以如sha-256等。初次计算公钥哈希值写入OTP和后续BOOTROM验证公钥时计算哈希值使用的哈希算法一致即可。
模块M2.2:读取OTP中的公钥位图和所有公钥哈希值;
模块M2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发模块M3;否则启动失败;当查找失败时,则启动失败。
优选地,所述模块M3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败。
优选地,所述模块M4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
实施例2
实施例2是实施例1的优选例
本发明提供的一种基于RISC-V的安全启动方法,如图1至3所示,包括:
固件使用OTP中的公钥哈希值验证镜像公钥,然后使用镜像公钥对镜像签名进行验证。最后对比镜像版本号和设备中存储的最新版本号完成回滚防御。BOOTBOM配合OTP布局和镜像布局,使用严密的安全启动逻辑完成了整套安全启动方案。
具体地,OTP布局:OTP中包含被授权方的公钥哈希值以及一块位图区域用于标识公钥哈希值的有效性。另外使用模式字段选配安全启动和防回滚模式。
具体地,镜像布局:镜像中包含版本号,公钥,签名等数据。仅当OTP中存在对应公钥哈希值时才进行签名验证。
OTP是一次性可编程介质,用于存放安全启动的配置参数以及验证公钥的哈希值。
BOOTROM是存放安全启动检查固件,不可被修改。
独占可信存储:硬件划分的一块可重复擦写的独占存储介质或存储空间。可通RISC-V的物理内存保护机制正确的配置片内存储区域实现。用于存放可信软件的版本号,用于防重放攻击。
OTP布局:OTP区域包含公钥的位图、设备启动模式、公钥哈希值数组。
位图:标识公钥的有效性。当某个公钥失效时需要将对应的位图标记为无效。
设备启动模式:模式一:不开启安全启动;模式二:开启安全启动;模式三:开启安全启动和版本检查。
公钥哈希值数组:用于存放授权软件厂商公钥的哈希值。
镜像格式:安全启动方案要求镜像按照特定的格式组织,来辅助固件完成安全启动的校验。
镜像需要包含如下字段:
镜像魔数:合法镜像都拥有的一个约定值。
版本号:标识镜像的版本,字段长度不低于32bit。镜像发布新的版本时,版本号递增。另外用于放回滚攻击。
模式:标识镜像是否被签名。
程序入口点:成功引导镜像后执行的第一条指令的地址。
镜像长度:镜像数据区的长度,不包含头部长度。
镜像数据:镜像的数据区。
镜像公钥:生成镜像签名所使用的私钥的对应公钥。
镜像签名:使用私钥对以上所有字段进行签名生成。
安全启动流程/BOOTROM流程:
设备上电后,将由硬件产品中集成的BOOTROM对待加载的镜像进行验证。BOOTROM的内容不得被篡改。具体流程如下:
步骤1:读取镜像头部信息(即除去镜像数据区外的所有内容)。
步骤2:检查镜像魔数是否为约定值;检查镜像数据区长度加上镜像头部长度是否溢出;检查镜像的程序入口是否在预留给镜像数据区的加载地址范围之内,以及是否对齐于指令字长。若以上检查失败,则启动失败。
步骤3:读取OTP中的启动模式字段。
步骤4:如果启动模式为安全启动或者安全启动加防回滚,则检查镜像模式字段是否为已签名状态,如果镜像未签名则启动失败。
步骤5:将镜像的数据区加载至内存。
步骤6:如果启动模式为关闭安全启动,则跳过镜像验签步骤,直接跳转至程序入口点开始执行,启动成功。否则继续接下来的验签步骤。
步骤7:将镜像中的公钥作为输入,进行哈希操作。
步骤8:读取OTP中的公钥位图,根据位图再从OTP中读取有效的公钥哈希值。
步骤9:通过逐一对比的方式找到与步骤1匹配的公钥哈希值。如果对比失败则启动失败。
步骤10:如果步骤9对比成功则用镜像中的公钥对镜像中的签名进行验证。如果验证失败则启动失败。
步骤11:如果启动模式为安全启动,则跳过防回滚步骤,直接跳转至程序入口点开始执行,启动成功。否则需要额外对比镜像版本号和独立可信存储中的版本号。
步骤12:如果镜像版本号小于独立可信存储中的版本号,则启动失败。
步骤13:如果镜像版本号大于独立可信存储中的版本号,则将独立可信存储中的版本号更新为镜像版本号。
步骤14:跳转至程序入口点开始执行,启动成功。
为了实现对回滚攻击的防护,需要借助一个额外的独立可信存储区域。该区域的数据本身能够抵御回滚攻击。具体防回滚的策略如下:
出厂时,片上的独立可信存储中的初始版本号为0。此时,任意版本的镜像均可被启动。
镜像签名需要包括镜像中的版本号,以此来保证镜像版本号的完整性。镜像发布的版本号需要递增。
在启动流程中,固件验证镜像中的版本号完整性后,将其和独立可信存储中的版本号进行对比。
仅当镜像的版本号大于等于独立可信存储中的版本号时,才能通过防回滚的验证。
如果镜像的版本号大于独立可信存储中的版本号,则BOOTROM更新独立可信存储区域存放的版本号为当前镜像的版本号。
如果镜像的版本号小于独立可信存储中的版本号,则BOOTROM报错并退出启动流程。
为了让安全启动方案正确的工作,需要准确的分配OTP中各个字段的大小以及在恰当的时间点对这些字段进行一次性编程。不妨设初始状态下OTP所有的比特为1,所有的比特只能不可逆地被修改一次(从1翻转到0)。
启动模式字段:启动模式字段应占据2比特。比特0表示安全启动的开启与关闭,比特1表示防回滚的开启与关闭,比特值为1时表示关闭,为0时表示开启。只有在安全启动开启的情况下防回滚位才有意义。因此启动字段具体的比特组合为:0b11、0b01表示关闭安全启动;0b10表示开启安全启动;0b00表示安全启动加防回滚模式。通常在开发阶段启动模式为默认的关闭模式,出厂前更改为安全启动加防回滚模式。
公钥哈希值字段:公钥哈希值是一个定长数组。通常软件厂商选择好私钥,并确定会使用该私钥后,需要在出厂之前将对应公钥的哈希值写入OTP。如果写入的公钥哈希值的个数不足数组长度,则需要将空闲位置在公钥位图中对应的比特设置为无效,防止第三方恶意注入自己的公钥哈希值。
公钥位图字段:公钥位图所占的比特必须等于公钥哈希值数组长度。如果发生私钥泄露等情况,导致某个公钥不再可信,则需要在位图中将该公钥哈希值对应的比特设置为无效。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (6)
1.一种基于RISC-V的安全启动方法,其特征在于,包括:
步骤S1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
步骤S2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发步骤S3;验证失败,则启动失败;
步骤S3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发步骤S4;验证失败,则启动失败;
步骤S4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御;
所述步骤S2采用:
步骤S2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
步骤S2.2:读取OTP中的公钥位图和所有公钥哈希值;
步骤S2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发步骤S3;否则启动失败;当查找失败时,则启动失败;
所述步骤S3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败;
所述步骤S4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
2.根据权利要求1所述的基于RISC-V的安全启动方法,其特征在于,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值;
所述设备启动模式用于选配安全启动和防回滚模式。
3.根据权利要求1所述的基于RISC-V的安全启动方法,其特征在于,所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;监控器模式拥有最高的权限级别;用户模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:在监控者模式和用户模式下访问总线地址时,需要通过物理内存保护机制的检查;通过配置物理内存保护机制让监控者模式和用户模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得监控者模式和用户模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
4.根据权利要求1所述的基于RISC-V的安全启动方法,其特征在于,所述镜像格式包括:镜像魔数、模式、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名;
所述镜像魔数用于初步检验镜像格式的正确性;
所述镜像版本号用于标识标识镜像的版本;当镜像发布新的版本时,版本号递增;且镜像版本号用于放回滚攻击;
所述模式用于标识镜像是否被签名;
所述程序入口点用于标识成功引导镜像后执行的第一条指令的地址;
所述镜像长度用于记录镜像数据区的长度,不包含头部长度;
所述镜像数据用于存放镜像的数据区;
所述镜像公钥是生成镜像签名所使用的私钥的对应公钥,用于镜像签名验证;
所述镜像签名使用私钥对以上所有字段进行签名生成,用于验证镜像完整性。
5.一种基于RISC-V的安全启动系统,其特征在于,包括:
模块M1:基于RISC-V的物理内存保护机制和RISC-V的特权级别管理实现独立的可信存储区域,并将用于防回滚攻击的镜像锚定版本号存储在当前可信存储区域中;
模块M2:固件使用OTP中的公钥哈希值验证镜像格式中的镜像公钥,验证成功,则触发模块M3;验证失败,则启动失败;
模块M3:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,验证成功,则触发模块M4;验证失败,则启动失败;
模块M4:对比镜像格式中的镜像版本号和可信存储区域中的镜像锚定版本号完成回滚防御;
所述镜像格式包括镜像魔数、镜像版本号、程序入口点、镜像长度、镜像数据、镜像公钥以及镜像签名;
所述模块M2采用:
模块M2.1:利用哈希算法计算镜像格式中的镜像公钥哈希值;
模块M2.2:读取OTP中的公钥位图和所有公钥哈希值;
模块M2.3:从读取OTP中所有公钥哈希值中查找计算出的镜像格式中镜像公钥哈希值,当查找成功时,检查公钥位图中与当前公钥哈希值对应的标记位是否有效,当有效时,则触发模块M3;否则启动失败;当查找失败时,则启动失败;
所述模块M3采用:镜像格式中的镜像公钥对镜像格式中的镜像签名进行验证,当验证成功,则从独立可信存储读取版本号;当验证失败,则启动失败;
所述模块M4采用:将镜像格式中的镜像版本号和独立可信区域的版本号对比,当镜像版本号大于等于独立可信区域中的版本号时,则将当前镜像版本号写入独立可信存储,并检查程序入口地址是否在镜像数据区域范围内,且是否满足对齐限制,当程序入口地址在镜像数据区域范围内且满足对齐限制时,则启动成功;否则启动失败。
6.根据权利要求5所述的基于RISC-V的安全启动系统,其特征在于,所述OTP包括:公钥的位图、设备启动模式以及公钥哈希值数组;
所述公钥的位图用于标识公钥哈希值的有效性;
所述公钥哈希值数组用于存放授权软件厂商公钥的哈希值;
所述设备启动模式用于选配安全启动和防回滚模式;
所述RISC-V的特权级别管理采用:基于RISC-V指令集及架构定义执行模式,包括监控器模式、监管者模式和用户模式;监控器模式拥有最高的权限级别;用户模式拥有最低的权限级别;在启动阶段,安全启动程序独占地执行在监控器模式中;
所述RISC-V的物理内存保护机制采用:在监控者模式和用户模式下访问总线地址时,需要通过物理内存保护机制的检查;通过配置物理内存保护机制让监控者模式和用户模式无法访问独立可信存储区域的控制寄存器所对应的总线地址区域,使得监控者模式和用户模式下的程序无法访问独立可信存储区域,以保证可信独立存储区域的内容对于安全启动过程是可靠的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110795350.1A CN113486360B (zh) | 2021-07-14 | 2021-07-14 | 基于risc-v的安全启动方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110795350.1A CN113486360B (zh) | 2021-07-14 | 2021-07-14 | 基于risc-v的安全启动方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113486360A CN113486360A (zh) | 2021-10-08 |
CN113486360B true CN113486360B (zh) | 2022-11-11 |
Family
ID=77938676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110795350.1A Active CN113486360B (zh) | 2021-07-14 | 2021-07-14 | 基于risc-v的安全启动方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113486360B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023102757A1 (zh) * | 2021-12-08 | 2023-06-15 | 浙江大学 | 一种基于面向risc-v架构的启动验证方案 |
CN114329479B (zh) * | 2021-12-08 | 2024-05-28 | 浙江大学 | 一种面向risc-v架构的启动验证方法 |
CN115514498A (zh) * | 2022-09-27 | 2022-12-23 | 四川长虹电器股份有限公司 | 快速检测安卓电视系统镜像文件中签名信息的方法 |
CN117827229A (zh) * | 2023-03-24 | 2024-04-05 | 进迭时空(珠海)科技有限公司 | 一种防止设备固件版本回滚的方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104424441A (zh) * | 2013-08-21 | 2015-03-18 | 恩智浦有限公司 | 处理系统 |
CN104798040A (zh) * | 2012-11-07 | 2015-07-22 | 高通股份有限公司 | 用于在没有内部非易失性存储器的设备中提供防回滚保护的方法 |
CN108985049A (zh) * | 2018-06-06 | 2018-12-11 | 晶晨半导体(上海)股份有限公司 | 防回滚方法及系统 |
CN110795126A (zh) * | 2019-10-25 | 2020-02-14 | 苏州浪潮智能科技有限公司 | 一种固件安全升级系统 |
CN111597560A (zh) * | 2020-05-18 | 2020-08-28 | 国网电力科学研究院有限公司 | 一种安全可信模组启动方法及系统 |
CN111651778A (zh) * | 2020-05-26 | 2020-09-11 | 上海交通大学 | 基于risc-v指令架构的物理内存隔离方法 |
CN111967019A (zh) * | 2020-07-31 | 2020-11-20 | 北京豆荚科技有限公司 | 一种基于tee物联网安全启动实现方法 |
CN112784280A (zh) * | 2021-01-12 | 2021-05-11 | 苏州浪潮智能科技有限公司 | 一种SoC芯片安全设计方法及硬件平台 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140250290A1 (en) * | 2013-03-01 | 2014-09-04 | St-Ericsson Sa | Method for Software Anti-Rollback Recovery |
CN106406939A (zh) * | 2016-09-05 | 2017-02-15 | 惠州Tcl移动通信有限公司 | 一种基于emmc芯片的移动终端防回滚方法及系统 |
WO2018119904A1 (zh) * | 2016-12-29 | 2018-07-05 | 华为技术有限公司 | 一种实现安全操作系统切换的片上系统和方法 |
CN108347332A (zh) * | 2017-06-06 | 2018-07-31 | 清华大学 | 验证固件签名的方法及装置 |
-
2021
- 2021-07-14 CN CN202110795350.1A patent/CN113486360B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104798040A (zh) * | 2012-11-07 | 2015-07-22 | 高通股份有限公司 | 用于在没有内部非易失性存储器的设备中提供防回滚保护的方法 |
CN104424441A (zh) * | 2013-08-21 | 2015-03-18 | 恩智浦有限公司 | 处理系统 |
CN108985049A (zh) * | 2018-06-06 | 2018-12-11 | 晶晨半导体(上海)股份有限公司 | 防回滚方法及系统 |
CN110795126A (zh) * | 2019-10-25 | 2020-02-14 | 苏州浪潮智能科技有限公司 | 一种固件安全升级系统 |
CN111597560A (zh) * | 2020-05-18 | 2020-08-28 | 国网电力科学研究院有限公司 | 一种安全可信模组启动方法及系统 |
CN111651778A (zh) * | 2020-05-26 | 2020-09-11 | 上海交通大学 | 基于risc-v指令架构的物理内存隔离方法 |
CN111967019A (zh) * | 2020-07-31 | 2020-11-20 | 北京豆荚科技有限公司 | 一种基于tee物联网安全启动实现方法 |
CN112784280A (zh) * | 2021-01-12 | 2021-05-11 | 苏州浪潮智能科技有限公司 | 一种SoC芯片安全设计方法及硬件平台 |
Also Published As
Publication number | Publication date |
---|---|
CN113486360A (zh) | 2021-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113486360B (zh) | 基于risc-v的安全启动方法及系统 | |
CN108269605B (zh) | 安全器件状态设备和方法 | |
JP6373888B2 (ja) | 情報処理装置及び制御方法 | |
US7461268B2 (en) | E-fuses for storing security version data | |
EP2115655B1 (en) | Virtual secure on-chip one time programming | |
US20090193211A1 (en) | Software authentication for computer systems | |
TWI768544B (zh) | 電腦系統及其安全管理方法以及電腦軟體產品 | |
US11803366B2 (en) | Firmware updating system and method | |
US20050193217A1 (en) | Autonomous memory checker for runtime security assurance and method therefore | |
JP2014513348A (ja) | 統合拡張ファームウェアインタフェース準拠計算装置内のシステムセキュリティデータベースおよびファームウェア格納部を変更する要求を処理するシステムおよび方法 | |
US20210367781A1 (en) | Method and system for accelerating verification procedure for image file | |
JP6518798B2 (ja) | 安全な集積回路状態を管理する装置およびその方法 | |
CN113505363B (zh) | 通过软件方式实现存储空间防重放的方法和系统 | |
KR101988404B1 (ko) | 이중보안기능을 가지는 SoC 및 SoC의 이중보안방법 | |
US10223294B2 (en) | Fast secure boot from embedded flash memory | |
US11269986B2 (en) | Method for authenticating a program and corresponding integrated circuit | |
JP6622360B2 (ja) | 情報処理装置 | |
CN115828252A (zh) | 一种可更新信任根的移动终端安全启动方法 | |
US7916549B2 (en) | Memory self-test circuit, semiconductor device and IC card including the same, and memory self-test method | |
CN112015582B (zh) | 自修正存储器系统、提供错误修正至存储器内容的方法 | |
CN114065218B (zh) | 一种SoC系统芯片安全启动方法 | |
US20230129942A1 (en) | Method for locking a rewritable non-volatile memory and electronic device implementing said method | |
CN112817619B (zh) | 电脑系统及其安全管理方法以及电脑软件产品 | |
JP7097407B2 (ja) | ビットエラー修正の試行錯誤を優先順位付けるためのシステムおよび方法 | |
CN118312947A (zh) | 设备启动方法、装置、计算机设备及嵌入式设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |