9

ねえ、最初に、私はmd5(md5(...、それについてのトピックはすでにあります)のようなものについて尋ねていません。

私の質問はこれです:

クライアントがパスワードをローカルに保存できるようにします。当然、プランテキストに保存したくないので、保存および/または送信する前に、ローカルでhmacを実行します。さて、これは問題ありませんが、これがすべての場合、サーバーにはhmacが保存され、クライアントはプレーンテキストのパスワードではなくhmacを送信するだけでよいため、攻撃者はサーバーから保存されたハッシュを使用できます。誰かのアカウントにアクセスするため(もちろん、誰かがデータベースへのそのようなアクセスを取得するという壊滅的なシナリオで)。

したがって、私たちのアイデアは、hmacを介してクライアントでパスワードを1回エンコードし、サーバーに送信し、そこで2回目にhmacを介してエンコードし、保存されている2回のhmacのパスワードと照合することでした。これにより、次のことが保証されます。

  • クライアントは、パスワードをプレーンテキストとして保存しなくてもローカルに保存できます
  • クライアントは、他のネットワークパーティについて(あまり)心配することなくパスワードを送信できます
  • サーバーは、誰かがサーバーからパスワードを盗んだり、それを使用してログインしたりすることを心配することなく、パスワードを保存できます。

当然、他のすべてのもの(強力なパスワード、複塩など)も適用されますが、質問にはあまり関係ありません。

実際の質問は、これは堅実なセキュリティ設計のように聞こえますか?この方法で物事を行うことの欠陥を見落としましたか?このようなもののセキュリティパターンはありますか?

補遺:パスワードをプレーンテキストでクライアントにローカルに保存したくない理由は、悲しいことに、多くの人が依然として複数のサービスに同じパスワードを使用しているため、「実際の」パスワードを取得する方が大きくなるためです。ハッシュを盗まれるよりも、ユーザーのセキュリティ違反。

4

7 に答える 7

12

私はドアを使い果たしていますが、スキートがpingを実行し、スキートを台無しにすることはありません。

あなたがしているのは、パスワードを別の定数値に置き換えることです。ここでは何も得られません。唯一のセキュリティは、プレーンテキストのパスワードがクライアントマシンで検出されないことです。

次に、パスワードのHMAC(HMACを意味しますか?その場合、キーはどこから取得され、保存されますか?)をパスワード自体として処理しているように見えます-クライアントからサーバーにパスワードを送信します。認証に使用されます。2番目のHMACまたはハッシュは無意味です-送信された値と比較しています-それは他の名前のパスワードです。したがって、攻撃者として、パスワードを盗む代わりに、クライアントマシンに保存されているHMACを盗む必要があります。ここでは何も得られません。

于 2010-06-10T20:43:57.183 に答える
7

警告:私はセキュリティの専門家ではありません。ブローダートにpingを送信して、彼が参加することを夢見ているかどうかを確認します。

クライアントがハッシュを保存しているだけで、ハッシュに基づいて何かを効果的に送信している場合、クライアントはそれをプレーンテキストで効果的に保存しています。最初のハッシュが提供する唯一の利点は、別のシステムで同じパスワードを使用した場合、ハッシュが明らかになっても他のシステムが危険にさらされないことです。

別の言い方をすれば、サーバーに保存されているハッシュを誰かが手に入れることができれば、プレーンテキストストレージと同じように、システムにログインするために必要なのはそれだけです。

于 2010-06-10T20:28:40.633 に答える
6

他の人が言っているように、クライアントとシステムを分離して、これは実際には何も購入しません-最初のハッシュは単にパスワードになります。

クライアントが他のシステムで同じパスワードを使用している場合(可能性が高い)、この値が得られます。この場合、クライアントマシンが侵害された場合でも、少なくともハッシュ化されたパスワードのローカルコピーによって、攻撃者が他のシステムにアクセスすることはできません。明らかに、クライアントの攻撃者はサーバーにアクセスできるようになります。結局のところ、彼らはパスワードを取得しています。

サーバー上のダブルハッシュ値にアクセスできる攻撃者は、それを元に戻して単一のハッシュ(つまり、「パスワード」)を取得できないため、何も購入しません。もちろん、攻撃者がセキュリティデータベースを読み取る立場にある場合は、他の攻撃ベクトルが利用可能であると思われます:)

