Какой способ шифрования данных использовать на клиенте (javascript)?
Задача:
Сделать на клиенте (javascript) шифрование данных, которые вводит пользователь для последующей передачи их на сервер для хранения (в зашифрованном виде).
Соответственно, при логине пользователя зашифрованные данные загружаются с сервера и расшифровываются на клиенте.
Подскажите, какой способ или алгоритм шифрования лучше применить для решения задачи?
При регистрации пользователя и при каждом логине генерим пару ключей из пароля для ассиметричного шифрования (pub, priv), по заданному алгоритму. Таким образом даже при смене браузера мы снова получаем тот же pub и priv из пароля. При этом, владелец сервера имеет только pub для аутентификации пользователя (просто сравнивая два публичных ключа на сервере и на клиенте) и для шифрования, из него невозможно получить priv.
Далее, всю инфу шифруем (хоть на клиенте, хоть на сервере) с помощью pub и расшифровываем на клиенте с помощью priv.
В чем преимущество перед симметричным шифрованием с помощью независимо созданного из пароля ключа ? (подразумеваю, что логин идет по второму ключу, созданному из этого пароля - оригинальный пароль не известен владельцу сервера).
Асимметричное будет тяжеловато ворочаться на JS + наверняка это будет гибридное, поэтому какой-то симметричный алгоритм все равно придется применять.
Андрей: это я понял, но тогда не будет возможности серверу зашифровать данные, только хранить. А так принципиально ничего не меняется, но зато есть возможность шифровать файлы и серверу тоже.
Александр Диунов: Только не нужно :-) Если код шифрования будет под контролем того, от кого вы хотите защитить данные - нет смысла. Можете заюзать обычный AES на основании введенного юзером ключа, например.