2017-12-01 12 views
1

アカウントを持たないユーザーにメールを受信できないようにするウェブサイトがあります。これは、自分のメールアドレスを「ブラックリスト」の表に保存し、メールを送信する前にそれを調べるだけで実現できます。ブラックリストに安全にメールを保存する

データ保護とセキュリティ上の理由から、電子メールを何らかの方法で暗号化/ハッシュ保存する必要があります。私は単純なmd5(password)のことを考えましたが、それはクラック/ブルートフォースが簡単すぎます。 2番目の考えは、bcrypt/scryptを使って遅いハッシュ関数を使うことですが、各エントリには塩分がありますので、比較するためにはすべてのエントリに対してメールをハッシュする必要があります。これは実行時間がO(n)でかなり遅く、nはブラックリストに登録されたエントリの数です。

メールを安全にハッシュしてブラックリストと簡単に比較する方法はありますか?いくつの項目があっても、実行時間はO(1)にする必要があります。

答えて

1

PBKDF2やBCrypt/SCryptなどの任意のキー導出関数を使用できます。

ハッシュは検索可能でなければならないため、固有のランダムな塩は使用できません。代わりに、サーバー側のキーとして機能する静的なsaltを渡すことができます。

KDFでは、ブルートフォースをかなり遅くするコスト要因の恩恵を受けることができます。静的なsalt/keyは、攻撃者がデータベースにアクセスできるが、サーバに対する特権がない(鍵は秘密のままである)場合、brute-forcingを防ぎます。これはSQLインジェクションの典型的なシナリオです。 saltがハッシュ文字列の一部でないことを確認するだけで、パスワードハッシュ用に設計されているため、BCryptのほとんどの実装でこれが行われます。

このアプローチの問題は、将来の高速なハードウェアには適応できないということです。しかし、たとえKDFがちょうどミリ秒を必要としているとしても、単純なハッシュを使うよりも良い方法です。おそらくあなたはInformation Securityでこれを尋ねるべきです、彼らはより良い選択肢を知っているかもしれません。

関連する問題