C_CreateObject,C_GenerateKey和C_GenerateKeyPair有何不同?

时间:2017-03-29 10:35:18

标签: pkcs#11

我们的PKCS#11库错过了C_CreateObject的实现。在开始实现之前,我想知道应该使用C_CreateObject而不是C_GenerateKey / C_GenerateKeyPair的实例。

2 个答案:

答案 0 :(得分:4)

C_CreateObject导入在设备外部生成的现有数据对象,证书和/或密钥。 C_GenerateKey在设备内部生成新的对称密钥(DES / AES / ...)。 C_GenerateKeyPair在设备内部生成新的非对称密钥对(RSA / ECC / ...)。

答案 1 :(得分:1)

PKCS#11将密钥对(公钥和私钥),证书和密钥视为令牌上的对象。还有一个数据对象只保存一些数据。

C_GenerateKey会创建一个Secret Key对象。

C_GenerateKeyPair会创建一个Public Key和一个Private Key对象(组合的公钥和私钥都构成密钥对)。

当你说C_GenerateKey PKCS#11知道它必须生成一个秘密密钥对象并且需要一个密钥对象模板时。类似于C_GenerateKeyPair,它知道必须创建公钥对象和私钥对象并期望它们各自的对象模板。

但是当你说C_CreateObject时,你必须指定你想要创建的对象类型,并传递正确的对象模板。将此视为C_GenerateXXX方法的抽象版本。