Web サイトで許可されたユーザーが取得できるデータを安全に保管する必要があります。クレジット カードではありませんが、同様に、誰かに手に入れてほしくないデータです。
データを取得する唯一のユーザーは、それを投稿したユーザーです。
というわけで、以下のようにまとめてみようと思います。
- すべてがSSL上で実行されます
- ログインするには、ユーザーはユーザー名とパスワードを入力し、「キー」ファイルをアップロードする必要があります。ユーザーは、キー ファイルのコピーをサム ドライブなどに 1 つだけ保持することをお勧めします。
- ユーザーのキーはサーバーに物理的に保存されません。ユーザーがログインするためのキーを提供すると、それはメモリに保存されます
- 保存されたすべてのデータは MCRYPT_RIJNDAEL_256 を使用して暗号化され、暗号化に使用されるキーは、アップロードする必要があるキー ファイルの一部になります (つまり、サーバーに保存されていないファイル)。
- ユーザーのキーがメモリに保持されている間、これも毎日変更されるキーを使用して MCRYPT_RIJNDAEL_256 を使用して暗号化されます
- データの取得時に新しい 32 バイトの IV を生成するため、2 つの個別の取得で異なる結果が得られるはずです。
- ユーザーは必要なときにいつでもキーを再生成できます。その時点で、保存されているすべてのデータが新しいキーで再暗号化されます。
- ユーザーは、キーのメモリ内ストレージにタイムアウトを設定できます。たとえば、30 分ごとにキーを再提供する必要があります。
- ユーザーは、メモリ内ストレージに非アクティブ タイムアウトを設定することもできます。たとえば、5 分間アクションを実行しないと、キーも期限切れになります。
- ボックス自体はロックダウンされ、ポート 80 とポート 22 のみが単一の IP (私たちのオフィスの IP) に公開されます。
私の質問は:
私は正しい方向に沿って考えていますか?上記のソリューションは安全でしょうか?それとも、データを簡単に取得するための攻撃ベクトルが欠けているのでしょうか?
私の知る限り、攻撃者はマシンに物理的にアクセスする必要があり (またはオフィスのネットワークにアクセスする必要があります)、その場合でも、その時点でログインしているユーザーのデータしか取得できません (それらは保存される唯一のキーです)?私の仮定は正しいですか?
ログイン中にユーザーのキーをメモリに保存する必要をなくす方法はありますか (リクエストごとにキーを再提供するように依頼する以外に) あるとは思いませんが、私が考えたことのないものであることを願っています。
ありがとう!