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