私はPCI DSS 3.0により、カード番号のハッシュを暗号化された値とは別に格納できるようになることを理解していますが、制限されたエントロピーを考慮して、ハッシュされたデータからカード番号を検出するhashcatなどのツールの効率に驚いています。
ルックアップの目的では、ランダムなソルトはオプションではないため(多くの場合、ルックアップを行うにはカード番号しかありません)、ハッシュをルックアップするにはソルトを静的にする必要があります。
私は言ったある提案を読みました、
秘密鍵はソルト値として効果的に使用できますが、これはそもそもハッシュの理由のいくつかを無効にし、暗号化と同じ鍵管理を必要とします。 http://www.integrigy.com/files/Integrigy_Hashing_Credit_Card_Numbers_Unsafe_Practices.pdf
私の質問は、ソルトに「秘密鍵」を使用している場合、発見とブルートフォースの影響を受けやすい(ただし、その長さが後者を非現実的にする可能性がある)場合、AES256で値を暗号化するだけでなく、暗号化された値?
確定的暗号化と比較して、「秘密だが均一なソルト」を使用したハッシュのセキュリティ上の利点はありますか?
暗号化された値ではなくハッシュに対してカードルックアップを実行するのは速度のために行われるので、セキュリティよりもパフォーマンスのためです。
セキュリティとルックアップ機能の観点から、静的ソルト(コショウ)と、多少動的なソルト(カード番号の有効期限など)を考慮することができます。
ハッシュ関数と暗号化の違いは、ハッシュは一方向の関数であると想定されている一方で、暗号化を使用すると簡単に元のデータを取得できることです。
暗号化キーが盗まれた場合、すべてのカード番号を直接読み取ることができます。あなたの塩が盗まれた場合でも、あなたはそれを総当たりにする必要があります。ハッシュ関数によっては、これはあなたが思うように難しいかもしれません。
Md5やsha1のような弱いハッシュ関数では、ブルートフォースは単純で、ハッシュは大きな改善ではありません。しかし、メモリとCPUを集中的に使用するハッシュを使用すると、ここである程度のセキュリティを確保できます。
Bcryptまたは多分scryptを見てください。 bcryptを使用すると、パラメータを使用して必要なCPU時間を増やし、ブルートフォースを困難にすることができます。 Scryptはメモリに負荷がかかるため、GPUで総当たりすることはできませんが、新しいものです(2009)。
実際、ルックアップパフォーマンスのためにハッシュを実行していると言われているかもしれませんが、これはPCIに準拠するように行われています。これには2つの見方があります。
クラックを防ぐためにxを実行しても、推測できる数値は5つ程度しかない場合があるため、実際には入りません。 BINの6桁、1つのチェックディジット。Luhnを渡す必要があります。
有効期限、cvv、および請求の詳細と一緒にのみ役立つはずです。
ハッシュに対するチェックと入力カード番号は奇妙です。事実上のパスワードとして使用されていますか?または、復号化された値がハッシュに対してチェックされていますか?
つまり、ユーザーが認証された場合、「Vault保管」カードをトランザクションに使用できますが、なぜカード番号を再度確認するのですか?
ハッシュする他の唯一の理由は、インデックスを平準化することです。さもなければ、各BINに次の桁のカーディナリティを除いて、全能の素晴らしいホットスポットがあります。