SwiftでのiOSファイル保護の無効化

SwiftでのiOSファイル保護の無効化

説明

機密ファイルを .noFileProtection、FileProtectionType.none、NSFileProtectionNone で保存すると、ユーザーのパスコードや端末のロック状態に基づくアクセス保護が適用されません。このクラスでも端末のUIDによる暗号化は行われるため、ディスク上に平文で保存されるという意味ではありません。ただし、ロック中や起動直後のファイルアクセスを制限する保護が弱まります。

想定される影響

  • 保存された機密情報の漏えい。
  • バックアップや端末からの抽出を通じたデータの流出。
  • 紛失・盗難に遭った端末でファイルへアクセスされるリスクの増加。

対処方法

  1. 機密ファイルには .completeFileProtection など、要件に合った強いファイル保護クラスを使用してください。
  2. FileManager.setAttributes で保護クラスを FileProtectionType.none や NSFileProtectionNone に設定しないでください。
  3. バックグラウンドでのアクセスが必要な場合も、要件を満たす範囲で最も制限の強い保護クラスを選び、機密情報そのものはKeychainに保存してください。

例

変更前

swift
try data.write(to: url, options: .noFileProtection)

変更後

swift
try data.write(to: url, options: .completeFileProtection)

解説:

  • 変更前: パスコードに基づくファイル保護が適用されず、ロック中の保護が弱まります。
  • 変更後: 強いファイル保護クラスで保存データを保護します。

参考資料