1

ASP.NET Web API を保護するためのソリューションはかなり散らばっているように見えるので、独自の公開/秘密キー暗号化スキームを導入することにしました。私のワークフローを見て、最後に行き詰まった質問に答えるのを手伝ってください. (繰り返しますが、これは .NET 4.0 Web API フレームワークに固有のものです)

  1. Web MVC 4.0 Web サイトでユーザー登録します。
  2. 登録すると、私のウェブサイトは 4 つのことを行います

    a) このユーザーの RSAサーバー公開鍵を生成する

    b)。このユーザーの RSAサーバー秘密鍵を生成します

    c)。このユーザーの RSAクライアント公開鍵を生成します

    d)。このユーザーの RSAクライアント秘密鍵を生成します

  3. このユーザー アカウントの 4 つのキーすべてをデータベースに保存し、"APIKey" と呼ばれるサーバーの公開キーと "SecretKey" と呼ばれるクライアントの秘密キーをユーザーに渡します。これは、将来のハンドシェイク用です。ユーザーは、サーバーの秘密鍵もクライアントの公開鍵も知りません。

  4. ユーザーが鍵を持っていることを確認したら、セキュリティ上の目的でデータベースから「クライアントの秘密鍵」を削除します。

  5. ユーザーは、RSA サーバーの公開鍵 (APIKey) を使用して、サーバーの公開鍵 (または APIKey)+":"+ (ユーザー名、パスワード) の暗号化されたメッセージを送信することにより、WebAPI 認証サービスの要求を開始します。

  6. サーバーは APIKey+":"+ 暗号化されたメッセージを受信し、秘密鍵を見つけ、メッセージを復号化し、ユーザー名とパスワードを取得し、メンバーシップ プロバイダーを使用してそれらが正しいことを確認します。

  7. 正しくない場合は、拒否された応答を作成します。それ以外の場合は、ユーザーの記録にあるクライアント公開鍵を見つけ、一意の時間依存セッション トークン (5 分で期限切れ) を作成し、それをデータベース + 作成時間に記録し、クライアント公開鍵を使用してトークンを暗号化し、返送します。クライアントに。

  8. クライアントは応答を受信し、その「クライアント秘密鍵」または「秘密鍵」を使用して応答を復号化し、トークンを取得します。

  9. ユーザーは、サーバー公開鍵を使用して以下を暗号化することにより、サービスに対して他の要求を行います。

    a) セッション トークン b) タイムスタンプ (リプレイ攻撃が発生しないことを確認できます) c) データ

サーバーにその APIKEy+":"+暗号化されたメッセージを送信します

私が立ち往生しているのは、ステップ9以降です。

手順 9 で公開/秘密鍵を使用して通信する必要がありますか? 私が尋ねている理由は、ブラウザーが SSL を介してサーバーと通信するためです。最後に、ハンドシェイクが発生すると、合意された暗号スイート対称アルゴリズムを使用してメッセージをやり取りします。しかし、そうすると、この時点から病棟は安全になりますか?

その場合、ワークフローのどこで Web API とクライアントの間でこの契約を交換して、同じ対称アルゴリズムを使用して情報を暗号化/復号化することができますか?

ありがとう!!

編集: このワークフローに欠陥がある場合は、お知らせください。大変感謝しています。

4

2 に答える 2

0

独自のスキームを展開しないでください。専門家であっても、暗号を正しく理解することは非常に困難です。非常に微妙なエラーにより、スキームによって提供されるすべてのセキュリティが完全に失われる可能性があります。例として、過去数年間の SSL/TLS に対する攻撃を見てください。

「Web API」について言及していますが、使用しているプロトコルが正確には不明です。SOAP を使用している場合は、SOAP 用に明確に定義されている「Web セキュリティ」(WS) を使用します。HTTP (例: REST) 経由で通信している場合は、HTTPS を使用します。接続されたチャネルを介して通信している場合は、TLS または SSH を使用します。

編集: http://msdn.microsoft.com/en-us/library/hh833994(v=vs.108).aspxごとに、

ASP.NET Web API は、ブラウザーやモバイル デバイスなど、幅広いクライアントに到達する HTTP サービスの構築を容易にするフレームワークです。ASP.NET Web API は、.NET Framework で RESTful アプリケーションを構築するための理想的なプラットフォームです。

これは、おそらく HTTPS を使用する必要があることを意味します。

于 2013-06-21T02:16:35.857 に答える