zoukankan      html  css  js  c++  java
  • TSS学习记录

    转载测试 自己总结了一下TSS的相关资料,简介一共分为五大部分:

    1. TPM Internals

    2. TPM Device Driver(TDD)

    3. TCG Device Driver Library(TDDL)

    4. TCG Core Services(TCS)

    5. TCG Service Provider(TSP)

       

    0. TSS简介

       TSS是与TPM进行交互的核心软件部件,TSS的设计规范由TCG颁布,到目前为止版本号为1.2,并且厂商自行设计的TSS必须符合TSS1.2标准。TSS的构成如图所示,那么TSS的设计目的有以下四个方面:

       1)为应用程度提供到TPM功能服务的单入口点;

       2)提供对TPM同步访问

       3)按标准构建字节流隐藏应用程序所构建的命令流;

       4TPM资源的管理

       一般说来,TSS就是使用户可以使用TPM所提供的相关服务,这些服务包括:完整性度量及报告、认证功能和加、解密服务等。

    一、TPM Internals

        TPM的内部构造,只介绍主要的几个部分,如下

    1. I/O
       
    管理流经通信总线的信号流,典型的 LPC总线 (Low PinCount Bus)
    2. Execution Engine
       
    是一个微控制器,用于对命令码的校验、解析及执行,并控制内部执行流。(类似于PC中的CPU

    3. SHA-1 Engine (160 bits)
       
    主要被TPM使用,作为其可信的哈希算法。在平台启动过程中,其接口暴露在TPM外以进行度量工作,由CRTM使用,但不由应用程序使用。未来的TPM版本会加入更多的哈希算法。
    4. RNG
       TPM
    内部的随机源,伪随机生成器。用于生成Nonce , 密钥等。

    5. RSA Engine and Key Generator
        
    用于非对称密钥的生成(RSA;存储SKAIK 密钥大小 >= 2048),它支持 512, 1024, 2048 bit的密钥,规范中建议使用2048位的密钥。RSA密钥生成遵循PKCS #1标准,在规范中其RSA公钥必须是0x10001RSA密钥在使用的时候要加载到TPM内部。

    6. Volatile Memory
       
    里面包括:密钥槽(10) PCR(24),密钥句柄、授权会话句柄等。(类似于PC中的内存)
    7. Non-Volatile Memory
       
    包括EK(2048bit)EK证书,SRK(2048bit)及属主(Owner)授权数据(160bit)等。(类似于PC中的硬盘)
    8. Opt-In

        平台属主决定是否使用TPM。(类似于PC中的power键)

       

    PS:括号中的"类似于"只是帮助理解TPM的内部构造。另外提一下,TPM+CRTM+TSS构成了可信平台的子系统,该子系统可以用在PCPDAmobilephonePS3XBOX等通信设备系统中,增强该系统的安全性及可信性。

     

    TDD这一部分就不介绍,具体可参见TIS标准。

    二、TDDL

       TDDLTSS用于和TPM通信的组件,它是运行于用户空间的第一个TSS组件,提供了内核模式到用户模式的转换。在TSS规范中,它也处于TCSTDD之间,为TCS提供接口TDDLi,这里TDDLi是一个单线程同步接口,发送到TDDLiTPM命令都已经被串行化。那么对于直接访问TPM设备的程序,TDDLi提供了7个功能函数,用于和TDD进行通信。这些函数包括:
       Tddli_Open()
    Tddli_Close()Tddli_TransmitData(…)
        
    值得说明的是,TDDL必须仅提供对TCS的链接。在这一部分,主要对TPMCommands以及授权协议作一下介绍。

        1.TPMCommands

       下面来具体介绍一下TPM CommandTPMCommands就是TPM可以直接理解的命令,用这些命令可以直接访问TPM,如图:

    这样一个简单的询问PCR数量的命令交互过程就完成了。传输以及接受到的命令流都是以图中十六进制方式表示的。

     

    2. 授权协议(Authorization Protocols

       授权是指,能够证明请求者拥有执行某个TPM功能和使用某些对象的许可。用双方共享秘密(授权数据 )进行证明,无其他方式。

       授权数据是一个在用户和TPM之间共享的160bit秘密值,该秘密值由用户创建,可以看做是passwordSRKTPMOwner的授权数据要保存在TPM内部非易失性存储区内,而其他对象的授权数据则要与其自身进行绑定。当我们在编写关于TPM程序的时候,授权数据在策略对象里设置。

       TPM中授权协议有很多,仅介绍其中有代表性的两个协议:对象无关授权协议(OIAP)以及对象相关授权协议(OSAP)

        1ObjectIndependent Authorization Protocol (OIAP)
           
    为提高效率而设计,在一个授权会话中可以验证一个或多个不同的对象;
           
    验证的过程使用双方共享的秘密值(授权数据)
        
    2ObjectSpecific Authorization Protocol (OSAP)
           
    在一个授权会话中仅对一个对象进行操作;
           
    设置或重新设置授权数据的时候使用该协议;

    下面用一个例子来说明这两个协议的使用,该例子说明的是一个密钥的创建-》加载-》使用整个过程所使用的授权协议,如图所示:

    总的说来,这两个协议基于的是传统的"挑战-响应"认证方法,比较容易理解。

     

     

    三、TCG Core Service

       此部分将详细介绍TCS核心服务,为什么要有这个服务呢?首先分析一下TPM所存在的一些缺陷,如下:

       1)一次只有一个操作可以进行;

       2)由于硬件的限制,TPM处理速度很慢;

       3)有限的资源,包括密钥槽、授权槽等;

       4)只能通过一个驱动程序与其进行串行通信;

        5)本地软件与之通信是有限制的。

       针对这些缺陷,TCS采取如下的方法:

       1)可以对多个TPM待处理的操作进行排队;

       2)对于不需要TPM处理的操作,TCS可以自行作出响应;

       3)对TPM有限资源进行管理,可看做是无限的资源;

       4)将输入输出的数据进行相应的转换;

       5)可以对资源提供本地的或者远程的调用方式。

        那么TCS的特点又有哪些呢?

       1TCS是一个后台服务(类似于Linux下的daemon,或者windows下的system service;

       2)它为TSP提供标准的接口TCSi(稍后介绍);

       3TCG标准中,TCS是唯一一个可以直接访问TPM的实体;

        4)每个TPM仅对应一个TCS(注意:TCS并不提供加解密功能);

       5)对TPM有限的资源进行管理(密钥、证书管理,以及上下文的管理);

       6TCS负责调度要操作的TPM命令(注意:每个操作都是原子操作,并且允许多线程访问);

       7TCS将上层的命令转换为TPM命令格式。

       对于(4~7)这四个特点来说,我们可以将TCS视为一个软件的TPM。就其本质来说,TCS就是一个管理服务。

    1. TCS Interface(TCSi)

       它类似于C语言接口(说C接口只是为了方面讨论而定义的基准,其实并不是这么做。真正的TCS接口定义在TSS发布的.wsdl文件中,实为Web服务。),允许多个线程访问TCS,每个操作都是原子操作,它作为系统进程存在,TSP与之的通信有可能是RPC,如图。

    2. Manager Services

       用文字叙述较为困难,做了几个图来具体介绍一下TCS所提供的管理服务,如图:

    (注意:这里的Persistent Storage与之后介绍的TSP层的PersistentStorage不是同一个贮存区,他们各自有其贮存区,在TCS层仅有一个贮存区,而在TSP层则针对不同的用户有不同的贮存区。

  • 相关阅读:
    六大设计原则
    spring的文件上传应用
    web项目的分页
    自己尝试写web,网页上点击链接没反应,没有发出http请求。
    python3.6使用chardet模块总是报错ValueError: Expected a bytes object, not a unicode object
    chardet模块的安装:检查编码类型
    decode,encode的用法
    转:Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别
    js赋值运算符 && 自增自减
    js算数运算符
  • 原文地址:https://www.cnblogs.com/amywu2015/p/5212082.html
Copyright © 2011-2022 走看看