5

私はサーバー側のnode.jsについて話しているのではありません。

サイトのクライアント側のキーに低速ハッシュアルゴリズムを使用したいと思います。信頼できると思われるSHA-256の実装を見つけました。私はまた、OPが彼自身のライブラリを作成することにつながるこの質問を見つけました。

ただし、私はセキュリティの専門家ではなく、36人が「見つめている」だけのフォロワーが少ないように思われるため、SHAハッシュを複数回実行する必要があるのか​​、そのコードの一部を信頼する必要があるのか​​わかりません。 。

この場合の最良の選択は何ですか?私は(基本的に)何かを選択するとメソッドを変更できません。

遅いハッシュ(暗号化ではない)アルゴリズムが必要で、短い文字列を生成したいと思います。たとえば、低速の60文字のbcryptと高速の70文字のSHA-256です。

4

2 に答える 2

7

現在、ブルートフォースクラッキングの試みに対して安全であると広く考えられている3つの鍵導出関数があります。鍵導出関数は、最新のGPUベースの計算に直面しても低速になるように設計されているという点で、通常のハッシュアルゴリズムとは少し異なります。

理論上のセキュリティの順にリストします。

  • PBKDF2は、SHAに基づいてRSAによって設計されており、NISTが推奨するアルゴリズムです。ブラウザで使用できる実装がいくつか あります。

    ノードユーザーへの注意:ノードのcryptoモジュールにはPBKDF2機能が組み込まれています。それを使用してください。

  • Blowfishに基づくbcryptは、PBKDF2よりもわずかに安全です。比較的十分にテストされ、安全であることが確認されていますが、それが考慮事項である場合、標準化団体からの承認のスタンプはありません。ここに一般的なJSの実装があります

    ノードユーザーへの注意:node.bcryptを使用してください。これは、別のスレッドで計算コストの高い処理を実行します。

  • 最後に、scryptは、理論的に最も安全な(最も遅い)KDFです。残念ながら、このアルゴリズムは非常に新しいため、暗号化コミュニティによる厳密な調査とテストでは検証されていません。ただし、IETF標準になる予定です。

    アルゴリズムは非常に新しいため、実装を見つけるのは困難です。私はこの中途半端なものしか見つけることができませんでした。セキュリティ上の利点は非常に有望ですが、アルゴリズム自体とその実装の両方が安全であることが確認されるまで、scryptはお勧めしません。

これら3つは実際にどのように比較されますか?scrypt紙には比較があります:

アルゴリズム比較表

現実的には、PBKDF2でさえ、政府以外の誰もが1つの8文字のパスワードを解読するのに費用がかかりすぎます。

于 2012-11-07T19:30:02.983 に答える
0

高速SHA-256の最後の10文字はいつでも無視できます。または、含まれる最初の10文字をxorします。

SHAのラウンド数は可変です。SHAの2ラウンドはある程度可逆的である必要があります。私は、20ラウンドが「安全」であると考えられているという漠然とした考えを持っています。30ラウンドは「非常に安全」である必要があり、50ラウンドは実質的にセキュリティをまったく向上させません。

SHAは、クラッカーのマシンが十分に遅いことを期待するのではなく、数学的な証明によって安全になるように設計されています。各ラウンドの不可逆ビット数が増加し、256ビットハッシュコードに並べ替えられた場合、その特定のハッシュコードを生成するすべての可能なシーケンスを試行するのに十分なコンピューター能力はありません。宇宙には256ビットのカウンターを包むのに十分なエネルギーさえありません。

ハッシュを生成する文字列が非常に小さいか、誰かのモニターのポストイットに書き込まれていない限り。

于 2012-11-07T17:47:57.747 に答える