私は非常に安全なアプリケーション (銀行用) を作成し、キーチェーンに秘密鍵を保持しています。次のコードを使用して秘密鍵を保持します。
+(void)savePrivatekey:(NSString *)Key
{
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey" accessGroup:nil];
[keychain setObject:Key forKey:(id)kSecValueData];
[keychain release];
}
次のコードを使用して秘密鍵を取得します。
+(NSString *)privateKey
{
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"pKey"accessGroup:nil];
NSString *privateKey = [keychain objectForKey:(id)kSecValueData];
[keychain release];
return privateKey;
}
セキュリティ上の理由から、秘密鍵をローカル変数に保存しません。サーバーへの呼び出しごとに、「GetPrivateKey」関数を呼び出すために何度も呼び出す秘密鍵が必要だからです。たぶんそれが、キーチェーンの空の文字列から時々取得する理由です。なぜこれが起こるのか考えられません。ほとんどの場合、これはアプリケーションがバックグラウンドから戻ったときに発生することに気付きましたが、それだけではありません...ありがとう...
Apple のエンジニアにチケットを開いたところ、次のような回答がありました。
最初にキーチェーン アイテムを作成するときに kSecAttrAccessible 属性を設定していますか?
私は常に同じ形状のキーチェーンを作成します: KeychainItemWrapper * keychain = [[KeychainItemWrapper alloc] initWithIdentifier: @ "pKey" accessGroup: nil];
誰かが彼らの意図を知っていますか? ありがとう...