【问题标题】:Where to store decrypted files?在哪里存储解密文件?
【发布时间】:2013-10-02 02:06:21
【问题描述】:

我正在加密下载的文件并将它们本地保存在应用程序的文档目录中。

要阅读它们,您必须解密这些文件并临时存储一些。

我的担忧是:

1.如果我将它们存储在 doc 目录中以供使用,那么对于该时间窗口,可以使用 iExplorer 等工具获取这些文件。

2.我的想法是在使用时将它们存储在内存中,并在使用后刷新保管库。 此选项适用于小文件,但对于大文件如 50 MB 或 100 MB 的视频,恐怕应用会收到内存警告,结果会突然终止。

我想知道执行此操作的最佳方法。

【问题讨论】:

  • 有什么方法可以将文件分割成块,这样你就可以将一个加密的块读入内存,然后在那里解密?
  • 这可能是一个选项,但这不是一件容易的事,对于某些将元数据存储在页脚中或单击 pdf 页面上的链接的文件,这将无济于事。您需要研究每种文件类型的文件结构和读取它们的机制。
  • 这个问题没有完美的解决方案,但动态解密是最安全的。有一些方法可以在视频显示时即时解密视频,例如(尽管我对它们的理解不足以解释它)。

标签: ios objective-c encryption


【解决方案1】:

解密它们,使用玩具算法对其进行混淆(例如,使用常量块进行 XOR),并将它们存储在文档中。需要时,加载和解密。

由于问题在理论上没有解决方案(一个足够坚定的攻击者毕竟可以读取您的进程内存),因此它与任何解决方案一样好。

【讨论】:

  • 对大多数文件格式来说,使用“常量块”对数据进行异或运算根本不安全。
  • 没有什么是安全的,因为应用程序能够解密文件。这更像是混淆。
【解决方案2】:

在保存之前将文件拆分为更小的尺寸,然后在加载时解密。

稍后编辑:我注意到 cmets 中提到了这一点。我同意拆分文件并不是世界上最简单的事情,但大概你只需要这个视频。大约 100MB 是很多文本或音频。如果您的 PDF 很重,它可能是扫描的文本,如果是图像,您可以将其更改为系列。

是的,分割最好在服务器端完成,不希望用户在视频处理中浪费电池。

【讨论】:

  • 我不确定这是否可以使用 iOS sdk 完成,因为当将媒体文件提供给 AVPlayer 或 MPMoviePlayerController 时,它们首先会处理整个文件以了解其元数据。有了字节块,我将如何知道需要特定的块并在两者之间解密。
  • 这不是小事,但这是您的服务器更适合做的事情:预先拆分文件并为您提供有关块偏移的信息。
  • 感谢您的建议,伊利亚恩
【解决方案3】:

没有完美的安全方式以安全的方式存储本地文件。如果一个人拥有设备的完全访问权限,他总能找到解密文件的方法,只要您的应用程序能够解密它。

唯一的问题是:解密文件需要多少努力?

如果您唯一担心的是有人可能会使用 iExplorer 来复制和打开这些文件,那么简单的本地对称加密就可以解决问题。

只需在您的应用程序中嵌入一个随机对称密钥,并在下载时逐块加密数据。

您可以使用舒适的“安全转换”框架进行对称加密。 Apple Documentation中有一些很好的例子。

加载文件时,您可以在从文件系统加载文件时使用相同的密钥对其进行解密。

澄清一下:这并不是对文件的完美保护。但是要解密文件,可以访问您的应用程序二进制文件。在调试器中分析此二进制文件并搜索解密部分以提取您的对称密钥。仅解密文件就需要付出很多努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2013-02-19
    • 1970-01-01
    相关资源
    最近更新 更多