Передача Пароля По Открытому Каналу (Часть 2)

В первая часть В статье рассматривалась ситуация, когда по каким-то причинам мы не можем использовать https для защиты трафика.

При этом пароль, передаваемый в открытом виде, становится легкой добычей мошенников.

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

Предложенный ниже метод более безопасен, но более сложен.

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

Данное решение этого не позволяет, поскольку в базе данных сервера больше хранятся не хэши паролей, а RSA-ключи.

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

Наиболее распространенный размер ключа RSA на сегодняшний день составляет 1024 бита.

Такой ключ невозможно запомнить и ввести его вручную.

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

Ключ шифрования генерируется на основе пароля пользователя.

Это конечно «костыль», но при использовании пароля в качестве секрета этот «костыль» неизбежен.

Процесс регистрации выглядит следующим образом:

  1. Клиент выбирает себе логин и пароль;
  2. Клиент генерирует пару ключей RSA. Открытый ключ е, Н и закрытый ключ д, Н ;
  3. Закрытый ключ д, Н зашифрован ключом AES к на основе пароля;
  4. Клиент отправляет на сервер, а сервер сохраняет — логин, публичный ключ е, Н и закрытый ключ д, Н зашифрованный ключом к .



Передача пароля по открытому каналу (часть 2)

Процесс аутентификации выглядит следующим образом:
  1. Клиент отправляет логин на сервер;
  2. Сервер отправляет клиенту случайное число РНД зашифрован открытым ключом е, Н и зашифрованный закрытый ключ клиента д, Н ;
  3. Клиент вводит пароль, тем самым генерирует ключ к и расшифровать с его помощью ваш закрытый ключ д, Н ;
  4. С ключом д, Н клиент расшифровывает РНД и отправляет его на сервер хеш (RND) ;
  5. Сервер сравнивает полученные хэш С хеш (RND) генерируется на сервере.



Передача пароля по открытому каналу (часть 2)

Прикреплено снова демонстрация и оригинальный коды .

Для подготовки примера использовалась библиотека AES. Криса Венесс , библиотека RSA jCryption И библиотека RSA написанные студентами Стэнфорда.

Надеюсь, в следующей статье я опишу другое, более «красивое» решение.

УПД: Как и обещал - habrahabr.ru/blogs/web_security/120990 Теги: #аутентификация #пароль #безопасность #криптография #RSA #АЭС #информационная безопасность

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.