web-dev-qa-db-ja.com

ウェブサイト:事前共有キー認証

このWebアプリケーションには、価値の高い(ビジネス)データが含まれています。

すべての通信はTLS/SSLを介して暗号化されます。私はこれを本当に安全なプロトコルだと考えていますが、誰かが悪意のあるCA-Certificateを私のコンピュータにインストールした場合、それは依然として侵害される可能性があります。

インフラストラクチャがあるので、事前共有キー(SMS経由)による相互認証を強化したいと考えています。

(何かを発明したくありませんが、それを見ると、PSKを使用して基礎となるストリームを暗号化する必要があります。おそらく、周囲のSSLがオーバーヘッドになる可能性もありますが、ここでも発明を試みていません私自身のプロトコル)

ブラウザーが事前共有キーの暗号化/認証をサポートしているかどうか誰かが知っていますか?おそらくプラグイン経由ですか?私はウェブを検索しましたが、ブラウザのサポートについては何も見つかりませんでした。

7
jrnv

現在のところ、既存の主要なブラウザは TLS-PSK をサポートしておらず、 TLS-SRP もサポートしていないようです。あなたの場合、どちらも適用可能ですが、SRPは、エントロピーの低い共有シークレット(たとえば、パスワード)をはるかに許容するという点で「より強力」です。いくつかの 初期の努力 作成時にChrome SRP-aware;それがどこまで進んだのかわかりません。PSKが提供するすべてのことはSRPによって可能であり、間違いなくより強力で強力な方法では、ブラウザがPSKサポートを取得する前にSRPサポートを取得する可能性が高くなりますが、まだ完了していません。

それまでの間、いくつかの回避策があります。

  • 特定のプロファイルを使用して、ユーザーにFirefoxを導入してもらいます。 Firefoxプロファイルには、特に、ブラウザがサーバー証明書の検証に使用するルートCAのセットが含まれています。自分のCAのみを含む「空の」プロファイルを使用できるようにします。

  • ユーザーにVPN経由で接続させます。特にSSHトンネル:SSHはSOCKSプロキシとして使用でき、ブラウザはすべての接続で使用するように指示できます。 SSHの公開鍵モデルはCAなしです。各ユーザーは、どのキーを受け入れるかを決定します。

  • Web アプリケーションを、クライアントシステムにインストールされた本物の本格的なアプリケーションに変えます。次に、そのアプリケーションはサーバーでSSLを実行し、使用する認証メカニズムを選択できます。

  • 何もしないでください。それはクライアントの問題であり、あなたの問題ではありません。

最後の「回避策」は、いくつかの特別な考慮に値します。実際に、潜在的な不正なCAの問題は、これらのCAがクライアントによって信頼されていることです /中間者攻撃 が成功すると、攻撃者は偽のサーバーになりすまし、クライアントはあなたではなく攻撃者に話しかけます。したがって、最初の近似として、クライアントと攻撃者の間で何が起こるかを変更するサーバーでできることは何もありません。 SSL/TLSでは、クライアントは使用するすべての暗号スイートをアナウンスし、サーバーはそれを選択します。 your サーバーがSRPまたはPSKを使用したい場合でも、攻撃者のサーバーが他の暗号スイートを好む可能性があります。

したがって、SRP対応のブラウザーが見つかった場合、MitM攻撃者(CAを買収する可能性がある)に対する接続のセキュリティは、サーバーでのSRPの使用ではなく、に依存します。人間のユーザー:そのミートバッグは expect SRP(またはPSK)でなければならず、取得できない場合はファールプレイを呼び出す必要があります。緑の南京錠とロゴの付いたニースログインページが表示され、SMSで取得したパスワードを要求する人間のユーザーのみがMitMを打ち負かします。「これは Webです。ページブラウザポップアップではありません!」接続を拒否します。ユーザーに確実にそのように反応させることができれば、猫を訓練してカーペットを掃除し、カーペットを掃除機で掃除できるでしょう(そして私はあなたのサービスに非常に興味があります)。

これは、次のsummaryのやや憂鬱なことになります。ユーザーが不正なCAを信頼している場合、それらはすでにホースされています。そしてあなたのサーバーが本当にそれらを保護するためにできることは何もありません。最初のステップは、既存のCAを信頼しないように教えることです。これにより、保護が回復します(マシンがまだハイジャックされていない場合)。また、彼らの観点から「インターネットを破壊」します。

10
Tom Leek

上記のように、VPNを使用してセキュリティの層を追加することは、おそらく最も簡単です。例を見てください。 https://openvpn.net/index.php/open-source/documentation/howto.html

キーを作成して共有し、VPNを設定したら、アプリケーションがパブリック(インターネット)IPではなくサーバーのVPN IPに接続していることを確認できます。このセットアップでは、プロキシなどをセットアップする必要すらありません。

1
Echsecutor