序章
Dropbox と同様に、ユーザー ファイルを保存およびバックアップするための Java Web アプリケーションを作成したいと考えています。興味深い Dropbox 機能の 1 つは、特定のファイルがサーバー上に既に存在するかどうかを検出できることです。たとえば、あるユーザーがサーバーにファイルをアップロードした場合、同じファイルをアップロードしようとする別のユーザーは、同じファイル コンテンツをアップロードする必要はありません。サーバーは、彼が同じファイルを持っているというマークのみを必要とします。これにより、帯域幅/スペースを節約し、さまざまな方法で速度を向上させることができます。
この問題の最も基本的な解決策は、sha1、md5 などのファイル ハッシュ文字列を使用してファイルを識別することです。クライアント ソフトウェアは、特定のハッシュがサーバー上に存在するかどうかを確認します。存在する場合は、アップロード プロセスをスキップして、ユーザーが同じファイルを持っていることをマークできます。
問題
Web アプリケーションは REST アーキテクチャに基づいて実装されているため、ユーザーは独自のクライアント ソフトウェアを簡単に記述してファイルをアップロードできます。セキュリティ上の理由から、SSL はすべてのトランザクションで有効になっています。しかし、私が最もセキュリティ上の懸念を抱いているのは、sha1 やその他の標準的なハッシュ アルゴリズムを使用している場合に、実際にはファイルを所有していないにもかかわらず、ユーザーがファイルを所有していると偽ってしまうことです。これは、SSL や暗号化によって防ぐことはできません。ユーザーがハッシュ文字列を取得できた場合 (たとえば、多くのファイルの md5 と sha1 がグーグルで検索できる場合)、Web アプリケーションで REST サービスを使用してファイルを持っていることをマークできます。
したがって、考えられる解決策の 1 つは、サーバーがファイルから特定のランダムなバイトのセットと、ファイル全体のハッシュを要求することです。手順の例を次に示します。
- クライアントは、特定のハッシュがサーバー上に存在するかどうかを確認します。次に、ファイルが既に存在する場合、サーバーはランダムなバイトの必要な位置を返します。
- サーバーにファイルがある場合、クライアントは要求に従ってランダムなバイトを送信します。クライアント ソフトウェアは、実際のファイルがないと応答できません。
このようにして、帯域幅を節約できるだけでなく、ユーザーがアップロードしたいファイルを所有していることを確認できます.
質問
私は Web 上のセキュリティの専門家ではないので、これが良いアイデアかどうかはわかりません。セキュリティをテストできず、余分な情報がクラッキング方法を提供する可能性があるため、独自の凝ったプロセスを実装するとセキュリティ強度が低下する可能性があるという記事を読みました。
プロセスについて誰かコメントはありますか?
それはscurityを減らしますか?
この問題を別の方法で解決するアイデアを持っている人はいますか?
この質問に対する正確な答えがないかもしれないことは理解していますが、誰かが同じ問題に遭遇し、それに対する良い解決策を持っているかどうかを知りたいです.