Как вы могли бы зашифровать пользовательские данные, чтобы только они могли их расшифровать? - PullRequest
4 голосов
/ 30 марта 2009

Я думал о создании веб-приложения, которое позволяло бы людям вводить текст (используя соединение SSL), и оно было бы зашифровано перед сохранением в БД. Цель состоит в том, чтобы его могли расшифровать только пользователи.

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

Однако, если вы сохранили ключ на сервере, у вас был бы к нему доступ, и он мог бы потенциально расшифровать их данные.

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

Ответы [ 3 ]

11 голосов
/ 30 марта 2009

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

Если вы ищете способ хранения секретного ключа на стороне клиента, вы можете обратиться к PersistJS .

5 голосов
/ 30 марта 2009

Похоже, что вы могли бы сделать что-то с помощью PGP. Как упоминалось в предыдущем посте, у вас есть открытый и закрытый ключи. Закрытый ключ может быть защищен парольной фразой. Таким образом, вы можете хранить закрытый ключ в БД, поскольку для его использования по-прежнему потребуется фраза-пароль.

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

1 голос
/ 30 марта 2009

С точки зрения информационной безопасности это имеет смысл, только если шифрование / дешифрование выполняется на компьютере пользователя, а не на вашем сервере (поскольку нет гарантии, что вы не храните ключ и / или открытый текст). О JavaScript не может быть и речи, поэтому вам нужно клиентское приложение *.

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

* или Java-апплет, но это так 90-х годов. Возможно, Silverlight или Flash тоже могут работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...