技术领域
本发明涉及软件验证装置、软件验证方法以及软件验证程序。特别是涉及进行安全引导的软件验证装置、软件验证方法以及软件验证程序。
背景技术
近年来,即使在嵌入式控制设备中,也为了防止执行非法程序,安全引导的采用正在增多。安全引导是指,在设备的启动时通过数字签名这样的方法来确认软件无篡改之后执行。具体而言,安全引导防止执行根套件(rootkit)这样的非法的程序。以往的安全引导使用UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)和TPM(Trusted Platform Module,可信平台模块)来实现。
在非专利文献1中,一边进行程序的签名验证一边将其散列(hash)储存到TPM,最后由TPM对散列实施签名,向外部服务器查询,从而验证软件的完整性(integrity)。
另外,在专利文献1中公开了如下方法:在开发时通过附加签名来生成软件的散列列表,在引导时对它们进行验证。
现有技术文献
专利文献1:国际公开第2011/142095号
非专利文献1:Microsoft、“Windows10のブートプロセスのセキュリティ保護”(“Windows10的引导过程的安全保护”)https://docs.microsoft.com/ja-jp/windows/security/hardware-protecti on/secure-the-windows-10-boot-process
发明内容
在非专利文献1的技术中,关于各个软件进行签名验证,所以启动慢。另外,无法探测使软件主体及其签名整体地返回到旧的版本的降级攻击(downgrade attack)。而且,如果无法与外部服务器进行通信,则无法判定软件结构的完整性。
在专利文献1的技术中,无法探测使每个散列列表返回到旧的版本的降级攻击。
本发明的目的在于实现多个软件的完整性验证的高速化以及装置单体中的软件结构的完整性验证。
本发明所涉及的软件验证装置是启动作为启动对象的启动软件的软件验证装置,具备:
安全性运算部,该安全性运算部具备存储部,如果在所述存储部中存储有所述启动软件的散列值的期待值即散列期待值,则所述安全性运算部比较所述启动软件的散列值和所述散列期待值;以及
主运算部,在所述散列值和所述散列期待值一致时启动所述启动软件,如果不一致则使处理停止,
在所述主运算部中,如果在所述存储部中未存储有所述散列期待值则进行所述启动软件的签名验证,如果签名验证成功则将所述启动软件的散列值作为所述散列期待值而存储到所述存储部并且启动所述启动软件,如果签名验证不成功则使处理停止。
在本发明所涉及的软件验证装置中,安全性运算部将所启动的软件的散列值作为散列期待值而存储到存储部。然后,安全性运算部通过比较本次启动的启动软件的散列值和散列期待值,判定启动软件的合法性。因此,根据本发明所涉及的软件验证装置,能够减少签名验证的处理,使启动高速化。
附图说明
图1是实施方式1所涉及的软件验证装置的结构图。
图2是实施方式1所涉及的软件验证装置的引导的动作的流程图。
图3是实施方式1所涉及的软件验证装置的引导的动作的流程图。
图4是实施方式1所涉及的软件验证装置的软件更新的动作的流程图。
图5是实施方式1的变形例所涉及的软件验证装置的结构图。
图6是实施方式2所涉及的散列链(hash chain)模式的引导的动作的流程图。
图7是实施方式2所涉及的签名验证模式的引导的动作的流程图。
图8是实施方式3所涉及的软件验证装置的引导的动作的流程图。
图9是实施方式3所涉及的软件验证装置的引导的动作的流程图。
图10是实施方式3所涉及的软件验证装置的引导的动作的流程图。
图11是实施方式3所涉及的软件验证装置的软件更新的动作的流程图。
图12是实施方式4所涉及的软件验证装置的引导的动作的流程图。
图13是实施方式4所涉及的软件验证装置的软件更新的动作的流程图。
图14是实施方式5所涉及的软件验证装置的引导的动作的流程图。
图15是实施方式5所涉及的软件验证装置的引导的动作的流程图。
图16是实施方式5所涉及的软件验证装置的软件更新的动作的流程图。
(符号说明)
100:软件验证装置;102:处理器;103:存储设备;104:存储器;104:存储器;105:通信设备;106:输入设备;107:显示设备;108:引导ROM;109:主运算部;110:安全性运算部;111:存储部;112:电子电路。
具体实施方式
以下,使用附图来说明本发明的实施方式。此外,在各图中,对相同或者相当的部分附加同一符号。在实施方式的说明中,关于相同或者相当的部分,适当省略或者简化说明。
实施方式1.
***结构的说明***
使用图1,说明本实施方式所涉及的软件验证装置100的结构。
软件验证装置100是计算机。软件验证装置100具备处理器102,并且具备存储设备103、存储器104、通信设备105、输入设备106、显示设备107以及引导ROM(Read OnlyMemory,只读存储器)108这样的其它硬件。处理器102经由信号线而与其它硬件连接,控制这些其它硬件。
处理器102是在引导时执行对作为启动对象的启动软件的签名进行验证这样的处理的CPU(Central Processing Unit,中央处理单元)。处理器102具备主运算部109和安全性运算部110作为功能要素。主运算部109进行引导处理或者应用处理这样的处理。安全性运算部110安全地存储隐匿性高的秘钥这样的信息、或者进行AES(Advanced EncryptionStandard,高级加密标准)这样的加密处理。此外,在本实施方式中,签名验证由于不使用隐匿性高的信息,所以由主运算部109进行。另外,散列值的比较、或者MAC的生成及验证由于使用隐匿性高的信息,所以由安全性运算部110进行。
另外,处理器102具备非易失存储器。在图1中,在同一处理器内搭载有主运算部109和安全性运算部110,但只要能够安全地进行两者的数据传送,则也可以是独立的结构。
存储设备103是储存成为验证对象的软件及其签名的非易失性的存储元件。存储器104是处理器102将运算结果临时地展开的易失性的存储元件。
引导ROM108储存有在电源接通时最初执行的引导程序。引导ROM108只能读出而无法写入。
更详细地说明各硬件。
在软件验证装置100中,作为功能要素而具备主运算部109和安全性运算部110。安全性运算部110具备存储部111。主运算部109和安全性运算部110的功能通过软件来实现。存储部111设置于处理器102所具备的非易失存储器。
处理器102是执行软件验证程序的装置。软件验证程序是实现主运算部109和安全性运算部110的功能的程序。
处理器102是进行运算处理的IC(Integrated Circuit,集成电路)。关于处理器102的具体例,除了CPU以外,也可以是DSP(Digital Signal Processor,数字信号处理器)、GPU(Graphics Processing Unit,图形处理单元)。
存储器104是临时地存储数据的存储装置。存储器104的具体例是SRAM(StaticRandom Access Memory,静态随机存取存储器)或者DRAM(Dynamic Random AccessMemory,动态随机存取存储器)。
存储设备103是保管数据的存储装置。存储设备103的具体例是HDD。另外,存储设备103也可以是SD(日本注册商标)存储卡、CF、NAND闪存、软盘、光盘、紧致盘(CompactDisc)、蓝光(日本注册商标)盘、DVD这样的便携的存储介质。此外,HDD是Hard Disk Drive(硬盘驱动器)的简称。SD(日本注册商标)是Secure Digital(安全数字)的简称。CF是Compact Flash(紧致闪存,日本注册商标)的简称。DVD是Digital Versatile Disk(数字多功能盘)的简称。
输入设备106是鼠标、键盘或者触摸面板这样的输入装置。此外,输入设备106也可以是与LAN(Local Area Network,局域网)连接的端口。
显示设备107是显示器这样的输出设备。显示设备107具体而言与USB端子或者HDMI(日本注册商标)(High Definition Multimedia Interface,高清晰度多媒体接口)端子这样的接口连接。显示器具体而言是LCD(Liquid Crystal Display,液晶显示器)。
通信设备105具有接收器和发射器。通信设备105与LAN、因特网或者电话线路这样的通信网连接。通信设备105具体而言是通信芯片或者NIC(Network Interface Card,网络接口卡)。
此外,在本实施方式中,通信设备105、输入设备106或者显示设备107并非是必须的。
软件验证程序被处理器102读入,并由处理器102执行。在存储器104中,不仅存储有软件验证程序,而且还存储有OS(Operating System,操作系统)。处理器102一边执行OS,一边执行软件验证程序。软件验证程序以及OS也可以被存储到存储设备103。存储于存储设备103的软件验证程序以及OS被载入到存储器104,并由处理器102执行。此外,也可以将软件验证程序的一部分或者全部编入到OS。
软件验证装置100也可以具备代替处理器102的多个处理器。这些多个处理器分担软件验证程序的执行。各个处理器与处理器102同样地,是执行软件验证程序的装置。
由软件验证程序利用、处理或者输出的数据、信息、信号值以及变量值被存储到存储器104、存储设备103、或者处理器102内的非易失存储器、寄存器或高速缓存存储器。
也可以将主运算部109和安全性运算部110的各部的“部”替换为“处理”、“过程”或者“工序”。另外,也可以将主运算处理和安全性运算处理的“处理”替换为“程序”、“程序产品”或者“记录有程序的计算机可读取的存储介质”。
软件验证程序使计算机执行将上述各部的“部”替换为“处理”、“过程”或者“工序”的各处理、各过程或者各工序。另外,软件验证方法是通过由软件验证装置100执行软件验证程序而实施的方法。
也可以将软件验证程序储存到计算机可读取的记录介质来提供。另外,也可以将软件验证程序作为程序产品来提供。
***动作的说明***
接下来,使用图2至图4,说明本实施方式所涉及的软件验证装置100的动作。软件验证装置100启动作为启动对象的启动软件。特别是,软件验证装置100依次启动多个启动软件。在以下说明的实施方式1至5中,软件验证装置100按照引导程序、引导加载器(bootloader)、OS以及应用的顺序进行启动。引导加载器、OS以及应用是多个启动软件的例子。
首先,使用图2以及图3,说明本实施方式所涉及的软件验证装置100的引导的动作。
在步骤S201中,如果电源被接通,则主运算部109执行存储于引导ROM108的引导程序。
在步骤S202中,引导程序生成引导加载器的软件的散列值,并输出到安全性运算部110。
在步骤S203中,安全性运算部110比较从引导程序输出的散列值和存储于存储部111的引导加载器的散列期待值。如果两者不一致,则主运算部109使处理停止。如果在存储部111中未设定散列期待值,则进入到步骤S204。另外,如果两者一致,则在步骤S206中主运算部109启动启动软件。即,主运算部109启动引导加载器。
这样,如果在存储部111中存储有启动软件的散列值的期待值即散列期待值,则安全性运算部110比较启动软件的散列值和散列期待值。
另外,如果在存储部111中未存储散列期待值,则主运算部109进行启动软件的签名验证。然后,主运算部109如果签名验证成功,则将启动软件的散列值作为散列期待值而存储到存储部111,并且启动启动软件。具体而言如以下那样。
在步骤S204中,主运算部109进行引导加载器的软件的签名验证。如果签名验证成功,则在步骤S205中,主运算部109将引导加载器的软件的散列值作为散列期待值而存储到存储部111。具体而言,主运算部109将签名验证的成功,输出到安全性运算部110。安全性运算部110在从主运算部109取得签名验证的成功时,将引导加载器的软件的散列值作为散列期待值而存储到存储部111。以下,有时将主运算部109向安全性运算部110内的存储部111存储散列期待值这一情形称为向安全性运算部110内存储散列期待值。
如果签名验证不成功,则主运算部109使处理停止。
在步骤S206中,主运算部109启动引导加载器。即,主运算部109在散列值和散列期待值一致时启动启动软件。另外,主运算部109在签名验证成功时启动启动软件。
在步骤S207中,引导加载器生成OS的软件的散列值,并输出到安全性运算部110。
在步骤S208中,安全性运算部110比较从引导加载器输出的散列值和存储于安全性运算部110内即存储部111的OS的散列期待值。如果两者不一致,则主运算部109使处理停止。如果在存储部111中未设定散列值,则进入到步骤S209。如果两者一致,则在步骤S211中主运算部109启动OS。
在步骤S209中,主运算部109进行OS的软件的签名验证。如果签名验证成功,则在步骤S210中,主运算部109将OS的软件的散列值作为散列期待值而存储到安全性运算部110内即存储部111。如果签名验证不成功,则主运算部109使处理停止。
在步骤S211中,主运算部109启动OS。
在步骤S212中,OS生成应用的软件的散列值,并输出到安全性运算部110。
在步骤S213中,安全性运算部110比较从OS输出的散列值和存储于安全性运算部110内即存储部111的应用的散列期待值。如果两者不一致,则主运算部109使处理停止。如果在存储部111中未设定散列值,则进入到步骤S214。如果两者一致,则在步骤S216中主运算部109启动应用。
在步骤S214中,主运算部109进行应用的软件的签名验证。如果签名验证成功,则在步骤S215中,主运算部109将应用的软件的散列值作为散列期待值而存储到安全性运算部110内即存储部111。如果签名验证不成功,则主运算部109使处理停止。
在步骤S216中,主运算部109启动应用。
使用图4,说明本实施方式所涉及的软件验证装置100的软件更新的动作。
在步骤S301中,下载更新对象的更新软件及其签名。
在步骤S302中,主运算部109验证更新软件的签名和版本。版本验证具体而言使用基于列表进行对照这样的方法。如果验证失败,则主运算部109视为异常结束而中止处理。如果验证成功,则进入到步骤S303。
在步骤S303中,主运算部109将更新软件和签名写入到存储设备103或者存储器104。
在步骤S304中,主运算部109生成更新软件的散列值。主运算部109将更新软件的散列值作为更新软件的散列期待值,重写保存到安全性运算部110内的存储部111。
***其它结构***
<变形例1>
在本实施方式中,主运算部109和安全性运算部110的功能用软件来实现。作为变形例,主运算部109和安全性运算部110的功能也可以用硬件来实现。
图5是示出本实施方式的变形例所涉及的软件验证装置100的结构的图。
软件验证装置100代替处理器102而具备电子电路112。
电子电路112是实现主运算部109和安全性运算部110的功能的专用的电子电路。
电子电路112具体而言是单一电路、复合电路、被编程的处理器、被并行编程的处理器、逻辑IC、GA、ASIC或者FPGA。GA是Gate Array(门阵列)的简称。ASIC是ApplicationSpecific Integrated Circuit(专用集成电路)的简称。FPGA是Field-Programmable GateArray(现场可编程门阵列)的简称。
主运算部109和安全性运算部110的功能既可以用1个电子电路来实现,也可以分散到多个电子电路来实现。
作为其它的变形例,也可以将主运算部109和安全性运算部110的一部分功能用电子电路来实现,并将剩余的功能用软件来实现。另外,主运算部109和安全性运算部110的至少一部分功能也可以用固件来实现。
处理器和电子电路各自也被称为处理电路系统。即,在软件验证装置100中,主运算部109和安全性运算部110的一部分功能的功能通过处理电路系统来实现。
***本实施方式的效果的说明***
根据本实施方式所涉及的软件验证装置100,能够使多个软件的完整性验证高速化。另外,根据本实施方式所涉及的软件验证装置100,能够实现装置单体中的软件的完整性验证。
根据本实施方式所涉及的软件验证装置100,将启动软件的散列值与上次启动时的软件的散列值进行比较。因此,无需每次启动时进行产生负荷的签名验证,而能够使启动高速化。而且,通过保留上次启动时的启动软件的散列值,从而即使在引导后被降级,在下次的引导时也能够验证。另外,根据本实施方式所涉及的软件验证装置100,启动软件的验证在设备内部是封闭的。因此,能够实现装置单体中的完整性验证。
实施方式2.
在本实施方式中,主要说明与实施方式1不同的点。此外,有时对与实施方式1同样的结构附加同一符号,并省略其说明。
***结构的说明***
在实施方式1中,软件验证装置100将多个启动软件的各启动软件的散列值存储到安全性运算部110的存储部111,在引导时逐个验证。在本实施方式中,示出集中地验证多个启动软件的完整性的方式。软件验证装置100的结构与图1相同。另外,本实施方式中的软件更新的动作与实施方式1相同。
本实施方式所涉及的软件验证装置100依次启动多个启动软件。本实施方式所涉及的软件验证装置100以从多个启动软件生成散列链的散列链模式和对于多个启动软件分别进行签名验证的签名验证模式中的任意启动模式进行启动。
***动作的说明***
使用图6以及图7,说明本实施方式所涉及的软件验证装置100的引导的动作。图6是散列链模式的情况的引导的动作。
在本实施方式中,软件验证装置100依次启动N个(N是2以上的整数)启动软件。软件验证装置100以从N个启动软件生成散列链的散列链模式和对于N个启动软件分别进行签名验证的签名验证模式中的任意启动模式进行启动。
在以散列链模式启动时,安全性运算部110取得N个启动软件中的第1个启动的最先启动软件的散列值,并且生成随机的数据列Nonce。安全性运算部110将最先启动软件的散列值和Nonce的散列值生成为第1散列链。
如果生成了第1散列链,则主运算部109启动最先启动软件。
以下,使用具体例进行说明。在此,作为N个启动软件,启动3个启动软件即引导加载器、OS以及应用。
在步骤S401中,如果电源被接通,则安全性运算部110启动看门狗(watchdog)。看门狗监视系统是否正常地动作。
在步骤S402中,安全性运算部110生成Nonce。Nonce是无再现性的随机的数据列。
在步骤S403中,主运算部109执行储存于引导ROM108的引导程序。主运算部109通过引导程序来确认启动模式。如果启动模式是散列链模式,则进入到步骤S404。如果启动模式是签名验证模式,则进入到步骤S415。
在步骤S404中,主运算部109生成引导加载器的软件的散列值,并输出到安全性运算部110。引导加载器是第1个启动的最先启动软件的例子。
在步骤S405中,安全性运算部110将从主运算部109取得的散列值和Nonce的散列值生成为第1散列链。安全性运算部110将第1散列链输出到主运算部109。
在步骤S406中,当生成了第1散列链时,主运算部109启动作为最先启动软件的引导加载器。
主运算部109取得N个启动软件中的第k个(k是2以上且N以下的整数)启动的后续启动软件的散列值。安全性运算部110将第(k-1)散列链和后续启动软件的散列值的散列值生成为第k散列链,并且启动后续启动软件。
在此,作为第k个,将第2个启动的后续启动软件设为OS。
在步骤S407中,引导加载器生成OS的软件的散列值。然后,引导加载器将第1散列链和OS的软件的散列值的散列值生成为第2散列链。
在步骤S408中,主运算部109启动作为后续启动软件的OS。
接下来,作为第k个,将第3个启动的后续启动软件设为应用。
在步骤S409中,OS生成应用的软件的散列值。然后,OS将第2散列链和应用的软件的散列值的散列值生成为第3散列链。
在步骤S410中,主运算部109启动作为后续启动软件的应用。
如果后续启动软件是N个启动软件中的最后启动的启动软件,则主运算部109将第k散列链输出到安全性运算部110。
如果N个启动软件各自的散列值存储于安全性运算部110内即存储部111,则安全性运算部110将第k散列链的期待值计算为散列链期待值。安全性运算部110使用N个启动软件各自的散列值和Nonce,计算散列链期待值。然后,安全性运算部110将第k散列链与散列链期待值进行比较。
在主运算部109中,如果第k散列链和散列链期待值一致则正常结束,如果不一致则使处理停止。另外,如果N个启动软件各自的散列值未存储于存储部111,则主运算部109将启动模式设定为签名验证模式而重新启动。
具体而言,如以下那样。
在步骤S411中,主运算部109向安全性运算部110输出第3散列链。
在步骤S412中,安全性运算部110内的看门狗验证是否在发生预定的事件之前取得了散列值。预定的事件例如既可以是从启动起的经过时间,也可以是通信设备的使用这样的事件。如果取得被验证,则进入到步骤S413。如果取得未被验证,则主运算部109使处理停止。
在步骤S413中,安全性运算部110根据在内部生成的Nonce和存储于存储部111的散列值,将第3散列链的期待值计算为散列链期待值。安全性运算部110比较散列链期待值和取得的第3散列链。如果两者一致,则正常结束。如果不一致,则主运算部109使处理停止。如果在安全性运算部110内的存储部111中未设定散列值,则在步骤S414中,主运算部109将启动模式设定为签名验证模式而重新启动。
图7是签名验证模式的情况的引导的动作。
主运算部109在以签名验证模式启动时,对于N个启动软件的各启动软件进行签名验证。然后,如果签名验证成功,则主运算部109将各启动软件的散列值存储到安全性运算部110内的存储部111,并且启动各启动软件。主运算部109在签名验证失败时使处理停止。另外,主运算部109在N个启动软件的所有签名验证成功时,将启动模式设定为散列链模式。
以下,使用具体例进行说明。
在步骤S415中,主运算部109进行引导加载器的软件的签名验证。
如果签名验证成功,则在步骤S416中,主运算部109将引导加载器的软件的散列值存储到安全性运算部110内的存储部111。
在步骤S417中,主运算部109启动引导加载器。如果签名验证失败,则主运算部109使处理停止。
在步骤S418中,引导加载器进行OS的软件的签名验证。
如果签名验证成功,则在步骤S419中,引导加载器将OS的软件的散列值存储到安全性运算部110内的存储部111。
在步骤S420中,主运算部109启动OS。如果签名验证失败,则主运算部109使处理停止。
在步骤S421中,OS进行应用的软件的签名验证。如果签名验证成功,则进入到步骤S422。如果签名验证失败,则主运算部109使处理停止。
在步骤S422中,主运算部109将应用的软件的散列值存储到安全性运算部110内的存储部111。
在步骤S423中,主运算部109启动应用。
在步骤S424中,OS将启动模式设定为散列链。
在步骤S425中,安全性运算部110内的看门狗验证是否在发生预定的事件之前取得了散列值。预定的事件例如既可以是从启动起的经过时间,也可以是通信设备的使用这样的事件。如果未取得散列值,则使处理停止。
***本实施方式的效果的说明***
根据本实施方式所涉及的软件验证装置100,能够实现与实施方式1同样的启动高速化、装置单体中的完整性验证以及降级的探测。另外,根据本实施方式所涉及的软件验证装置100,软件的完整性验证是最后进行的,所以能够削减在通常访问中需要开销的向安全性运算部的访问次数。
实施方式3.
在本实施方式中,主要说明与实施方式1以及2不同的点。此外,有时对与实施方式1以及2同样的结构附加同一符号,并省略其说明。
***结构的说明***
在实施方式1以及实施方式2中,将上次启动时的软件的散列值存储到安全性运算部110内的作为非易失存储器的存储部111。在本实施方式中,示出能够在确保安全性的同时将上次启动时的软件的散列值储存到外部的存储设备103的方式。硬件结构与图1相同。
***动作的说明***
接下来,使用图8至图11,说明本实施方式所涉及的软件验证装置100的动作。
图8至图10示出本实施方式中的引导的动作。以下,说明本实施方式中的引导的动作的概要。
主运算部109判定有无启动软件的MAC(Media Access Control,媒体访问控制),如果存在MAC,则输出启动软件的散列值和启动软件的MAC。
安全性运算部110根据存储于存储部111的构成验证秘钥和启动软件的散列值,计算MAC的期待值即MAC期待值,并比较从主运算部109输出的MAC和MAC期待值。构成验证秘钥是指用于计算MAC的秘密密钥。
主运算部109在启动软件的MAC和MAC期待值一致时,启动启动软件。如果启动软件的MAC和MAC期待值不一致,则主运算部109使处理停止。
具体而言,如以下那样。
在步骤S501中,如果电源被接通,则主运算部109执行储存于引导ROM108的引导程序。
在步骤S502中,引导程序判定有无引导加载器的MAC。如果有MAC,则进入到步骤S503。如果没有MAC,则进入到步骤S505。
在步骤S503中,引导程序将引导加载器的软件的散列值和MAC输出到安全性运算部110。
在步骤S504中,安全性运算部110根据构成验证秘钥和散列值,计算MAC的期待值即MAC期待值。安全性运算部110比较MAC期待值和从引导程序输出的MAC。如果不一致,则使处理停止。如果一致,则进入到步骤S508。
接下来,如果在启动软件中不存在MAC,则主运算部109进行启动软件的签名验证。如果签名验证成功,则主运算部109将启动软件的散列值输出到安全性运算部110。如果签名验证不成功,则主运算部109使处理停止。
安全性运算部110在从主运算部109取得启动软件的散列值时,判定有无构成验证秘钥。如果存在构成验证秘钥,则使处理停止。如果不存在构成验证秘钥,则安全性运算部110将启动软件的散列值临时存储到存储部111。
具体而言,如以下那样。
在步骤S505中,引导程序验证引导加载器的软件的签名。如果验证失败,则使处理停止。如果验证成功,则在步骤S506中,引导程序将引导加载器的软件的散列值输出到安全性运算部110。安全性运算部110判定有无构成验证秘钥,如果有构成验证秘钥则使处理停止。如果没有构成验证秘钥,则在步骤S507中,安全性运算部110将散列值临时存储到存储部111。
然后,在步骤S508中,主运算部109启动引导加载器。
接下来,OS也与引导加载器同样地被启动。
在步骤S509中,引导加载器判定有无OS的MAC。如果有MAC,则进入到步骤S510。如果没有MAC,则进入到步骤S512。
在步骤S510中,引导加载器将OS的软件的散列值和MAC输出到安全性运算部110。
在步骤S511中,在安全性运算部110内根据构成验证秘钥和散列来计算MAC,并与从引导加载器输出的MAC进行比较。如果不一致,则使处理停止。如果一致,则在步骤S515中主运算部109启动OS。
在步骤S509中如果在OS中没有MAC,则在步骤S512中,引导加载器验证OS的软件的签名。如果签名验证失败,则使处理停止。如果签名验证成功,则进入到步骤S513。
在步骤S513中,引导加载器将OS的软件的散列值输出到安全性运算部110。安全性运算部110判定有无构成验证秘钥,如果有构成验证秘钥,则使处理停止。如果没有构成验证秘钥,则在步骤S514中,安全性运算部110将OS的散列值临时存储到存储部111。
然后,在步骤S515中,主运算部109启动OS。
接下来,应用也与引导加载器以及OS同样地被启动。
在步骤S516中,OS判定有无应用的MAC。如果有MAC,则进入到步骤S517。如果没有MAC,则进入到步骤S519。
在步骤S517中,OS将应用的软件的散列值和MAC输出到安全性运算部110。
在步骤S518中,在安全性运算部110内根据构成验证秘钥和散列值来计算MAC,并与从OS输出的MAC进行比较。如果不一致,则使处理停止。如果一致,则在步骤S522中由主运算部109启动应用。
在步骤S516中如果在应用中没有MAC,则在步骤S519中验证应用的软件的签名。如果签名验证失败,则使处理停止。如果签名验证成功,则在步骤S520中,OS将应用的软件的散列值输出到安全性运算部110。安全性运算部110判定有无构成验证秘钥,如果有构成验证秘钥则使处理停止。如果没有构成验证秘钥,则在步骤S521中,安全性运算部110将应用的散列值临时存储到存储部111。
然后,在步骤S522中,由主运算部109启动应用。
接下来,安全性运算部110在所有启动软件的启动完成时,生成构成验证秘钥。生成构成验证秘钥是指,生成随机数并将该随机数作为构成验证秘钥。然后,安全性运算部110根据构成验证秘钥和临时保存于存储部111的散列值,计算多个启动软件的各启动软件的MAC。
主运算部109将多个启动软件的各启动软件的MAC存储到非易失性的存储设备103。
具体而言,如以下那样。
在步骤S523中,主运算部109在启动了应启动的所有启动软件时,将启动结束传递给安全性运算部110。
在步骤S524中,安全性运算部110判定有无临时存储于存储部111的散列值,如果没有临时存储于存储部111的散列值则正常结束。如果有临时存储于存储部111的散列值,则在步骤S525中安全性运算部110生成构成验证秘钥。
在步骤S526中,安全性运算部110根据构成验证秘钥和临时存储于存储部111的各启动软件的散列值,计算各启动软件的MAC,并输出到主运算部109。
在步骤S527中,主运算部109将从安全性运算部110取得的各启动软件的MAC存储到存储设备103。
图11示出本实施方式中的软件更新的动作。以下,说明本实施方式中的软件更新的概要。
主运算部109取得更新软件和更新软件的签名,进行更新软件的签名验证和版本检查。主运算部109在更新软件的签名验证和版本检查成功时,计算更新前的启动软件的散列值,并将更新前的启动软件的散列值和存储于存储设备103的更新前的启动软件的MAC输出到安全性运算部110。
安全性运算部110根据从主运算部109输出的散列值和存储于存储部111的更新验证秘钥,计算更新前的启动软件的MAC。安全性运算部110比较计算出的MAC和从主运算部109输出的MAC。
如果由安全性运算部110计算出的MAC与从主运算部109输出的MAC全部一致,则主运算部109写入更新软件和签名,计算更新软件的散列值。主运算部109将更新软件的散列值输出到安全性运算部110。
安全性运算部110重新生成验证构成秘钥,使用重新生成的验证构成秘钥和更新软件的散列值,计算更新软件的MAC。重新生成验证构成秘钥是指,生成随机数并将该随机数作为构成验证秘钥。
主运算部109将更新软件的MAC存储到存储设备103。
具体而言,如以下那样。
在步骤S601中,下载更新对象的更新软件及其签名。
在步骤S602中,主运算部109验证更新软件的签名和版本。版本验证具体而言使用基于列表进行对照这样的方法。如果验证失败,则主运算部109视为异常结束而中止处理。如果验证成功,则进入到步骤S603。
在步骤S603中,主运算部109计算更新前的各启动软件的散列值,将各启动软件的散列值和各启动软件的MAC输出到安全性运算部110。更新前的各启动软件的MAC被存储到存储设备103。
在步骤S604中,安全性运算部110根据构成验证秘钥和散列值来计算MAC。安全性运算部110比较计算出的MAC和从主运算部109输出的MAC,并将比较结果回送给主运算部109。只要有1个结果是不一致,主运算部109就会结束处理。如果全部一致,则在步骤S605中,主运算部109将更新软件和签名写入到存储设备103或者存储器104。
在步骤S606中,主运算部109将写入后的各更新软件的散列值输出到安全性运算部110。
在步骤S607中,安全性运算部110重新生成构成验证秘钥。
在步骤S608中,安全性运算部110根据重新生成的构成验证秘钥和从主运算部109输出的散列值来计算各更新软件的MAC,并输出到主运算部109。
在步骤S609中,主运算部109将从安全性运算部110取得的各更新软件的MAC存储到存储设备103。
***本实施方式的效果的说明***
根据本实施方式所涉及的软件验证装置100,能够实现与实施方式1同样的启动高速化、装置单体中的完整性验证、降级的探测。另外,根据本实施方式所涉及的软件验证装置100,即使将期待值存储到不安全的区域即存储设备,也能够探测篡改或删除、以及降级这样的攻击。另外,能够将MAC取出到存储设备,所以在安全性运算部的储存区域有限制的情况下也是有效的。
根据本实施方式所涉及的软件验证装置100,即使万一MAC被非法地篡改或者删除,通过利用构成验证秘钥进行MAC验证或者判定有无构成验证秘钥,也能够验证利用MAC的非法的篡改或者删除进行的非法程序的启动以及降级。
实施方式4.
在本实施方式中,主要说明与实施方式1至3不同的点。此外,有时对与实施方式1至3同样的结构附加同一符号,并省略其说明。
***结构的说明***
在实施方式1至3中,通过公开密钥运算的削减、即签名验证的削减,得到处理的高速化这样的效果。在本实施方式中,示出在将公开密钥运算能够高速地运算的处理器中防止降级的方式。硬件结构与图1相同。
***动作的说明***
接下来,使用图12至图13,说明本实施方式所涉及的软件验证装置100的动作。
图12示出本实施方式中的引导的动作。以下,说明本实施方式中的引导的动作的概要。
安全性运算部110进行多个启动软件中的启动对象的启动软件的签名验证,如果签名验证成功,则计算启动软件的散列值,并临时存储到存储部111。
如果签名验证不成功,则主运算部109使处理停止。另一方面,如果签名验证成功,则主运算部109启动启动软件。
主运算部109在启动了多个启动软件的最后的启动软件时,将临时存储的所有散列值进行相加,输出相加结果。
安全性运算部110判定在存储部111中是否存储有相加结果的期待值即相加结果期待值,如果没有相加结果期待值,则将相加结果作为相加结果期待值而存储到存储部111。另一方面,如果存在相加结果期待值,则安全性运算部110比较从主运算部109输出的相加结果和相加结果期待值。
在主运算部109中,如果相加结果和相加结果期待值不一致,则使处理停止。如果相加结果和相加结果期待值一致,则正常结束。
具体而言,如以下那样。
在步骤S701中,如果电源被接通,则主运算部109执行储存于引导ROM的引导程序。
在步骤S702中,引导程序验证引导加载器的软件的签名。如果签名验证成功,则在步骤S703中,引导程序生成引导加载器的软件的散列值。然后,在步骤S704中,主运算部109启动引导加载器。如果签名验证不成功,则主运算部109使处理停止。
在步骤S705中,引导加载器验证OS的软件的签名。如果签名验证成功,则在步骤S706中,引导加载器生成OS的软件的散列值。然后,在步骤S707中,主运算部109启动OS。如果签名验证不成功,则主运算部109使处理停止。
在步骤S708中,OS验证应用的软件的签名。如果签名验证成功,则在步骤S709中,OS生成应用的软件的散列值。然后,在步骤S710中,主运算部109启动应用。如果签名验证不成功,则主运算部109使处理停止。
在此,应用是多个启动程序中的最后启动的程序。
在步骤S711中,应用将此前生成的散列值进行相加,并将相加结果输出到安全性运算部110。在加法运算中使用异或。在步骤S712中,安全性运算部110判定是否在存储部111中存储有相加结果的期待值即相加结果期待值。如果在存储部111中没有相加结果期待值,则在步骤S713中,将从应用输出的相加结果作为相加结果期待值而存储到存储部111并结束。在步骤S714中,如果在存储部111中有相加结果期待值,则安全性运算部110比较相加结果期待值和从主运算部109输出的相加结果。如果两者一致,则正常结束。如果两者不一致,则使处理停止。
图13示出本实施方式中的软件更新的动作。以下,说明本实施方式中的软件更新的概要。
安全性运算部110取得多个更新软件的各更新软件以及多个更新软件各自的签名,计算将更新前的各启动软件的散列值进行相加得到的相加结果。然后,安全性运算部110比较计算出的相加结果和相加结果期待值。
如果相加结果和相加结果期待值不一致,则主运算部109视为异常结束而使处理停止。另一方面,如果相加结果和相加结果期待值一致,则主运算部109将多个更新软件的各更新软件和多个更新软件各自的签名写入到存储设备103或者存储器104。
安全性运算部110计算更新后的各更新软件的散列值。安全性运算部110将相加各更新软件的散列值而得到的相加结果作为相加结果期待值存储到存储部111,并且将多个启动软件各自的散列值存储到存储部111。
具体而言,如以下那样。
在步骤S801中,下载更新对象的更新软件和签名。在步骤S802中,主运算部109验证更新软件的签名和版本。版本验证可以是利用列表进行对照这样的方法。如果验证失败,则主运算部109视为异常结束而使处理停止。如果验证成功,则在步骤S803中,主运算部109计算更新前的各启动软件的散列值。在步骤S804中,主运算部109将计算出的散列进行相加并输出到安全性运算部110。在加法运算中使用异或。在步骤S805中,安全性运算部110比较所输出的相加结果和存储于存储部111的相加结果期待值,并将结果回送给主运算部109。
如果结果不一致,则主运算部109使处理异常结束。如果结果一致,则在步骤S806中,主运算部109将更新软件和签名写入到存储设备103或者存储器104。在步骤S807中,主运算部109计算更新后的更新软件的散列值。在步骤S808中,将在步骤S803中计算出的更新前的启动软件的散列值、在步骤S804中计算出的相加结果、和在步骤S807中计算出的更新后的更新软件的散列值进行相加。在步骤S809中,主运算部109将在步骤S808中计算出的相加结果输出到安全性运算部110。在步骤S810中,安全性运算部110将在步骤S808中计算出的相加结果存储到存储部111。
在本实施方式中,示出在加法运算中使用异或的例子。但是,也可以使用例如算术加法运算这样的任意的算法。另外,更新后的更新软件中的第1相加结果的计算方法也需要与使用的算法一致。
***本实施方式的效果的说明***
根据本实施方式所涉及的软件验证装置100,通过保留上次执行时的各软件的相加结果,从而即使在引导后被降级,在下次的引导时也能够验证。另外,根据本实施方式所涉及的软件验证装置100,相比于将各软件的散列值存储到安全性运算部的方式,通过减少向安全性运算部的访问次数,能够期待处理的高速化。而且,根据本实施方式所涉及的软件验证装置100,验证在设备内部是封闭的,所以能够实现装置单体中的完整性验证。而且,通过在散列值的加法运算中使用异或,能够使软件更新时的更新后的相加结果的计算变得容易。
实施方式5.
在本实施方式中,主要说明与实施方式1至4不同的点。此外,有时对与实施方式1至4同样的结构附加同一符号,并省略其说明。
***结构的说明***
在实施方式4中,示出在将公开密钥运算能够高速地运算的处理器中防止降级的方式。在本实施方式中,还示出能够在确保安全性的同时将散列存储到外部的存储设备103的方式。硬件结构与图1相同。
***动作的说明***
接下来,使用图14至图16,说明本实施方式所涉及的软件验证装置100的动作。
图14至图15示出本实施方式中的引导的动作。以下,说明本实施方式中的引导的动作的概要。
主运算部109进行多个启动软件中的启动对象的启动软件的签名验证。如果签名验证成功,则主运算部109计算启动软件的散列值,并临时存储到安全性运算部110内的存储部111,并且启动启动软件。
如果签名验证不成功,则主运算部109使处理停止。
主运算部109在启动了多个启动软件的最后的启动软件时,将临时存储于存储部111的所有散列值进行相加,并输出相加结果。另外,主运算部109判定有无相加结果的MAC,如果在相加结果中存在MAC,则输出相加结果和相加结果的MAC。
安全性运算部110根据预先存储于存储部111的构成验证秘钥和从主运算部109输出的相加结果,计算MAC的期待值即MAC期待值。然后,安全性运算部110比较MAC期待值和从主运算部109输出的MAC。
在主运算部109中,如果MAC期待值和从主运算部109输出的MAC不一致则使处理停止,如果MAC期待值和从主运算部109输出的MAC一致则正常结束。
如果在相加结果中不存在MAC,则安全性运算部110判定在存储部111中是否存在构成验证秘钥。如果未存储有构成验证秘钥,则安全性运算部110生成构成验证秘钥。然后,安全性运算部110根据构成验证秘钥和相加结果,生成相加结果的MAC。
如果存储有构成验证秘钥,则主运算部109使处理停止。另一方面,如果生成了相加结果的MAC,则主运算部109将相加结果的MAC存储到存储设备103。
具体而言,如以下那样。
在步骤S901中,如果电源被接通,则主运算部109执行储存于引导ROM的引导程序。
在步骤S902中,引导程序验证引导加载器的软件的签名。如果签名验证成功,则引导程序生成引导加载器的软件的散列值(步骤S903),启动引导加载器(步骤S904)。如果签名验证失败,则引导程序使处理停止。
在步骤S905中,引导加载器验证OS的软件的签名。如果签名验证成功,则引导加载器生成OS的软件的散列值(步骤S906),启动OS(步骤S907)。如果签名验证失败,则引导加载器使处理停止。
在步骤S908中,OS验证应用的软件的签名。如果签名验证成功,则OS生成应用的软件的散列值(步骤S909),启动应用(步骤S910)。如果签名验证失败,则OS使处理停止。
在步骤S911中,应用将此前生成的散列进行相加。在加法运算中使用异或。在步骤S912中,应用判定有无存储的MAC。如果有所存储的MAC,则在步骤S913中,应用将相加结果和MAC输出到安全性运算部110。如果没有所存储的MAC,则在步骤S915中,应用将相加结果输出到安全性运算部110。
在步骤S914中,受理了相加结果和MAC的安全性运算部110根据构成验证秘钥和相加结果,将MAC计算为MAC期待值,并与从应用输出的MAC进行比较。如果两者一致则正常结束,如果两者不一致则使处理停止。
另一方面,受理了相加结果的安全性运算部110确认有无构成验证秘钥,如果有构成验证秘钥,则使处理停止。如果没有构成验证秘钥,则在步骤S916中安全性运算部110生成构成验证秘钥。在步骤S917中,安全性运算部110根据构成验证秘钥和相加结果来计算MAC,并输出到主运算部109。在步骤S918中,主运算部109将MAC存储到非易失性的存储设备103,并正常结束。为了从非法的删除中保护MAC,也可以并非将MAC存储到存储设备103,而是将MAC存储到安全性运算部110的存储部111。
图16示出本实施方式中的软件更新的动作。以下,说明本实施方式中的软件更新的概要。
主运算部109取得多个更新软件的各更新软件和多个更新软件各自的签名。然后,主运算部109计算将更新前的各启动软件的散列值进行相加得到的相加结果以及该相加结果的MAC。主运算部109输出将更新前的各启动软件的散列值进行相加得到的相加结果以及该相加结果的MAC。
安全性运算部110根据构成验证秘钥和相加结果,将MAC计算为MAC期待值,并比较相加结果的MAC和MAC期待值。
如果相加结果的MAC和MAC期待值不一致,则主运算部109使处理停止。另一方面,如果相加结果的MAC和MAC期待值一致,则主运算部109将多个更新软件的各更新软件和多个更新软件各自的签名写入到存储设备103或者存储器104。
主运算部109计算更新后的各更新软件的散列值,并将更新前的各启动软件的散列值、相加更新前的各启动软件的散列值得到的相加结果、和更新后的各更新软件的散列值进行相加而作为第1相加结果。主运算部109将第1相加结果输出到安全性运算部110。
安全性运算部110重新生成构成验证秘钥,根据构成验证秘钥和第1相加结果来计算第1相加结果的MAC。
主运算部109将第1相加结果的MAC存储到存储设备103。
具体而言,如以下那样。
步骤S1001至步骤S1003的处理与步骤S801至步骤S803的处理相同。
在步骤S1004中,主运算部109将更新前的各启动软件的散列值进行相加,并与MAC一起输出到安全性运算部110。在加法运算中使用异或。在步骤S1005中,安全性运算部110根据从主运算部109输出的相加结果和构成验证秘钥来计算MAC,并与从主运算部109输出的MAC进行比较。安全性运算部110将比较结果回送给主运算部109。
如果比较结果不一致,则主运算部109结束处理。如果比较结果一致,则在步骤S1006中,主运算部109将更新软件和签名写入到存储设备103或者存储器104。在步骤S1007中,主运算部109计算更新后的各更新软件的散列值。在步骤S1008中,将在步骤S1003中计算出的更新前的各启动软件的散列值、在步骤S1004中计算出的相加结果、和在步骤S1007中计算出的更新后的各更新软件的散列值进行相加而作为第1相加结果。在步骤S1009中,主运算部109将第1相加结果输出到安全性运算部110。在步骤S1010中,安全性运算部110重新生成构成验证秘钥。在步骤S1011中,安全性运算部110根据构成验证秘钥和第1相加结果来计算MAC,并输出到主运算部109。在步骤S1012中,主运算部109将第1相加结果的MAC存储到存储设备103。为了从非法的删除中保护MAC,也可以并非将MAC储存到存储设备103,而是将MAC储存到安全性运算部110的存储部111。
在本实施方式中,示出在加法运算中使用异或的例子。但是,也可以使用例如算术加法运算这样的任意的算法。另外,软件更新后的更新软件中的相加结果的计算方法也需要与所使用的算法一致。
***本实施方式的效果的说明***
根据本实施方式所涉及的软件验证装置100,除了实施方式4的效果以外,能够将MAC取出到存储设备,所以在安全性运算部的储存区域有限制的情况下也是有效的。
根据本实施方式所涉及的软件验证装置100,利用构成验证秘钥进行MAC验证、或者判定有无构成验证秘钥。因此,根据本实施方式所涉及的软件验证装置100,即使万一MAC被非法地篡改或者删除,也能够验证利用MAC的非法的篡改或者删除进行的非法程序的启动或者降级。
在以上的实施方式1至5中,将软件验证装置的各部分设为独立的功能块而进行了说明。但是,软件验证装置的结构也可以并非是上述实施方式那样的结构。软件验证装置的功能块只要能够实现在上述实施方式中说明的功能,就可以是任意的结构。另外,软件验证装置也可以并非是1个装置,而是由多个装置构成的系统。
另外,也可以组合实施方式1至5中的多个部分来实施。或者,也可以实施这些实施方式中的1个部分。此外,也可以将这些实施方式作为整体或者部分地任意组合来实施。
即,在实施方式1至5中,能够进行各实施方式的自由的组合、或者各实施方式的任意的构成要素的变形、或者各实施方式中的任意的构成要素的省略。
此外,上述实施方式只是本质上优选的例示,并非意图限制本发明的范围、本发明的应用物的范围以及本发明的用途的范围。上述实施方式能够根据需要而进行各种变更。
机译: 软件验证程序,软件验证装置及软件验证方法
机译: 软件操作验证程序,软件操作验证方法和软件操作验证装置
机译: 软件验证程序,软件验证装置和软件验证方法