1、2023.06ELECTRONICS QUALITY可信密码模块设计方法技术研究徐宁,冷昌琦(中国电子科技集团公司第三十研究所,四川 成都610041)摘 要:随着信息技术的迅速发展,信息的真实性、隐私性和安全性越来越受到公众的重视。可信计算技术是解决上述问题的有效手段,可信密码模块作为可信计算技术商业应用的产品在国内已被大量应用。可信密码模块由命令解析引擎、计算引擎和认证管理区域模块等组成。针对命令引擎和计算引擎模块的设计,提出了基于模板和密码中间件的通用化设计方法,以解决传统设计方法的开发效率不高、灵活性不足和扩展性不够的问题。关键词:可信密码模块;命令解析;模板;通用解析功能中国分类号:
2、TP 309文献标识码:A文章编号:1003-0107(2023)06-0001-05doi:10.3969/j.issn.1003-0107.2023.06.001Research on Design Method and Technology of TrustedCryptographic ModuleXU Ning,LENG Changqi(SCI-Southwest Communication Institute,Chengdu 610041,China)Abstract:With the rapid development of information technology,the
3、authenticity,privacy and security of informationare paid more and more attention by public.Trusted computing technology is an effective means to solve the aboveproblems,and trusted cryptographic modules have been widely used in China as a commercial product of trustedcomputing technology.The trusted
4、 cryptographic module consists of command parsing engine,computing engineand authentication management area module.Aiming at the design of command engine and computing engine mod-ules,a generalized design method based on templates and cryptographic middleware is proposed to solve the prob-lems of lo
5、w development efficiency,insufficient flexibility and insufficient extensibility of traditional design methods.Keywords:trusted cryptographic module;command parsing;template;general parsing function收稿日期:2022-11-23修回日期:2022-12-03作者简介:徐宁(1987),男,河南信阳人,中国电子科技集团公司第三十研究所工程师,从事网络信息安全工作。0引言随着信息技术的迅速发展,信息的真
6、实性、隐私性和安全性越来越受到公众的重视,可信计算技术是解决上述问题的有效手段。可信计算是一种主动防御技术,它利用硬件属性作为信任根,系统启动时逐层度量,建立一种隔离执行的运行环境,保障计算平台敏感操作的安全性,从而实现对可信代码的保护1。国际上可信密码研究和应用不断推进,IBM和微软公司研制了可信密码设备模拟器2-3,IntelTXT、ARM TrustZone和AMD安全技术4等基于TPM2.05的安全芯片已广泛地应用于终端和手机端等多种设备中。国内已有多个厂家开展了可信密码模块产品的研制。为了统一规范可信密码模块的研制,中Product Design and Development产品设
7、计与开发1ELECTRONICSQUALITYELECTRONICS QUALITY国国家标准化管理委员会、国家密码管理部门等国家机构制定和颁布了我国可信密码的相关标准,包括:可信计算密码支撑平台功能与接口规范6可信密码模块接口规范7和 TCM服务模块接口规范8等。1可信密码模块设备模型可信密码设备主要由非易失存储区、临时存储区、密码计算引擎、发生器、认证管理区域和指令解析引擎等模块构成,如图1所示。可信密码模块在执行命令时,需要对输入设备的命令进行解析,以便将命令字节流转换为可信密码内部可处理的数据,该解析过程是可信密码模块研制的关键环节之一。目前,IBM和微软公司的TPM模拟器2-3等可信
8、密码设备命令解析的实现方式如图2所示,即:系统接收到命令字节流后判断命令类型并调用对应的命令字节流解析执行代码对字节流进行解析。该实现方式有以下不足:a)效率不高,每条命令格式不同,需对每条命令进行单独的程序编码;b)灵活性不足,当命令格式发生改变时,系统需重新编码解析程序;c)扩展性不够,当新增命令时,需要增加对应的程序编码。传统的密码引擎是将算法实现嵌入硬件设备中,无法实现算法和密码内部芯片等设备的有效切换。当可信设备对算法和密码运算内部模块进行替换时,需对密码模块内部程序进行较大的改动。为了解决上述不足,本文针对传统命令解析采用基于模板设计方式,针对密码引擎提出了密码中间件的解决思路。2
9、基于模板的命令解析设计本文设计了一种可信密码模块的命令模板,通过创建各个可信命令的模板和通用解析函数,通用解析函数便可根据模板解析其对应的命令字节流。本方法解决了可信命令解析功能模块紧耦合的问题,极大地提高了命令解析功能的开发效率。本文中模板定义和解析后的数据格式均采用C语言形式描述。2.1 命令模板一个可信命令字节流由多段结构化的数据组成,每段结构化的数据可由一个模板进行描述。现将该模板定义为名为“CmdTemplate”的结构体,则 一 个 可 信 命 令 字 节 流 可 由 一 个 形 如“CmdTemplate”的模板数组表示。通过分析可信密码指令中结构化数据的特征,可将CmdTem-
10、plate结构体定义如图3所示。typedef structBYTEflag;/元素的类型数组,定长数组(变长数组)const char*typename;/类型名称UINT32size;/解析结构体的大小UINT32offset;图1可信密码模块模型图2传统可信密码模块命令字节流解析方式22023.06ELECTRONICS QUALITY/结构体中元素的偏移地址Marshal_Fmarsha1;/序列化元素的方法Unmarshal_Funmarshal;/解析元素的方法UINT32ArrayLenOrOffset;CmdTemplate;其中,typename为结构化数据类型名称。size
11、为某段字节流解析后对应结构体的大小。offset为某段字节流解析后的数据在结构体中的偏移位置。marsha1为将结构体数据封装为某段命令字节流的函数地址。unmarshal为将某段命令字节流解析为结构体数据的函数地址。ArrayLenOrOffset为如果是定长数组,该数据表示字节流中该段数据的个数;如果是变长数组,表示该段数据个数在字节流中的偏移位置。flag长度为一字节的模板标记,其具体结构如下所示:|Reserved|Region|Aarry0 0 0|0 0 0|0 0其中,typename为结构化数据类型名称。size为某段字节流解析后对应结构体的大小。offset为某段字节流解析后
12、的数据在结构体中的偏移位置。marsha1为将结构体数据封装为某段命令字节流的函数地址。unmarshal为将某段命令字节流解析为结构体数据的函数地址。ArrayLenOrOffset为如果是定长数组,该数据表示字节流中该段数据的个数;如果是变长数组,表示该段数据个数在字节流中的偏移位置。该字节分为Array、Region和Re-served3个部分。Array标识命令字节流是变长数组还是定长数组,具体定义及说明如表1所示。Re-gion字段标识命令字节流数据类型,包括认证域、认证域数据长度、参数域数据、参数域数据长度、句柄域和认证句柄,具体定义及说明如表2所示。Reserved则为保留字段。
13、2.2基于模板的通用解析方法2.2.1基于模板的命令字节流的解析方法如图3所示,本方法只需实现基于模板的字节流解析的执行代码,该执行代码可根据创建的启动、随机数、度量和关闭等可信密码模块命令格式模板对可信密码模块的命令字节流进行解析,并输出解析后的数据。该方法具有以下优点:a)开发效率高,只需要开发通用命令字节流执行代码,各个命令模板简单地通过手动定义即可;b)具有较高的灵活性,当命令格式发生改变时,只需更改对应的模板即可,无需对执行代码进行修正;c)具有良好的扩展性,当命令新增时,只需创建新命令的模板数据即可,无需对整个系统进行重新部署。表1 Array字段说明Array(二进制)宏定义数据
14、类型说明01FALG_ARRAY_VARIABALE变长数组02FLAG_ARRAY_FIXED定长数组Region(二进制)宏定义数据属性说明001010011FALG_REGION_PARAMFLAG_REGION_AUTHFLAG_REGION_HANDLE参数域数据认证域中的数据句柄域句柄100101110FLAG_REGION_AUTH_HANDLEFLAG_REGION_PARAM_SIZEFLAG_REGION_AUTH_SIZE认证句柄参数域长度认证域长度表2 Region字段说明图3基于模板的命令解析方法示意图Product Design and Development产品设
15、计与开发3ELECTRONICSQUALITYELECTRONICS QUALITY2.2.2通用命令解析程序流程基于模板的通用命令解析执行程序的流程如图4所示,具有内容如下所述:a)接收命令字节流数据,并获取对应命令的模板数组及长度;b)通过模板解析数据,判断模板是否解析完,如果模板解析完,则结束操作,反之继续步骤c);c)读取模板中的flag标记,并判断该模板对应的字节流是变长数组还是定长数组,并获取数组长度;d)模板对应的数组字节流数据是否解析完成,如果解析完成,继续步骤b),反之继续步骤d);e)解析字节流中的参数域长度和认证域长度等信息。3基于密码中间件的密码引擎设计密码计算引擎是可
16、信密码设备执行密码运算的载体,包括非对称、对称和摘要密码运算。密码计算引擎依赖于底层密码芯片提供的密码能力。底层密码芯片提供的密码算法和密码标准接口也各不相同。密码计算引擎面临着适配多种密码算法、多种密码接口的情形。密码中间件技术是解决上述问题的有效手段。密码中间件位于应用程序和密码设备之间的接口层,其屏蔽底层接口差异,提供对密码计算引擎统一的密码运算接口,支持多种密码芯片的调用。如图5所示,密码中间件位于密码引擎和密码设备之间,它向下屏蔽PKCS#11和CSP等密码接口的差异,对密码引擎提供统一的密码运算接口。图6列举了部分密码中间件统一的对外调用接口示例,密码引擎可通过调用该接口实现对不同密码芯片、不同密码算法的调用。typedef INT32(*SymEncrypt)(Handle handle,/IN:操作句柄BYTE*symKey,/IN:对称密钥UINT16 symKeyLen,/IN:对称密钥长度TCM2_ALG_ID alg,/IN:算法TCM2_ALG_ID mode,/IN:算法模式BYTE*iv,/IN/OUT:IV向量/下一次计算所需的IV值UINT16ivLe