Шифрование / дешифрование информации во время выполнения - PullRequest
0 голосов
/ 28 февраля 2012

Я застрял на этом.У меня есть имя пользователя и пароль в виде строк в моем приложении, которые используются для Javamail;однако я, конечно, не хочу оставлять их в виде простого текста и подвергать риску декомпиляции и прочесывания моего приложения.

Некоторые предложили мне посмотреть на асимметричное шифрование (возможно, с использованием BouncyCastle);однако я до сих пор не знаю, как это могло бы помочь.

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

Итак, мои вопросы здесь:

  • 1)Неужели мои рассуждения ошибочны?
  • 2) Как мне решить эту дилемму?

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Если вы хотите сохранить их в приложении, лучше всего их запутать. Шифрование - один из способов сделать это, но он остановит только случайного «хакера». Если у вас есть зашифрованные строки в качестве ресурсов (или полей классов), для их расшифровки вам понадобится ключ, который будет в приложении. Если кто-то декомпилирует ваше приложение, найти ключ тоже будет довольно просто. Вы можете сделать это немного сложнее, динамически генерируя ключ из разных мест в вашем коде, но, как упоминалось выше, злоумышленник может просто найти место, где используются секреты, и сбросить уже расшифрованные строки. Там действительно нет простого выхода из этого.

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

1 голос
/ 28 февраля 2012

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

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

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