2

DropBoxAPIを使用してデータをユーザーフォルダーに保存するWebアプリを構築しています。このサイトには、ASP.NETMVCフロントエンドとWindowsサービスの2つの部分があります。現時点では、認証リクエストからデータベースにoauth文字列とユーザーIDをダンプし、サービスとWebサイトの両方の呼び出しで使用することを計画していましたが、その情報をどのように保存する必要がありますか?暗号化する必要がありますか?もしそうなら、どのように推奨事項はありますか?たとえば、データベースが暗号化されている場合、暗号化キーを保存するにはどうすればよいですか?

4

1 に答える 1

3

ユーザーのドロップボックスアカウントに常にアクセスしたいですか、それともユーザーがシステムにログインしているときだけアクセスしたいですか?o-authトークンを保存したいので、前者を想定しています。その場合、実際に暗号化できない理由については、以下の暗号化の説明を参照してください。ただし、より安全なルートを使用し、ユーザーがログインしたとき、またはその直後にドロップボックスにアクセスすることをお勧めします(つまり、永続的な認証トークンを保存しないでください)。

安全なアプローチ

ユーザーがログインしたら、ドロップボックスからoauthトークンを取得し、それを使用して必要なアクションを実行し、必要に応じて、ログアウト後もタスク(バックグラウンド同期など)を実行し続けます。ただし、最後のタスクが終了したら、トークンを削除します。これは、サーバーが侵害された場合、ログインしているユーザーまたは最近ログアウトしたユーザーのみが公開されることを意味します。その緩和策ですが、あなたが得ることができる最高のものです。

毎回ユーザーに新しいトークンの入力を明示的に要求しなくても、o-authを使用してこれを実行できると思います。そうでない場合は、opendIDで実行できることはわかっていますが、ドロップボックスでそれが許可されていないことがわかります。

最後に、これらのどちらも機能しない場合は、ユーザーのパスワードから派生したキーの下で永続的に暗号化されたo-authキーをPBKDF2などで保存できます(5000回の反復など)。彼らがログインしたら、それを復号化し、使用してから、クリアテキストのコピーを削除します。これの欠点は、1)キーがなくなったため、パスワードのリセットには新しいo-authトークンが必要であり、2)ユーザーはサイト自体にログインし、キーを取得できるようにパスワードを提供する必要があることです。openidは使用できません。

暗号化

oauth tokemに継続的にアクセスしたい場合、意味のある暗号化を行うことはできません。あなたが言ったように、あなたはどこに鍵を保管しますか?Webサービスの場合、良い答えはありません。エンドユーザーシステムの場合、答えは、保存してはならないユーザーのパスワードからキーを取得することです(これはlastpassが行うことです)。エンド(wepapp)ユーザーがログインしていない場合でもデータにアクセスできるようにするため、これを行うことはできません。

わかりました、システム管理者のパスワードはどうですか?サーバーは常に稼働しているので、妥協してもキーが明らかになるため、これは無意味です。さらに悪いことに、データを復号化するためにシステム管理者のパスワードが必要であり、システムが午前3時にクラッシュしたときにアプリがクラッシュする可能性が低いため、再起動するとアプリがダウンします。

それらは、キーを格納し、それらを使用して暗号化操作を実行するハードウェアセキュリティモジュールを作成します。そのため、攻撃者はHSMを離れることがないため、キーを取得する可能性があります。ただし、攻撃者はTPMにo-auth文字列を復号化するように要求する可能性があります。あなたができる最善のことは、これをレート制限して、攻撃が1時間に1000トークンのようにしか取得できないようにすることでした(明らかに、そのレートは合法的な使用よりも大きくする必要があります)。HSMは高価であり、専用システムが必要なためホスティングが高価になることを考えると、これは価値がありません。

理想的な世界では、TPMを使用してキーを保持し、システムが危険にさらされていない場合にのみデータを解放するようにします。残念ながら、TPMは現在、正しいプログラム(ブートローダー、カーネル、ユーザーランドプログラムなど)がロードされたことの確認のみをサポートしています。ロード後にそのプログラムが危険にさらされた場合、彼らは何もしません。これがここでの脅威のベクトルです。これは今後5年から10年で変わる可能性がありますが、今は役に立ちません。

于 2012-04-26T02:34:56.330 に答える