Зашифруйте строку и предотвратите обратный инжиниринг в iOS
Я создаю приложение для iPhone, и в настоящее время мне нужно зашифровать строку, сохранить ее в файле и иметь возможность расшифровать ее позже. Как я понимаю, для этого я могу использовать симметричное шифрование, но мой ключ для шифрования / дешифрования может быть подвергнут обратной обработке. Асимметричное шифрование может решить эту проблему, но, похоже, мне понадобится сервер для отправки данных для расшифровки с помощью закрытого ключа. Кто-нибудь знает, как я могу зашифровать / расшифровать строку в автономном приложении?
Спасибо!
4 ответа
Как и во всех вопросах, касающихся безопасности, возникает вопрос: от кого вы защищаетесь?
Если вы пытаетесь помешать случайному вору (или сценаристу) прочесть зашифрованную строку, использование встроенных в iOS криптографических сервисов, таких как связка ключей, может обеспечить безопасность от адекватного до хорошего. Очевидно, что сила безопасности будет частично зависеть от различных факторов, не зависящих от вас (в частности, какой тип блокировки паролем пользователь настроил для устройства).
Следующим повышением уровня будет симметричное шифрование с использованием симметрично зашифрованного ключа (то есть ключа, защищенного парольной фразой пользователя). Как отметил @lukas, конечно, в принципе это можно взломать, но с практической точки зрения, если пользователь выбирает достаточно сильную ключевую фразу для достаточно большого ключа, атакующий от случайного до среднего уровня будет эффективно сорван.
Если, с другой стороны, вам нужно хранить секреты, как сказал бы Брюс Шнайер, не от вашей младшей сестры, а от правительств крупнейших мировых государств, этих подходов, скорее всего, будет недостаточно, и вам придется изучить другие варианты, в том числе, но не ограничено хранением строки в нескольких местах, использованием нескольких ключей и несколькими факторами аутентификации.
Главной ссылкой Apple на все это (за исключением последнего варианта) является Руководство по безопасному кодированию, в конце которого есть ссылки на другие, более конкретные руководства по программированию (например, связка ключей и криптографические службы). Я также от всей души рекомендую Профессиональную безопасность приложений Какао Грэма Ли. Если вам нужна теоретическая основа, золотой стандарт - это прикладная криптография Шнайера.
Этот основной вопрос довольно часто задают на Stackru. Ответ заключается в том, что вы не можете скрыть себя от своих собственных клиентов и никогда не должны тратить слишком много денег на попытки. Я рекомендую следующие ссылки, чтобы найти много предыдущих обсуждений:
- Лучшие практики для безопасности приложений iOS
- Безопасное шифрование https для приложения iPhone на веб-странице
Из приведенного выше вы найдете еще несколько ссылок. Но окончательный ответ заключается в том, что вы, вероятно, пытаетесь решить не ту проблему, и проблема, которую, по вашему мнению, вы хотите решить, является неразрешимой.
Кто-нибудь знает, как я могу зашифровать / расшифровать строку в автономном приложении?
Нет. Если у кого-то есть физический доступ к данным, его можно взломать. Сделать веб-сервис для решения проблемы.