私のASP.NETMVC4 Webサイト(Azure Webロールとしてホストされている)は、機密データをSQLServerテーブルに格納します。ユーザーがデータを生成するワークフローを開始すると、Rijndael実装からランダムなキーを取得し、それをセッション状態で保存します。私は、セッションの存続期間中、データベースとの間のラウンドトリップ暗号化/復号化にそのキーを使用します。したがって、そのセッションで実行されているコード(または、少なくとも、セッション状態に格納されているキーにアクセスできるコード)のみがデータを復号化できます。
今、私はデータベースレコードがしばらくの間ぶらぶらして、別のセッションからそれらにアクセスできるようにする必要があります。このセッションは前のセッションの状態で保存されたキーにアクセスできないため、私の最善の最も簡単なアクションは、アプリケーションコードに組み込まれているキーを使用してすべてのデータを暗号化することだと思います。
Webサイトを任意のASP.NETホストでホストできるように、Azureフックを使用しないように努力していることを付け加えておきます。
2つの質問があります:
<sessionState mode="StateServer" />
セッション状態スキームが安全であり、実際に複数のホストを使用している場合、既存のスキーム(セッション状態でキーを格納する)はAzureで安全ですか?(親切にしてください...私はまだこのASP.NET/Azure全体を理解しています。現時点では、InProcセッション状態を使用しています。複数のホストを機能させることすら試みていません。)ランダムなセッションごとのキーを使用することは、単一のベイクインキーを使用するよりも強力な暗号化スキームのようです。ただし、一方で、SSLの世界全体では、SSL証明書に組み込まれた単一の秘密鍵によってすべての通信が保護されることを前提としています。コードに組み込まれたキーの使用について心配する必要がありますか?より良いスキームはありますか?セッションごとのキーを使用して行っていたものに似ていますか?