ユーザーがデータやファイルなどを暗号化して保存できるサービスを提供しています。私が作成したサービスには、ユーザーのパスワードに2つのアプリケーションがあり、ユーザーは私のサービスにログインします。1)認証と2)パスワードは、ユーザーが私のサービスに保存するデータの秘密暗号化キーのベースとして使用されます。
ユーザーがSSOを介してサービスにアクセスできる必要がある別のサービス(OAuth2、SAML、またはその他の標準)と統合しています。明らかな問題は、ユーザーのパスワードが削除されるため、秘密鍵として使用できないことです。
いくつかの質問:
親サービスからのユーザーのパスワードをアプリケーションに渡して、暗号化の秘密鍵として使用できるようにすることはできますか?
ユーザーがSSOを介してサービスに登録するときにシークレットがランダムに生成される場合、これは安全にどこにでも保存できますか?
現在、私のサービスはAES-256対称暗号化を採用しています。私のユースケースに適した暗号化スキームはありますか?
秘密鍵として使用できるユーザーのパスワード以外の文字列のアイデアはありますか?
親サービスからのユーザーのパスワードをアプリケーションに渡して、暗号化の秘密鍵として使用できるようにすることはできますか?
いいえ。それがプロトコルの要点です。
ユーザーがSSOを介してサービスに登録するときにシークレットがランダムに生成される場合、これは安全にどこにでも保存できますか?
誰から保護しますか?私はあなたのシステムが誰かの私的ファイルを解読することさえできないように設計されていたと思います。その場合は、いいえ、エンドユーザーに渡して保存を依頼しない限り、取得できない場所に保存できる場所はありません。
現在、私のサービスはAES-256対称暗号化を採用しています。私のユースケースに適した暗号化スキームはありますか?
AES128でも十分強力です。あなたのシステムについてもっと知らなければ、公開/秘密鍵を使用するある側面からそれが利益を得るかどうかを言うのは難しいです。
秘密鍵として使用できるユーザーのパスワード以外の文字列のアイデアはありますか?
もしそれが私だったら、私のパスワード(かなり短い)を使ってほしくありません。大きな複数行のテキストボックスに任意の長いパスフレーズを入力できるようにしたいと思います。好きな本を2、3ページ貼り付ければ、簡単に回復できます。
また、ランダムに値を生成し、それをCookieまたはファイルとして保存して、エンドユーザーが保持できるようにすることもできます。