【问题标题】:Swift: Encryption of a file or plain textSwift:加密文件或纯文本
【发布时间】:2016-10-21 22:25:06
【问题描述】:

您好,我即将编写一个应用程序,使我能够将远程文件存储在 iPhone 的本地磁盘上,以使数据永久保存在文件中并对其进行操作。但我对此有疑问。顺便说一句,我不知道加密数据。

那么,如果有任何 iPhone 黑客通过越狱破解并访问我的本地文件?在这种情况下,我想使用加密。但我错过了一些东西。我的 json 文件包含很长的纯文本,例如 100,000 个单词。因此,如果我现在应用 Github 上的 CryptoSwift 库,使用 AES 和 NSDATA 我的计算机就会被卡住来加密它。

    let plain = "mylongtextfromfile".dataUsingEncoding(NSUTF8StringEncoding)

    let key: Array<UInt8> = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
    let iv: Array<UInt8> = AES.randomIV(AES.blockSize)
    let encrypted: NSData = try! plain!.encrypt(ChaCha20(key: key, iv: iv)!)
    print(encrypted)
    let decrypted: NSData = try! encrypted.decrypt(ChaCha20(key: key, iv: iv)!)

    let string1 = NSString(data: decrypted, encoding: NSUTF8StringEncoding)

    print(string1)

我还注意到,Apple 不想使用与内置 API 不同的其他加密库。 Itunnes 连接策略需要应用程序的扩展验证过程。 我想请教各位专家,我必须做什么。我不希望用户与任何移动服务后端、API 或服务器交互以下载单词并在用户每次想要使用单词时查询它们。

我需要使用什么来保持流程快速。实际上有没有办法只加密文件本身,除非数据在。或者我面临的错误是什么。

真诚,

【问题讨论】:

    标签: objective-c swift security encryption


    【解决方案1】:

    那么,如果有任何 iPhone 黑客通过越狱破解并访问我的本地文件?

    是的。这是真的,您无能为力。您可以创建一些混淆层。您可以将攻击者的速度降低几个小时。拥有足够的资源和一支持续不断的安全专家团队,您可能能够更长时间地减缓攻击者的速度。但是,如果 Apple 控制了生态系统的每一个部分,并且拥有大量专门用于它的专家资源,但无法阻止攻击者越狱手机,那么你就没有希望了,尤其是如果你说你对加密一无所知。

    这并不是说您无能为力;它不会很有效,所以不要花很多时间在上面。您必须假设如果您的数据具有任何重要价值,攻击者会提取它。您必须设计您的系统和业务模型以适应这种情况。或者你必须雇佣一个持续的团队来缓解攻击,就像 Apple 或 Blizzard 所做的那样。

    那么,您能做些什么既简单又提供某种混淆,即使它非常无效?正如您似乎正在尝试做的那样,使用硬编码密钥对其进行加密。它不会阻止任何知道自己在做什么的人,但它会阻止一些人,这几乎是你能做到的。

    CryptoSwift 是一个不错的库,由一个聪明人编写,但它的级别非常低,并且假设您知道自己在做什么。这不是您想要使用的那种工具。您想要为您完成所有工作的东西。我有一个,RNCryptor。它的优点是非常简单、跨平台,并且只使用 Apple 加密原语。还有libSodium,它更便携,更强大的格式,但不使用Apple的原语。

    重要的是要寻找提供加密格式的东西,而不仅仅是加密原语。从原语构建安全格式非常具有挑战性。不要在没有研究过它是如何完成的情况下尝试它。

    如果您确实想继续使用 CryptoSwift,那么您需要更准确地解释问题所在。当您说“我的电脑卡住了”时,究竟发生了什么?

    【讨论】:

    • 我在 Q 中提到的代码,我不知道,但我假设它加密了包含纯文本的我的 NSData 对象。我的问题是,如果我想加密一些包含 100K 或 1M 字的纯文本。加密过程需要很长时间并且使计算机处于冻结状态。
    • 加密过程需要很长时间并且使计算机处于冻结状态。我假设堆栈可能不适合所有数据。但是正如您所说,我认为库的低级别可能会导致一些漏洞利用或降低性能。我只想问你,如果我使用 Apple 的内置加密 API 或 RNCryptor,并且如果我想加密我的文件包含 100K 或 1M 字填充文件,需要多长时间或者我可以在 3-5 秒内加密文件好的用户体验?可能吗?谢谢!
    • 如你所说,也许这个想法会让一些不知道自己在做什么的人暂时离开。
    • 您不想在主队列上加密或解密那么多数据。您甚至不想从主队列上的磁盘读取那么多数据。您需要在后台队列中执行此操作。但是您应该能够在不到 3-5 秒的时间内完成这项工作。 CryptoSwift 从来没有被设计成快速。它是为了探索 Apple 不提供的算法并在纯 Swift 中完成的好奇心而构建的。 github.com/krzyzanowskim/CryptoSwift/issues/…
    • 明白。谢谢。对于快速安全解决方案,您是否推荐任何解决方案来确保我的文件安全?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    • 2016-07-30
    • 2019-05-09
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多