スニッフィングの問題を解決する方法は、WebサービスのHTTPSを介して通信することです。NSURLConnectionはこれを簡単に実行し、私が知っているすべてのWebサービスエンジンは問題なくHTTPSを処理します。これにより、問題の多くがすぐに解消されます。
100-1000xがボトルネックを解読するのはどのマシンですか?サーバーが非常にビジーで、asym復号化を実行できませんか?あなたはそれが無関係であるべきであるように電話でこれをあまり頻繁に行うべきではありません。ここでasymが答えだと言っているのではありません。パフォーマンスのオーバーヘッドが、一度復号化された単一の文字列を保護するための問題ではないということだけです。
あなたのサービスは、すべてのユーザーが自分の電話番号を提供しなければならないようにSMSを必要としますか?電話番号の取得を自動化しようとしていますか、それともユーザーが自分で電話番号を入力できるようにしていますか?プライベートAPI(またはプライベートではないが文書化されていない構成データ)を介して電話番号を自動的に取得し、それをサーバーに送信すると、利用規約に違反する可能性があります。これは、Appleがユーザーを保護したい特定のユースケースです。UIでこれを行っていることを明確にし、明示的なユーザー権限を取得する必要があります。
個人的に私は次のように認証します:
- サーバーはチャレンジバイトを送信します
- クライアントは、UUID、日付、およびハッシュ(UUID+チャレンジ+userPassword + obfuscationKey + date)を送信します。
- サーバーは同じことを計算し、日付が法的な範囲内にあることを確認し(30〜60秒が適切)、検証します。
- この時点で、私は通常、すべてのメッセージで再認証するのではなく、クライアントがこの「セッション」の残りの部分(次の数分から翌年まで)に使用できる、長くてまばらなランダムなセッションIDをサーバーに生成させます。 。
ObfuscationKeyは、サードパーティが偽のクライアントを作成するのを困難にするためにプログラムとサーバーにハードコーディングする秘密鍵です。クライアントだけがサーバーと通信できることを安全に保証することは不可能であり、期間も不可能です。ただし、obfuscationKeyは、特にリバースエンジニアリングがより困難なiPhoneで役立ちます。UUIDを使用すると、電話番号よりもサードパーティに知られていることがはるかに少ないため、役立ちます。
そこにある「userPassword」に注意してください。ユーザーは、ユーザーだけが知っているものを使用して認証する必要があります。UUIDも電話番号もそのようなものではありません。
上記のシステムとHTTPSは、実装が簡単で(私は多くの言語で何度も実行しました)、優れたパフォーマンスを備え、幅広い「適切な」ものに対して適切なレベルに安全である必要があります。