Допустим, мне нужен доступ к веб-сервису из приложения для iPhone. Этот веб-сервис требует от клиентов цифровой подписи HTTP-запросов, чтобы доказать, что приложение «знает» общий секрет; клиентский ключ. Подпись запроса хранится в заголовке HTTP, а запрос просто отправляется через HTTP (не HTTPS).
Этот ключ должен всегда оставаться секретным, но должен использоваться приложением iPhone.
Итак, как бы вы надежно хранили этот ключ, учитывая, что вам всегда говорили никогда не хранить что-либо чувствительное на стороне клиента?
Средний пользователь (99% пользователей) с радостью просто использует приложение. Будет кто-то (враг?), Кто хочет этот секретный ключ клиента, чтобы причинить вред владельцу ключа службы или клиента путем подражания. Такой человек может сделать джейлбрейк своего телефона, получить доступ к двоичному файлу, запустить «строки» или шестнадцатеричный редактор и покопаться. Таким образом, просто хранить ключ в исходном коде - ужасная идея.
Другая идея заключается в хранении ключа в коде не строкового литерала, а в NSMutableArray, который создан из байтовых литералов.
Можно использовать связку ключей, но поскольку приложение для iPhone никогда не должно предоставлять пароль для хранения вещей в связке ключей, я опасаюсь, что кто-то, имеющий доступ к песочнице приложения, может и сможет просто посмотреть или просто декодировать предметы в нем.
РЕДАКТИРОВАТЬ - поэтому я прочитал об этой цепочке для ключей: «В iPhone OS приложение всегда имеет доступ к своим собственным элементам цепочки для ключей и не имеет доступа к элементам других приложений. Система генерирует свой собственный пароль для цепочки для ключей, и хранит ключ на устройстве таким образом, чтобы он был недоступен для любого приложения. "
Так что, возможно, это лучшее место для хранения ключа .... Если так, как я могу отправить с ключом, предварительно введенным в цепочку для ключей приложения? Это возможно? Иначе, как вы могли бы добавить ключ при первом запуске без ключа в исходном коде? Хм ..
РЕДАКТИРОВАТЬ - Поданный отчет об ошибке # 6584858 в http://bugreport.apple.com
Спасибо.