web-dev-qa-db-ja.com

SSL以外の中間者攻撃を防ぐ方法は?

このシナリオについて説明します。

認証されたクライアントに署名されたキーで応答するHTTPSサービスがあります。これらの署名された鍵は、別のサービスが非常に重要なデータを返すために使用できます。内部のセキュリティホール(経験の浅いインターンシップ、gitサーバーでのsshキーの公開、誰かが電子メールでssl caを送信したなど)が原因で、ユーザーが証明書を取得し、すべての接続を暗号化して、サーバーは署名されたセキュリティキーの1つで応答し、他のサービスの機密データにアクセスするために使用できます。

中間者攻撃(おそらく2番目のSSLトンネル)が発生した可能性がある場合に、署名されたセキュリティキーを無効にすることができる手法はありますか?

2
bodokaiser

まあ、中間者攻撃を防ぐためにSSL以外にも多くのオプションがありますが、それらのほとんどすべてが同様の暗号化の基礎を持っています。基本的に、通信が途中の男に攻撃されないようにするには、a)両方の当事者が他方を検証できること、およびb)他の当事者がその通信を監視できないことを証明できる必要があります。

これらは両方とも、共有シークレットを通じて最も一般的に達成されます。非対称暗号化操作は、両方の当事者が他方の信頼できる公開鍵を持っている場合にも使用できますが、これは共有シークレットを交換して使用するよりも(計算上)はるかに困難です。

共有シークレットは、暗号化されたwifiネットワークの場合のように事前共有することも、認証プロセスを通じてネゴシエートすることもできます。たとえば、SSLの場合、サーバーは公開鍵に署名することでクライアントに対して自分自身を検証し、クライアントはサーバーの信頼できる証明書を使用してサーバーとの共有シークレットを確立し、サーバーは従来のログイン(または場合によってはまれにクライアント証明書。)

この一般的なプロセスはSSLに固有のものではありませんが、一方または両方の当事者の身元を確認し、安全な通信キーを確立する基本的な手順は重要です。ただし、その証明書の信頼のルートが侵害された場合、誰かがサーバーになりすましてサーバーとの独自の接続とクライアントとの独自の接続を開く可能性があるため、誰かが中間に侵入する可能性があります。

秘密鍵が漏洩した場合、証明書は失効リストを介して失効する必要があります。これは通常CAによって発行され、署名付き証明書の一部として含まれています。証明書の有効性を検証する条件として、失効リストの有効性を確認する必要があります。

6
AJ Henderson

それはあなたが求めているように聞こえます:私の秘密鍵が危険にさらされている可能性がある場合、どうすればMITMを防ぐことができますか?そして、その答えは新しい秘密鍵を取得するです。 (したがって、新しい証明書)。

セキュリティポリシーが非常に悲惨で、インターンがSSL秘密キーをgithubにアップロードできる場合は、thatが問題です。秘密鍵はprivateであり、そのように保護する必要があります。誰もあなたの秘密鍵にアクセスするべきではありません。つまり、人々は物理的または技術的にそれへのアクセスを禁止されるべきです。 「usenetに秘密鍵をアップロードしない」というポリシーを制定するだけでは十分ではありません。実際にはpreventプライベートデータへの不要なアクセスが必要です。

それができない限り、データセキュリティの類似性を維持することはできません。

また、秘密鍵と証明書を混同しているようです。証明書(署名済み証明書を含む)を使用して、好きなことができます。友達にメールで送信したり、Facebookの壁に投稿したり、Githubに公開したりできます。安全です。しかし、秘密キーは、それが生成された場所にコンピュータを残してはなりません。

5
tylerl

MITMはキー交換フェーズで行われるため、公開キーを防ぐための受信者のIDである IDベースの暗号化 を適用できます。

0
Wang Ye