通过 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_EXPONENT
和 CKA_MODULUS
属性。有关详细信息,请参阅 PKCS#11 v2.20。
我正在使用 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_EXPONENT
和 CKA_MODULUS
属性。有关详细信息,请参阅 PKCS#11 v2.20。