TPM芯片SSX35的BIOS模块化开发

时间:2024-12-27 00:04:00 来源:作文网 作者:管理员

摘要:在当今信息化时代,信息安全的重要性是不言而喻的。该文介绍的是一种常用标准化可信平台模块,全称Trusted Platform Module,简称TPM。TPM能够独立进行密钥生成、加解密的芯片,其重要作用是加强了对密钥的管理,芯片以硬件来生成、存储和管理密钥。TPM需要硬件和软件的支持,不仅需要硬件设计将TPM芯片通过LPC(Low Pin Count)系统总线与硬件主板相连,并且需要BIOS(Basic Input/Output System)的底层软件支持,依靠BIOS实现TPM硬件与用户的人机交互操作,并且依靠BIOS进行TPM的初始化动作。该文通过实践验证,实现对兆日科技有限公司的TPM产品SSX35的BIOS底层支持,并且将SSX35芯片所需的BIOS底层支持开发成一个成熟的功能模块,使之能方便快速地移植到其他计算机电脑的系统开发中去。

关键词:TPM; SSX35;模块化

中图分类号:TP338文献标识码:A文章编号:1009-304420-4975-06

The BIOS Modular Development of TPM Chip SSX35

LIN Cong-fa

Abstract: In present information era, importance of information security is self-evident. This article will introduce a commonly used standard Trusted Platform Module, referred to as TPM. TPM is chip able to independently carry out key generation, encryption and decryption, with strengthening the management of keys as its important role, using hardware to generate, store and manage keys. TPM requires both hardware and software support, hardware design to connect TPM chip with hardware motherboard through LPC system bu☼s, BIOS underlying software support to realize interactive operation between TPM hardware and users and to the initialize TPM.This paper proves practical achievement of BIOS undฉerlying support of SSX35 TPM of Sinosun Technology Co., Ltd. , which is developed into a mature functional module for convenient transplantingto other computer system development.

Key words: TPM; SSX35; modular

1 TPM简介

TPM是Trusted Platform Module的简写。1999年10月,多家IT巨头联合发起成立可信赖运算平台联盟(Trusted Computing Platform Alliance,TCPA),初期加入者有康柏 、HP 、IBM、Intel、微软等,该联盟致力于促成新一代安全且可信赖的硬件运算平台。2003年3月,TCPA增加了诺基亚 、索尼等成员,并改组为可信赖计算组织(Trusted Computing Group,TCG),希望从跨平台和操作环境的硬件和软件两方面,制定可信赖电脑的相关标准和规范。并在并提出了TPM规范,目前最新版本为1.2。

可信计算的根本目标是向用户提供完整的可信安全解决方案,其研究内容包括:系统安全芯片,安全主板,安全BIOS,安全操作系统,安全数据库,安全应用,安全可信网络接入,其中系统安全芯片作为提供可信计算的核心部件。

TPM对于存储密钥的保护管理,是一个树结构,下层密钥由上层的密钥加密保护。这个保护存储密钥层次的根是SRK,这是一对非对称密钥对,其公钥用于保护加密下级的SK,其私钥始终保护在TPM芯片内部。攻击者无法获得SRK的私钥也就无法破解由SRK所保护的SK,同样也无法破解由SK保护的下级密钥。详细请见图1所示。

2 SSX35模块化要求

要求按照兆日科技提供的技术文档和开发样品,进行SSX35芯片的导入工作,主要是保证SSX35在BIOS下按照要求完成各种初始化和资源分配动作,并保证其在操作系统下正常工作。由于SSX35的BIOS底层实现需要诸多的动作,有些是需要按照TPM标准进行规范性的初始化和资源分配,以及SSX35与用户的人机交互,为简化SSX35在新项目的导入工作,加快新项目的开发进度,可以将SSX35开发成一个标准的功能模块。

将SSX35模块化的目的在于降低新项目的移植难度和复杂度,减少重复劳动,提高工作效率。

3 SSX35芯片BIOS模块化开发的实现

3.1 SSX35 BIOS初始化流程

通过翻阅SSX35 Datasheet,总结出SSX35的BIOS初始化流程应该如图2所示进行。

