2016-09-27 1 views
0

Ich versuche, SecKeyGeneratePair zu verwenden, und ich habe das Attribut auf kSecAttrTokenIDSecureEnclave sowie lassen Sie es leer. Gemäß https://developer.apple.com/reference/security/ksecattrtokenid, wenn kSecAttrTokenID nicht festgelegt ist, sollte das Element in der normalen Schlüsselbund-DB gespeichert werden. Unabhängig davon, ob ich es einstelle, ändert sich die Größe der keychain-2.db Datei nicht. Ich bin jedoch in der Lage, SecKeyRawSign() mit dem generierten privaten Schlüssel ohne Fehler zu verwenden. Wo ist dann der private Schlüssel gespeichert?Wo speichert SecKeyGeneratePair das Schlüsselpaar?

Antwort

0

Wenn Sie kSecAttrTokenIDSecureEnclave setzen, wird der echte private Schlüssel irgendwo in der sicheren Enklave gespeichert, und der private Schlüssel, der Ihnen zurückgegeben wird, bezieht sich nur auf den echten privaten Schlüssel in der sicheren Enklave. Was die Verwendung des Schlüssels betrifft, macht dies jedoch keinen Unterschied. Sie verwenden den SecKey, den Sie auf die gleiche Weise erhalten haben.

Wenn Sie das gleiche Schlüsselpaar bei fortlaufenden Durchläufen Ihrer Anwendung verwenden möchten, müssen Sie den privaten Schlüssel, den Sie in der Schlüsselkette erhalten haben, beim erneuten Starten der App aus dem Schlüsselbund speichern. ob Sie dieses Token verwenden oder nicht. Wenn Sie das nicht tun, haben Sie keinen SecKey, also ist der private Schlüssel irgendwie immer noch in der sicheren Enklave, aber Sie haben keine Möglichkeit mehr, darauf zuzugreifen.

Sieh es so: Normalerweise ist ein SecKey eine Box mit einem Türschlüssel oder einem Autoschlüssel darin. Der SecKey ist jedoch mit kSecAttrTokenIDSecureEnclave eine Box mit einem Stück Papier, das anzeigt, wo sich der echte Schlüssel in der sicheren Enklave befindet. iOS ist clever genug, um beide Arten von Boxen identisch zu behandeln. Sie müssen jedoch jede Art von Box im Schlüsselbund selbst speichern. Wenn du dich nicht um die Box kümmerst, ist sie verschwunden, wenn deine App neu gestartet wird.