iOS: 加密空投传输的文件和出口合规性

iOS: encrypting file transferred by Airdrop and export compliance

我正在使用 Airdrop 在两个 phone 之间传输应用程序内部数据。由于 Airdrop 旨在用于文件共享,因此可能会出现用户不小心选择“保存文件”以将数据文件保存在“文件”应用程序中的情况。由于我的应用程序是财务规划应用程序,因此我正在考虑对 Airdrop 传输的文件进行加密,以确保用户数据的安全。加密仅适用于 Airdrop 传输的临时文件。一旦接收器 phone 上的应用程序收到它,它会立即解密文件。

我参考这个 thread 来确定如果我加密临时文件我应该如何回答出口合规性问题。我注意到这两个豁免项目:

(iii) your app uses, accesses, implements or incorporates encryption with key lengths not exceeding 56 bits symmetric, 512 bits asymmetric and/or 112 bit elliptic curve

(iv) your app is a mass market product with key lengths not exceeding 64 bits symmetric, or if no symmetric algorithms, not exceeding 768 bits asymmetric and/or 128 bits elliptic curve.

我不太明白这两个项目的条件区别(什么是大众市场产品?)。但我认为两者都没有帮助,因为 iOS Cryptokit 提供的密码仅包含 AES 和 ChaChaPoly - 前者的最小密钥大小为 128 位,后者的密钥大小为 256 位。

由于有很多应用使用Airdrop来传输应用程序内部数据(我可以从SO上的讨论中看出),我想知道其他人是如何处理的?这是否被视为豁免案例?

顺便说一句,我考虑过其他选择,但 none 令人满意:

  1. 不要加密数据。将其隐藏起来(例如,使用凯撒密码之类的东西)。但是感觉很不专业
  2. 不要使用空投。实现我自己的数据传输机制。例如,在发送方启动一个微型 Web 服务器,接收方通过 HTTPS 获取数据,据我了解这是一个豁免案例。我不选择这种方法是因为 a) Airdrop 提供了比这种方法更好的用户体验,b) 我需要使用 Bonjour 来发现服务,这需要本地网络许可。如果可能的话,我想避免这种情况。

答案取决于您使用什么密码来加密数据。

Apple 在几个文档中总结了您的要求。

首先,在CryptoKit documentation

Typically, the use of encryption that’s built into the operating system—for example, when your app makes HTTPS connections using URLSession—is exempt from export documentation upload requirements, whereas the use of proprietary encryption is not. To determine whether your use of encryption is considered exempt, see Determine your export compliance requirements.

这会将您带到 this document,其中有一个 table,我已部分展示:

假设您使用来自 Apple 的 Crypto Kit 框架的 AES,第二个条款将适用。您不需要向 Apple 提供任何文件,但您应该向美国政府提交自我分类报告。

您在问题中列出的豁免不适用,因为您不会使用密钥长度为 64 位或 56 位的对称密码。