2015-02-06 6 views
3

Я хотел был бы зашифровать некоторые данные потребителя прежде чем он будет послано к серверу. То есть данные будут зашифрованы на стороне клиента в браузере с использованием JavaScript.Лучший способ хранить секретный ключ в браузере?

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

HTML5 локальное хранилище или просто чтение локального текстового файла, содержащего ключ из JavaScript, кажется немного выключенным ... Возможно ли использовать персональные сертификаты для этой цели? Или есть другой вариант?

EDIT:

Незначительное уточнение,

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

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

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

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

+1

Вам не нужен секретный ключ для шифрования, просто общедоступный. –

+0

@AlexanderH Действительно данные будут зашифрованы с использованием открытого ключа (который хранится на сервере), однако его необходимо расшифровать позже, когда, например, пользователь хочет его просмотреть. Следовательно, необходимо сохранить клиентскую часть закрытого ключа в браузере. – orom

+0

Тогда вам понадобится пара ключей, я бы сказал. Eveything else похоже на отсутствие ключа –

ответ

3

Согласно вашему описанию, данные в файлах и поля формы должны использоваться только на клиенте. В этом случае просто не нужно использовать шифрование с открытым ключом. Вы должны использовать симметричный блочный шифр, такой как AES, для шифрования этих данных и отправки их на сервер. Единый случайный симметричный ключ будет сгенерирован в браузере клиента и сохранен в localStorage, возможно, защищен паролем (например, второй слой AES). Ключ AES - двоичная строка длиной 128/192/256 бит, и он никогда не должен покидать браузер клиента.

Я думаю, что localStorage - единственный жизнеспособный вариант, потому что он реализован всеми современными браузерами.

Могут быть другие решения, такие как браузерные плагины или даже custom browser.