2016-12-08 1 views
1

Ich habe in der Suche, wo Keychain speichert entweder Enklave oder eine andere sichere, fand ich viele Artikel (eine dieser stackoverflow answer), die folgende sagt, aber ich bin auf der Suche nach einigen authentifizierten wie Apple AnweisungWas ist der Unterschied zwischen Schlüsselbund und Secure Enclave

Der Schlüsselbund speichert die Schlüssel (und andere kleine Daten) verschlüsselt und beschränkt den Zugriff auf diese Daten. Zusätzlich befindet sich der Schlüsselbund in neueren iPhones (5S und später) in einem separaten Prozessor, der Secure Enclave, die den Zugriff zusätzlich einschränkt. Es gibt keinen sichereren Weg, Schlüssel in iOS zu speichern.

Also meine Abfragen auf der Grundlage der obigen Aussage.

  • Ist Schlüsselanhänger Artikel Speicher in sichere Enklave
  • Wenn ja, dann wo öffentlichen Schlüssel und einen privaten Schlüssel CFTypeRef Shop
  • Warum wir dieses kSecAttrTokenIDSecureEnclave verwenden, während Schlüsselpaar erzeugen. (Beispiel folgenden Code).

    -(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; 
    } 
    

für authentifizierte Antwort sucht. Prost

Antwort

3

Der Schlüsselbund verwendet Secure Enclave, die Secure Enclave ist in Hardware implementiert.

Von was ich verstehe:
Standardmäßig werden asymmetrische Schlüsselpaare erstellt und in der sicheren Enklave gespeichert. Der private Schlüssel ist nur zum Zeitpunkt der Erstellung verfügbar und kann später nicht abgerufen werden. Asymmetrische Operationen, die den privaten Schlüssel verwenden, erhalten ihn aus dem Schlüsselbund, ohne ihn dem Benutzercode auszusetzen.

Es gibt eine Ausnahme, die den Zugriff auf den privaten Schlüssel, die Schlüsselbund-App, ermöglicht.

+0

Danke für Ihre Antwort, also, was diese Linie zu tun ist kSecAttrTokenIDSecureEnclave, wenn Keychain Secure Enklave verwenden? – Aleem

+0

Eine weitere Frage mehr Wenn ich privaten Schlüssel von OpenSSL erstellt und dann in SecKeyRef umgewandelt und dann gespeichert habe, wird das also in sichere Enklave gespeichert? . Und können wir diese später wie zum Signieren abrufen. – Aleem

+0

Wenn Sie den privaten Schlüssel nicht zum Signieren abrufen, greift die Signaturoperation auf den Schlüssel aus dem Schlüsselbund zu. – zaph

0

Nicht alle Schlüsselanhänger Elemente werden in sicheren Enklaven gespeichert
From Apple document

Die nur Schlüsselanhänger Artikel vom Secure Enclave unterstützt 256-Bit-elliptischen Kurve privaten Schlüssel (jene, die Schlüsselart kSecAttrKeyTypeEC haben). Solche Schlüssel müssen direkt auf der sicheren Enklave mit der Funktion SecKeyGeneratePair (:: _ :) mit dem Schlüssel kSecAttrTokenID, der im Parameterwörterbuch auf kSecAttrTokenIDSecureEnclave gesetzt ist, generiert werden. Es ist nicht möglich, bereits vorhandene Schlüssel in die sichere Enklave zu importieren.

Verwandte Themen