iPhone アプリから Web サービスにアクセスする必要があるとします。この Web サービスでは、アプリが共有シークレットを「知っている」ことを証明するために、クライアントが HTTP 要求にデジタル署名する必要があります。クライアントキー。リクエストの署名は HTTP ヘッダーに格納され、リクエストは単純に (HTTPS ではなく) HTTP 経由で送信されます。
このキーは常に秘密にしておく必要がありますが、iPhone アプリで使用する必要があります。
では、クライアント側に機密情報を保存しないように常に言われている場合、このキーを安全に保存するにはどうすればよいでしょうか?
平均的なユーザー (ユーザーの 99%) は、喜んでアプリケーションを使用します。なりすましによってサービスまたはクライアント キーの所有者に危害を加えるために、その秘密のクライアント キーを欲しがる誰か (敵?) がいるでしょう。そのような人は、自分の電話をジェイルブレイクし、バイナリにアクセスし、「文字列」または 16 進エディタを実行して、あちこち歩き回る可能性があります。したがって、キーをソース コードに格納するだけでは、ひどい考えになります。
もう 1 つのアイデアは、文字列リテラルではなく、バイト リテラルから作成された NSMutableArray にキーをコードに格納することです。
キーチェーンを使用することはできますが、iPhone アプリはキーチェーンに物を保存するためにパスワードを提供する必要がないため、アプリのサンドボックスにアクセスできる誰かが、その中のアイテムを簡単に見たり、簡単にデコードしたりできるようになるのではないかと心配しています。
編集 - だから私はキーチェーンについてこれを読みました:どのアプリケーションからもアクセスできないようにデバイス上で保護されています。」
したがって、おそらくこれがキーを保存するのに最適な場所です....もしそうなら、アプリのキーチェーンに事前に入力されたキーをどのように出荷すればよいですか? それは可能ですか?そうでなければ、キーがソース コードに含まれていない状態で、最初の起動時にキーを追加するにはどうすればよいでしょうか? うーん..
編集 - http://bugreport.apple.comでバグ レポート # 6584858 を提出
ありがとう。