返回 科技论文 首页
TPM芯片SSX35的BIOS模块化开发

  摘要:在当今信息化时代,信息安全的重要性是不言而喻的。该文介绍的是一种常用标准化可信平台模块,全称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-3044(2011)20-4975-06
  The BIOS Modular Development of TPM Chip SSX35
  LIN Cong-fa
  (China Greatwall Computer Shenzhen Co., Ltd, Shenzhen 518057, China)
  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 (Low Pin Count) system bus, BIOS (Basic Input / Output System) underlying software support to realize interactive operation between TPM hardware and users and to the initialize TPM.This paper proves practical achievement of BIOS underlying 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。
  可信计算的根本目标是向用户提供完整的可信安全解决方案,其研究内容包括:系统安全芯片(TPM),安全主板,安全BIOS,安全操作系统,安全数据库,安全应用,安全可信网络接入,其中系统安全芯片(TPM)作为提供可信计算的核心部件。
  TPM对于存储密钥的保护管理,是一个树结构,下层密钥由上层的密钥加密保护。这个保护存储密钥层次的根是SRK(storage Root key存储根密钥),这是一对非对称密钥对,其公钥用于保护加密下级的SK(storage key存储密钥),其私钥始终保护在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 (permanent)
  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开发者触类旁通的借鉴。
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文


【相关论文推荐】
  • 基于UG草图的车门定位夹具模块化开发
  • WxWidgets框架应用及其模块化开发
  • 网站前端模块化开发策略研究
  • 用于Windows的TPM 2.0加密芯片
  • 基于集中控制的模块化开关电源系统的研究
  • 组合测具设计模块化的应用开发
  • 基于Maven开发的模块化在线教学平台
  • 模块化单片机实验装置的开发
  • SSX