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




Если вы используете b), ключевые рекомендации следующие: Не делайте этого. Если вы хотите, чтобы это было безопасно.
Попробуйте придерживаться а).
Для (б) я полагаю, вы занимаетесь вопросом «вызов-ответ».
Сервер генерирует случайную строку, отправляет ее клиенту. Клиент добавляет его к паролю и хеширует все это, отправляет хеш обратно на сервер. Сервер делает тот же расчет, сравнивает результат с тем, что он получил от клиента. Если они совпадают, клиент отправил правильный пароль.
Наиболее очевидная уязвимость заключается в том, что если кто-то отслеживает обе стороны обмена, он может запустить автономную атаку по словарю против пароля.
Для обоих определений слова «безопасный» "вы не можете получить за это в суд" и "разумно защищенный" для мобильного приложения вы можете предположить, что линия защищена от атак типа «человек посередине» и широко открыта для подслушивания. SSL / TLS кажется самым простым способом, но это может зависеть от вашего оператора и целевого телефона.
Если вы не можете заставить TLS работать и вам нужно использовать свой собственный, используйте обмен ключами Диффи-Хеллман и установленную криптографическую библиотеку (Легион Надувного Замка имеет упрощенную реализацию, совместимую с J2ME).
Да, мое мобильное приложение - J2ME. И да, у меня уже были проблемы с SSL. Спасибо.
Предполагается, что линия безопасна, так как для организации атаки «человек посередине» третьей стороной требуется вставка прокси-ячейки в сеть. Это значительный объем работы, и ее относительно легко обнаружить оператором связи. Я предполагаю, что оператор связи является надежной третьей стороной, поскольку у них в любом случае есть ваши данные.
Вы действительно доверяете своему оператору связи (например, их сотрудникам, которые не передают ваши данные в различные агентства)? Даже если вы это сделаете, как насчет следующего этапа пути: оператор -> Интернет -> целевой сервер? Я бы не стал сбрасывать со счетов прокси / ретрансляционные вышки сотовой связи и мошеннические сети Wi-Fi.
Нет, я им так не доверяю, но мой работодатель чертовски уверен. В конце концов, доверие в бизнесе - это не добро и зло, а прикрытие задницы. Перевозчик (обычно) по контракту обязан гарантировать целостность ваших данных. То же самое и для крупных телекоммуникационных компаний.
Написание собственного протокола безопасности не обязательно, и это плохая идея. У него почти наверняка будут недостатки, которые можно использовать. Если все, что вам нужно, это защитить конфиденциальность учетных данных для входа, тогда вам следует использовать SSL / TLS. Это также позволяет упростить переход на аутентификацию на основе сертификатов клиента в будущем.
Я не смотрел новые телефоны, но раньше у меня были проблемы с установленными сертификатами SSL.