APP下载

嵌入式TPM及信任链的研究与实现

2012-05-04刘绍方

计算机工程与设计 2012年6期
关键词:完整性应用程序端口

吴 悠,李 光,刘绍方,张 鹏

(华北计算技术研究所,北京100083)

0 引 言

相比普通PC,嵌入式系统在研发过程中对安全设计的重视不够充分,安全性较差、易受攻击的特点使其所面临的硬件和软件攻击与日俱增。随着可信计算技术的发展,将可信计算理念引入嵌入式领域成为增强嵌入式系统可信与安全的研究方向之一,已经有较多学者在该领域展开研究并取得一定的成果。与PC可信平台一样,嵌入式可信平台的关键在于信任根和信任链。在已有研究中嵌入式信任根通常采用现有的TPM(trusted platform module)芯片或TCM(trusted cryptography module)芯片,而信任链则大多为链式结构,部分研究采用了我国学者提出的星型结构。由于依赖现有的芯片,嵌入式信任根在功能与物理接口的灵活性上存在一定限制,而链式和星型的信任结构也分别存在信任损失较大和嵌入式信任根负担较重的缺点。

本文对嵌入式信任根和信任链结构的设计进行讨论,在此基础上构建并实现了一种嵌入式可信平台,该平台基于Intel的Xscale处理器PXA270和Linux操作系统,以FPGA(field-programmable gate array)实现的嵌入式 TPM作为平台的信任根,并在其中内置可信度量核心根CRTM(core root of trust for measurement); 嵌 入 式 TPM 与PXA270间通过FPGA内的双端口RAM地址空间进行通信;信任链采用了结合链式和星型结构的混合式结构。嵌入式可信平台通过对引导程序、操作系统和应用程序的完整性度量、验证和执行控制,实现完整的信任关系传递,从而提高嵌入式系统的可信与安全。

1 可信计算基本思想

对于信息系统而言,大多数安全隐患来自于终端。可信计算技术作为近年发展起来的一种信息系统安全新技术,将解决信息安全问题的思路转移到解决终端安全问题上来[1],从终端计算平台的体系结构入手,结合底层硬件和软件,在整体上采取安全措施以保证信息系统的可信与安全,通过提高终端安全性从源头上加强对不安全因素的控制。

可信计算的两个基本要素是信任根和信任链,其基本思想是首先在计算机系统中建立一个信任根,信任根的可信性由物理安全、技术安全和管理安全共同确保;然后建立一条信任链,从信任根开始到硬件平台、操作系统、再到应用,一级测量认证一级,一级信任一级,最终把这种信任扩展到整个计算机系统[2]。在可信计算组织TCG(trusted computing group)的可信计算体系中,信任根作为计算平台的信任基础,被定义为可信平台模块TPM,为平台身份提供唯一性标识。在TPM 1.2规范[3]中,建议TPM是一个包含有多种密码运算部件并具备存储功能的安全芯片,能够在其内部存储密钥,并进行加解密操作,其主要功能包括数字摘要、签名与认证、密钥与随机数生成、存储保护和安全审计,并具有可信启动和自检功能。TCG的信任度量采用的是链式结构,信任关系的建立和传递主要基于对系统组件的完整性度量与验证,信任链上的每个组件都必须通过验证才被允许加载和运行,以此来确保系统从启动到运行的整个过程的可信性。

2 嵌入式可信平台体系结构

嵌入式可信平台采用嵌入式TPM作为信任根,结合信任链技术增强嵌入式系统的安全性,其硬件基本结构如图1所示。整个系统在硬件上主要分为嵌入式系统主板和嵌入式TPM两部分。嵌入式系统主板以Intel的Xscale处理器PXA270为核心,除SDRAM、Flash等外围设备外,还包括Micro SD、触摸屏、USB等外部输入输出设备。嵌入式TPM则基于SOPC架构,采用大规模高端FPGA-Stratix器件,结合嵌入式微处理器软核Nios II、Avalon总线交换结构及各种系统外设IP核(SDRAM控制器、双端口RAM、Flash总线控制器等)构成。Avalon交换总线作为内部总线,实现嵌入式TPM内Nios II软核与各个功能模块之间的数据、控制信号的互连互通。FPGA内部集成了多个硬件算法功能模块,包括非对称加密算法RSA、对称加密算法AES和散列算法SHA-1,而真随机数则从外置的WNG5物理噪声源芯片中获取。

