Как сохранить секретный ключ API в двоичном приложении? - PullRequest
40 голосов
/ 02 апреля 2011

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

#define QQTwitterConsumerSecret @"MYSECRETYOUMAYNOTKNOW"

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

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

Есть ли какой-нибудь безопасный способ сохранить секрет потребителя? Должен ли я зашифровать это?

Ответы [ 4 ]

27 голосов
/ 02 апреля 2011

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

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

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

7 голосов
/ 02 апреля 2011

Вы можете просто закодировать 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.

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

2 голосов
/ 02 апреля 2011

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

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

0 голосов
/ 28 февраля 2016

Очень поздний ответ ...

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...