Нужны предложения о том, как создать сайт с зашифрованной базой данных - PullRequest
0 голосов
/ 03 января 2011

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

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

Подходит ли для этого JavaScript? 256-битное шифрование займет слишком много времени?

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

Я ищу советы, предложения и любые советы, которые вы, ребята, можете иметь о том, как узнать и выполнить это.

Спасибо!

Ответы [ 5 ]

1 голос
/ 04 января 2011

Не следует реализовывать шифрование для связи между клиентом и сервером самостоятельно, для этого используйте SSL (https).Что касается шифрования данных в базе данных, вы всегда можете использовать встроенные методы MySQL, такие как AES_ENCRYPT и AES_DECRYPT, подробнее см. справочное руководство .

0 голосов
/ 02 июля 2013

Ознакомьтесь с этим постом в блоге: http://www.ravellosystems.com/blog/all-you-need-to-know-to-configure-ssl-offloading/

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

0 голосов
/ 03 января 2011

Посмотрите на http://www.farfarfar.com/scripts/encrypt/ (шифрование / дешифрование).

Пробовал текст / текст / XXTEA с успехом.

Тем не менее, это почти то, что вы можете пойти с шифрованием JS.

Пока вы не используете SSL / https, основным недостатком является:

  • Пух для защиты закрытого ключа (это можно сделать, хотя, как и поле формы, не отправлено, но требует, чтобы пользователь вводил значение в каждом сеансе.)

Что касается поиска / извлечения данных на зашифрованных данных, я верю, что ничего не получится.

0 голосов
/ 04 января 2011

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

Ваша форма должна быть отправлена ​​по https:// URL-адресу (а не http://), а сценарий / приложение по этому URL-адресу будет взаимодействовать с базой данных, шифруя и расшифровывая данные по мере необходимости. В любом случае, Javascript будет нелегко напрямую взаимодействовать с MySQL, и если вы выполните все шифрование на стороне клиента, любой, кто сможет получить страницу, все равно сможет ее расшифровать (поскольку по необходимости клиенту также должен быть предоставлен ключ дешифрования).

0 голосов
/ 03 января 2011

Что ж, укажем на кое-что: если он зашифрован на стороне клиента, он, вероятно, также будет легко расшифрован, поскольку, как и в случае с такими языками, как javascript, им передается исходный код вашей схемы шифрования. Существует множество схем шифрования, AES, Blowfish и т. Д., Но если данные передаются по зашифрованному соединению, я полагаю, что шифрование данных только добавляет очень мало защиты, возможно, перехватчики пакетов установлены локально или что-то в этом роде.

Я также хотел бы предложить вам также использовать сжатие, я сам использовал LZMA, Хаффман и даже base64-кодирование с javascript, чтобы, по крайней мере, скрыть контент от случайных наблюдателей. В любом случае, независимо от того, насколько хорошо шифрование, вы передаете процесс клиенту, и они могут просто просматривать ваш источник и иметь возможность легко изменить шифрование, учитывая, что они знают схему шифрования и не ленивы. немного погуглить или поискать в Википедии. Лично я предпочитаю сжатие, потому что оно также уменьшает размер отправляемых данных, и, если не научиться анализировать шифрование и сжатие, будет нелегко выяснить, какое сжатие используется при перехвате пакетов.

РЕДАКТИРОВАТЬ: Но если вы хотите высокий уровень безопасности, я бы рекомендовал не использовать только сжатие, а вместо этого, использовать асимметричный метод шифрования, такой как RSA или шифрование Диффи-Хеллмана при передаче данных между сервером и клиентом, в качестве закрытого ключа. никогда не будет передан.

Для клиентской стороны будет работать javascript или лучше Java-приложение (по крайней мере, вы не можете щелкнуть правой кнопкой мыши -> просмотреть источник с помощью Java-приложения за две секунды). 256-битное шифрование не займет слишком много времени, если вы просто хотите сохранить несколько предложений, как вы сказали. Современный процессор с быстрым выходом через миллисекунды. Затем, когда он поступит на сервер, зашифруйте его с помощью AES или другого мощного алгоритма (обратите внимание, что правительство США использует AES 256 для своих сверхсекретных документов) перед отправкой его в базу данных. (Также хочу добавить, что вы также можете хранить хеш (MD5 - это функция, легко доступная в PHP, вы также можете выбрать что-то вроде Whirlpool, но вам нужно будет найти библиотеку для этого) данных на отдельном базы данных, и проверьте ее при доступе к ней, чтобы убедиться, что ваша база данных не была скомпрометирована)

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

Вот хороший источник информации о Javascript и AES: http://point -at-infinity.org / jsaes / Мои две сохраненные ссылки с использованием RSA в JavaScript: http://www.ohdave.com/rsa/ и http://www.hanewin.net/encrypt/rsa/rsa.htm

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