また、別のポスターが言ったように、両方のハッシュに塩を使用していることを確認してください。そうしないと、パスワードが強力でない場合、ハッシュを元に戻すのは実際には非常に簡単になる可能性があります。

編集-実際には、パスワードとしてハッシュを使用しているので、サーバーでソルトを使用する必要はありません。誰もが効果的なレインボーテーブルを作成できるようになることはありません:)それでもクライアントにレインボーテーブルが必要です。

于 2010-06-10T20:36:40.633 に答える
3

いいえ、これは安全ではありません。ハッシュ値は事実上パスワードです。パスワードが、ユーザーがパスワードとは関係ないと考える他の何かから派生したという事実。ユーザーを認証するのは秘密の値ですよね?私にはパスワードのように聞こえます。

「当然、プランテキストに保存したくないので、保存や送信の前にローカルでhmacを実行します」というステートメントに依存していると思います。ハッシュパスワードが以前のパスワードと同じパワーを持つようにシステムが変更された場合は、ハッシュパスワードに同じレベルの注意を払う必要があります。

于 2010-06-10T20:31:29.643 に答える
1

吹き矢が頭に釘を打ちました-あなたは何も確保するのではなく、盗むためにセセットを変更しているだけです。あなたが複製しようとしているのは、私が一生思い出せない古い認証プロトコルです。仕組みは次のとおりです。

初期化時に、サーバーはF n(パス)で表されるn回繰り返しハッシュされたパスワードを取得します。クライアントにはパスワードと番号nがあります。

認証に行き、サーバーにF n-1(パス)を送信します。つまり、パスワードはn-1回ハッシュされます。サーバーはもう一度ハッシュし、F n(パス)と比較して、一致する場合はアクセスを取得します。次に、サーバーはF n(パス)をF n-1(パス)に置き換え、nをデクリメントします。

次に認証に行くときは、F n-2(パス)を送信し、プロセスが繰り返されます。

セキュリティを調べてみましょう。

  • MITM:プロトコルに抵抗が組み込まれていないため、SSL内に階層化する必要があります
  • リプレイ攻撃:サーバーがハッシュの反復をデクリメントしたため、攻撃は機能しません。
  • 盗聴:次の認証はF n-1(パス)を使用して行われます。F n(パス)があります。F n(パス)からF n-1(パス)に移行することは、ハッシュ関数の定義により、実行不可能です。
  • サーバーの所有権:クライアントのパスワードがわからず、クライアントとして認証することもできません。これも、Fnしかない場合はFn-1(パス)が必要になるためです
  • クライアントの所有:F n-1(パス)を保存しているため(パスを入力する必要はありません)、クライアントを所有すると、攻撃者はログインできます。nのみを保存し、パスワードは保存しない場合、これは防止されますが、明らかにパスワードを保存する必要があります。

それがあなたが成し遂げようとしていることです。ただし、このプロトコルが使用されていないのには理由があります。同期するのは巨大な雌犬です。手順が半分完了したためにクライアントとサーバーが同期しなくなった場合は、ロックアウトされています。それを回避するために組み込んだ復元力は、再生または盗聴のセキュリティを低下させる可能性があります。

于 2010-06-10T21:54:22.960 に答える
0

パスワードを平文でローカルに保存することで、これが何を買うのか正確にはわかりません。

ローカル暗号化の目的は、ハッカーがサーバーにパスワードを送信できないようにすることです。ただし、暗号化されたフォームを送信する場合は...まあ、何も購入していません。

代わりに、ローカルマシンは双方向の暗号化された形式でパスワードを保存する必要があります。復号化できることを意味します。送信前に行うこと。dbは、一方向の暗号化形式を保存できます(別の暗号化メカニズムを使用している場合でも)。比較する前に、受け取ったものを暗号化してから確認します。

于 2010-06-10T20:29:11.727 に答える
0

達成することを目的としたパスワードの最初のハッシュは何ですか?プレーンテキストバージョンのパスワードの検出から保護します。二重ハッシュ値を計算するためにそのハッシュ値を使用することを妨げることはありません。

于 2010-06-10T20:29:28.350 に答える