1

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で作業していますが、言語固有の答えを探しているのではなく、概念だけを探しています。私が心配していること:

  • データのなりすましを防止するための措置を講じる必要がありますか?
  • 実際にデータを暗号化するための措置を講じる必要がありますか?
  • 別のアプリケーションが自分のアプリになりすましたり、クライアントまたはサーバーを別のものに置き換えたりしないようにするための措置を講じる必要がありますか?
  • 受信したデータに破損の原因がないか確認する必要がありますか?
4

1 に答える 1

2

「受信したデータに破損の原因がないか確認する必要がありますか?」

いつも。無条件に。例外なく。

その他の質問:

  • データのなりすましを防止するための措置を講じる必要がありますか?

  • 実際にデータを暗号化するための措置を講じる必要がありますか? (詮索する)

  • 別のアプリケーションが自分のアプリになりすましたり、クライアントまたはサーバーを別のものに置き換えたりしないようにするための措置を講じる必要がありますか? (またなりすまし)

「コピーされるデータには機密情報が含まれていません」とあなたは言ったので、スヌーピングはあなたが気にする脅威シナリオではないようです。

つまり、スプーフィングの脅威シナリオを心配しているようです (2 回言及しました)。

これは通常、クライアントとサーバーの間である種の資格情報を交換することで処理されます。パスワードはユーザー認証に使用されます。ある種の証明書は、クライアントとサーバーの相互信頼のために機能する場合があります。

アイデアは、クライアントとサーバーが相手が信頼できることを知るのに「十分な」情報を持つことです。一部の人々は、既知の URL に満足しています。他の人々は、「共有秘密」(パスワードなど) を必要としています。一部の人々はさらに多くのことを必要とし、プロトコルに多数の詳細を含めます. 一部の人々は、プロトコルにアルゴリズムの詳細を含めます (たとえば、HTTP ダイジェスト認証では、サーバーから提供されたデータに対してクライアントが少しアルゴリズムのダンスを行う必要があります)。

于 2009-08-22T14:55:54.180 に答える