使用TSS和C中的TrouSerS创建背书密钥

安德罗

我正在用C编写程序,以生成认可密钥和存储根密钥。如何设置生成认可密钥所需的密钥信息以及需要使用哪些标志?

我正在VirtualBox中处理两个预配置的虚拟机映像。其中一个正在模拟TPM,另一个正在容纳C程序。这两个通过内部网络相互连接。我可以连接到TPM机器,并在终端上运行TrouSerS tpm_tools。我可以通过运行“ createek”和SRK来创建背书密钥。但是,我在运行trousers / src / include / tss / tspi.h中包含的Tspi_TPM_CreateEndorsementKey时遇到麻烦。

TCG软件堆栈(TSS)规范版本1.10(2003年8月20日黄金版)提到:“创建背书密钥所需的密钥信息必须在调用此方法之前由Tspi_SetAttribData()在密钥对象中设置。” 使用Tspi_TPM_CreateEndorsementKey时。我不了解如何设置此信息或使用哪些信息。

这是我的方法。“ hKey”是用于保存创建背书密钥所需信息的密钥。

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
#include<sys/stat.h> 
#include<sys/types.h> 
#include<tss/platform.h> 
#include<tss/tss_defines.h> 
#include<tss/tss_typedef.h> 
#include<tss/tss_structs.h> 
#include<tss/tspi.h> 
#include<trousers/trousers.h> 
#include<tss/tss_error.h> 
// Macro for debug messages 
#define DBG(message , tResult) printf("(Line%d, %s) %s returned 0x%08x. %s.\n", __LINE__, __func__, message, tResult, (char*)Trspi_Error_String(tResult))

// MAIN entry point
int main (int argc, char **argv) 
{
    TSS_HCONTEXT hContext = 0;
    TSS_HTPM hTPM = 0;
    TSS_RESULT result;
    // Other unrelated attributes
        // Create context and get tpm handle 
    result = Tspi_Context_Create(&hContext);
    DBG("Create a context: ", result);
    // NULL  represents  the  local  TPM)
    result = Tspi_Context_Connect(hContext, NULL);
    DBG("Connect to TPM: ", result);
    result = Tspi_Context_GetTpmObject(hContext, &hTPM);
    DBG("Get TPM handle: ", result);

    // Create the endorsement key
    TSS_VALIDATION pValidationData;
    TSS_HKEY hKey = 0;
    result = Tspi_TPM_CreateEndorsementKey(hTPM, hKey, &pValidationData);
    DBG("Create endorsement key: ", result);
    // Get EK public key
    TSS_HKEY hEndorsementPubKey;
    result = Tspi_TPM_GetPubEndorsementKey(hTPM, FALSE, NULL, &hEndorsementPubKey);
    DBG("Get EK public key: ", result);
    // START OF APP

// some code

    // END OF APP 
        // Free memory 
    result = Tspi_Context_FreeMemory(hContext, NULL);
    DBG("Tspi Context Free Memory: " , result);
    result = Tspi_Context_Close(hContext);
    DBG("Tspi Context Close: ", result);

    return 0;
}

这是运行程序时的打印输出。

(Line48, main) Create a context:  returned 0x00000000. Success.
(Line51, main) Connect to TPM:  returned 0x00000000. Success.
(Line53, main) Get TPM handle:  returned 0x00000000. Success.
(Line59, main) Create endorsement key:  returned 0x00003126. Invalid handle.

----Stuff to do afterwards-----

(Line109, main) Tspi Context Free Memory:  returned 0x00000000. Success.
(Line111, main) Tspi Context Close:  returned 0x00000000. Success.

如果这些句柄之一无效,则使用返回代码“ Invalid handle”。hTPM,hKey。我很确定这是hKey。在终端上使用createek生成背书密钥时,我可以将hTPM用于其他指令,例如Tspi_TPM_OwnerGetSRKPubKey。

安德罗

看起来您只需创建带有“ TSS_KEY_SIZE_2048”标志的“ TSS_OBJECT_TYPE_RSAKEY”类型的对象即可生成密钥。如文档中所建议的,无需使用setAttribData设置任何属性。要考虑的另一件事是将CreateEndorsementKey中的“ TSS_VALIDATION”参数设置为空指针。这告诉TSS服务处理密钥验证,因此您不必自己处理密钥。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#中创建我的对称密钥

来自分类Dev

使用 xaml 中的密钥创建实例

来自分类Dev

如何使用相同的 appid 和密钥创建多个活动源?

来自分类Dev

