可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈

最近有项目需要,需要开发移动终端的安全。首先想到的是可信计算,可信计算在PC机比较流行,但是目前对可信计算的褒贬不一,这里不作评论。本文的目的是记录一下我的开发过程。

我使用的芯片是ATMEL公司的AT97SC3204T,基于I2C总线的。从选型、硬件设计、画板、驱动、TSS栈一条龙下来,目前进展的还算顺利。

一、硬件设计和驱动

先说一下硬件的设计,上图!

原理图异常简单,根据手册的要求设计即可。这里值得提一下的是,手册里要求必须上拉的引脚务必上拉,否则芯片将不能工作。我遇到的情况是由于当初手动焊接该芯片,导致一个引脚虚焊,在加载I2C驱动程序进行芯片探测的时候,一直找不到它:

后来补焊之后就OK了。这里贴一下驱动加载OK之后的一些效果,具体的使用下一步再说。

加载驱动:

[[email protected] /nfs/at97sc3204t]# insmod tpm_data.ko

[[email protected] /nfs/at97sc3204t]# insmod tpm_i2c_atmel.ko

tpm_i2c_atmel 0-0029: probe TPM 1.2 start.

tpm_i2c_atmel 0-0029: misc device /dev/tpm0 created.

tpm_i2c_atmel 0-0029: Issuing TPM_STARTUP OK.

tpm_i2c_atmel 0-0029: probe TPM 1.2 succeed.

到特定的目录查看一下:

 [[email protected] /sys/devices/platform/s3c2440-i2c.0/i2c-0/0-0029]# ls
active            enabled           pcrs              timeouts
cancel            misc              power             uevent
caps              modalias          pubek
driver            name              subsystem
durations         owned             temp_deactivated

看一下文件内容:

[[email protected] /sys/devices/platform/s3c2440-i2c.0/i2c-0/0-0029]# cat pcrs
PCR-00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-01: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-02: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-03: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-04: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-05: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-06: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-07: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-08: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-09: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-11: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-12: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-14: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-15: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-16: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-17: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-18: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-19: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-20: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-21: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
PCR-22: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PCR-23: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

[[email protected] /sys/devices/platform/s3c2440-i2c.0/i2c-0/0-0029]# cat caps
Manufacturer: 0x41544d4c		//ATML的ASCII码
TCG version: 1.2
Firmware version: 37.13

[[email protected] /sys/devices/platform/s3c2440-i2c.0/i2c-0/0-0029]# cat pubek
Algorithm: 00 00 00 01
Encscheme: 00 03
Sigscheme: 00 01
Parameters: 00 00 08 00 00 00 00 02 00 00 00 00
Modulus length: 256
Modulus:
AB 56 7C 0E 60 8C 5C 18 9E 90 2C 37 32 CF E3 FE
4F A7 B5 0C 78 A1 5D A7 39 EB C0 06 87 05 DB 1F
E4 AB 2A 9A 68 E3 5B B6 FB 27 69 5A 4B E2 90 65
04 B2 78 CF 44 02 7C 16 4C FB F5 F0 F6 25 7D 31
F1 2E D8 67 93 5A 48 B2 C1 4C 16 FD 97 E5 86 65
4A 2E 07 4B 14 78 F7 66 83 66 05 B0 EA EC 1E 16
CF F9 F9 C5 5C BC 7B 42 24 A1 A7 1B 55 D7 4B B1
62 7F 90 88 EE FB FB 26 B1 4F 56 97 8C D0 12 05
A6 EF 09 C9 08 10 F2 1B 65 9C F2 05 7B CC 4E 6A
65 0C 1C E1 B5 3E 86 7D F8 0B 8B 6F E3 72 2B CB
C9 3D F8 61 F4 83 74 B1 38 A6 CE DE 18 7F 8D C4
8F A1 8E A6 AC 71 A4 89 60 D3 3E 5F 3D 18 5C 32
6C 96 1D 84 8B 50 C3 5B 68 5C 16 2D 9C BB F1 79
60 6E C9 25 AA EC 26 9E 9E D4 D6 89 F3 FF 23 AA
75 46 3B 4A EA 1D E5 03 B9 AC 6D F8 2D 88 FF 84
12 B8 47 CF 3A 32 C9 66 C6 E3 2C 1F 7D 30 D8 99

二、TSS栈

这里指的是Trousers,我用的版本是0.3.11.2。Trousers是一个开源可信计算软件栈,它从下到上依次为TDDL(驱动库)、TCS(核心服务)、TSP(服务提供者),tcsd是编译完毕之后的一个用户态可执行文件,作为守护进程运行。tcsd需在系统启动初始化阶段运行,这样以后所有要操作tpm的程序都必须经过TSS栈,这也是TCG规范所规定的。TDDL负责唯一打开TPM设备,实现打开、关闭、收发指令数据、获取版本信息等,TCS提供核心服务,调用TDDL。TSP是给上层程序的接口,用户可以编写应用程序利用这些接口,实现操作TPM。

