kSecAttrTokenIDSecureEnclave记录在哪里?

随机蓝

我正竭尽全力试图生成一个带有公钥对kSecAttrTokenIDSecureEnclave的私钥以便在安全区域内生成私钥。

在哪里kSecAttrTokenIDSecureEnclave记录?以下是我的代码,状态代码为-50失败。

- (void)generateKeyPair {
    const UInt8 publicTagString[] = "public";
    const UInt8 privateTagString[] = "private";

    publicTag = CFDataCreate(0, publicTagString, sizeof(publicTagString));
    privateTag = CFDataCreate(0, privateTagString, sizeof(privateTagString));

    CFMutableDictionaryRef publicAttr = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, NULL);
    CFDictionaryAddValue(publicAttr, kSecAttrApplicationTag, publicTag);
    // CFDictionaryAddValue(publicAttr, kSecAttrIsPermanent, kCFBooleanTrue);
    CFDictionaryAddValue(publicAttr, kSecAttrCanEncrypt, kCFBooleanFalse);
    CFDictionaryAddValue(publicAttr, kSecAttrCanDecrypt, kCFBooleanFalse);
    CFDictionaryAddValue(publicAttr, kSecAttrCanDerive, kCFBooleanFalse);
    CFDictionaryAddValue(publicAttr, kSecAttrCanSign, kCFBooleanFalse);
    CFDictionaryAddValue(publicAttr, kSecAttrCanVerify, kCFBooleanTrue);
    CFDictionaryAddValue(publicAttr, kSecAttrCanUnwrap, kCFBooleanFalse);

    CFMutableDictionaryRef privateAttr = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL, NULL);
    CFDictionaryAddValue(privateAttr, kSecAttrApplicationTag, privateTag);
    // CFDictionaryAddValue(privateAttr, kSecAttrIsPermanent, kCFBooleanTrue);
    CFDictionaryAddValue(privateAttr, kSecAttrCanEncrypt, kCFBooleanFalse);
    CFDictionaryAddValue(privateAttr, kSecAttrCanDecrypt, kCFBooleanFalse);
    CFDictionaryAddValue(privateAttr, kSecAttrCanDerive, kCFBooleanFalse);
    CFDictionaryAddValue(privateAttr, kSecAttrCanSign, kCFBooleanTrue);
    CFDictionaryAddValue(privateAttr, kSecAttrCanVerify, kCFBooleanFalse);
    CFDictionaryAddValue(privateAttr, kSecAttrCanUnwrap, kCFBooleanFalse);

    const void* parameterKeys[] = {
        kSecAttrKeyType,
        kSecAttrKeySizeInBits,
        kSecAttrTokenID,
        kSecPublicKeyAttrs,
        kSecPrivateKeyAttrs
    };

    int intKeySize = 512;
    CFNumberRef keySize = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &intKeySize);

    const void* parameterValues[] = {
        kSecAttrKeyTypeRSA,
        keySize,
        kSecAttrTokenIDSecureEnclave,
        publicAttr,
        privateAttr
    };

    CFDictionaryRef parameters = CFDictionaryCreate(
        kCFAllocatorDefault,
        parameterKeys,
        parameterValues,
        5, // ??? Make this programmatic
        NULL,
        NULL
    );

    OSStatus status = SecKeyGeneratePair(parameters, &publicKey, &privateKey);

    if(status != errSecSuccess) {
        [self logError:[NSString stringWithFormat:@"SecKeyGeneratePair status %d", (int)status] :nil];
        return;
    }
}
淡淡的

您得到的错误-50表示参数错误。您传递给函数的参数不正确或不适合该操作。如果您查看SecItem标题或,则会看到:

kSecAttrTokenIDSecureEnclave指定使用设备的安全区域实现的令牌的知名标识符。Secure Enclave令牌支持的唯一钥匙串项是256位椭圆曲线密钥(kSecAttrKeyTypeEC)。必须使用SecKeyGenerateKeyPair调用在安全区域上生成密钥,并且在参数字典中将kSecAttrTokenID设置为kSecAttrTokenIDSecureEnclave,无法将预生成的密钥导入到kSecAttrTokenIDSecureEnclave令牌。

在安全区域中生成私钥时,当前尚不支持RSA密码。切换到256位EC密钥。

WWDC 2015会议706安全性和您的应用程序中对此进行了介绍Apple示例项目“ KeychainTouchID”显示了用于使用安全区域生成和使用密钥的正确参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ruby中,`Float(...)`记录在哪里?

来自分类Dev

numpy日志溢出记录在哪里?

来自分类Dev

wpa-conf记录在哪里?

来自分类Dev

sudo事件记录在哪里?

来自分类Dev

在IF中使用模式-记录在哪里?

来自分类Dev

内核信息记录在哪里?

来自分类常见问题

sun.misc.Unsafe记录在哪里?

来自分类Dev

Python的关闭程序记录在哪里?

来自分类Dev

Indy的TIdCompressorZLib.CompressStream方法的参数记录在哪里?

来自分类Dev

Windows GCE上的启动脚本-记录在哪里?

来自分类Dev

mongodb函数currentOp()返回的记录在哪里?

来自分类Dev

当前文本模式页面地址记录在哪里?

来自分类Dev

netstat的-t和-u标志记录在哪里?

来自分类Dev

启动时,dmesg的输出记录在哪里?

来自分类Dev

Linux内核的/ proc的内容记录在哪里?

来自分类Dev

ip 命令返回的内容的含义记录在哪里?

来自分类Dev

buildResources目录在哪里?

来自分类Dev

最近的目录在哪里

来自分类Dev

.ssh目录在哪里?

来自分类Dev

我的观察员可以在哪里写到Cassandra数据库,也可以记录在哪里?

来自分类Dev

Python-Peewee-调试语句-错误记录在哪里

来自分类Dev

/ proc / sys中存在的Linux内核参数记录在哪里?

来自分类Dev

XP磁盘错误检查实用程序的结果记录在哪里?

来自分类Dev

新的台式机和服务器功能记录在哪里?

来自分类Dev

Python-Peewee-调试语句-错误记录在哪里

来自分类Dev

zsh的历史记录在哪里?(未找到`zsh_history`或`.zhistory`)

来自分类Dev

MCE(机器检查事件)在 ubuntu 18.04 中记录在哪里?

来自分类Dev

mysql bin目录在哪里?

来自分类Dev

Firefox的插件目录在哪里?

Related 相关文章

热门标签

归档