Для входа в систему вы можете попробовать 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.