Шифрование - отправка - сохранение - получение файлов в iOS

У меня есть приложение iMessage, которое отправляет файлы. Данные сохраняются на серверах iCloud с помощью CloudKit. Все работает хорошо.

Теперь я хочу добавить новый уровень безопасности. Я хочу зашифровать данные перед отправкой в iCloud.

Проблема в том, что использование пар public/private key невозможно:

  • В iMessage расширение не может идентифицировать пользователей.
  • Нельзя открывать сеанс реального времени между участниками беседы для обмена ключами.

Ни один из приведенных ниже вариантов не является достаточно сильным, чтобы защитить данные:

  • Используйте ключевое шифрование, жестко закодированное в приложении.
  • Создайте случайный ключ, зашифруйте данные с ним и сохраните его с данными на серверах iCloud, чтобы его можно было загрузить с помощью файла для его расшифровки.

iCloud может быть безопасным, но данные пользователей могут быть личными/чувствительными, поэтому я хочу добавить новый уровень безопасности + это для меня интересное упражнение.

Может ли кто-нибудь помочь найти правильный метод шифрования?

Ответ 1

Я наткнулся на это решение на GitHub. Мы кратко рассмотрели код и не совсем поняли его, если само сообщение зашифровано при отправке, но наверняка доступ к его содержимому защищен, так что только владелец устройства может получить к нему доступ. Раскрою ответ, как только я углублюсь в него, но сейчас я предлагаю вам углубиться в него, чтобы увидеть, получил ли он ту функциональность, которая вам нужна, или, по крайней мере, подходит ли указанный подход к вашим потребностям, хотя и с некоторыми ограничениями.

Ответ 2

Вы можете отправить ключ в URL пользовательского MSMessage вместе с адресом CloudKit. Ключ и адрес URL могут быть закодированы в формате base-64 как URL данных, поэтому только ваше приложение знает, как декодировать.

Таким образом, по крайней мере, кто-то должен знать, как декодировать ваш стандартный URL-адрес, прежде чем получить ключ шифрования.