Progressデータベースで動作するアプリケーションをC#で構築しています。このデータベースに保存されるパスワードは、Progressが公開していないハッシュアルゴリズムを使用して保存されます。ただし、これらのハッシュを使用して認証したいと思います。このようなハッシュアルゴリズムをリバースエンジニアリングすることは可能ですか?これを行うにはどうすればよいですか?
明確にするために:ハッシュからハッシュされていないパスワードを取得する方法を探していません。パスワードからハッシュを取得するアルゴリズムを探しています。
このトピック によると、あなたはそのアルゴリズムを探している最初の人ではありません。すでに述べたように、このアルゴリズムについての進捗状況は あまり共有したくない です。
アルゴリズムを解読することはおそらく可能ですが、一般的には、Progress自体を使用してハッシュを計算する方が簡単です。もう1つのオプションは、そのProgress関数の使用からより標準的なバリアント(SHA-1など)への切り替えです。
ここで、「変動」が何を意味する可能性があるかをさらに明確にします。次のようなものを想定します。
_string Encode(string pass) {
string salt = "123456";
return CRC16(pass + salt); // + for catenation
}
_
それはまだ同じCRC16ですが、まったく異なる結果を生成します(CRC16(pass)
と比較して)。したがって、実際のアルゴリズムを取得する唯一の方法は、逆アセンブラを使用して実際のコードを確認することです。これは、入出力のみを監視することはおそらく不可能であるためです。
パターンがない限り、入力と結果からアルゴリズムを推測する「構造的アプローチ」はありません。これは、理想的なハッシュに必要のないexactlyです。
進行状況を使用して、ハッシュされたパスワードを一時変数に挿入し、それを保存されているハッシュと比較できます。
プログレスを使用してそのハッシュを作成します。
考えられるすべてのハッシュアルゴリズムのリストを取得し、それらを 最も一般的なパスワード のリストに対して実行し、結果のいずれかがハッシュのいずれかに一致するかどうかを確認できます。もちろん、これはサイトが強力なパスワードポリシーを適用しておらず、ハッシュアルゴリズムがエキゾチックではない(またはパラメーター化されていない)場合にのみ機能します。