图1 嵌入式可信平台硬件体系结构框架

在PC可信平台中,TPM芯片通常采用LPC(Low Pin Count)总线接口实现与CPU之间的命令和数据传输,但嵌入式设备大多不具备LPC接口,因此本文方案中,FP-GA提供了与嵌入式CPU的总线接口,直接挂载在嵌入式CPU上,并在FPGA内部设计了双端口RAM作为输入输出缓冲区,配合通信协议实现嵌入式TPM与嵌入式CPU之间的信息交互。

3 带数据恢复功能的混合式信任结构

TCG的信任传递采用的是一种链式结构,在PC可信平台上,信任关系沿着CRTM、BIOS、OSLoader、OS、应用程序逐级传递,信任边界的每一次扩展都须先进行目标代码的度量,然后转移执行控制权[4]。这种链式结构的优点是实现了可信计算的基本思想,与现有计算机有较好的兼容性,并且实现简单;而其缺点一是信任链较长导致的信任损失,二是由于采用了迭代计算方式来获得完整性度量值,系统任何软件组件的变化都会导致重新计算[2],在实现和使用上会比较麻烦。

我国学者提出了一种带数据恢复功能的星型信任结构并在嵌入式系统中进行了研究和应用[5-6],相比TCG的链式结构,星型信任结构没有多级信任传递,信任损失小,而数据恢复功能也使其安全性和可靠性更高。但由于所有的完整性度量工作都由内置在TPM中的CRTM来完成,使得TPM的负担会比较重。

本文方案结合链式和星型信任结构,基于Linux操作系统提出并实现了一种带数据恢复功能的混合式信任结构,其信任关系传递和软件组件启动顺序参见图2。在这种信任结构中,CRTM内置于嵌入式TPM中,系统加电后首先由CRTM分别对引导程序Bootloader和操作系统内核OS Kernel进行完整性验证,并保存验证结果;随后嵌入式CPU在启动过程中依次从嵌入式TPM获取Bootloader和OS Kernel的验证结果,根据验证结果判断是否加载和运行;应用程序的完整性验证则由操作系统进行。在软件组件(包括系统软件和应用程序)的启动过程中,当发现完整性度量值与保存的基准值不一致时可以利用恢复功能进行修复。

图2 嵌入式可信平台信任传递示意

CRTM是可信计算平台加电后最先启动的部分,由其发起信任状态的传递,是整个信任链的起点。因为不会再有其他组件来验证CRTM的可信性,因此它被系统默认为是绝对可信的。在TCG可信平台中,CRTM并不明确,大多数PC可信平台的实际实现是以BIOS的Boot Block或整个BIOS作为CRTM[7]。但在嵌入式平台中,这种方式有其不足之处:首先,PC平台的CPU架构较为单一,而嵌入式CPU的种类繁多,所以CRTM的跨平台性在实现上会较为困难;其次,PC可信平台的CRTM从外部不太容易直接访问,故安全性较高,但对于嵌入式平台,利用各种嵌入式工具可以很容易的修改烧写在Flash中的引导程序和操作系统等软件组件,这使得CRTM自身的安全性存在隐患[8]。将CRTM放置在嵌入式TPM内部则能够较好的避免这些问题,CRTM的实现无需考虑CPU架构的差异性,与此同时TPM也能为CRTM提供物理保护。

嵌入式可信平台在系统启动时用星型结构验证Bootloader和OS Kernel的完整性,而应用程序的完整性验证由操作系统进行,因此这部分的信任传递仍然是链式的。这主要是考虑到嵌入式TPM的性能。TPM能够提供硬件级密码学计算功能,但其本身资源有限,在计算平台中并不是作为一个高性能器件而存在的。完全的星型信任结构能最大限度的降低信任传递所带来的损耗,但TPM需要完成所有的完整性度量及验证工作,计算压力比较大,可能会造成平台工作效率的降低。在嵌入式Linux系统中,Bootloader和OS Kernel通常较小,且不同的嵌入式设备中这两个组件的尺寸差异不大,而应用程序依据嵌入式设备的实际功能往往有很大差别,因此在本文方案中,Bootloader和OS Kernel由CRTM进行完整性度量,降低信任传递的损耗,而应用程序的完整性度量由资源更丰富、计算能力更强的嵌入式CPU和操作系统完成,尽量减少完整性验证过程对系统运行效率的影响。

