現在、セキュリティについて学んでいます。1つ試してみたいことは、キーサーバーにクライアントにキーを配布させ、クライアントがデータをローカルに安全に保存および読み取ることができるようにすることです。
私の基本的な考え方は、クライアントがユーザー名とパスワードを提供するTLSを介してサーバーと通信するということです。このパスワードは、ユーザーの認証とデータベース内のキーの復号化の両方に使用されます。
基本的に、キーサーバーデータベースは次のように配置されます。
ユーザー名ハッシュされたパスワード+ソルトソルト暗号化キー
この場合、データベースリークが発生した場合、キーは安全ですか?この種の実装にベストプラクティスがあるのか、これを別の方法で処理する必要があるのかと思います。
使用する暗号化やユーザーパスワードの強度によっては、キーが安全になる場合があります。しかし、それをより安全にする方法があります。それらを保存しないでください。
あなたがそれを説明するあなたのシステムでは、クライアントに暗号化/復号化全体を処理させない理由はありません。したがって、サーバーはユーザー暗号化キーを知る意味がありません。サーバーにキーを保存すると、実際に不要で大きなリスクが発生します。
サーバーがハッキングされ、データベースが盗まれ、キーが取得される
これらのキーは、傍受される可能性があるネットワークを介して送信する必要があります
ユーザーキーをデータベースに保存する理由として(悪いことはありますが)唯一の理由は、クライアントがキーを紛失した場合にそれを送り返すことができるためです。ただし、これは発生するはずがないため、問題にはなりません。秘密鍵の保管は非常にデリケートな問題であり、非常に慎重に処理する必要があります。 「失う」だけではありません。
(免責事項:私は私自身「セキュリティの学生」なので、これが正しいかどうかは100%わかりません。)
秘密鍵がユーザーに転送された後、サーバー上に保持する理由がわかりません。それらの使用はありません。それらが失われた場合-新しいものを作成します。
キーには公開部分と秘密部分があります。公開部分は実際に公開することができ、Webで公開できます。
秘密鍵は秘密にしておく必要があります。これは、ユーザーが自分のマシン(ラップトップ、電話など)に鍵を持っていること、つまり各マシンに固有の鍵であることを意味します。その鍵を安全に保管する方法を説明する必要があります。パスワードが思い浮かびます。サーバー上でユーザーのキーを作成する場合、ユーザーに秘密キーを安全に取得する方法が必要です。これはローカルで、SSH経由で、またはUSBスティックなどを介して実行できます。転送する直前にキーを作成してから削除します。
サーバーにキーを保持する理由として、何か不足している可能性があります。その理由を説明してください。