1)       修改一下文件

修改src/include/tcsd.h里面的宏定义为:

#defineTCSD_DEFAULT_CONFIG_FILE  "/etc/tcsd.conf"

这是默认的tcsd的配置文件,要不然默认的配置文件是编译输出的文件夹。按照下一步的做法,即是:$PWD/out/ etc/tcsd.conf。

当然,这一步不做的话也可以,使用 -c指定配置文件: tcsd -c /etc/tcsd.conf

2)       编译安装

[[email protected]:/home/zcw/tpm/trousers-0.3.11.2]# ./configure --host=arm-linux --prefix=$PWD/out LIBS=-liconv
[[email protected]:/home/zcw/tpm/trousers-0.3.11.2]# make
[[email protected]:/home/zcw/tpm/trousers-0.3.11.2]# make install
[[email protected]:/home/zcw/tpm/trousers-0.3.11.2]# ls out/
etc  include  lib sbin  share  var

3)       将编译出的文件拷贝到根文件系统

4)       执行tcsd可能遇到的错误:

错误1:

[[email protected] /mine]# ./tcsd -f
TCSD ERROR: Group "tss" not found, please add this groupmanually.

修改/etc/group文件,里面添加一行(其中1001是PC机上模拟器的,可以尝试一下别的是否可行):
tss::1001:

错误2:

[[email protected] /mine]# ./tcsd -f
TCSD ERROR: User "tss" not found, please add this usermanually.

办法,看了一下PC上的(事先在PC上安装了模拟器),修改/etc目录下的passwd,添加一行:
tss:x:999:1001::/:/bin/sh

错误3:

[[email protected] /mine]# ./tcsd -f
TCSD ERROR: TCSD config file (/etc/tcsd.conf)must be user/group tss/tss

执行:
[[email protected] /nfs]# chown tss /etc/tcsd.conf
[[email protected] /nfs]# chgrp tss etc/tcsd.conf

错误4:

[[email protected] /nfs]# ./tcsd -f
TCSD ERROR: Failed bind: Cannot assign requested address

       解决办法
[[email protected] /nfs]# ifconfig lo up

之后就成功了。

[[email protected] /nfs/at97sc3204t]# tcsd -f
TCSD TDDL ioctl: (25) Inappropriate ioctl for device
TCSD TDDL Falling back to Read/Write device support.
TCSD trousers 0.3.11.2: TCSD up and running.

三、tpm-tools-1.3.8

修改:tpm_nvread.c添加下面头文件:

26 #include <sys/stat.h>

[[email protected]:/home/zcw/open_source_tools/tpm/tpm-tools-1.3.8]# ./configure--prefix=$PWD/out --host=arm-linux --with-openssl=/path/to/openssl/compiled_out
[[email protected]:/home/zcw/open_source_tools/tpm/tpm-tools-1.3.8]# make
[[email protected]:/home/zcw/open_source_tools/tpm/tpm-tools-1.3.8]# makeinstall

拷贝库、可执行文件到根文件系统。

测试芯片:

[[email protected] /nfs/at97sc3204t]# tpm_version
  TPM 1.2 Version Info:
  Chip Version:        1.2.37.13
  Spec Level:          2
  Errata Revision:     2
  TPM Vendor ID:       ATML
  TPM Version:         01010000
  Manufacturer Info:   41544d4c

可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈

时间: 2024-07-30 01:56:54

可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈的相关文章

算法系列(六)数据结构之表队列和栈

在http://blog.csdn.net/robertcpp/article/details/51559333一文中,我们讲了排序,这一章来介绍一下基本数据结构:表.队列.栈和它们的简单实现 一.表ADT 1.数组实现顺序表 通过对数组操作,来直接对表进行增删查改操作,这种线性表查找某个位置的元素花费的时间为O(1),但是插入删除元素花费的时间为O(n),如果对表的操作更多的是访问操作,那么选择这种实现更为合适. 下面是一个简单实现 package com.algorithm.list; im

[jvm解析系列][十一]字节码执行之栈帧,你的字节码是如何运行的?

在之前的章节中我们讲解了jvm的内存分配和管理,class的文件结构,就差之行了.那么从第十一章开始我们就开始讲java虚拟机是如何执行一个class文件的. 首先我们应该明确虚拟机是区别于物理机的一种说法,物理机的执行引擎是建立在处理器,硬件 ,指令集之上的.而我们的虚拟机则由自己实现.在虚拟机中大致分为两种执行方式:解释执行和编译执行. 我们之前讲过,虚拟机运行方法的时候运行在java虚拟机栈里面,里面的存储结构是栈帧,需要了解一个虚拟机如何运行字节码文件的,首先我们需要了解一个栈帧的结构.

