2008-09-02 8 views
3

Некоторые веб-приложения, такие как Google Docs, хранят данные, созданные пользователями. Данные, которые могут быть прочитаны только его владельцем. А может и нет?Шифрование данных от пользователей в веб-приложениях

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

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

ответ

6

Если шифрование/дешифрование выполняется на сервере, вы не можете удостовериться, что текст не сбрасывается где-то в каком-либо файле журнала или тому подобное.

Вам необходимо сделать шифрование/дешифрование внутри браузера с помощью JavaScript/Java/ActiveX или что-то еще. Как пользователь, вам нужно доверять клиентской стороне веб-службы, чтобы не отправлять обратно информацию, незашифрованную на сервер.

Карл

-1

Нет, вы не можете использовать пароли, но вы можете использовать хэши паролей. Однако Документы Google предназначены для совместного использования, поэтому такой метод потребует хранения копии документа для каждого пользователя.

4

Я думаю, что Карл прибил его по голове, но я хотел сказать, что с любого веб-сайта, если вы предоставляете ему какую-либо конфиденциальную/личную/привилегированную информацию, тогда вы должны иметь определенный уровень доверия, и это ответственность поставщика услуг за установление этого доверия. Это один из тех вопросов, которые были заданы много раз по всему Интернету с момента его создания, и он будет продолжать расти, пока у нас не будет собственных сертификатов SSL, закодированных на нашем отпечатке пальца, и даже тогда нам придется задать вопрос «Откуда я знаю, что палец все еще привязан к пользователю?».

1

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

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

Но я считаю, что алгоритмы и приложения, такие как GPG/PGP и т. Д., Очень хорошо известны и могут быть реализованы таким образом, что защищенные веб-приложения - и сохраняют удобство использования на основе оценки, которую может выполнить средний пользователь.

редактировать Я хочу, чтобы догнать @Carl и Unkwntech и добавить их заявление: Если вы не доверяете сам сайт, не дают частные данные прочь. Это еще до того, как кто-то взломает их серверы ... ;-)

1

Auron спросил: Как вы создаете ключ для клиента для шифрования/дешифрования данных? Где вы храните этот ключ?

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

Crypto трудно получить правильно ;-) Я бы рекомендовал посмотреть исходный код для AxCrypt и для Xecrets 'off-line клиент.

Carl