2009-05-20 3 views
2

Webサービスの固有IDを生成するためにクライアントの電話番号を使用するにはアプリケーションが必要です。もちろん、電話番号は一意ですが、セキュリティで保護されている必要があります。したがって、対称暗号化(非対称暗号化)は、リソースのリークが原因で後になりますが、暗号鍵をどこに格納するかわかりません。アプリケーションのインストールプロセス中にキーチェーンに暗号化キーを保存する

1.

私はなぜ知っているが、コードの静的フィールドとしてキーを保存するために悪く思わないでください。アプリケーションを実行していなくてもここから読むのは簡単すぎるからかもしれません。

2.

キーホルダーにキーを保存し、要求によって、ここからそれを得るために良さそうです。しかし、#1を避けるには、インストールプロセス中にキーチェーンにキーをインストールする必要があります。出来ますか?どうやってするか?

3.

私は、証明書は何をすべきか分かりません。彼らは問題に役立つのですか?それはそれをスニファするのは非常に簡単ですので、サーバから鍵を転送するに

4.

は、また、悪い考えです。

+0

電話番号の代わりにデバイスIDを使用することを検討しましたか?一意のIDだけが必要な場合は、その仕事を行います。 –

+0

いくつかの追加SMSサービスがあるので、phonenumberを使用する必要があります。 – slatvick

答えて

4

スニッフィングの問題を解決する方法は、WebサービスでHTTPS経由で通信することです。 NSURLConnectionはこれを簡単に行い、私が知っているすべてのWebサービスエンジンは問題なくHTTPSを処理します。これはすぐにあなたの問題の多くを取り除くでしょう。

どのマシンで100-1000xのボトルネックを解読しますか?あなたのサーバは忙しくてasym解読はできませんか?あなたは電話でそれほど頻繁にこれを行うべきではないということを無関係でなければなりません。私はasymがここの答えだと言っていません。そのパフォーマンスオーバーヘッドは、一度解読された単一の文字列を確保するための問題であってはならないということだけです。

サービスでは、すべてのユーザーが電話番号を提供する必要があるためSMSが必要ですか?あなたは電話番号をつかむことを自動化しようとしていますか、またはユーザーがそれを自分自身で入力できるようにしますか?プライベートAPI(またはプライベートではないがドキュメント化されていない構成データ)を介して電話番号を自動的に取得し、それをサーバーに送信することは、サービス条件に悪影響を及ぼす可能性があります。これは、Appleがユーザーを保護したい特定のユースケースです。あなたは間違いなくあなたがこれをやっていることをあなたのUIで明確にする必要があり、明示的なユーザ許可を得る。

次のように個人的に私が認証したい:

  • サーバーに送信チャレンジバイト
  • クライアントがUUID、日付、およびハッシュ(UUID +チャレンジ+のuserPassword + obfuscationKey +日付)を送信します。
  • サーバは同じように計算し、日付が合法的な範囲(30-60sが良い)であることを確認し、検証します。
  • この時点で、私は一般に、サーバが、この「セッション」の残りの部分(次の数分から翌年のどこか)でクライアントが再認証するのではなく、長い、スパースでランダムなセッションIDを生成するようにしますすべてのメッセージに

ObfuscationKeyは、第三者が偽のクライアントを作成するのを難しくするために、プログラムとサーバーにハードコードします。可能であれば、は使用できませんは、クライアントだけがサーバーと通信できることを確実に保証します。しかし、特に逆アセンブルが難しいiPhoneではobfuscationKeyが役立ちます。 UUIDを使用すると、電話番号よりも第三者にはあまり知られていないため、役立ちます。

「userPassword」はそこにあります。ユーザーは、ユーザーが知っているだけのものを使用して認証する必要があります。 UUIDも電話番号もそのようなものではありません。

上記のシステムとHTTPSは、実装するのが簡単で(多くの言語で何度もやったことがあります)、優れたパフォーマンスを持ち、さまざまな "適切な"適切なレベルに安全でなければなりません。

+0

1.利用規約を確認すると、どこに確認できますか? 2.ハッシュに使用するiPhone SDKのクラスは何ですか? 3.ありがとう!私は考える時間が少し必要です、そして、より多くの質問をしたり、受け入れてください。 – slatvick

+1

1.主要iPhone開発者ポータルの「iPhone SDK契約」をお読みください。それはもちろん、あなたが何をするかもしれないし、しないかもしれないことを100%確実にすることができないという事実に戻る、不特定の「アップルのベストプラクティス」を参照しています。 2. SHA1はこの種のハッシングに適しています。 http://github.com/ameingast/cocoacryptohashingを見てください。 –

+0

私は少し私の必要性を指定してみましょう:私はクライアントとサーバーのゲームを持っていて、古典的なログインパスの登録を引き起こすプレイヤーを疲れさせたくありません。合法的であれば、代わりにUUIDを使うことができるようです。スニッフィングの問題は、HTTPSを使用することで解決されているように見えます。HTTPパッケージ全体が暗号化されているため、スニッフィングすることは不可能です。登録を代用し、不正行為から守るには、これは十分と思われます。 – slatvick

2

私はあなたが対称暗号化で安全にしたいことはできないと思っています。 asymを使用すると、公開鍵をあまり心配することなく送信することができます(唯一の脅威は自分の鍵で自分の鍵を置き換えることです)。そして、サーバ上の暗号化された一意のIDを秘密鍵で検証します。

+0

迅速な対応をありがとう。 まず、asym暗号化は解読するのに100-1000倍の時間がかかり、cpuはこのように重要なリソースになります。だから私はsym暗号化を使うことに決めました。 第2に、公開鍵を盗む人が別の人物としてデータを送信できるため、公開鍵を安全に保管する問題は依然として存在します。 – slatvick

関連する問題