61

すべての開発者が直面する非常に基本的な問題: ユーザーがフォームを送信するたびに、パスワードがネットワーク経由で送信され、保護する必要があります。私が開発しているサイトには HTTPS がありません。所有者は SSL 証明書を購入したくはありませんし、自己署名証明書にも興味がありません。そのため、フォームを送信するときに Javascript を使用して HTTP 経由で送信されるパスワードを保護したいと考えています。

熱心な投票者へ: HTTP 経由で安全にパスワードを送信するには? 賢明な解決策を提供しません。私は別の状況にあります。

MD5 を使用すると、そのパスワード文字列を逆にすることができます。nonce/HMAC はどうですか? そのために利用可能なJavascriptライブラリはありますか? または、取り組むべき提案/ヒントはありますか? 前もって感謝します!

4

11 に答える 11

80

ユーザーがSSL なしで確認できるパスワードを安全に送信する方法はありません。

確かに、ハッシングまたは公開鍵暗号化によるネットワーク経由の送信に対してパスワードを安全にする JavaScript を作成することはできます。しかし、ユーザーは、JavaScript 自体が中間者によって改ざんされていないこと、サイトではなく攻撃者にパスワードが送信されていないこと、またはサイトのセキュリティが侵害されていないことをどのように確認できますか?アルゴリズム?唯一の方法は、彼らが熟練したプログラマーであり、パスワードを入力する前に、ページとスクリプトのすべての行を調べて、それが適切であることを確認することです。それは現実的なシナリオではありません。

中間者攻撃からパスワードを保護するには、SSL 証明書を購入する必要があります。他に方法はありません。それに慣れる。

MD5 を使用すると、そのパスワード文字列を逆にすることができます。

いいえ...少なくとも自明ではありません。MD5 には攻撃がありますが、これはハッシュ アルゴリズムであるため、元に戻すことはできません。あなたはそれをブルートフォースする必要があります。

ただし、中間者攻撃者は MD5 を見る必要はありません。MD5 を作成するためにユーザーに送信する JavaScript を妨害するだけです。

于 2010-01-05T00:22:04.470 に答える
24

ここでの解決策は、パスワードをまったく送信しないことです。チャレンジ/レスポンスを使用します。

元の形式では、キーと一緒にランダムなテキストの大きなブロックが含まれています。サーバー上のキーに基づいて、元のランダムテキストをセッションに保存します。クライアントがフォームを送信したら、JSを使用してランダムなテキストとパスワードを一緒にハッシュします。次に、ユーザー名、キー、およびハッシュされたランダムテキストをサーバーに送信します。パスワードを送信しないでください。サーバーで、キーを使用して元のランダムテキストを検索し、保存されているパスワードを使用して同じハッシュ操作を実行します。サーバーハッシュ値がクライアントハッシュ値と一致する場合、クライアントがサーバーにパスワードを送信せずに正しいパスワードを入力したことがわかります。

パスワードが正しいかどうかに関係なく、キーとランダムなテキストを期限切れにして、それぞれが1回限り使用できるようにします。

于 2010-01-05T03:20:03.707 に答える
12

これについて本当に深く掘り下げたい場合は、「事前にお互いを知らない2つの当事者が、安全でない通信チャネルを介して共有秘密鍵を共同で確立できるようにする」ために作成されたDiffie-Hellman鍵交換を見てください。

私は暗号化の専門家ではないので、攻撃者がクライアント (JavaScript ソース コード) とトランスポート メカニズム (パケット スニファー) の両方を持っている場合、それが本当に安全かどうかは完全にはわかりません。

于 2010-01-05T00:16:54.357 に答える
5

javascript RSA 実装を使用して、送信前にパスワードを暗号化できます。(これはRSA In Javascriptの例です。)

しかし、これとハッシュ関数の使用の両方がリプレイ攻撃に対して脆弱であると私は信じています。ので注意してください。

于 2010-01-05T00:47:51.200 に答える
4

残念ながら、暗号化されていないリクエストのセキュリティを確保する方法はありません。あなたの JavaScript にアクセスできる人は誰でも簡単にリバース エンジニアリングや改ざんを行うことができ、パケット スニファーを持つ人なら誰でも暗号化されていないトラフィックを監視できます。これらの 2 つの事実は、次のことを意味します。

SSLなし?セキュリティなし。

于 2010-01-05T00:13:10.150 に答える
1

このソリューションでは、クライアントが、クライアントとサーバーだけが知っている秘密の暗号化キーを使用してパスワードを暗号化できる必要があります。

SSLは、サーバーとクライアントのWebブラウザーの両方に、独自の非対称の公開鍵と秘密鍵のペアを要求することでこれを実現します。これを使用して、それらの間でランダムなセッション鍵を暗号化して送信します。その後、会話の残りの部分では、その安全なセッションキーが使用されます。

したがって、クライアントとサーバーだけが知っている秘密鍵を使用せずに、SSLと同じ問題を解決する方法を求めています。私は専門家ではありませんが、これはできないか、少なくとも簡単ではないようです。

于 2010-01-05T00:32:21.673 に答える
1

あなたが持っている送信はすべてクリアになります。つまり、SSL を使用しないと、重要な情報が公開されます。その点については、サイト所有者と話し合う価値があります。つまり、データ転送を強化するために必要な対策を講じることが最善であり、SSL は、実行できる基本的で安価な手段の 1 つです。

于 2010-01-05T00:14:16.297 に答える
1

ここでの問題はテクノロジーではないと思いますが、SSL の重要性をどのように説明していますか。信頼できる読み物を提供してください。ウェブ上にはたくさんあると思います。

于 2010-01-05T00:15:04.093 に答える
0

-- 英語 -- 私は何かを考えていますが、それが本当に安全かどうかはわかりません。フォームを php ファイルに入れることができれば、時間などに基づいて文字列を作成するアルゴリズムを作成し、この文字列を html に入れることができます。

ユーザーがパスワード入力フィールドにパスワードを入力すると、デバッグ時にユーザーが入力した値が表示されないため、post または get を介して情報を送信する前に、パスワード user をヒントとして使用して、暗号化された文字列を事前に暗号化できます。生成され、ユーザーが入力したパスワードの代わりに送信されました。

このように、攻撃者は js コード内にすべてを持っているわけではないため、暗号化を解除するために作成したアルゴリズムを発見する必要があります。

これは単なるアイデアですので、安全ではない理由を教えていただければ幸いです。

-- スペイン語 -- Se me acaba de ocurrir algo que puede servir, pero no se si realmente sea algo seguro. Por medio de php puedes general un algoritmo que cree un string en base al timestamp o algo más, y después colocar esta cadena en el html.

Note que cuando alguien escribe una contraseña en un campo input tipo password, con un debug no se puede ver el valor que tecleo el usuario (no se si exista manera pero no quise inspectigar más), asi que podemos utilizar la contraseña que el usuario escribió como palabra clave para encriptar la cadena de texto que previamente habiamos generado con php, por medio de un algoritmo en JS. セリア アルゴ アシー コモ エンクリプター ロ エンクリプタド。Posteriormente lo que estariamos enviado no sería la contraseña tecleada, si no esta última cadena results.

Buscando un contra, lo unico que se me ocurra es que el atacante tendrá que dedicarle mucho tiempo para tratar de encontrar el agoritmo que creamos por medio de php y poder decriptar la cadena final, o tendrá que hackear el servidor para acceder al php y obtenerエルアルゴリズム。

Esto es solo una idea, por lo que si pueden decirme como esto puede no ser seguro, se los agradecería.

于 2013-06-30T20:07:07.477 に答える