iPhone アプリケーションと「同期」するデスクトップ アプリケーションがあります。同期は実際には単純なファイルのコピーです。iPhone アプリはビューアーなので、実際に双方向でデータを同期する複雑さに対処する必要はありません。
軽量にする必要があるため、独自のプロトコルを作成しました。デバイスで使用可能な RAM よりも大きい可能性のあるファイルを送信しています。したがって、ファイルはネットワークからディスクに直接ストリーミングされます。
ファイルは、1 つの「データ」ファイル (SQLite データベース) と、画像、PDF などの 0 個以上のリソースで構成されます。接続が受け入れられると、クライアントとサーバーは次の構造体で始まるチャンクで通信します。 :
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;
これまで、セキュリティについてまったく考慮していませんでした。同期は、暗号化されている場合とされていない場合があるローカル WiFi ネットワークを介して行われます。コピーされるデータには、その性質上、ワープロ ドキュメントとは異なり、機密情報は含まれません。ユーザーが必要に応じて機密情報を入力することを妨げるものは何もありませんが、要求されることはありません。
では、データが十分に安全であることを確認するには、どのような手順を踏む必要がありますか? 私はObjective-Cで作業していますが、言語固有の答えを探しているのではなく、概念だけを探しています。私が心配していること:
- データのなりすましを防止するための措置を講じる必要がありますか?
- 実際にデータを暗号化するための措置を講じる必要がありますか?
- 別のアプリケーションが自分のアプリになりすましたり、クライアントまたはサーバーを別のものに置き換えたりしないようにするための措置を講じる必要がありますか?
- 受信したデータに破損の原因がないか確認する必要がありますか?