gpt4 book ai didi

ios - Keychain 和 Secure Enclave 之间有什么区别

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:45 25 4
gpt4 key购买 nike

我一直在搜索钥匙串(keychain)存储安全飞地或任何其他地方的地方,我发现很多文章(其中一篇 stackoverflow answer )说了以下内容,但我正在寻找一些像 Apple 声明一样的身份验证

The keychain stores the keys (and other small data) encrypted and restricts access to that data. Additionally in recent iPhones (5S and later) the keychain is in a separate processor, the Secure Enclave which additionally restricts access. There is no more secure way to store keys in iOS.

所以我的查询基于以上陈述。

  • Keychain Items 是否存储在安全的 Enclave 中
  • 如果是那么公钥和私钥在CFTypeRef存储的地方
  • 为什么我们在创建 key 对时使用此 kSecAttrTokenIDSecureEnclave。 (以下代码示例)。

    -(bool) generateKeyPairWithAccessControlObject:(SecAccessControlRef)accessControlRef
    {
    CFMutableDictionaryRef accessControlDict = newCFDict;;
    CFDictionaryAddValue(accessControlDict, kSecAttrAccessControl, accessControlRef);
    CFDictionaryAddValue(accessControlDict, kSecAttrIsPermanent, kCFBooleanTrue);
    CFDictionaryAddValue(accessControlDict, kSecAttrLabel, kPrivateKeyName);

    // create dict which actually saves key into keychain
    CFMutableDictionaryRef generatePairRef = newCFDict;
    CFDictionaryAddValue(generatePairRef, kSecAttrTokenID, kSecAttrTokenIDSecureEnclave);
    CFDictionaryAddValue(generatePairRef, kSecAttrKeyType, kSecAttrKeyTypeEC);
    CFDictionaryAddValue(generatePairRef, kSecAttrKeySizeInBits, (__bridge const void *)([NSNumber numberWithInt:256]));
    CFDictionaryAddValue(generatePairRef, kSecPrivateKeyAttrs, accessControlDict);

    OSStatus status = SecKeyGeneratePair(generatePairRef, &publicKeyRef, &privateKeyRef);

    if (status != errSecSuccess)
    return NO;

    [self savePublicKeyFromRef:publicKeyRef];
    return YES;
    }

正在寻找经过验证的答案。干杯

最佳答案

看看 Apple 的 iOS security whitepaper ,它准确描述了什么是 Secure Enclave 和 Keychain。

Secure Enclave在片上系统 (SoC) 中制造的协处理器。它使用加密内存并包含一个硬件随机数生成器。至于KeychainiOS Keychain 提供了一个安全的存储这些(密码和其他简短但敏感的数据位)项目的方法。 [...] Keychain 实现为存储在文件中的 SQLite 数据库系统。

Keychain 是一种在 SQLite 数据库中存储加密数据(例如密码)的软件。加密此数据的 key 位于 Secure Enclave 内 - 根据本段,它永远不会离开 SE

Keychain items are encrypted using two different AES-256-GCM keys, atable key (metadata) and per-row key (secret-key). Keychain metadata(all attributes other than kSecValue) is encrypted with the metadata keyto speed search while the secret value (kSecValueData) is encryptedwith the secret-key. The metadata key is protected by Secure Enclaveprocessor, but cached in the application processor to allow fast queriesof the keychain. The secret key always requires a round-trip through theSecure Enclave processor.

回答您的问题:钥匙串(keychain)项目是否存储在 Secure Enclave 中,不,它们存储在磁盘上的 SQLite 数据库中,但解密此数据所需的加密 key 位于 Secure Enclave 中。至于kSecAttrTokenIDSecureEnclave,它似乎是一个标志,表明 key 应该是generated。在安全元件内。

关于ios - Keychain 和 Secure Enclave 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com