2016-09-27 6 views
0

私はSecKeyGeneratePairを使用しようとしています。属性をkSecAttrTokenIDSecureEnclaveに設定しただけでなく、空白のままにしました。 https://developer.apple.com/reference/security/ksecattrtokenidによると、kSecAttrTokenIDが設定されていない場合、項目は通常のキーチェーンDBに格納されます。しかし、設定しているかどうかにかかわらず、keychain-2.dbファイルのサイズは変更されません。しかし、私はSecKeyRawSign()を使用して、生成された秘密鍵をエラーなく使用することができます。どこにプライベートキーが格納されていますか?SecKeyGeneratePairはキーペアをどこに保存しますか?

答えて

0

kSecAttrTokenIDSecureEnclaveを設定すると、実際の秘密鍵はセキュアエンクレーブのどこかに格納され、秘密鍵はセキュアエンクレーブ内の実際の秘密鍵を参照しているだけです。しかし、キーを使用する限り、それは何の違いもありません。受け取ったSecKeyはまったく同じ方法で使用します。

アプリケーションを連続して実行するときに同じキーペアを使用する場合は、キーチェーンに受け取った秘密キーを保存し、アプリが再び起動するときにキーチェーンから取得する必要があります。このトークンを使用するかどうかは関係ありません。そうしないと、SecKeyがないので、秘密鍵は何らかの形でセキュアな領域に残りますが、アクセスできなくなります。

これを次のように見てください:通常、SecKeyは、ドアキーまたは車内キーが入ったボックスです。しかし、kSecAttrTokenIDSecureEnclaveを使用すると、SecKeyは実際のキーがセキュアエンクレーブ内のどこにあるかを示す紙の入ったボックスです。 iOSは、両方の種類のボックスを同じように扱えるほど巧妙です。ただし、キーチェーンにはそれぞれの種類のボックスを自分で保管する必要があります。あなたがボックスの世話をしないと、あなたのアプリが再起動したときに消えてしまった。

関連する問題