嵌入式可信平台的启动过程如图3所示。

系统加电后,嵌入式TPM首先通过复位信号控制嵌入式CPU进入复位状态,并完成自身的初始化和自检,随后CRTM程序启动,依次从存储器读取Bootloader和OS Kernel进行完整性验证并记录验证结果。如果验证都成功,嵌入式TPM释放复位信号使嵌入式CPU正常启动,而自己则进入就绪状态等待命令;如果发现Bootloader验证失败,会认为其完整性已被破坏,此时嵌入式TPM会对Bootloader进行修复,并以一定方式(如指示灯)给用户相应提示。嵌入式CPU启动后,系统首先加载运行Bootloader,随后由Bootloader从嵌入式TPM获取OS Kernel的完整性验证结果,只有确认验证通过时才进一步加载OS Kernel并转移控制权。

完整性度量与验证的意义在于发现系统软件组件本身的数据完整性是否被破坏,如果已经被破坏,那么可信计算平台除了要阻止其继续运行外,还需要能够提供一种机制将其恢复到正常状态。嵌入式TPM在内部构建了一个备份恢复存储区,用来保存Bootloader、OS Kernel等希望保护的软件组件备份代码,如果在系统启动时发现完整性验证失败,可由嵌入式TPM启动恢复功能。嵌入式TPM会从备份恢复区读出指定的备份代码(Bootloade或OS Kernel等),并将其覆盖到嵌入式主板启动Flash(图1中Flash-1)的特定位置,从而恢复系统软件的完整性,最后嵌入式CPU加载和运行恢复后的代码,系统继续启动。因为Bootloader、OS Kernel是系统的核心软件组件,所以嵌入式TPM在恢复前同样会验证备份代码本身的完整性,以确保恢复成功。此外,Bootloader的恢复操作在嵌入式TPM的启动过程中进行,能够确保嵌入式CPU上运行的整个软件系统是从可信状态开始启动的。

图3 Bootloader与OS Kernel的启动验证流程

4 嵌入式TPM的片上系统

嵌入式TPM的软件系统一个片内操作系统(chip operating system,COS),运行在Nios II软核上,负责TPM 中所有硬件模块的初始化与管理,同时接收和处理来自外界的命令,完成TPM的各种功能。TPM COS的体系结构参见图4,主要分为系统层和应用层两部分,系统层负责嵌入式TPM内部各硬件模块的管理,屏蔽硬件细节,并向应用层提供统一的访问接口;应用层则负责完成嵌入式TPM的各种可信功能模块,包括CRTM与数据备份恢复功能。

在系统层中,RAM、Flash、GPIO等通用外设的驱动由硬件抽象层(hardware abstraction layer,HAL)提供。HAL是一个轻量级、类UNIX的C/C++运行环境,由Nios II IDE或 Nios II软件生成工具根据特定的SOPC硬件系统自动生成。HAL作为Nios II处理器系统的设备驱动软件包,为系统中的各种外设提供驱动程序及相应的接口,同时也提供main函数运行前的系统和设备初始化服务,HAL应用程序接口(HAL API)则负责向应用层提供统一的外设访问接口。

图4 TPM COS体系结构

4.1 TPM可信功能模块

TPM COS的应用层实现了包括CRTM在内的TPM可信功能,是嵌入式TPM功能的核心部分之一。本文方案中以软件仿真器TPM-Emulator作为应用层部分的原型。TPM-Emulator最初是Linux平台上的一个TPM软件仿真器[9],目前其最新版本已可以在Linux、OpenBSD、Windows和Darwin(Mac OS X)多种平台上运行。TPM-Emulator遵循TPM 1.2规范,同时也提供了对移动可信模块MTM(mobile trusted module)的仿真。

TPM-Emulator的基本结构如图5所示。TPM设备驱动库(TPM device driver library,TDDL)是符合TSS规范的单线程接口模块,位于TCS(TSS Core Services,TSS核心服务)和TPM底层驱动之间,正常情况下应用程序发往TPM的命令请求以及从TPM返回的应答信息都经由TD-DL接收和转发。TPMD(TPM Daemon)是以后台方式运行在用户空间的守护进程,实现TPM的各种功能模块。tpm_dev是内核模块,为实现TPM设备驱动的底层兼容性提供了一个字符设备/dev/tpm。在 Linux平台上,TPMD和TDDL之间采用Socket套接字实现双向通信,而在Windows平台则通过Named pipe命名管道进行。