Bitlocker企业安全加密管理系列-1

对于企业来讲,设备值钱吗?值钱是肯定的,但有比设备更值钱的吗?当然那就是在设备上存储的数据了. 在当今社会,我们国家提倡大众创业,万众创新的大环境下,当我们在计算机上创新您的高科技产品或者设计时,您是否担心这些设计的窃取或者遗失呢?如何保障这些数据的安全呢?接下来在我的<Bitlocker企业安全加密管理系列>中,我将带大家重新认识一下变化一新的企业安全加密是如何为您的数据安全保驾护航的. 我们的系列会分为个人的安全机密和企业级安全机密这两个部分来分别给大家展开来讲. 那对于有些用户来讲一定不

Windows 10 周年更新后TPM的一个bug?

迟迟等不到推送更新,终于忍不住手动更新了.还是那句话,我很喜欢现在更新的方式,让Windows不会越来越臃肿. 升级完后一般我有一周的适应期,检查兼容性之类.目前的已知问题有,插入Kindle蓝屏--以及今天使用TPM的一个看似bug的问题. 鬼知道为啥我突然想用TPM,也许是想做个BitLocker的盘.忽然就发现--我忘记了TPM的密码-- 不论是"关闭TPM","更改所有者密码","重置TPM锁定"都需要输入TPM的密码--搜了全盘,也没找

tpm

Tpm芯片通过以下三个功能达到 1 公钥认证功能 2 完整性度量功能 3 证明功能 ? 公钥认证功能 采用硬件随机数产生器在芯片内部产生密钥对,以及公钥签名.验证.加密.解密. 通过在芯片中产生私钥,有病要在其传送至芯片外部时候进行加密等方法,TPM可以保证而已软件完全不能访问密钥. 因为密钥在芯片外若不解密是不可见,所以密钥拥有者也不能取得私钥,避免网络钓鱼攻击. ? 完整性度量 防止恶意代码获取私钥. 可信引导过程中,引导序列中的配置信息的散列值被存储到芯片中的平台配置寄存器 PCR ,一旦

借助TPM实现软件的版权保护和授权体系

在具有TPM芯片或PCI卡的机器上,实现软件版权保护和授权更加方便和可靠.本文介绍的方法适合在大面积工厂内部网络系统使用,对内网的多台主机重复安装的软件进行版权保护.该方法对软件系统使用进行版权保护,设计目标共有两项: 1.  防止软件系统被任意拷贝和安装在未经授权的机器或环境中: 2.  软件系统初始安装后具有一定期限的试用期,防止试用期过后未经授权的机器或环境继续使用该软件系统. 我们所设计的软件系统使用授权,采用笔记本电脑特定授权程序对待授权机器安装的软件系统进行认证授权的方式.具体授权方

FPGA开发全攻略——FPGA发展以及赛灵思系列产品

原文链接: FPGA开发全攻略连载之八:从可编程器件发展看FPGA未来趋势 FPGA开发全攻略连载之九:FPGA主要供应商与产品(1) FPGA开发全攻略连载之九:FPGA主要供应商与产品(2) FPGA开发全攻略连载之九:FPGA主要供应商与产品(3) 可编程逻辑器件的发展历史可编程逻辑器件的发展可以划分为4个阶段,即从20世纪70年代初到70年代中为第1段,20世纪70年代中到80年代中为第2阶段,20世纪80年代到90年代末为第3阶段,20世纪90年代末到目前为第4阶段. 第1阶段的可编程

痞子衡嵌入式:恩智浦半导体全系无线(BLE, Zigbee, Thread, 2.4G, Sub-1G)微控制器芯片一览

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦半导体全系列无线微控制器芯片. IoT物联网是未来的趋势,半导体厂商作为IoT产业的上游,主要提供核心的无线芯片,作为半导体知名厂商恩智浦半导体提供了非常丰富的无线系列微控制器,下面痞子衡收集了其所有无线微控制器产品系列(截止2018.06): 一.BLE芯片系列 二.Zigbee芯片系列 三.Thread芯片系列 四.2.4G芯片系列 五.Sub-1G芯片系列 至此,恩智浦半导体全系列无线微控制器芯片痞子衡便介绍完毕了,掌声

【转帖】华为芯片20年

华为芯片20年 https://www.cnbeta.com/articles/tech/848361.htm CPU 没有介绍 国产的兆鑫(x86)和国产的龙芯(MIPS) 以及江苏的OpenPower(浪商也在做) 但是IBM好像没计划 让OpenPower 运行AIX 华为1991年从成立ASIC设计中心起,到2004年成立海思半导体,直至成为中国自主芯片设计的代表,那么华为究竟做了哪些芯片呢?从大类上看,华为主要设计了五类芯片: 访问: 华为商城 1.SoC芯片 2.AI芯片 3.服务器