В первая часть В статье рассматривалась ситуация, когда по каким-то причинам мы не можем использовать https для защиты трафика.
При этом пароль, передаваемый в открытом виде, становится легкой добычей мошенников.
Предложенный в статье метод позволял избавиться от угрозы перехвата паролей или кражи хэшей паролей базы данных, но был бессилен против злоумышленника, владеющего базой данных и контролирующего трафик.
Предложенный ниже метод более безопасен, но более сложен.
Одним из преимуществ алгоритма аутентификации, описанного в первой части статьи, стала возможность прозрачного для пользователя внедрения его в существующие сервисы.
Данное решение этого не позволяет, поскольку в базе данных сервера больше хранятся не хэши паролей, а RSA-ключи.
Выбор асимметричной криптографии обусловлен возможностью хранить в базе данных информацию (открытый ключ), раскрытие которой не представляет угрозы для пароля.
Наиболее распространенный размер ключа RSA на сегодняшний день составляет 1024 бита.
Такой ключ невозможно запомнить и ввести его вручную.
Чтобы этого избежать, приватный ключ также хранится на сервере, но в зашифрованном виде.
Ключ шифрования генерируется на основе пароля пользователя.
Это конечно «костыль», но при использовании пароля в качестве секрета этот «костыль» неизбежен.
Процесс регистрации выглядит следующим образом:
- Клиент выбирает себе логин и пароль;
- Клиент генерирует пару ключей RSA. Открытый ключ е, Н и закрытый ключ д, Н ;
- Закрытый ключ д, Н зашифрован ключом AES к на основе пароля;
- Клиент отправляет на сервер, а сервер сохраняет — логин, публичный ключ е, Н и закрытый ключ д, Н зашифрованный ключом к .
Процесс аутентификации выглядит следующим образом:
- Клиент отправляет логин на сервер;
- Сервер отправляет клиенту случайное число РНД зашифрован открытым ключом е, Н и зашифрованный закрытый ключ клиента д, Н ;
- Клиент вводит пароль, тем самым генерирует ключ к и расшифровать с его помощью ваш закрытый ключ д, Н ;
- С ключом д, Н клиент расшифровывает РНД и отправляет его на сервер хеш (RND) ;
- Сервер сравнивает полученные хэш С хеш (RND) генерируется на сервере.
Прикреплено снова демонстрация и оригинальный коды .
Для подготовки примера использовалась библиотека AES. Криса Венесс , библиотека RSA jCryption И библиотека RSA написанные студентами Стэнфорда.
Надеюсь, в следующей статье я опишу другое, более «красивое» решение.
УПД: Как и обещал - habrahabr.ru/blogs/web_security/120990 Теги: #аутентификация #пароль #безопасность #криптография #RSA #АЭС #информационная безопасность
-
Новые Русские
19 Oct, 24