Web とクライアント アプリケーションに基づくシステムを開発しています。ここで、クライアントは、PHP および Http リクエストを使用して、サーバー内のすべてのデータベース クエリを作成します。Web システムは PHP / Mysql で開発され、PC にインストールされるクライアント アプリケーションは C# で開発されます。
良い!あるフェーズでは、クライアントはログインを通じてユーザーを識別する必要があります。これは単純なタスクのように見えますが、サーバー IP はアプリケーション構成セクションで変更できます。これを考慮すると、悪意のある人は、悪意のあるサーバーの IP アドレスを入力してパスワードを盗むことでフィッシングを行うことができます。問題は、クライアントからパスワードを text/plain で送信しないことです。
現在、パスワードのハッシュに md5 を使用しており (salt を使用せず、純粋なハッシュのみ)、データベースにパスワードを保存するためだけに使用しています。
少し読んだ後、人々はもう md5 の使用を推奨しておらず、代わりに sha256 以上を使用していることに気付きました。より良いハッシュ アルゴリズムに移行して、独自のソルトを作成することを考えています。
私の知る限り、ソルトはハッシュに追加するランダムなテキストですが、それが最善の選択肢ではないと思うので、何か考えていました:
ハッシュは固定長 (アルゴリズムに応じて 32、64 など) の小文字の 16 進値に基づいているため、ハッシュの各文字の各 ASCII コードを、ロードされた固定値の合計で再生できます。リスト (配列) 例:
私が持っている: abcd
各文字の ASCII コード:
-> 97
b -> 98
c -> 99
日 -> 100
そして、次のようにリストの固定値を合計します (長さは 32 / 64 の整数に応じて異なります)。
a -> 97 + 5 = 102 => f
b -> 98 + 2 = 100 => d
c -> 99 + 7 = 106 => j
d -> 100 + 3 = 103 => g
結果は次のようになります: fdje は abcd のハッシュを置き換えます。
それがどれほど安全なのか、ハッカーが私が使用する手法を判断するのがどれほど難しいのかはわかりません。問題は、結果がハッシュと同じ長さであり、ソルトを判断するのが難しいことです。したがって、FOR歴史上どのような理由であれ、ハッカーはレインボー テーブルを使用し、ありそうな結果をキャッチします。それは間違いです。あなたはそれについてどう思いますか?
ありがとうございました...