2012-01-09 11 views
0

私は認証なしでiosアプリケーションで作業しています。今は私のiosアプリケーション以外の呼び出しからサーバーAPIを保護したいと思います。可能な解決策は、アプリケーションに主要な問題であるため、デバイスに格納されていない一意のキー(appnameと署名に基づいて)を生成させることです。私はいくつかのファイル暗号化と組み合わせた保護を行うアプリケーションロジックを考えることができますが、問題は何かが格納されていることです(元の公開鍵はキーチェーンに保存できますが、APIハッカーにとっては安全ではありません)。iosがアプリケーション固有の鍵を生成する

どのように私はこれを処理することができますに関するヒント/アドバイスですか?要するに、事前

答えて

1

おかげで、キーはiPhoneに、それはiPhoneから抽出するのに利用できる利用可能な場合、要求は、アプリケーションから来ていることを確認するために何が100%安全な方法はありません。

あなたが言うようにアプリケーションの情報からキーランタイムを計算してSSLで通信することで、それを合理的に安全にすることはできますが、攻撃者はいつでも鍵生成をリバースエンジニアリングすることができます。

+0

お返事ありがとうございます。アプリケーションの情報からキーランタイムを計算するとどういう意味ですか?あなたはタイムスタンプ/いくつかのコードロジックのもののような意味ですか?私が恐れる前に、これを行うための100%安全な方法はないと恐れています:(:( – bdt

+0

私は、アプリケーションでキーを暗号化したり、ランタイムをいくつかの静的データから計算したりすることを意味します。ヘキサエディタでバイナリを開くだけでリカバリすることができます。また、暗黙のセキュリティとも呼ばれますが、一般的には可能な限り最高です。 –

0

あなたがしたいことは、相互認証されたSSLを使用することです。サーバーはアプリケーションからの着信接続のみを受け付け、アプリケーションはサーバーとの通信のみを行います。

ここには、高度なアプローチがあります。自己署名入りのサーバーSSL証明書を作成し、Webサーバーに展開します。これにはkeytoolのように自由に利用できるツールを使うことができますが、AppleがiOS SDKでこのためのツールを提供していると思います(しかし、わかりません)。次に、自己署名付きのクライアントを作成し、アプリケーション内のカスタムキーストアにリソースとしてデプロイします。クライアント側のSSL認証を要求し、生成したクライアント証明書のみを受け入れるようにサーバーを構成します。そのクライアント側の証明書を使用して自分自身を識別し、その部分のサーバーにインストールしたサーバー側の証明書を1つだけ受け入れるようにクライアントを構成します。

アプリ以外の誰かがあなたのサーバーに接続しようとすると、サーバーはあなたのアプリに含まれているクライアント証明書を提示しない受信SSL接続を拒否するため、SSL接続は作成されません。

関連する問題