2012-04-08 6 views
1

私のiPhoneクライアント&サーバー間の通信を保護したいと思います。これを最初のステップとして達成するには、私のサーバーが許可されたクライアントにのみ応答するようにします。したがって、誰かが通信チャネルをハッキングしたとしても、サーバーから適切な応答を得ることができるようにする要求を作成することはできません。クライアント/サーバーベースのiPhoneアプリケーションの通信セキュリティ

ここで私の質問は、Java &の間で共有されるハッシング/暗号化解読アルゴリズムです。Objective Cは、私の秘密鍵を使って目的のCのiPhoneクライアントの秘密鍵をいくつかのアルゴリズムそれは適切に私のサーバー上のJavaベースの&その逆に復号化することができます。

適切なコード例が本当に役立ちます。

+0

あなたはHTTPSを考えましたか? –

答えて

2

iOSでの通信の機密性を確保する最も簡単な方法は、HTTPSを使用してバックエンドと通信することです。 NSURLConnectionはこれを直接サポートします。自分自身のセキュリティプロトコルを開発することは、周知のソフトウェア開発のアンチパターン(すなわち、を採用してはならない設計パターン)です。

"許可され​​たクライアント"がアプリケーションを指しているかどうかは明らかではありません(つまり、公式のクライアントアプリケーションだけがバックエンドと話すことができます)。後者は、NSURLConnectionの認証サポートを通じて、確実にサポートされています。基本的に、ユーザーはユーザー名とパスワードを提供し、この情報は各要求ごとにバックエンドに送信されます。ユーザーの資格情報は、キーチェーンにキャッシュできます。

HTTPクライアント証明書を使用してクライアントアプリケーションを認証することは可能ですが、安全に実装するのは難しい可能性があります。

+0

私はHTTPSのみを使用していますが、サーバーから応答する前にクライアント呼び出しを許可する必要があることを二重に確信しています。さらに、HTTPS/SSLも脆弱です。 – Abhinav

+0

システムの*ロット*は、HTTPSが提供するデータ(および信任状)の機密性を備えた、基本的なHTTP認証で完璧です。すべてのシステムはいくつかの種類の攻撃に対して脆弱ですが、現実的な脅威評価が必要だと思います。それらの難解な脅威はどれくらいですか?自分のデザインのセキュリティプロトコルは、実証済みの真の方法ほど安全性が低いとほとんど保証されています。 –

1

クライアントを認証する低コストの方法は、共有秘密です。クライアントは、MD5またはSHA1ハッシュ(両方のライブラリがJavaまたはObjective Cの中にあることができる)を使用して、秘密の要求に署名します。サーバは、同じ方法で要求に対する署名を実行し、次にクライアントによって渡されたものと署名を比較することによって、クライアントの信頼性を確認する。一致した場合、サーバーは要求を信頼します。

+1

誰かがn/wチャンネルをハックして同じ秘密鍵を送るとどうなりますか? – Abhinav

+1

シークレットはメッセージと共に送信されず、シークレットによって生成された署名だけが送信されます。サーバーは、同じ(共有された)秘密でメッセージの明確な部分に署名します。同じシグネチャを生成できる場合は、送信者を信頼します。これはハックに対して脆弱ですが、大きなリスクは送信中のものではなく、クライアントの逆コンパイルから来ます。 – danh

関連する問題