iPhone 中的数据保护 API 未加密

Posted

技术标签:

【中文标题】iPhone 中的数据保护 API 未加密【英文标题】:Data Protection API in iPhone Not Encrypting 【发布时间】:2013-01-22 06:57:05 【问题描述】:

我需要保护文档目录中的数据,因此我使用了Apple Data Protection API。 Apple Asset

    我在设置应用程序中启用了数据保护。设置->常规->密码锁定

    我使用 NSDataProtectionKey 编写文件

    [data writeToFile:imagePath options:NSDataWritingFileProtectionComplete error:nil];
    

    文件写入成功

    我得到文件属性

     [[NSFileManager defaultManager] attributesOfItemAtPath:fullPath
                                                         error:NULL];
    

    它返回这样的属性,你可以看到 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 算法。但想知道为什么 Data Protection API 不起作用。

注意:我使用 iPad2 iOS 6.0.1 和 设备中记录的日志

【问题讨论】:

我在 iPhone6 iOS9.3.1 上做的同样的事情,它完全符合你的预期(图像文件不可见),唯一的事情是我在访问 iExplorer 时锁定了设备!因为NSFileProtectionComplete 只能在设备锁定后约 10 秒内工作。 【参考方案1】:

但想知道为什么数据保护 API 不起作用。

它确实奏效了,只是你期望的比它做的要多。

iOS 应用于文件的加密对用户空间中的任何内容都是透明的。加密是在硬件级别完成的,因此窃取设备闪存的任何人都无法访问数据。但是,如果屏幕已解锁且设备已打开,操作系统会像处理其他所有文件一样处理这些文件,并且它们似乎不会从文件系统中“加密”。

如果您想这样做,您必须使用某种非对称加密方法对文件进行编码,例如 AES(OpenSSL 或 GnuTLS 可以很好地完成这项工作)。

【讨论】:

终于对数据保护目的进行了清晰的解释。

以上是关于iPhone 中的数据保护 API 未加密的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何保护 iOS 中的 SQLite 数据库?

iOS 上特定于应用程序的数据保护

Asp.Net Core Data Protection API 用于保护数据库中的数据

使用 MVC 为 iPhone 应用程序构建 RESTful API - 如何保护它?

文件加密软件实现企业数据高效安全保护

如何通过加密保护 Documents 目录中的数据?