Security OSX密钥链:提取私钥——可能吗?

Security OSX密钥链:提取私钥——可能吗?,security,macos,keychain,private-key,Security,Macos,Keychain,Private Key,我正在尝试提取存储在OS X上的SecKeyRef中的私钥的原始字节。我将如何执行此操作 我在苹果CDSA讨论列表上读过7年前的帖子,但没有发现比这更新的。我的问题与该帖中的原始海报不同,但可能是因为我做了错事。这是我目前正在尝试的(无效): CSSM\u WrapKey返回的错误代码是CSSMERR\u CSP\u无效\u KEYATTR\u MASK。有什么想法吗?我找到了出现问题的原因:我试图提取的密钥启用了CSSM\u KEYATTR\u SENSITIVE属性,并且我试图执行“null

我正在尝试提取存储在OS X上的
SecKeyRef
中的私钥的原始字节。我将如何执行此操作

我在苹果CDSA讨论列表上读过7年前的帖子,但没有发现比这更新的。我的问题与该帖中的原始海报不同,但可能是因为我做了错事。这是我目前正在尝试的(无效):


CSSM\u WrapKey
返回的错误代码是
CSSMERR\u CSP\u无效\u KEYATTR\u MASK
。有什么想法吗?

我找到了出现问题的原因:我试图提取的密钥启用了
CSSM\u KEYATTR\u SENSITIVE
属性,并且我试图执行“null wrap”,即访问未屏蔽的原始字节

的第285-287行如下所示:

if(isNullWrap && (keyAttr & CSSM_KEYATTR_SENSITIVE)) {
    CssmError::throwMe(CSSMERR_CSP_INVALID_KEYATTR_MASK);
}

如果必须提取敏感私钥,则必须对其进行包装——根据Apple CSP,私钥的默认包装选项为
CSSM\u KEYBLOB\u wrapped\u FORMAT\u PKCS8

我认为您在将私钥导入密钥链时设置了CSSM_KEYATTR_敏感属性,对吗?我也有同样的问题,在导入私钥时设置了CSSM_KEYATTR_可提取属性。我不确定在哪里设置CSSM_KEYBLOB_WRAPPED_FORMAT_PKCS8属性。另外,如何在您发布的示例应用程序中为CSSM_WrapKey创建“key”参数?你有修改过的工作代码吗?
if(isNullWrap && (keyAttr & CSSM_KEYATTR_SENSITIVE)) {
    CssmError::throwMe(CSSMERR_CSP_INVALID_KEYATTR_MASK);
}