Можно ли обнаружить «секретную» строку в скомпилированном приложении Obj-C? - PullRequest
6 голосов
/ 09 августа 2010

Мне нужно отправить данные из приложения iPhone на мой веб-сервер и обратно. Чтобы сделать это безопасно, я использую алгоритм шифрования. Требуется ключ, который должен знать и сервер, и пользователь, чтобы можно было расшифровать. Я думал об использовании простой статической строки в своем приложении и на сервере в качестве ключа, но потом я вспомнил, что скомпилированный код все еще можно разобрать и просмотреть, но только в некоторой степени.

Итак, насколько я был бы безопасен, поместив методы шифрования и «секретную» строку в исходный код моего приложения? Существуют ли другие способы безопасного взаимодействия между приложением и сервером?

Спасибо.

Ответы [ 5 ]

6 голосов
/ 09 августа 2010

Да, это можно найти довольно легко. Запустите программу strings на своем исполняемом файле, и вы, вероятно, найдете ее. Кроме того, что-либо в вашей программе может быть «найдено», так как оно обязательно открыто для чтения.

Используйте SSL для безопасных соединений. Он использует асимметричное шифрование, что означает, что ключ для шифрования данных не тот, который потребуется для его расшифровки. Таким образом, даже если злоумышленники узнают ваш ключ шифрования, они все равно не смогут использовать его для декодирования. Все основные HTTP-серверы и клиентские библиотеки поддерживают HTTPS, и это то, что он делает.

4 голосов
/ 09 августа 2010

Как вы думаете, в какой "определенной степени" это точно?Каждая инструкция и каждая часть данных, содержащаяся в вашем приложении, открыта для возможного просмотра.Кроме того, использование одного и того же ключа для каждого устройства является абсолютным криптографическим безумием.

Просто используйте HTTPS.SSL / TLS - это безопасная, проверенная технология, встроенная в каждый основной HTTP-сервер и каждую основную клиентскую библиотеку HTTP.

2 голосов
/ 09 августа 2010

Вы используете симметричный алгоритм.Может быть, вы должны рассмотреть возможность использования несимметричного метода, если вам нужен высокий уровень безопасности.Таким образом, вы могли бы даже воссоздать ключи, т. Е. На каждом сеансе, и вам нужно только обменять открытый ключ.

Вот несколько примеров:

  • RSA
  • Диффи-Хеллман
  • Эль-Гамаль
  • ECDSA
  • XTR
1 голос
/ 10 августа 2010

iOS имеет Keychain Services для безопасного и (относительно) простого хранения таких вещей, как ключи шифрования. Проверьте Программирование сервисов ключей .

Все крипто API, которые вам могут понадобиться, также доступны в библиотеке CommonCrypto, входящей в состав libSystem. Короче говоря, нет необходимости использовать ярлыки для защиты приложений iOS.

0 голосов
/ 10 августа 2010

Как уже говорили другие, то, что вы предлагаете, совершенно небезопасно.Если кому-то небезразлично ваше приложение, он опубликует секретный ключ в Интернете в течение 10 минут после его выпуска.

Вам необходимо изучить следующие вещи:

  1. Асимметричные алгоритмы шифрования
  2. Обмен ключами Диффи-Хеллмана

(Примечание - я не говорю, что это решение вашей проблемы, но узнав о них, вы узнаете о возникающих проблемах и лучше подготовите вас).выбрать решение)

На дополнительном замечании, почему вы не можете просто использовать HTTPS-соединение?

Наконец, если эта схема шифрования защищает важные данные, вы, вероятно, будете в порядке.Он нанял консультанта, чтобы помочь вам, так как, будучи новичком в этом вопросе, вы наверняка сделаете основные ошибки.

...