2012-09-18 12 views
10

データベースが侵害されていて、長寿命のアクセストークンが盗まれないようにするために、どのようなセキュリティ対策を講じる必要がありますか?アクセストークンを安全に保存する

長寿命のアクセストークンは、特定のサービスのユーザー名とパスワードと同じくらい良いですが、他のユーザーと話すことで、アクセストークンをプレーンテキストで保存しているようです。これはプレーンテキストにパスワードを格納するのと同じくらい悪いことになります。明らかに1つは塩をつけることができません&トークンをハッシュします。

私は理想的には暗号化したいと思っていますが、これを行うための最良の方法、特にオープンソースプロジェクトではわかりません。

私はこの質問に対する回答が支払い情報とPCIのコンプライアンスを保存するものと似ていると思いますが、なぜこれについての議論はもうないのでしょうか?おそらく私は何かを逃しています。

+0

「特にオープンソースプロジェクト」とはどういう意味ですか?あなたのプロジェクトはクローズドソースではないので、特定の種類の暗号化スキームを使用するというあなたの決断は何を考えていますか? –

答えて

7

他人から提供されたトークンを確認したいだけですか?もしそうなら、パスワードと同じように扱います。 Password Based Key Derivation Function 2 (PBKDF2)(詳細はRFC 2898に記載されています)のようなバイト導出アルゴリズムを10,000反復で使用し、最初の20バイト程度を格納します。トークンを受信したとき。それは事実上可逆的ではない。

トークンを他人に提示して認証しますか?もしそうなら、これは挑戦です。あなたのアプリケーションがトークンへのアクセスを復号化したり、他の方法でアクセスしたりすることができれば、攻撃者も同様です。シャノンのマキシムを考えてみると、特にオープンソースプロジェクトの場合、攻撃者はシステムを知っています。

この場合、最良の方法は、強力なアルゴリズム(たとえばAES256)でトークンを暗号化し、強力な暗号標準乱数ジェネレータを使用して鍵を生成し、データを別の場所に安全に格納することです上記の例では、データベースの外部にあるアクセス権保護されたファイル内などです。後者は、SQLインジェクション攻撃がキーを明らかにしないことを意味します。

+0

ありがとうございました - 後でユーザーが存在しないときにトークンを使用できるようにする必要がある、後者の使用例を参照しています。 –

+0

@aktonなぜトークンをパスワードのように扱うのですか? (プレーンテキスト)パスワードは、攻撃者が同じpwdを使用して別のサービスにログインしようとする可能性のある情報を取得することを望まない情報です。トークンはあなた自身のサービスにのみ有効です - 攻撃者がトークン/ dbを手に入れた場合、トークンを使用してアカウントにログインするよりも害を被る可能性があります...私は見ていません? – pkyeck

+0

質問が正しいと仮定すると、トークンはユーザーを認証できる、ユーザーごとの長命の証拠です。つまり、パスワードです。 – akton

関連する問題