web-dev-qa-db-ja.com

複数の人が保護されたファイルにアクセスできるように「鍵素材」を使用する方法は?

これがこの質問をするのに適切なSEであるかどうかはわかりませんが、このリモートシステムに異なるパスワード/ログインを持つ複数の人が同じファイルにアクセスできないように暗号化する必要があるファイルのデータベースがあるようです資格情報の2番目のセットを入力します。

具体的には、以下をサポートできる必要があります。

  • 一度暗号化された単一ファイルの「プレーンテキスト」バージョンにアクセスする複数のユーザー
  • 1人のユーザーの権利の取り消し(解雇された場合など)
  • パスワードを忘れたユーザーが新しいパスワードを取得できるようにする(つまり、パスワードのリセット)
  • 理想的には、攻撃者が資格情報を傍受する能力を最小限に抑えながら、そのような暗号化されたファイルのリモート検索/ソートを可能にします。

セキュリティに関する私の知識はせいぜい理論的なものです。私はいくつかのドングルエンコーディングを行いました(十分な時間をかけてクラッカーがセキュリティを破壊することをよく知っています)、この種の分散システムは私を少し超えています。

私の現在の考えは:

  • リモートで暗号化されたファイルをデコードするための証明書ファイルがあります。この証明書は、ユーザーのユーザー名/パスワードによって暗号化されます。
  • ユーザーは証明書の復号化を試みる前にリモートでログインするため、ログインできない場合(つまり、何もしなくても)、証明書にアクセスできません。彼らが精通している場合はとにかく証明書を復号化できるはずなので、これは非常に弱いです。
  • これらのファイルをリモートで検索/ソートするには、ファイルの日付範囲を事前にソートします。この手法は、1ユーザーあたり1日5〜10を超えるデータベースへの追加を期待していないため(そしてそれは途方もなく多用であるため)、価値があるだけであり、過去3日間、3週間などからエントリを取得すると、使用事例。次に、これらのファイルの復号化/検索/並べ替えをローカルで実行できます。
  • パスワードの再割り当てについては、新しいユーザー名/パスワードで別の暗号化された証明書を取得する必要があります。つまり、サイトの他の誰か(管理者またはだれでも)がユーザーに新しい証明書を提供するには、プレーンテキストバージョンの証明書にアクセスできる必要があります。つまり、管理者が新しいパスワードを割り当てる必要があります。私は大丈夫です。

このアプローチはいくつかの理由で良くありません:

  • 経験豊富なユーザーは、資格情報と暗号化/復号化ルーチンの知識を使用して、古い証明書を復号化できます。ログインが失敗するため、リモートデータにアクセスできないため、これはそれほど大きな問題ではありません。
  • リモートでの検索/ソートは苦痛です。
  • サイトの全員がパスワードを紛失すると、すべてのデータが失われます。私は、顧客がこのレベルのセキュリティを求めている場合、この種の結果も求めていると考えがちです。

だから私はこのコミュニティに尋ねます—このアプローチは実現可能でしょうか?この(またはその他の、より改善された)アプローチを検討する必要があるパッケージまたはユーティリティのグループはありますか?

明確にするために、このシステムは暗号化されたデータをリモートで保存し、ユーザーはそのデータにアクセスします。ユーザークライアントを任意のシステムに配置できますが、リモートデータにアクセスするためにユーザーに提供するプログラムになるという考えです。サーバーには平文のデータがあってはなりません。

したがって、ユーザーがWindowsを使用している場合は、クライアント、証明書、およびログイン資格情報があります。証明書はそれらの資格情報で暗号化されるため、復号化してこのリモートシステムからデータを読み取るために使用できます。ユーザーが使用するOSを変更できません。

2
mmr

これらは異なるセキュリティレベルであり、異なるソリューションが必要です。

  • ファイルを暗号化することにより、適切なキーがなければ、だれでもファイルを盗むことはできても、読み取ることはできなくなります。
  • たくさんのユーザーがいくつかの資格情報でいくつかのファイルにアクセスすることは、別の問題です。

ユーザーがファイルのプレーンテキストバージョンにアクセスできる場合、システム(およびファイルの暗号化)はユーザーに対して透過的であるため、そのファイルが暗号化されているかどうかは問題ではありません。ログインすると、自分がアクセスできるすべてのファイルが表示され、それらのファイルが暗号化されているかどうかさえわかりません。

Linuxシステムは、ここで必要なすべてを提供できます。異なるユーザーを作成し、証明書でログインするように設定して、適切なユーザー/グループ権限でファイルにアクセスできるようにします。ユーザーが暗号化されたファイルをアップロードできる必要がある場合は、RSAキーペアを作成し、サーバーの公開キーをユーザーに配布します。そのキーを使用して、ファイルを暗号化したり、サーバー側で復号化したりできます。

2
karatedog

これは少し話題外のように聞こえるかもしれませんが、私はあなたが必要とするものを提供するシステムの基本を説明する公開講座に出席しました。聞いたことを共有します。

いくつかの当事者が関与しました:

それでは、ボブが自分とアリスのためにファイルを共有したいとします。彼がすることは次のとおりです。

  • 彼はランダムなキーKf;を生成します。
  • 彼はファイルを暗号化します[〜#〜] f [〜#〜]Kf1回(対称暗号化が使用されます(CBCモードのAESなど)。
  • 彼はKfを自分の公開鍵、Aliceの公開鍵、および鍵エスクローの公開鍵で暗号化します。

これはすべて「オフライン」で行われます。キーエスクローやアリスに連絡する必要はありません。これで、ボブとアリスはKfを秘密鍵で復号化することで同じファイルを共有できます。ボブが解雇された場合、パスワードを失うか、許可が取り消される必要がある場合、エスクローが開始し、上で作成されたレコードを変更します(これには、Kfそしてファイルを再暗号化します)。

1
Lachezar Balev