1

C++ でクライアント/サーバー アプリケーションを構築しており、各クライアントにパスワードを提供する必要があります。明らかに、転送中にこれを安全にしたいので、パスワードを暗号化する方法を検討しています。サーバー アプリケーションのみが再度暗号化解除できるようにします。

私が抱えている問題は、必ずしも関数を機能させることではなく、それをコードに関連付けるために何をする必要があるかを理解することです。私は理解しようとしており、MSDN を読んでいます (そのように感じます) が、まだ学習しているだけなので、実装に関する明確で正確なガイダンスが本当に必要です。

これは正しいと思いますか?

  1. サーバーとクライアントの両方で CSP へのコンテキストを取得します。
  2. サーバーでキーを生成するか、キーをロードします (何でも)。

そして私は

サーバーから公開鍵をエクスポートしてクライアントに送信すると、クライアントは鍵をインポートし、パスワードを暗号化して返し、サーバーだけが再び復号化できるようにします。(試してみると失敗します)。

または、私はそうしますか

セッション鍵、または交換鍵ペアで暗号化された交換鍵ペア (単一公開) をエクスポートしますか?

ああ、私はとても迷っています。はっきりと説明することさえできません。

これを理解するのを手伝ってください...

4

3 に答える 3

1

何もしないでください。

これは非常に重要です。これを自分で実装しないでください。
繰り返して、あなたがそれを間違えるようなことは何もしないでください。

すでに利用可能なものを使用する必要があります。SSLソケットへの接続を開くだけで、ストリームのコンテンツが自動的に暗号化され、もう一方の端で復号化されます。

アプリケーションは、ユーザー名とパスワードを2倍にして、それらが正しいかどうかを検証するだけです。暗号化部分を実装しようとしないでください。

于 2011-05-06T08:01:10.110 に答える
1

データ転送などの他の目的で暗号化された通信が必要ない場合は、パスワード検証にチャレンジレスポンスを使用できます。パスワードをネットワーク経由で転送する必要はなく、サードパーティが一部のパケットを再送信するだけでリプレイ攻撃のリスクはありません。欠点としては、中間者(MITM)攻撃が発生する可能性があります。

MITMからの保護が必要な場合、または他の通信のために暗号化されたチャネルが必要な場合は、証明書付きのTLSまたは2つのキーペア付きの公開鍵暗号化を使用する必要があります。

于 2011-05-06T06:12:09.000 に答える
1

それは、どのような種類の認証ソリューションをベースにしたいかによって異なります。オプションはさまざまです。

たとえば、基盤となる OS 認証に依存することができます。パスワードを管理する必要はまったくありません。ただし、これには、アプリケーションが実行されているドメインとのより緊密な統合が必要です。

もう 1 つのオプションは、HTTPS と簡易認証を使用することです。基本的に SSL を使用して通信を暗号化し、ユーザー名とパスワードのペアを送信します。非常にシンプルで、すべての Web サーバーでサポートされています。インストールされている IIS などの既存の Web サーバーに依存したくない場合は、おそらくこれを処理する C++ コードを非常に簡単に見つけることができます (そのような質問については StackOverflow を検索してください)。

于 2011-05-06T03:24:57.740 に答える