图5 TPM-Emulator基本结构

密码学功能模块是TPM其他所有软件功能模块的基础,TPM-Emulator 提 供 包 括 RSA、SHA-1、RC4、HMAC在内的多种密码学计算功能,其中涉及的大数运算需要使用大数库 GMP(GNU multiple precision arithmetic library)[10],不过GMP只提供了数学运算功能,并没有密码学相关的高级功能,所以这部分的流程和处理需由TPM-Emulator自己完成。此外随机数生成器也是TPM中的基础功能部件之一,在Linux平台下TPM-Emulator采用了/dev/urandom虚拟设备作为可信平台的随机数源[11],而在 Windows平台下则需要微软CSP(cryptographic service provider)的支持,通过调用CryptGenRandom来获得。

TPM-Emulator在运行过程中需要保存各种信息,其中包括EK、AIK、PCR等密钥信息以及TPM-Emulator运行相关的配置信息,缺省状态下这些内部数据会在TPMD关闭时以文件形式保存,在下次启动时从该文件中读取并对TPM-Emulator进行初始化。

嵌入式TPM软件系统的应用层在TPM-Emulator的TPM可信功能模块(图5中TPM Emulator Engine)基础上增加CRTM和数据备份恢复模块,并基于TPM接口规范扩展自定义命令集实现相应的命令接口。

4.2 双端口RAM数据通信

嵌入式TPM在设计中需要着重考虑的一个问题就是与嵌入式CPU间的物理接口。目前的TPM产品多数针对PC平台,采用的是LPC总线接口,LPC总线具有容易跨接入南北桥芯片、支持优先启动等特点[12],被TCG作为TPM的标准接口。但是嵌入式设备大多不具备LPC接口,因此需要考虑其他接口方式。不同的学者在嵌入式平台上尝试了不同的设计方案。文献 [13]使用嵌入式CPU的GPIO模拟LPC接口与TPM芯片连接;文献 [14]中的TPM芯片使用的是SMBus总线,因此在嵌入式CPU一侧通过I2C总线模拟,在驱动代码中对I2C总线的时序、协议和操作模式等参数进行修改,将I2C的信号模拟成符合TPM芯片时序要求的SMBus总线;文献 [15]中的TPM芯片通过TWI总线进行通信,该总线接口时序与I2C总线兼容,故直接采用了I2C接口,上层应用通过I2C设备驱动实现对TPM芯片的访问。

由于采用FPGA实现嵌入式TPM,故本文方案中嵌入式TPM与嵌入式CPU间的接口设计可以更为灵活。嵌入式可信平台选择在FPGA内部设计一块双端口RAM作为输入输出缓冲区,通过数据地址总线与嵌入式CPU相连,同时配合通信协议来实现嵌入式TPM与嵌入式CPU间的信息交互。双端口RAM有两个读写控制端口,一个与FPGA内部的Avalon交换总线相连,另一个连接到嵌入式CPU的数据地址总线,所有发往嵌入式TPM或者从嵌入式TPM取回的TPM命令包都被封装在双端口RAM通信协议中传送。

一旦嵌入式CPU启动,嵌入式TPM就成为一个从设备被动等待来自外部的命令,并按照命令工作和应答,因此双端口RAM数据通信协议的基本流程是由嵌入式CPU通过驱动将TPM命令写入双端口RAM的指定地址,TPM COS从该地址中读取命令并进行处理,完成后将应答信息送回该地址。双端口RAM的前8个字节是通信协议的Header,因为通信双方需要访问同一段地址空间,所以设置了Flag字段作为互斥信号。数据通信协议的流程简要描述如下:

(1)初始化。系统加电后,由TPM COS负责双端口RAM的初始化,并在完成后将Flag置为INITIALIZED,表示双端口RAM已经准备就绪;

(2)嵌入式CPU发送命令。嵌入式CPU通过驱动将命令请求包写入Data段,并将Flag置为CMD_REQ,表示命令发送完成,随后等待嵌入式TPM的响应;

(3)嵌入式TPM读取命令。TPM COS根据Flag状态判断命令已经发送完成,于是从Data段读出命令请求包送入TPM命令处理模块进行解析、执行,并构建应答包;

(4)嵌入式TPM发送应答包。待命令执行完成后,TPM COS将应答包写入Data段,并将Flag置为CMD_ACK,表示嵌入式TPM已经处理完毕;

