iOSのFileProtection
2015.05.20
ふじしげ ゆういち
@nakiwo
今日のテーマ
•iOSのFileProtection
File Protection
•iOSに搭載されているファイル保護の仕
組み
•ファイルの属性として設定
•保護されたファイルは、

パスコードロック時にアクセス不可能
になる。
•パスコードを知らない第三者にファイ
ルを見られる事を防ぐ事ができる。
•ファイルシステム上の全ファイルは、

常にハードウェアにより暗号化されて
いる。
•暗号化キーを捨てるだけ高速にディス
クをクリアできる。
•ファイル保護属性無し

=暗号化キーがアンロックされっぱなし
•ファイル保護属性有り

=暗号化キーがロックされる
NSFileProtectionKey
NSFileProtectionNone
NSFileProtectionComplete
NSFileProtectionCompleteUnlessOpen
NSFileProtectionCompleteUntilFirstUserAuthentication
NSFileManager
- (BOOL)setAttributes:(NSDictionary *)attributes
ofItemAtPath:(NSString *)path
error:(NSError **)error;
NSDataWritingOptions
NSDataWritingFileProtectionNone
NSDataWritingFileProtectionComplete
NSDataWritingFileProtectionCompleteUnlessOpen
NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication
NSData
- (BOOL)writeToFile:(NSString *)path
options:(NSDataWritingOptions)writeOptionsMask
error:(NSError **)errorPtr;
•NSFileProtectionNone

ファイル保護無し
•NSFileProtectionComplete

パスコードロックされるとファイルア
クセス不能
•NSFileProtectionCompleteUnlessOpen

Completeと同じ。

ただし、ファイルオープン中にパスコード
ロックがかかった場合に限り、ファイルク
ローズまではアクセス可能。
•NSFileProtectionComplete

UntilFirstUserAuthentication

電源投入∼最初のパスコード解除までは
Completeと同じ。

その後はNoneと同じ。
•NSFileProtectionKey未指定の場合、
NSFileProtectionComplete

UntilFirstUserAuthentication

がデフォルト(iOS 7以後)
•iOS 6以前はNoneがデフォルト。
• com.apple.developer.default-data-protection

entitlement でデフォルト値を変更可能
ディレクトリに対してファイル
保護属性を付けたらどうなる?
•ドキュメントに記載なし
•実際の挙動から見てみると…
•ディレクトリ自体には何も変化無し。
•ディレクトリ以下で新規作成したファ
イルのデフォルト保護属性が、ディレ
クトリの保護属性と同じになる。
•しかし…
•ディレクトリ外から移動やコピーしてくる
と元の属性を引き継ぐ様子。

(利用するAPIによって挙動が違う…)
•あくまでディレクトリの属性がデフォルト
値になるだけで、明示的に属性を指定する
事で別の設定にする事が可能。

自分で作っていないファイルの保護属性は
要確認。(OSSを使うとき等)
おわり

iOSのFileProtection