Hierarchy Commands
TPM2_CreatePrimary
此命令用于在主种子之一下创建主对象或在 TPM_RH_NULL 下创建临时对象。 该命令使用 TPM2B_PUBLIC 作为要创建的对象的模板。 不应检查唯一字段的大小是否与其他对象参数一致。 该命令将创建并加载一个主对象。 不返回敏感区域。
注 1 由于未返回敏感数据,因此无法重新加载密钥。 它既可以持久化,也可以重新创建。
注 2 为了互操作性,唯一字段不应设置为大于对象参数所允许的值,以便解组不会失败。
注 3 空缓冲区是合法的唯一字段值。
示例 1 对象参数中 keyBits 为 2048 的 TPM_ALG_RSA 对象应具有不大于 256 字节的唯一字段。
示例 2 TPM_ALG_KEYEDHASH 或 TPM_ALG_SYMCIPHER 对象应具有唯一字段,该字段不大于对象的 nameAlg 生成的摘要
TPM2_Create() 允许的任何类型的对象和属性组合都可以通过此命令创建。 模板和参数的约束与 TPM2_Create() 相同,除了主存储密钥和临时存储密钥不受限于使用其父代的算法。 对于已创建对象的属性设置,fixedParent、fixedTPM、decrypt 和 restricted 隐含在父对象(永久句柄)中设置。 其余属性隐含为 CLEAR。
TPM 将使用批准的 KDF 从 primaryHandle 中指示的主要种子派生对象。 模板的所有位都用于创建主密钥。 从主种子创建主对象的方法在 TPM 2.0 第 1 部分中描述并在 TPM 2.0 第 4 部分中实现。如果使用相同的 inPublic 参数、inSensitive.data 和主种子多次调用此命令,则 TPM 应生成 相同的主要对象。
此命令需要授权。 附加到平台主要种子 (PPS) 的主要对象的授权应由 platformAuth 或 platformPolicy 提供。 主要对象授权附加到存储主种子(SPS)的应由 ownerAuth 或 ownerPolicy 提供。 附加到背书主种子 (EPS) 的主密钥的授权应由 endorsementAuth 或 endorsementPolicy 提供
10.2 source
10.2.6 CryptUtil.c
10.2.6.6 Algorithm-Independent Functions
10.2.6.6.8 CryptCreateObject()
这个函数创建一个对象。 对于非对称密钥,它将创建一个密钥对,对于父密钥,它将创建一个用于子保护的种子值。 对于对称对象(TPM_ALG_SYMCIPHER 或 TPM_ALG_KEYEDHASH),如果调用者未提供密钥,它将创建一个密钥。 它将创建一个随机的秘密种子值,该种子值与秘密值一起散列以创建公共唯一值。 publicArea、sensitive 和 sensitiveCreate 是唯一必需的参数,也是 TPM2_Create() 使用的唯一参数。 其他参数是可选的,当生成的对象需要确定性时使用。 主对象和派生对象都是这种情况。 当提供种子值时,将填充 RAND_STATE 并将其用于对象生成中需要随机数的所有操作。 在最简单的情况下,TPM2_CreatePrimary() 将使用种子、标签和上下文,其中上下文是模板的哈希值。 如果主对象在背书层次结构中,它也将使用 ehProof 填充证明。 对于派生密钥,种子将是来自父项的秘密值,标签和上下文将根据 TPM2_CreateLoaded() 的参数进行设置,并且将设置 hashAlg,这会导致 RAND_STATE 成为 KDF 生成器。
ibmtpm 1682版本中的实现:
引用<<TCG_TPM2_r1p59_Part3_Commands_code_pub.pdf>>
引用<<TCG_TPM2_r1p59_Part4_SuppRoutines_code_pub.pdf>>