“Секрет” может представить в виде строки в скомпилированном приложении Obj-C быть обнаруженным?

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

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

Спасибо.

6
задан pop850 9 August 2010 в 19:52
поделиться

5 ответов

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

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

6
ответ дан 8 December 2019 в 18:29
поделиться

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

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

4
ответ дан 8 December 2019 в 18:29
поделиться

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

Вот некоторые примеры:

  • RSA
  • Диффи-Хеллман
  • ElGamal
  • ECDSA
  • XTR
2
ответ дан 8 December 2019 в 18:29
поделиться

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

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

1
ответ дан 8 December 2019 в 18:29
поделиться

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

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

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

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

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

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

0
ответ дан 8 December 2019 в 18:29
поделиться