Рассматривали ли вы использование HTTPS с аутентификацией по сертификату клиента?Это определенно решит вашу проблему с аутентификацией, но я не уверен, как это работает в iPhone.(Например, в Safari есть проблемы с выбором клиентских сертификатов.) Это может сделать аутентификацию на транспортном уровне (TLS, под HTTP).
Если вы хотите сделать это на уровне сообщений (в пределахHTTP), вы также можете использовать дайджест, который вы подписываете с закрытым ключом в заголовке.Уже есть стандартный заголовок для дайджестов (Content-MD5
) для дайджестов, но я бы не рекомендовал MD5 из-за недавно обнаруженных недостатков.Попробуйте SHA-1 или выше, возможно.Эти дайджесты не будут подписаны, поэтому вам понадобится дополнительный заголовок для подписи (например, X-Content-RsaWithSha1
) и, возможно, еще один, чтобы отправить сертификат, если сервер не знает, какой сертификат ожидать заранее.Вам также потребуется поддержка чтения и проверки этих пользовательских заголовков на стороне сервера.
Спецификация HTTPSec касается безопасности на уровне сообщений на уровне HTTP, хотя я не знаю ни о какихРеализация на iPhone.
Что касается безопасности файла p12, если ваше приложение намеревается использовать его, вам придется каким-то образом отправить его пароль, если он встроен в приложение, поэтому взлом двоичного файла также непременнораскрыть этот пароль и, следовательно, закрытый ключ.