Как реализовать зашифрованную аутентификацию входа в Android? - PullRequest
4 голосов
/ 14 ноября 2010

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

Как реализовать шифрование безопасности в моем приложении?

1 Ответ

13 голосов
/ 14 ноября 2010

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

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

Первая попытка - открытый текст, или это так?

Пользователь вводит свое имя пользователя ипароль, проверьте, существует ли пользователь в базе данных, и сравните пароль с паролем в базе данных.

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

Смягчение последствийШаг 1 - Хэш

Чтобы смягчить это, вы можете хэш ваш пароль (желательно с солью).Чтобы хэшировать строку, взгляните на класс MessageDigest , есть пример, доступный по ссылке.Теперь использование хэша означает, что вы (цитируя Википедию)

конвертируете большой объем данных, возможно, с переменным размером, в маленький элемент данных

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

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

Смягчение, шаг 2 - Хеширование с солью

Так близко ... Ну, чтобы смягчить радужную атаку , вы можете использоватьсоль, другими словами, другое значение, добавленное к паролю, которое создаст другой хэш.Прелесть хэшей в том, что вам нужно всего лишь добавить небольшое количество дополнительных данных, чтобы хэш казался почти случайным образом отличным от хэша без лишних битов данных.Простая соль может быть именем пользователя, хранить hash(username + password) вместо hash(password).Теперь, поскольку хэши быстро вычисляются, соль должна быть как-то скрыта.То, как вы это сделаете, полностью зависит от вас , но вам следует подчеркнуть, что это секретно.

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

Смягчающий шаг 3 - Итерации - ваш друг

Поскольку хеш-функции быстрые, почему бы не просто хешировать хэш-пароль, а поскольку они быстрые, почему бы не хэшировать хэш-код пароля?Эй, пока мы находимся, почему бы не сделать это таким образом. Сколько времени пользователь должен ждать, прежде чем сможет войти в систему? Если можно подождать секунду, сколько итераций вы можете выполнить за эту секунду?Чтение некоторых ответов в этой ветке stackoverflow может дать некоторые причины, чем больше, тем лучше.Объедините это с уменьшением соли, и оно должно быть довольно надежным.

Что ж, злой Еве сейчас будет непросто проникнуть на ваш экран входа в систему, хешировать пароли с солями, итерациями и прочим.

Другие проблемы

Но помните, ваша защита так же сильна, как и ваше самое слабое звено! Спросите себя об этом, что я пытаюсь защитить?Будет ли это защищать мой экран входа?Если злодеи не могут сломать дверь, они могут просто пройти через изгородь !

ЙоВы можете прочитать больше о безопасности в Java и Архитектура криптографии , если хотите узнать больше о безопасности в Java.

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