3.2 SSX35 BIOS Init流程分解

在SSX35的初始化过程中,主要有四大判断步骤,分别是(对应于图1的①②③④):①硬件侦测、②用户是否进入BIOS Setup、③BIOS Setup是否需要Reset、④SSX35状态是否正确。具体的初始化工作包括:硬件初始化、获取状态、BIOS Setup的界面显示及人机交互设置、将控制权转交给操作系统前的锁定工作。

详细步骤如下:

1) 硬件侦测。

因为SSX35是通过LPC总线(Low Pin Count Bus:一种系统总线)与系统连接,SSX35的硬件侦测通过读取SSX35的LPC总线地址的值来进行判断,SSX35的LPC总线地址为:0FED40000h,如果读取值非零,则表示SSX35存在,否则不存在。具体的汇编代码如下:

TPM_SMM32_Action0:

;detect TPM module whether exist?

mov edx, TPM_LPC_Addr ;SSX35的LPC地址

mov al,ds:[edx]

cmp al,0ffh

je No_sinosun_TPM_Exist ;no found, jump

mov ax, 0

WRITENV cmosDetectTPMStatus ;写SSX35存在状态

xor ax, ax

clc

jmp TPMMP_Action_Done

No_sinosun_TPM_Exist:

mov ax, 01h

WRITENV cmosDetectTPMStatus ;写SSX35不存在状态

mov ax, 0A0h

stc

jmp TPMMP_Action_Done

2) SSX35硬件初始化。

对SSX35开始进行初始化的BIOS节点,一定要是在对内存和LPC的初始化完成之后,在用户选择是否BIOS Setup的节点之间进行!

在SSX35的硬件初始化中,先读取硬件状态保存位,如果硬件存在,则进行以下四个命令的初始化:

(注意:向SSX35下命令,是通过向TPM MP Driver来执行的,所谓的TPM MP Driver,是一个内建到BIOS里的二进制文件,由BIOS初始化时,在物理内存初始化完成之后,将TPM MP Driver复制到内存中,并记下其在内存中的位置。在调用SSX35 MP Driver时,需要先将出入参数设置好,将CPU切入到保护模式,然后执行一个跳转,以这样的方式向SSX35下命令,同样会有执行结果返回到EAX寄存器。)

① 调用SSX35 MP Driver,通知其以下命令采用MP Driver Function1,程序代码如下:

;call TPM MP driver function 1

mov ax, 0001h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

② 向SSX35 MP Driver下startup ST_CLEAR命令,进行SSX35的状态清理,代码如下:

;call TPM MP driver function 4 for startup ST_CLEAR cmd

mov ax, 0104h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

;get return codes

out 0ebh,al ;io delay

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h ;TPM initiates pass

je tpm_test_continue

cmp eax,26000000h ;TPM has been initiated

je tpm_test_continue

cmp eax,02080000h ;??? retry??

je startup_begin

;//todo error in here

;出错处理

③ 向SSX35 MP Driver下continue test命令,进行SSX35的继续测试,代码如下:

tpm_test_continue:

;call TPM MP driver function 4 for continue test cmd

mov eax, 0204h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

je TPM_contest_OK

; cmp eax,02080000h

; je tpm_test_continue

; mov ah, 0FEh

; jmp Sinosun_TPM_MP_Fail

TPM_contest_OK:

④ 向SSX35 MP Driver下PhysicalPresence_CommandEnable命令,进行SSX35的物理状态使能,代码如下:

WaitingForContinueTestOK:

;call TPM MP driver function 4 for TSC_PhysicalPresence with PhysicalPresence_CommandEnable

mov eax, 0304h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax유,ds:[edx]

cmp eax, 02080000h ;detect continue test return code in here for tpm new firmware 1.2.0.9, it is fault in this firmware

je WaitingForContinueTestOK

cmp eax,00000000h

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

⑤ 向SSX35 MP Driver下PhysicalPresence_Presence命令,进行SSX35的物理状态设置,代码如下:

;call TPM MP driver function 4 for TSC_PhysicalPresence with PhysicalPresence_Presence

