0

OS Xの に保存されている秘密鍵の raw バイトを抽出しようとしてSecKeyRefいます。これを行うにはどうすればよいですか?

Apple CDSA ディスカッション リストでこの 7 年ほど前のスレッドを読みましたが、それ以上のものは見つかりませんでし。そのスレッドの元の投稿者と同じ問題は発生していませんが、私のやり方が間違っている可能性があります。これは私が現在試みていることです(役に立たない):

SecKeyRef keyRef = ...;
CSSM_KEY *cssmKey = NULL;
CSSM_WRAP_KEY wrappedKey = {0};

CSSM_CSP_HANDLE cspHandle = 0;
CSSM_CC_HANDLE ccHandle = 0;

CSSM_ACCESS_CREDENTIALS *creds = NULL;
SecKeyGetCredentials(keyRef, CSSM_ACL_AUTHORIZATION_EXPORT_WRAPPED, kSecCredentialTypeDefault, &creds);

// Tried the following, too.
//CSSM_ACCESS_CREDENTIALS *creds = malloc(sizeof(CSSM_ACCESS_CREDENTIALS));
//memset(creds, 0, sizeof(CSSM_ACCESS_CREDENTIALS));

SecKeyGetCSSMKey(keyRef, &cssmKey);
SecKeyGetCSPHandle(keyRef, &cspHandle);

CSSM_CSP_CreateSymmetricContext(cspHandle, 
    CSSM_ALGID_NONE,
    // Have also tried CSSM_ALGMODE_WRAP 
    CSSM_ALGMODE_NONE, 
    creds, 
    NULL, 
    NULL, 
    CSSM_PADDING_NONE, 
    0, 
    &ccHandle);

CSSM_WrapKey(ccHandle, 
    creds, 
    key, 
    NULL, 
    &wrappedKey);

から返されるエラー コードCSSM_WrapKeyは ですCSSMERR_CSP_INVALID_KEYATTR_MASK。何か案は?

4

1 に答える 1

1

問題が発生している理由がわかりました。抽出しようとしていたキーでCSSM_KEYATTR_SENSITIVE属性が有効になっていて、「ヌル ラップ」を実行しようとしていました。つまり、隠されていない raw バイトにアクセスしようとしていました。

libsecurity_apple_csp/lib/wrapKey.cppの 285 ~ 287 行目は次のとおりです。

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

機密性の高い秘密鍵を抽出する必要がある場合は、ラップする必要があります。Apple CSP によると、秘密鍵のデフォルトのラッピング オプションはCSSM_KEYBLOB_WRAPPED_FORMAT_PKCS8.

于 2011-01-18T07:05:00.863 に答える