通过 PKCS#11 提取 public 键值

Extractig public key value via PKCS#11

我正在使用 Pkcs11 库从设备中检索密钥:

我能够检索 public 键的对象句柄。我尝试提取 public 键值:

var publicKeyHandle = GetPublicKeyByLabel(Session, "KEY1_QAL_PUB");
var objectAttribute = Session.GetAttributeValue(publicKeyHandle, new List<CKA> { CKA.CKA_VALUE }).Single();
var keyVal =  objectAttribute.GetValueAsByteArray();

不幸的是,objectAttribute 已将 CannotBeRead 设置为 true,无法读取值。 即使我以用户或 SO 身份登录。

我理解这种情况,当密钥是私有的时——出于安全原因,我无法在 HSM 设备之外获得价值。但是为什么我无法提取 public 键值?

CKA_VALUE 不是 RSA public 密钥对象的有效属性。如果你想提取 RSA public 键值,那么你需要阅读 CKA_PUBLIC_EXPONENTCKA_MODULUS 属性。有关详细信息,请参阅 PKCS#11 v2.20