根本的なアルゴリズムがわからなくても、パスワードハッシュを総当たりにすることはできますか?
たとえば、パスワードハッシュを持つデータベースを取得し、使用されているハッシュアルゴリズムが不明な場合(SHA/MD5/Bcrypt/custom/Salt/Pepperのランダムな組み合わせなど)。
パスワードクラッキングの専門家は、パスワードハッシュをブルートフォースで攻撃できますか?
また、(公開Webサイトの場合)少なくとも既知のパスワードを使用して独自の「アカウント」を作成できるため、既知の入力とハッシュのペアが1つあると思います。それは役に立ちますか?
あなたの質問は私にはあまり意味がありません。ハッシュをすでに知っていて、それを生成する入力がわかっている場合、ブルートフォースのポイントは何ですか?
一方、何かを総当たりにするということは、いくつかの手順をさまざまな入力で何度も適用し、出力をハッシュと比較することを意味します。使用する手順がわからない場合、何度も適用することはできません。
しかし、入力とハッシュを知っている場合は、最初にブルートフォースを使用して、使用されているアルゴリズムを見つけることができます。例えば
sha1(i)
、sha1(md5(i))
、md5(i)
など、可能なハッシュ関数の多くの組み合わせを試します。使用されているものを部分的に推測する場合があります。したがって、出力が160
ビット長の場合、最後のステップはsha1
であったと推測できます。
使用されるハッシュ関数を知らずにハッシュを総当たりすることはより困難になります-ハッシュ関数とハッシュするデータの両方を推測する必要があります。ただし、ハッシュ関数を秘密にする理由はありません。
まず、通常はハッシュの長さから(またはダミーアカウントを設定して多くの明らかな可能性を試してみると)、どのアルゴリズムを使用してハッシュを生成したかが明らかになります。既存のハッシュ関数を変更して「独自の」ハッシュ関数を作成することは、一般に悪い考えです。(1)不要である、(2)さまざまなシステム間で維持するのが悪夢になる、(3)間違って実行するとセキュリティが大幅に低下する可能性があるため、および(4)ハッシュ関数の計算方法はソースコード/実行可能ファイルにあり、ハッシュのリストを危険にさらす断固とした攻撃者は、ソースコード/実行可能ファイルを手に入れ、次のことができる可能性があります。そこからハッシュ関数をリバースエンジニアリングします。
(アプリケーションのソースコードまたは実行可能ファイルが危険にさらされるまで)ハッシュがブルートフォースになってはいけないというルートを本当に進みたい場合は、ハッシュを使用するのではなく、MAC(メッセージ認証コード)を使用する必要があります。 HMAC構造 を使用して、ハッシュ関数からMACを構築できます:HMAC(password) = H(K1 ++ H(K2 ++ password))
ここで、H
はハッシュ関数、K
は秘密ですkey(HMACを計算するアプリケーションに格納されます)、_K1 = K XOR 0x5c5c...5c
_および_K2 = K XOR 0x3636...36
_は、Kから派生した2つの異なる秘密鍵です(ここで、_0x5c5c...5c
_および_0x3636...36
_はバイトのブロック_0x5c
_または_0x36
_は、秘密鍵と同じ長さで繰り返されます)。したがって、256ビットの秘密鍵があり、ハッシュ関数としてSHA-256を使用する場合、約2256 潜在的なHMACキー(〜1077 -比較のために、10ほどしかありません26日 ビッグバンからのナノ秒)攻撃者は、使用されたKを見つける前に反復する必要があります(実際に正しいKを見つけ、1つの特定のパスワードでのみ機能し、他のパスワードでは機能しない衝突がない場合)。
MACは通常、メッセージの整合性を検証するために使用され(秘密鍵を持つ誰かしか有効なMACを生成できないため)、パスワードの保存やユーザーの認証には使用されませんが、この目的で使用できない理由はありません。問題は同じです。メッセージとそれに関連するハッシュ(MAC)を取得した人が、他のメッセージ用の新しいハッシュ(MAC)を(ブルートフォース攻撃の一部として)作成できないようにしたいとします。 MACには、この攻撃に対するセキュリティがあると考えられています。 SHA1(SHA512(pw)++SHA256(MD5(pw)++MD4(pw)))
などのランダムな複雑なスキームを選択することは、原則としてランダムな256ビットのキーよりも攻撃者が推測する方がはるかに簡単です(ある種のサイドチャネル攻撃から漏洩する可能性が高くなります)。
MACの使用はおそらくやり過ぎです。強力なパスワードと最新のキーで強化されたソルトハッシュ(bcrypt、PBKDF、SHA512crypt)を使用している場合、ブルートフォースは単純に実行できません。
攻撃者が既知の単一の入力と出力を持っている場合、ブルートフォースでハッシュアルゴリズムをリバースエンジニアリングすることができます。パスワードごとにハッシュアルゴリズムを変えると、パスワードをより困難にすることができますが、それでも不可能ではありません。
ハッシュアルゴリズムは推測可能ですが、これはデータベース内のパスワードを保護する方法ではありません。誰かがあなたのデータベース全体を盗むことができるなら、私はあなたが思っているように問題があなたのシステムではるかに広いと思います、そして彼はあなたのソースコードも得るでしょう...そこからあなたが使うハッシュアルゴリズムを見つけるのは長いステップではありません。
実際に行うべきことは、意図的に非常に遅い実際のパスワードハッシュアルゴリズムを使用することです。そのため、sha1またはmd5を忘れて、bcryptを使用してください(それが不可能な場合は、以前のソルトと 現在推奨されている反復回数 を使用してください)。