Хранение секретного ключа SECRET - в приложении для Android .. любые идеи - PullRequest
7 голосов
/ 31 октября 2011

У меня есть подпрограмма шифрования и дешифрования mcrypt в одном из моих приложений для Android.По сути, это дешифрование строки, которая извлекается через.удаленный звонок.Естественно, «секретный ключ» хранится в коде, но любой, у кого есть apktool, может видеть код и видеть мой секретный ключ.

Есть ли в любом случае зашифровать весь код Java, так что даже если он будет декомпилирован, он не будет читаемым / понятным?

Я слышал о ProGuard, но, читая об этом, кажется, недостаточно для этой цели.

Ответы [ 4 ]

4 голосов
/ 31 октября 2011

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

Скрытие литералов в коде просто задерживает злоумышленника в процессе получения ключа, но это не так.Это никак не мешает.

1 голос
/ 31 октября 2011

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

Предложение: в вашем коде будут некоторые текстовые строки, такие как «Пожалуйста, подождите, пока ваш запрос обрабатывается ...» Найдите такое сообщение и сгенерируйте байтовый массив, чтобы преобразовать это сообщение в ваш реальный ключ с помощью XORing байтовый массив с текстовой строкой.

например. "белка" XOR [16 1D 10 19 1A 13 0B 18] => "слон"

На самом деле в вашем коде отображаются только "белка" и байтовый массив.

0 голосов
/ 31 октября 2011

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

Затем вам нужно будет выполнить обмен ключами с жестко закодированным сертификатом (который безопасен при правильной реализации)

или просто используйте SSL, если он защищен только в пути

0 голосов
/ 31 октября 2011

Я не эксперт по безопасности, но я знаю, что язык, скомпилированный с виртуальной машиной, можно легко декомпилировать, вы можете попытаться запутать ваш код с помощью ProGuard, но все же быть читабельным, но я бы посоветовал ему попробовать сохранить его и зашифровать ваш ключиспользуя Java Crypto , этот вопрос задавался ранее, аналогично Шифрованная база данных Android или Шифрование информации в Android , я не ожидаю ответа на ваш вопросно покажу вам, куда идти.

...