У меня есть настольное приложение, которое будет синхронизироваться с приложением iPhone. Синхронизация на самом деле является простой копией файла - приложение для iPhone является средством просмотра, поэтому мне не приходится сталкиваться со сложностями фактической синхронизации данных в двух направлениях.
Я написал свой собственный протокол, поскольку мне нужно, чтобы он был легковесным, и я отправляю файлы, которые могут быть больше, чем объем ОЗУ, доступный на устройстве - поэтому файлы передаются прямо из сети на диск.
Файлы состоят из одного файла «данных» (база данных SQLite) и нулевого или более ресурсов, которые представляют собой изображения, PDF-файлы и т. Д. После того, как соединение было принято, клиент и сервер обмениваются данными частями, которые начинаются с следующая структура:
struct ChunkHeader {
UInt32 headerLength;
UInt32 totalChunkLength;
UInt32 chunkType;
UInt32 chunkNameLength;
UInt32 chunkDataLength;
} __attribute__ ((packed));
После структуры следует строка имени файла UTF-8, за которой сразу же следуют данные для этого файла. Структура заголовка содержит длину строки имени файла (chunkNameLength
) и длину двоичных данных (chunkDataLength
). chunkType
содержит «тип» чанка, поэтому клиент знает, что делать с данными, и может иметь одно из следующих значений:
typedef enum {
kChunkTypePreSyncInfoDictionary = 0,
kChunkTypeDataFile = 1,
kChunkTypeResource = 2,
kChunkTypeEndOfData = 3,
kChunkTypeSyncCancelled = 4
} ChunkType;
До сих пор я вообще не принимал во внимание безопасность. Синхронизация будет осуществляться по локальной сети Wi-Fi, которая может быть или не быть зашифрована. Копируемые данные по своей природе не содержат конфиденциальной информации, как в текстовом редакторе - нет ничего, что могло бы помешать пользователю вводить конфиденциальные данные, если они этого хотят, но это не требуется.
Итак, какие шаги я должен предпринять, чтобы обеспечить адекватную безопасность данных 1017 *? Я работаю в Objective-C, но я не ищу ответы для конкретного языка, а просто концепции. Вещи, о которых я беспокоюсь:
- Должен ли я принять меры для предотвращения подмены данных?
- Должен ли я предпринять шаги для фактического шифрования данных?
- Должен ли я принять меры, чтобы другое приложение не претендовало на роль моего приложения, и заменить клиент или сервер чем-то другим?
- Должен ли я предпринять шаги для проверки полученных данных на предмет повреждения?