私は、多数の認証済みユーザー間で安全な情報を共有できる安全なデータ ストアを構築しています。また、認証されていないユーザーがデータを公開したり内容を漏らしたりせずに安全なデータ ストアにチェックインできるようにしています。
現在、データは 1024 ビット キーで暗号化されており、RSA (2048 ビット) キー ペアが関連付けられています (秘密キーは 1024 ビット キーで暗号化されています)。これは、人々がデータをチェックインしたい場合、RSA キーを使用できることを意味します。
1024 ビット キーは、各ユーザーに固有のユーザー シークレットを使用して暗号化され、完全に非公開であり、開始時にランダムに生成されます (または要求に応じてリセットされます)。これは、ユーザーがキーを公開しなくてもデータにアクセスできることを意味します。
最後のビットは、Users Secret の保存です。シークレット自体は、別の RSA (これも 2048 ビット キーを使用) キー ペアを使用して暗号化されます。公開鍵はユーザーに関連付けられ、秘密鍵はログイン パスワードを使用して暗号化されます。
実際にログインすると、ユーザーのユーザー名とパスワードが検証され、固有のトークンがブラウザーに返され、特定のユーザーとして承認されます。
ログイン ポイントで有効であれば、パスワードを使用して RSA 秘密鍵を復号化し、ユーザー シークレットを復元できます。
しかし、ユーザーのパスワードは一度にしかシステムで利用できないため、その瞬間を利用してユーザーの秘密を取得し、それを現在のログイン セッションで利用できる場所に保存しますが、他の人は利用できません。
ユーザーがサインアウトすると失われる暗号化する別のデータベースに保存することもできますが (たとえば、アクセス トークンを使用して)、誰かがログインしているときに誰かがシステムに侵入しようとすると、彼らがシークレットを復元できるため、残りのデータを復元できます。
セッション以外のすべての人によるアクセスからユーザーシークレットを保護できる実装へのアイデアや参照を誰かが持っていますか?