(5)嵌入式CPU接收应答包。嵌入式CPU从Data段取出应答包,最后将Flag字段恢复为INITIALIZED(初始化状态)。

5 应用程序的可信验证与恢复

嵌入式可信平台在启动时对系统的软件组件进行完整性度量、验证和恢复(必要时),以此确保系统在启动前的静态条件下软件组件的完整性受到监控和保护,但这一过程无法保证系统在启动后的运行过程中完整性都不被破坏。尤其对于系统运行过程中可能会多次启动的应用程序而言,确认其可信需要两个条件,一是系统建立了完整的信任链,二是在应用程序运行时进行了完整性验证[16]。前者确保系统初始运行环境的完整性,后者则在应用程序每次启动时都确保其完整性不被破坏,而验证失败时的恢复操作也是保证应用程序可信启动的重要环节。

在带有图形界面的Linux嵌入式系统中,应用程序可通过Shell命令行和图形界面点击两种方式执行。嵌入式可信平台对Shell和桌面系统进行了修改,并配合运行在后台的可信服务程序实现对应用程序的启动拦截、完整性验证及恢复。当通过输入命令行或桌面点击执行准备启动应用程序时,系统会首先发送消息给可信服务程序,该消息中包含了该应用程序的路径、名称等信息,可信服务程序根据这些信息从磁盘中读取到应用程序文件,计算其散列值,并与嵌入式TPM中保存的基准值进行比较。如果相同,则认为该文件的完整性没有被破坏,从而允许其正常启动;如果应用程序的完整性发生变化,系统将通过对话框提示用户,交由用户来选择。由于嵌入式可信平台在应用程序在第一次可信启动时对其进行了备份,所以用户可以选择禁止运行,也可以启动恢复功能将该文件恢复到上一次可信启动时的版本,另外在确认安全的情况下可以认可此次应用程序完整性的变化,允许其正常启动,同时对备份代码和完整性基准值进行更新。图6显示了应用程序的启动验证过程。

图6 应用程序的可信验证过程

需要注意的是此处应用程序的可信验证仍然是基于静态完整性,它只能确保应用程序在启动时代码本身的完整性没有发生变化,但无法保证应用程序启动后的行为是否可信。

6 结束语

本文针对嵌入式系统的特点,对嵌入式TPM和信任链的设计进行了讨论,结合链式和星型信任结构,提出了一种带数据恢复功能的混合式信任结构,这种信任结构综合考虑了嵌入式平台上可信计算功能的实现及其对平台性能的影响,在降低链式结构信任损失的同时,减少星型信任结构对嵌入式TPM的依赖。在此基础上,基于PXA270处理器和Linux操作系统构建并实现了一种嵌入式可信平台,该平台采用FPGA实现了内置CRTM的嵌入式TPM,并通过FPGA内的双端口RAM实现嵌入式TPM与PXA270处理器间的双向通信。嵌入式可信平台在启动过程中对引导程序和操作系统内核进行完整性度量、验证、恢复和执行控制,并且通过捕捉应用程序启动命令,对应用程序的启动进行动态拦截,度量、验证和恢复应用程序的完整性,保证应用程序的可信启动,从而实现完整的信任关系传递。对嵌入式可信平台原理样机的测试表明,该平台能够有效保证嵌入式系统软件组件的完整性和可信启动,当被保护的系统软件或应用程序被修改后,能够及时发现并根据用户的选择进行恢复,提高了嵌入式系统的可信与安全。

[1]LIU Weipeng,HU Jun,FANG Yanxiang,et al.Research and development on the secure architecture of terminal based on trusted computing [J].Computer Science,2007,34(10):257-259(in Chinese).[刘威鹏,胡俊,方艳湘,等.基于可信计算的终端安全体系结构研究与进展 [J].计算机科学,2007,34(10):257-259.]

[2]SHEN Changxiang,ZHANG Huanguo,WANG Huaiming,et al.Research and development of trusted computing [J].Science China:Information Sciences,2010,40(2):139-166(in Chinese).[沈昌祥,张焕国,王怀民,等.可信计算的研究与发展 [J].中国科学:信息科学,2010,40(2):139-166.]

[3]TPM main specification level 2Version1.2 [EB/OL].https://www.trustedcomputinggroup.org/resources/tpm_main_specification,2011.