mov eax, 0404h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A1h

jne Sinosun_TPM_MP_Fail

3) STATUS阶段的主要工作是,报告设备接收数据或者发送数据的状态。

3.3 读取SSX35状态

通过SSX35 MP Driver Function 4读取SSX35的'disable'、'deactived'、 'owner'这3个状态,并保存到BIOS CMOS中,具体代码如下:

;call TPM MP driver function 4 for TPM_GetCapability

;Get the 'disable','deactived' flag

mov eax, 0504h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A2h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A2h

jne Sinosun_TPM_MP_Fail

add edx, 10 ;get return byte 19

xor ax, ax

mov al, byte ptr ds:[edx]

WRITENV cmosTPMActiveStatus

add edx, 2 ;get return byte 17

xor ax, ax

mov al, byte ptr ds:[edx]

WRITENV cmosTPMCtrlStatus

;Get the 'owner' flag

mov eax, 0604h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A2h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx, 6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A2h

jne Sinosun_TPM_MP_Fail

add edx, 8

xor ax, ax

mov al, byte ptr ds:[edx]

WRITENV cmosTPMOwnerStatus

3.4 SSX35 BIOS Setup的信息显示及人机交互处理

在BIOS Setup中,总共需要以下条目显示或设置SSX35,如表1所示。

其中序号1条目负责显示SSX35硬件是否存在的状态,并且决定后续的序号条目是否显示:如果SSX35硬件不存在,则所有相关SSX35的BIOS选项全部消失。

关于SSX35的用户设置,有2个开关设置项,分别是序号2和序号5。并且,因为TPM是可信技术的基础,关于这两个选项的设置,必须加以保护。通常,序号2(TPM禁用/启用)由BIOS Setup中‘User Password’保护,序号5(TPM清除所有者)通常由‘Supervisor Password’保护,如果这个两个BIOS Setup的密码没有设置,则TPM的这两个设置项无法选择(灰色显示),需要设置过BIOS Setup的User和Supervisor密码方可使用。并且,在BIOS法相CMOS掉电或其他情况导致需要重新载入BIOS Setup默认值时,关于TPM的状态和设置不会发生变化。

3.5 检查SSX35状态是否正确

为保证SSX35的状态和设置一致,需要加入一个双重检测的步骤,这个步骤的BIOS节点安排,必须放在尽量靠近BIOS Setup结束之后的BIOS自检过程中。

该步骤主要对TPM使能和TPM当前所有者状态(对应的序号3和序号6)这两个状态进行硬件和BIOS Setup显示状态的对比,如果发现硬件状ณ态和BIOS Setup的显示状态不一致,则系统需要进行重启,以保证硬件和客户设置一致。

3.6 锁定SSX35

在进入操作系统之前,为防止其他非法的SSX35访问、调用硬件,甚至篡改SSX35的设置,需要进行一个锁定动作。SSX35的锁定动作,一般放在BIOS将控制权转交给操作系统之前的BIOS节点,一般是TP_INT19,代码如下:

;;;TPM MP driver fun4 commands completed, lock it

;1, TPM_PhyPre_NotPre

mov eax, 0c04h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

;2, TPM_PhyPre_Lock

mov eax, 0d04h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

;3, TPM_PhyPre_CmdDisable

mov eax, 0e04h

mov word ptr cs:[Transmit_TO_32bitCall], ax

call TPM_PM32_Handler

mov al, byte ptr cs:[TPMMP_Call_Return]

cmp al, 0

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

out 0ebh,al

mov edx,TPM_ORD_Startup.pbOutBuf

add edx,6

mov eax,ds:[edx]

cmp eax,00000000h

mov ax, 0A4h

jne Sinosun_TPM_MP_Fail

3.7 两✞种需要系统重启的情况

因SSX35相关的需要强制系统重新启动的情况有以下两种:

1) 用户在BIOS Setup中设置或者更改了SSX35,在BIOS对SSX35硬件做了相应动作之后,需要重新启动后才能生效;

2) 在BIOS检测到SSX35硬件状态和CMOS的状态不一致时,表示BIOS对SSX35的初始化动作有问题,需要重新启动系统。

