Созданное решение JavaScript для безопасной регистрации и аутентификации без SSL - PullRequest
2 голосов
/ 31 марта 2012

Есть ли какое-либо решение для безопасной регистрации пользователя и аутентификации без SSL?

  1. Под "безопасным" я подразумеваю безопасный от пассивного прослушивания , а не от человек в середине (я знаю, что только SSL с подписанным сертификатом достичь этой степени безопасности).

  2. Регистрация (установка пароля, то есть обмен предварительными общими ключами) также должна быть защищена без SSL (это будет самая сложная часть, я думаю).

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

Заранее спасибо.

1 Ответ

0 голосов
/ 31 марта 2012

Для входа в систему вы можете попробовать SRP из clipperz :

  • Я не уверен, насколько силен генератор случайных чисел, который они используют. Возможно, вы захотите попробовать использовать Crypto API , чтобы получить более сильные значения. Я не уверен, как вы можете получить безопасные начальные значения в JavaScript без использования Crypto API.

Для отправки начального пароля на сервер вы можете использовать шифрование с открытым ключом. Таким образом, сервер отправляет клиенту свой открытый ключ (хорошо при условии отсутствия изменений), и клиент шифрует весь запрос регистрации при регистрации. Cipperz поддерживает шифрование с открытым ключом, но в очень сырой форме. Часто вы используете шифрование с открытым ключом для шифрования случайно сгенерированного симметричного ключа, а симметричный ключ - для шифрования полезной нагрузки. Вы должны быть очень осторожны с padding / etc, чтобы сделать публичное шифрование должным образом безопасным. Я не знаю ни одной надежной криптографической библиотеки с открытым ключом для javascript.

Возможно, вы захотите проверить jsbn на наличие шифрования с открытым ключом, потому что похоже, что оно выполняет заполнение правильно. Хотя, я подозреваю, что он страдает от небезопасной генерации случайных чисел. Было бы неплохо использовать Crypto API или заставить пользователя стучать по клавиатуре, чтобы генерировать энтропию. Фрагмент из rng.js

// For best results, put code like
// <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>
// in your main HTML document.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...