web-dev-qa-db-ja.com

このファイル共有アプローチは安全ですか?

私は現在、ファイルをアップロードして、プラットフォーム上にない他の人と共有する必要があるソフトウェアを開発しています。

これが暗号化に関する私のアプローチです。

  1. ユーザーにはマスターパスワードがあり、ハッシュのみが保存されます(ログインに使用されます)
  2. ユーザーがファイルをアップロードすると、ランダムなパスワードが
    生成され、ファイルはそれで暗号化されます(すべてクライアント側)
  3. パスワードはマスターパスワードで暗号化され、次に
    ファイルと一緒に保存

ファイルが外部ユーザーと共有される場合、次の手順が実行されます。

  1. ログインしたユーザーがファイルを共有します。ファイルキーが取得され、クライアント側のユーザーパスワードで復号化されます
  2. ユーザーは、パスワードとファイルを共有するか、ロケーションハッシュ内のパスワードを使用してファイルへのリンクを使用できます。ファイルは常にクライアント側で復号化されます

このアプローチは安全ですか?また、より良いオプションはありますか?

6
NikxDa

アプローチは安全ですか?

いいえ-私はあなたの脅威モデルを理解していない場合。

脅威モデルによって異なります。サーバー(またはdbまたはdb-backup)オペレーターがファイルを復号化できるようにしたくない場合は、決してサーバーにファイル暗号化キーを与えないでください。

モデルで最も明確な脅威は、登録ユーザーのパスワードをブルートフォースで推測できることです。これを行うと、ファイルの暗号化キーとファイル自体を復号化できます。

更新

このアプローチに対するパスワードについて、少しずつ脅威を考えます。

一般に、ユーザー派生パスワードは安全ではありません。これについて考える1つの方法は、最終的にはパスワードが侵害されることです。フィッシング、キーロガー、キーボードで書かれたものを見つけたり、強引に強要されたりするかもしれません。つまり、データベースのコピーを取得したとしましょう。今度は、時間の経過とともに単純にpwを待つだけです(または積極的にそれを探します)。取得したら、コピーに含まれるユーザーがアップロードしたものをすべて復号化します。

これを別の方法で作成しました(その脅威を防ぐため)

私たちはビルドsend.firefox.comに基づいています。

ファイルがアップロードされると、クライアント側で暗号化され、サーバーに保存されます。暗号化キーは生成されたURLに保存され、サーバーには送信されません。

URLは受信者に送信され、URLは1回しか使用できず、24時間で有効期限が切れます。

これを追加しました-ファイルをアップロードした後、システムが生成したパスフレーズ(2つの一般的な5年生レベルの英語の単語)を返します。

ファイルをダウンロードするには、安全なリンクとパスフレーズを知っている必要があります。

美しさは、ユーザー登録が必要ないことです。

6
Jonathan