Шифровать данные от пользователей в веб-приложениях - PullRequest
4 голосов
/ 02 сентября 2008

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

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

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

Ответы [ 5 ]

6 голосов
/ 02 сентября 2008

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

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

Карл

4 голосов
/ 02 сентября 2008

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

1 голос
/ 03 сентября 2008

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

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

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

Карл

1 голос
/ 02 сентября 2008

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

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

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

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

0 голосов
/ 02 сентября 2008

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

...