我正在尝试使用微软的MSR.TSS库(C++)将另一个系统的公钥导入到我的系统中,以便建立Diffie-Hellman密钥交换。
然而,我得到了以下错误:"TPM Error - TPM_RC::SIZE:有人试图加入或替换一个驱动器,该驱动器上的某个目录是上一个替换驱动器的目标。“
下面是我的示例代码:
storagePrimaryHandle = MakeStoragePrimary();
TPMT_PUBLIC eccTemplate(TPM_ALG_ID::SHA256,
TPMA_OBJECT::decrypt |
TPMA_OBJECT::fixedParent |
TPMA_OBJECT::fixedTPM |
TPMA_OBJECT::sensitiveDataOrigin |
TPMA_OBJECT::userWithAuth,
NullVec,
TPMS_ECC_PARMS(
TPMT_SYM_DEF_OBJECT(TPM_ALG_ID::_NULL, 0, TPM_ALG_ID::_NULL),
TPMS_KEY_SCHEME_ECDH(TPM_ALG_ID::SHA256),
TPM_ECC_CURVE::NIST_P256,
TPMS_NULL_KDF_SCHEME()),
TPMS_ECC_POINT()
);
//Import the public key
//Create a vector with the 64 byte public key
vector<BYTE> pubVector(publicKey, publicKey + publicKeyLength);
//Indicate this is an uncompressed key
pubVector.insert(pubVector.begin(), 1, 0x04);
inPublic = _tpm.Create(storagePrimaryHandle, TPMS_SENSITIVE_CREATE(), eccTemplate, pubVector, vector<TPMS_PCR_SELECTION>());需要注意的几件事: 1)如果我传入一个空向量而不是"pubVector“,它仍然有效2)如果我去掉了0x04 (表示一个未压缩的公钥),它仍然失败
我的工作基于以下位置的代码:https://github.com/microsoft/TSS.MSR/tree/master/TSS.CPP/Samples
发布于 2019-10-23 23:51:50
我弄明白了:"Create“方法从头开始创建一个密钥,我需要"LoadExternal”方法来加载公钥部分:
//publicKey is a BYTE array of the p256 public key 64 bytes long (without the leading 04 = uncompressed)
vector<BYTE> pubKeyX(publicKey, publicKey + 32);
vector<BYTE> pubKeyY(publicKey+32, publicKey + 64);
TPMT_PUBLIC eccTemplate(TPM_ALG_ID::SHA1,
TPMA_OBJECT::decrypt |
TPMA_OBJECT::fixedParent |
TPMA_OBJECT::fixedTPM |
TPMA_OBJECT::sensitiveDataOrigin |
TPMA_OBJECT::userWithAuth,
NullVec,
TPMS_ECC_PARMS(
TPMT_SYM_DEF_OBJECT(TPM_ALG_ID::_NULL, 0, TPM_ALG_ID::_NULL),
TPMS_KEY_SCHEME_ECDH(TPM_ALG_ID::SHA256),
TPM_ECC_CURVE::NIST_P256,
TPMS_NULL_KDF_SCHEME()),
TPMS_ECC_POINT(pubKeyX, pubKeyY)
);
pubHandle = _tpm.LoadExternal(TPMT_SENSITIVE::NullObject(), eccTemplate, TPM_HANDLE::FromReservedHandle(TPM_RH::_NULL));https://stackoverflow.com/questions/58508732
复制相似问题