4

キーチェーンを実装したアプリケーションを開発しています。データを作成してキーチェーンに保存できます。Apple が提供するKeychain Wrapper クラスを使用しています。

要件に従って、KeyChain に可能な限り最高のセキュリティを実装する必要があります (セキュリティ チームは、ジェイルブレイクされたデバイスでのアクセシビリティなどの過失を指摘しました)。

誰かが私に指示を与えることができますか?

4

2 に答える 2

7

また、あなたが引用したのと同じラッパーを使用して、アプリケーションの長いバックにキーチェーンを実装しましたが、もちろん、多くの変更が加えられました。

基本的に、キーチェーンは非常に安全です。Apple によると、これは複数のアプリケーションの安全な情報を保持する暗号化されたコンテナーです。つまり、キーチェーンがロックされると、誰もその保護されたコンテンツにアクセスできなくなります。

iOS では、キーチェーンを作成するアプリケーションのみがアクセスできます。Apple のドキュメントによると、iOS はメモリ キャッシュまたはディスク キャッシュを選択できます。

しかし、iOS 4.xx++ からは、 disk-cached(dunno why) のみであるため、常に sqlite DB が作成され、キーチェーン内のすべてのデータが特定の識別子に対応して格納されます。

Sqlite DB は、ルート化されたデバイスまたはジェイルブレイクされたデバイスでハッキングされる可能性があります。

キーチェーンを保護するには

1 メソッド " " & " " でキーチェーンのデータkSecAttrAccessibleWhenUnlockedThisDeviceOnlyを追加または
更新する際に、セキュリティ キーワード " " を追加します。SecItemUpdateSecItemAdd

何かのようなもの :-

- (void)writeToKeychain
{
    NSDictionary *attributes = NULL;
    NSMutableDictionary *updateItem = NULL;
    OSStatus result;

    if (SecItemCopyMatching((CFDictionaryRef)genericPasswordQuery, (CFTypeRef *)&attributes) == noErr)
    {
        updateItem = [NSMutableDictionary dictionaryWithDictionary:attributes];

        [updateItem setObject:[genericPasswordQuery objectForKey:(id)kSecClass] forKey:(id)kSecClass];

        NSMutableDictionary *tempCheck = [self dictionaryToSecItemFormat:keychainItemData];
        [tempCheck removeObjectForKey:(id)kSecClass];

#if TARGET_IPHONE_SIMULATOR
        [tempCheck removeObjectForKey:(id)kSecAttrAccessGroup];
#endif

        [updateItem setObject:(id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(id)kSecAttrAccessible];
        result = SecItemUpdate((CFDictionaryRef)updateItem, (CFDictionaryRef)tempCheck);
        NSAssert( result == noErr, @"Couldn't update the Keychain Item." );
        CFRelease(attributes);
    }
    else
    {
        [keychainItemData setObject:(id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(id)kSecAttrAccessible];
        result = SecItemAdd((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL);
        NSAssert( result == noErr, @"Couldn't add the Keychain Item." );
    }
}

2 キーチェーンに追加する前にデータを暗号化します。AES-128 暗号化を使用しました。また、暗号化に使用されるキーが RSA キーであることを確認してください。(SSL Web サービスによって送信されます)。

注 :-キーチェーン データは/private/var/Keychains/keychain-2.dbiPhone のファイルに保存されます。

お役に立てば幸いです。

于 2013-03-16T18:19:21.317 に答える
0
    [attributeDict setObject:(__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];
于 2014-12-15T09:56:33.020 に答える