web-dev-qa-db-ja.com

OpenSSLのSHA1またはSHA256ハッシュ関数をソルトすることは可能ですか?

OpenSSLのハッシュ関数を外部でソルトしたいので、自分でソルトを割り当てることができます。それは可能ですか、それともOpenSSLのハッシュ関数は常に内部的に「ソルト」されますか?

2
Maximilian

ハッシュアルゴリズムは、OpenSSLでデータ整合性チェックと署名証明書およびCRLに使用されます。ソルトハッシュ技術は、アプリケーションレベルで使用されます。 JavaScriptを使用してそれを実現できます。あなたが達成しようとしていることを教えてください。

以下は、テスト目的での安全でない実装の入力と要件に基づいています。

ハッシュ関数SHA-1およびSHA256は、データを内部的にソルトしません。特定のデータをハッシュするすべての複数の反復は、常に同じハッシュになります。したがって、あなたが構築しようとしているものが可能です。

ステップ1:ハッシュ化するデータの入力をユーザーに依頼します。

ステップ2:希望するオプションをユーザーに尋ねます。

  1. ソルティングが必要です-hash=SHA256(SHA256(data)+random(1))

  2. ソルトの手動入力-hash=SHA256(SHA256(data)+manual_salt)

  3. ソルティングなし-hash=SHA256(data)

C++でコーディングしている場合は、次のリンクを確認してください。

  1. Generate SHA OpenSSLライブラリを使用したC++のハッシュ
  2. C++ sha1関数
  3. C++ sha256関数
4
feral_fenrir

SHA-1とSHA-256は 暗号化ハッシュ関数 です。それらは入力としてビットの任意のシーケンスを受け取ります-そしてそれだけです。ハッシュ関数には「塩」はありません。

ハッシュ関数が「ソルト化」されていると言われる場合、これはハッシュ関数ではありません。これは、入力パラメーターの中で「塩」と見なされるものを使用し、内部的にはハッシュ関数を構築要素として使用する可能性のある他の構造です。そのような構成の1つの例は PBKDF2 です。

誰かが「ハッシュをソルトしたい」と言ったとき、これは次の2つのことのいずれかを意味する可能性があるため、区別は重要です。

  • 誰かがPBKDF2のような既存の明確に指定された構造を実装しようとしており、それを単に「ソルトハッシュ」と呼ぶこと。正しい方法は、完全な構造の既存の実装を探すか、失敗した場合は、内部で使用されているハッシュ関数に注入されるビットのシーケンスを正確に伝える仕様を使用して実装することです。いずれにしても、「ハッシュをソルトする方法」の質問は意味がなくなります。

  • 誰かがハッシュ関数を使用して独自の自家製の構築を行っている途中で、いくつかの値といくつかの暗号関数を混ぜ合わせようとし、すべての成分が何らかの形でうまく相互作用して「セキュリティ」をもたらすことを期待しています。一種のケーキ。これは災害の既知のレシピです。悲しみだけがその道にあります。

    通常、「塩」の概念はハッシュpasswords、ここで、パスワードは「弱い秘密」です(「秘密」は機密を保持することになっているため「秘密」、人間の脳が覚えることができるため「弱い」、そして人間の脳はランダムな値を覚えるのが本当に苦手です)。パスワードのハッシュ化は、即興性を許容できるものではありません。このテーマについては多くの理論と研究があり、経験から、自家製のスキームはほぼ常に悲惨なほど弱いことが繰り返し示されています。主題の紹介として この答え を読んでください。

12
Tom Leek