Как хранить уязвимые данные (например, пароли, ключи API) в приложении Какао?

У меня были основные проблемы с Земляникой, и я чувствовал, что не было никакой поддержки. Хорошие люди в PerlMonks не могли помочь мне, и я сдался. Если эта страница оставляет Вас с определенным отсутствием уверенности, существует Ваш ответ.

5
задан Jarret Hardie 27 October 2009 в 20:48
поделиться

5 ответов

Как говорили другие, вы можете ' t как защитить ключ API, так и использовать его в своем приложении. Тем не менее, вы можете относительно легко выполнить простую обфускацию, и если взломщик получит низкую отдачу, вы можете не обжечься.

Один простой метод - разбить ваш ключ API на несколько подстрок. Убедитесь, что вы поместили их в свой код в произвольном порядке. Например, если ваш ключ API - 12345678901234567890 , вы можете разбить его на 5 подстрок следующим образом:

static char *part1 = "12345";  
static char *part5 = "7890";    
static char *part3 = "890123";  
static char *part2 = "67";  
static char *part4 = "456";

Если вы запустите / usr / bin / strings для полученного двоичного файла тогда вы не должны видеть ключ API по порядку. Вместо тебя Вы увидите подстроки API в том порядке, в котором они перечислены в вашем файле C. С 5 подобными подстроками это 5 * 4 * 3 * 2 * 1 = 120 перестановок. Если вы разделите его на 13 подстрок, вы увидите более 6 миллиардов перестановок.

Однако это не помешает тому, кто знает, что они делают, получить ваш ключ API, если они этого захотят. В конце концов вам придется объединить строки вместе и передать их одному из ваших методов, после чего взломщик сможет использовать отладчик для установки точки останова и проверки памяти.

5
ответ дан 18 December 2019 в 13:16
поделиться

Используйте связку ключей Mac OS X:

Обновление:

Если ваша цель - скрыть информацию с вашей стороны пользователей, то мне неизвестен встроенный способ сделать это.

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

3
ответ дан 18 December 2019 в 13:16
поделиться

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

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

2
ответ дан 18 December 2019 в 13:16
поделиться

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

Есть несколько уловок, которые можно использовать для замедления взломщика: (1) Используйте бессмысленные имена для классов, методов и переменных, чтобы скрыть шифрование обработки кода, например - (void) qwert asdf: (NSString *) lkj; (2) Добавьте повторяющиеся процедуры и ветки, которые на самом деле ничего не делают. (3) Скрывайте данные в неожиданных местах, например на изображениях.

3
ответ дан 18 December 2019 в 13:16
поделиться

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

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