Подтвердить что ты не робот

Как хранить секретный ключ API в двоичном приложении?

Я создаю клиент Twitter для Mac OS X, и у меня есть секрет Потребителя. Насколько я понимаю, я не должен делиться этим секретным ключом. Проблема в том, что когда я помещаю его как строковый литерал в свое приложение и использую его, например:

#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW"

[[QQTwitterEngine alloc] initWithConsumerKey:QQTwitterConsumerKey consumerSecret:QQTwitterConsumerSecret];

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

Есть ли безопасный способ хранения Секретного Потребителя? Должен ли я зашифровать его?

4b9b3361

Ответ 1

Нет идеального решения. Независимо от того, что вы делаете, кто-то, кто его посвятил, сможет украсть его.

Даже Twitter для iPhone/iPad/Android/Mac/и т.д. есть секретный ключ там, они, вероятно, как-то закрыли его.

Например, вы можете разбить его на разные файлы или строки и т.д.

Примечание. Используя шестнадцатеричный редактор, вы можете читать строки ascii в двоичном формате, что является самым простым способом. Разбирая его на разные части или используя вызовы функций для создания секретного ключа, обычно работает, чтобы сделать этот процесс более сложным.

Ответ 2

Вы можете просто закодировать base64, чтобы обфускать его. Или, лучше, создайте ключ, а не просто его сохраните - напишите примерно так:

char key[100];
++key[0]; ... ; ++key[0]; // increment as many times as necessary to get the ascii code of the first character
// ... and so on, you get the idea.

Однако, действительно хороший хакер найдет это независимо от того, что; единственный способ действительно защитить его от глаз других - использовать безопасную хэш-функцию, но тогда вы также не сможете ее восстановить:)

Ответ 3

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

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

Ответ 4

Действительно поздний ответ...

Если вы настроите свой собственный сервер, вы можете использовать его, чтобы помочь настольному приложению получить разрешение пользователей на твиттере без совместного использования (т.е.: вложения) вашего секретного ключа.

Вы можете использовать этот подход:

Когда пользователь устанавливает ваше настольное приложение, она должна зарегистрировать его с помощью Twitter и с вашим сервером *) *) Приложение просит сервер сгенерировать URL-адрес запроса токена *) Сервер отправляет сгенерированный URL-адрес в приложение *) Приложение направляет пользователя на URL авторизации *) Пользователь разрешает ваше приложение в twitter и вставляет в него сгенерированный PIN-код *) Используя PIN-код, приложение захватывает токен *) Все дальнейшие коммуникации используют токен и не связаны с вашим сервером.

Примечание. Приложение регистрируется на вашем сервере с использованием учетных данных пользователя (например: id и password) для вашего сервера.