4

ドキュメントディレクトリでデータを保護する必要があるため、Apple DataProtectionAPIを使用しました。Apple Asset

  1. 設定アプリでデータ保護を有効にしました。[設定]->[一般]->[パスコードロックオン]
  2. NSDataProtectionKeyを使用してファイルを書き込みます

    [data writeToFile:imagePath options:NSDataWritingFileProtectionComplete error:nil];
    
  3. ファイルが正常に書き込まれました

  4. ファイル属性を取得します

     [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath
                                                         error:NULL];
    
  5. NSFileProtectionKeyがNSFileProtectionCompleteであることがわかるように、このような属性が返されます。

    NSFileCreationDate = "2013-01-22 06:10:48 +0000";
    NSFileExtensionHidden = 0;
    NSFileGroupOwnerAccountID = 501;
    NSFileGroupOwnerAccountName = mobile;
    NSFileModificationDate = "2013-01-22 06:10:48 +0000";
    NSFileOwnerAccountID = 501;
    NSFileOwnerAccountName = mobile;
    NSFilePosixPermissions = 420;
    NSFileProtectionKey = NSFileProtectionComplete;
    NSFileReferenceCount = 1;
    NSFileSize = 8964;
    NSFileSystemFileNumber = 335997;
    NSFileSystemNumber = 16777218;
    NSFileType = NSFileTypeRegular;
    

私はファイルを正常に書き込み、そのファイルを正常に読み取ったと確信しています。しかし、このデバイスをiExplorer(Mac用の外部iOSデバイスリーダーアプリ)で開くと、暗号化されずに書き込まれたファイルが表示されます。

暗号化されていないということは、画像ファイルを書き込むことを意味します。しかし、iExplorerでその画像(ドキュメントディレクトリ内)を表示することはできます。しかし、私の目的はそれを暗号化することです。ユーザーにそれらのファイルを見せたくないからです。私は他の暗号化AESアルゴリズムを知っています。しかし、DataProtectionAPIが機能しなかった理由を知りたい。

注:iPad2iOS6.0.1とデバイスに記録されたログを使用しています

4

1 に答える 1

11

しかし、DataProtectionAPIが機能しなかった理由を知りたい。

それはうまくいきました、あなたはそれがすること以上のものを期待していました。

iOSがファイルに適用する暗号化は、ユーザーランド内のすべてのものに対して透過的です。暗号化はハードウェアレベルで行われるため、デバイスのフラッシュメモリを盗む人は誰もデータにアクセスできません。ただし、画面のロックが解除され、デバイスの電源がオンになっている場合、OSはこれらのファイルを他のすべてのファイルと同じように処理し、ファイルシステム内から「暗号化」されているようには見えません。

これを行う場合は、AESなどの非対称暗号化方式を使用してファイルをエンコードする必要があります(OpenSSLまたはGnuTLSが適切に機能します)。

于 2013-01-22T07:02:13.407 に答える