0

こんにちは、これが良い習慣かどうかについて質問があります。値を単純に二重ハッシュすることは、さまざまな理由で悪い可能性があることを認識しています。

私がやりたいことは、phpでこのようなものになるでしょう。

$val = hash_hmac('sha256', md5($password), $salt);

これは、クローズド API を介して信頼できるパートナーと認証しているためです。パスワードは MD5 ハッシュとして DB に保存されます。ただし、パートナーがこれと同じ値をネット経由で送信することは望ましくありません。

このようにして、データベース内の md5 化されたパスワードを、パートナーが送信した一意のハッシュと比較できます。

何て言う?

4

1 に答える 1

0

まず第一に、これはユーザーパスワード (つまり、ユーザーに代わって認証している) ですか、それとも 2 つのサーバー間の共有秘密鍵ですか?

ユーザーパスワードの場合は停止します。パスワードをプレーンテキストで (または無塩の md5 として) 保存しています。どちらにしてもダメです。パスワードをソルトハッシュとして保存し、代わりに OAuth などを使用して認証します。

2 つのサーバー間の共有シークレット (ユーザーを表すものではない) の場合でも、oauth などを使用できますが、単純なものが必要な場合は、次のように認証する必要があります。

$val = hash_hmac('sha256', $nonce, $secret);

$nonceリプレイ攻撃を防ぐためにサーバーがランダムに選択する 1 回限りの値です。

ナンスがない場合、送信する値はすべて共有秘密であることに注意してください。md5 の hmac などから派生させるかどうかは問題ではありません。毎回同じになる場合は、通信チャネルを介して送信されるパスワードと同等です。また、MITM からも通信チャネルを保護することを忘れないでください。

于 2011-07-12T22:33:17.390 に答える