0

私は周りを検索しましたが、Blowfishの実装全体を説明する優れたリソースを見つけることができません。

5.3.8を使用しているので、crypt()関数を使用でき、次の形式のソルトを渡す必要があることがわかります。

$ 2 [x、y、a]$[ラウンド数の基数2の対数]$[いくつかの文字列]

しかし、私はどこかであなたが毎回ユニークに塩を生成する必要があることを読みました。それはあなたがあなたのデータベースにソルトを保存しなければならないことを意味しますか?誰かがあなたのデータベースを盗んだ場合、あなたはshaXを使用したのと同じ立場にありませんか?そのすべてがどの程度正確に機能しますか。

また

Blowfishはパスワードの復号化にも使用されることを読んでいます。2つの文字列を暗号化してから、それらが一致するかどうかを確認するハッシュアルゴリズムであると理解していました。復号化できるアルゴリズムをどのように、そしてなぜ使用しますか?

4

1 に答える 1

1

ソルトはレインボーテーブル攻撃からあなたを保護するので、同じデータベースにソルトを保存しても問題ありません。

本質的に、レインボーテーブルは、何百万もの事前計算されたハッシュを備えた巨大なテーブルです。したがって、パスワードが「some_pass」でハッシュが「ABC123」の場合、攻撃者はレインボーテーブルの「ABC123」を調べ、「some_pass」がこのハッシュを生成していることを確認します。

ソルトを使用する場合、攻撃者はハッシュとソルトを持っていますが、このレインボーテーブルは機能しません。レインボーテーブルには、一般的なパスワードおよび/または1〜6(またはそれ以上)の文字のすべての組み合わせが含まれています。したがって、「some_pass_ salt_ _123123123123」をハッシュすると、攻撃者はレインボーテーブルで運がないことがわかります。

あなた自身のBlowfishを実装することに関しては、これが学習(宿題?)のためであることを願っています。そうでなければ、あなたがドメインの専門家ではなく、いくつかのあいまいな詳細を見逃してしまうという理由だけで、独自のセキュリティアルゴリズムを実装することはほとんどの場合悪い考えです。

crypt()を呼び出すときに、実際に使用されている暗号化アルゴリズムを確認することもできます。MD5はもはや安全ではなく、優れたGPUで壊すことができます(タイプミスはありません。グラフィックカードを使用してハッシュを壊すことができます)。SHA-1は壊れていますが、計算上困難です(軍隊はそれを行うことができます)。したがって、SHA-1ファミリは推奨されません。SHA-2ファミリーを目指してください。

于 2012-10-27T17:35:41.890 に答える