使用RSACryptoServiceProvider,如何将密钥交换密钥和签名密钥存储在同一密钥容器中?

来自分类Dev

使用xCode在C ++中创建,管理和删除文件

来自分类Dev

使用 And 和 Or 子句在 C# 中创建 Mongodb 查询

来自分类Dev

直接在Go中创建或使用GPG或SSH密钥

来自分类Dev

如何使用if else语句在javascript对象中创建密钥

来自分类Dev

再次使用密钥列表从列表中创建字典

来自分类Dev

使用 compareProposalResponseResults SDK 类验证背书交易

来自分类Dev

在Mnesia中创建复合密钥

来自分类Dev

在xslt模板中创建密钥

来自分类Dev

在github中创建ssh密钥

来自分类Dev

Terraform中的GCP服务帐户密钥管理和使用

来自分类Dev

使用 JavaScript 和 JQuery 从表单中检索密钥

来自分类Dev

如何删除 React 中的特定组件?(使用密钥和 ID)

来自分类Dev

C ++使用密钥和掩码对Char进行加密

来自分类Dev

使用PHP随机创建密钥

来自分类Dev

使用其他用户api密钥在servicestack中实现仅应用程序的API密钥和密钥

来自分类Dev

如何创建一个与我最近在 Firebase 中删除的项目中使用过的包名称和 SHA-1 密钥相同的项目?

来自分类Dev

通过脚本创建用户和 SSH 密钥

来自分类Dev

如何创建自己的证书和密钥文件?

来自分类Dev

如何从我们创建的密钥库中检索我的公钥和私钥

来自分类Dev

使用node.js和socket.io在密钥之间创建私人聊天

来自分类Dev

ScalaSpark-使用密钥和值列表创建一对RDD

来自分类Dev

使用BouncyCastle和外部Azure KeyVault(HSM)密钥创建证书时,签名无效

来自分类Dev

如何正确使用BundleSignerCondition和管理密钥以基于捆绑签名创建安全的OSGI环境?

来自分类Dev

如果嵌套哈希中不存在密钥,则创建密钥

来自分类Dev

如果嵌套哈希中不存在密钥,则创建密钥

Related 相关文章

  1. 1

    在C#中创建我的对称密钥

  2. 2

    使用 xaml 中的密钥创建实例

  3. 3

    如何使用相同的 appid 和密钥创建多个活动源?

  4. 4

    使用RSACryptoServiceProvider,如何将密钥交换密钥和签名密钥存储在同一密钥容器中?

  5. 5

    使用xCode在C ++中创建,管理和删除文件

  6. 6

    使用 And 和 Or 子句在 C# 中创建 Mongodb 查询

  7. 7

    直接在Go中创建或使用GPG或SSH密钥

  8. 8

    如何使用if else语句在javascript对象中创建密钥

  9. 9

    再次使用密钥列表从列表中创建字典

  10. 10

    使用 compareProposalResponseResults SDK 类验证背书交易

  11. 11

    在Mnesia中创建复合密钥

  12. 12

    在xslt模板中创建密钥

  13. 13

    在github中创建ssh密钥

  14. 14

    Terraform中的GCP服务帐户密钥管理和使用

  15. 15

    使用 JavaScript 和 JQuery 从表单中检索密钥

  16. 16

    如何删除 React 中的特定组件?(使用密钥和 ID)

  17. 17

    C ++使用密钥和掩码对Char进行加密

  18. 18

    使用PHP随机创建密钥

  19. 19

    使用其他用户api密钥在servicestack中实现仅应用程序的API密钥和密钥

  20. 20

    如何创建一个与我最近在 Firebase 中删除的项目中使用过的包名称和 SHA-1 密钥相同的项目?

  21. 21

    通过脚本创建用户和 SSH 密钥

  22. 22

    如何创建自己的证书和密钥文件?

  23. 23

    如何从我们创建的密钥库中检索我的公钥和私钥

  24. 24

    使用node.js和socket.io在密钥之间创建私人聊天

  25. 25

    ScalaSpark-使用密钥和值列表创建一对RDD

  26. 26

    使用BouncyCastle和外部Azure KeyVault(HSM)密钥创建证书时,签名无效

  27. 27

    如何正确使用BundleSignerCondition和管理密钥以基于捆绑签名创建安全的OSGI环境?

  28. 28

    如果嵌套哈希中不存在密钥,则创建密钥

  29. 29

    如果嵌套哈希中不存在密钥,则创建密钥

热门标签

归档