4 SSX35 BIOS测试向导

当系统BIOS更新为支持SSX35的BIOS之后,我们可以看到在BIOS Setup菜单的Security中多了几个关于SSX35的选项。如图3所示,下面我们就对这几个选项作一下说明。

4.1 SSX35状态项

4.1.1 TPM H/W Status

显示TPM芯片是否存在的信息。当笔记本电脑中安装有TPM的芯片时,这一项显示信息为Exist。当笔记本电脑中没有安装TPM的芯片时,这一项显示信息为No Exist,而且其他关于TPM的五个选项将被隐藏,不显示。

4.1.2 TPM Current Status

显示TPM当前的状态是Enable或者Disable.

4.1.3 TPM Activation Status

显示TPM Active的状态是Active或者Deactive。

4.1.4 TPM Owner Current Status

显示TPM Owner当前是否存在的状态,Owner或者NOT Owner.

4.2 SSX35控制项

4.2.1 TPM En/Disable: [Enable/Disable]

这是供用户对TPM功能进行启用或禁用的选项。

当选择Enable保存退出后,用户可以在操作系统中对TPM功能进行相关操作。重新进入SETUP后,TPM Current Status为Enable,TPM Activation Status为Active。

当选择Disable保存退出后, 用户无法在操作系统中对TPM进行任何操作。重新进入SETUP后,TPM Current Status为Disable,TPM Activation Status为Deactive。

当用户load setup default value时,这一项的值不会被改变,保持用户上一次的选择。

当cmos 放电后,这个选项会恢复成disable。

4.2.2 TPM Clear Owner: [No Change/Clear]

当TPM Current Status为Disable、没有设置supervisor password或者TPM Owner Current Status 为 NOT Owned时,这一项不可选。

选择No Change即对TPM Owner不进行任何操作。

选择Clear后保存退出重新进入SETUP菜单后,TPM Current Status为Disable, TPM Activation Status为Deactive, TPM Owner Current Status 为 NOT Owned.

5 总结

关于SSX35的BIOS移植过程中,最关键的几个技术点如以下所示:

1) SSX35初始化过程各段代码需要保证置于合适、正确的位置,主要的部分是:硬件初始化需要在内存和LCP总线初始化结束之后;需要在BIOS Setup退出之前进行SSX35设置侦测,如果用户改动,需要进行相应动作并重新启动;在自检点超过用户进入BIOS Setup的地方,需要进行SSX35硬件和CMOS状态的检验,如果不匹配则需要重新启动;BIOS转交控制权给操作系统之前,需要进行SSX35的锁定动作。

2) SSX35的MP Driver要求在保护模式下进行,因此调用之前必须要保证保护模式和实模式的正常切换。

3) 需要向用户提供完整的系统信息,提供合理的用户交互界面。

4) 需要保护SSX35的设置不受非法用户改动。

5) 需要出错时的处理及通过完成测试。

尽管关于TPM芯片的支持需要遵循TPM标准的约束,但是由于各个TPM芯片厂家的做法不同,并且TPM也是一种新兴技术,因此没有可以借鉴的先有案例,本次通过与原厂的共同协作,在Phoenix BIOS(TrustedCode)中实现对SSX35的支持,并且将之模块化,使得夏新不仅在LODM(Local ODM)中率先掌握了该项技术,还使得该项技术可以快速应用于任何一款新型的笔记本电脑产品中去,具有技术前沿的科研型并带来了实际的经济效益。

TPM是一个商用的国际化信息安全标准,但在不同国家或地区有一定的限制。比如在我国,TPM的生产厂家需要获得国家相关部门的认证和许可,并且我国也推出自有的标准TCM(Trusted Cryptography Module),主要体现在密码算法上的自主化上,采用了国产加密算法。TPM可信计算芯片标准的特点主要体现在动态度量和对信息的安全保障方面。尽管TPM和TCM有不同之处,但是结构上相似,TPM是国际化应用,TCM应用于我国。本文所研究的结果,可以给予TPM开发者很好的学习和示范,也给予TCM开发者触类旁通的借鉴。


热门排行: 教你如何写建议书