iOS7 では、キーチェーンに RSA 公開鍵を追加すると正常に追加されますが、「kSecReturnRef」を取得したい場合、結果として nil が返されますが、「kSecReturnPersistentRef」または「kSecReturnData」を取得すると正常に動作します。この問題は、「SecItemAdd()」メソッドを使用して RSA 公開キーを追加した場合にのみ発生します。「SecKeyGeneratePair()」を介して公開鍵を生成し、「kSecReturnRef」を取得すれば、すべて問題ありません。
再現する手順:
- サンプルコード「CryptoExercise」をダウンロード
- メソッド「addPeerPublicKey:keyBits:」を呼び出します。
- 公開鍵データと名前を渡す
- 上記のメソッドは内部で「getKeyRefWithPersistentKeyRef」を呼び出し、このメソッドは「SecKeyRef」に対して nil 値を返します。
この問題は iOS 7 でのみ発生しますが、同じコードは iOS3 から iOS6 まで問題なく動作します。
予想された結果:
< SecKeyRef algorithm id: 1, key type: RSAPublicKey, version: 2, block size: 512 bits, exponent: {hex: 10001, decimal: 65537}, modulus: AE098BC28358D88AE7602E8BB91007239018D40BB1A87F2245199A208CA21B8EFCFFE2373B470E6075D740AC1A25CD7914A6BA5680701DFB9428E2DD461965B7, addr: 0x9abe600 >
実績:
< nil>
どんな助けでも大歓迎です。