[4]TCG specification architecture overview revision 1.4 [EB/OL]. http://www.trustedcomputinggroup.org/files/resource _files/AC652DE1-1D09-3519-ADA026A0C05CFAC2/TCG_1_4_Architecture_Overview.pdf,2011.

[5]ZHAO Bo,ZHANG Huanguo,LI Jing,et al.The system architecture and security structure of trusted PDA [J].Chinese Journal of Computers,2010,33(1):82-92(in Chinese).[赵波,张焕国,李晶,等.可信PDA计算平台系统结构与安全机制 [J].计算机学报,2010,33(1):82-92.]

[6]CHEN Nanyang.Study on construction technology of embedded trusted platform [J].Information Security and Communications Privacy,2010,32(11):56-58(in Chinese).[陈南洋.嵌入式可信平台构建技术研究 [J].信息安全与通信保密,2010,32(11):56-58.]

[7]GUO Linger,JIANG Zhixiang.Design and implementation of hardware platform for trusted computing [J].Computer Engineering and Design,2011,32(2):501-504(in Chinese).[郭灵儿,蒋志翔.可信硬件平台的设计与实现 [J].计算机工程与设计,2011,32(2):501-504.]

[8]LIN Xiaocha,LI Guang,JIN Shuang.Study of embedded trusted computer [J].Computer Engineering and Design,2009,30(16):3730-3734(in Chinese).[林小茶,李光,金爽.嵌入式可信计算机研究 [J].计算机工程与设计,2009,30(16):3730-3734.]

[9]Mario Strasser.Software-based TPM emulator [EB/OL].http://tpm-emulator.berlios.de,2011.

[10]The GNU multiple precision arithmetic library [EB/OL].http://gmplib.org/,2011.

[11]LIU Changping,FAN Mingwang,WANG Guangwei.ESWTPM:An enhanced software-based TPM [C].Progress of Computer Technology and Application 2008(II).Hefei:U-niversity of Science and Technology of China Press,2008:1187-1191(in Chinese).[刘昌平,范明枉,王光卫.ESWTPM:一种改进的TPM软件仿真器 [C].计算机技术与应用进展2008(下册).合肥:中国科学技术大学出版社,2008:1187-1191.]

[12]YE Bin.Reliability enhancement of TPM [J].China Information Security,2009,31(7):53-55(in Chinese).[叶 宾.增强可信计算平台模块的可信度 [J].信息安全与通信保密,2009,31(7):53-55.]

[13]WANG Yu,WANG Zhenyu,YAO Lining.Design and implementation of TPM extension and trusted bootstrap on embedded platform [J].Computer Engineering and Design,2009,30(9):2089-2090(in Chinese).[王禹,王震宇,姚立宁.嵌入式平台TPM扩展及可信引导设计与实现 [J].计算机工程与设计,2009,30(9):2089-2090.]

[14]LIU Hailei,WANG Zhenyu,MA Mingjin,et al.Research and implementation of trusted embedded terminal TPM interface [J].Computer Engineering and Design,2008,29(13):3317-3318(in Chinese).[刘海雷,王震宇,马鸣锦,等.嵌入式可信终端TPM接口的研究与实现 [J].计算机工程与设计,2008,29(13):3317-3318.]

[15]WANG Bo,LI Bo,GAO Zhentie,et al.Embedded trusted computing platform based on TPM [J].Microcontrollers &Embedded Systems,2011,11(1):13-16(in Chinese).[王博,李波,高振铁,等.基于TPM的嵌入式可信计算平台设计 [J].单片机与嵌入式系统应用,2011,11(1):13-16.]

[16]CHEN Lin,LIN Honggong,HUANG Yuanfei.Research on mechanism of resisting malicious code based on trusted computing [J].Application Research of Computers,2008,25(12):3713-3715(in Chinese).[陈麟,林宏刚,黄元飞.基于可信计算的恶意代码防御机制研究 [J].计算机应用研究,2008,25(12):3713-3715.]

猜你喜欢

完整性应用程序端口
稠油热采水泥环完整性研究
一种端口故障的解决方案
删除Win10中自带的应用程序
谷歌禁止加密货币应用程序
端口阻塞与优先级
莫断音动听 且惜意传情——论音乐作品“完整性欣赏”的意义
精子DNA完整性损伤的发生机制及诊断治疗
8端口IO-Link参考设计套件加快开发速度
卫星三端口DC-DC变换器技术综述
桩身完整性检测中缺陷的综合判别