Клиентская библиотека шифрования - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу приложение на сайте связи. В целях безопасности приложение шифрует пароли и сообщения перед сохранением информации в базе данных. В своем текущем состоянии сообщения и пароли отправляются с клиента (React) на сервер (Node.js), где они шифруются с помощью bcrypt (на стороне сервера). Когда сохраненные сообщения считываются из базы данных сервером и отправляются клиенту, они дешифруются предварительной передачей сервера.

Итак, у меня есть несколько вопросов.

  1. Каков фактор риска при взаимодействии сервер-клиент, когда обмен информацией между ними никогда не шифруется.

  2. Должен ли я шифровать информацию.

  3. Если я должен потрудиться зашифровать информацию на клиенте перед передачей, то какая библиотека шифрования на стороне клиента лучше всего для этого (в контексте React, если это имеет значение).

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

Буду признателен за любую помощь! Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Талха уже ответил на ваш вопрос, хотя я просто предоставлю некоторые детали

Каков фактор риска при взаимодействии сервера с клиентом, когда обмен информацией между ними никогда не шифруется.

Теоретически каждый компьютер в сети, где передаются данные, может считывать данные. Реальность еще хуже - в настоящее время реализованная защищенная передача Wi-Fi WPA2 может быть перехвачена.

Должен ли я шифровать информацию.

Позвольте перефразировать ваш вопрос: я должен передавать информацию в зашифрованном виде? Да, нет причин не делать этого (кроме случаев, когда вы ленивый учитесь делать это). Использование HTTPS обеспечит конфиденциальность и целостность (чтобы никто не мешал вашим данным, а вы говорите на нужном сервере). HTTPS стал доступен сегодня. Существуют даже бесплатные услуги центра сертификации (например, letsencrypt.org).

При хранении паролей лучшим вариантом будет использование медленных криптографических хэшей (да, bcrypt сделает эту работу). Хеширование обычно происходит на стороне сервера.

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

Если мне придется потрудиться зашифровать информацию на клиенте перед передачей, то какая библиотека шифрования на стороне клиента лучше всего это сделает (в контексте React, если это имеет значение).

Я использовал библиотеку CryptoJS для шифрования JS (я использовал ее на стороне сервера, но я считаю, что это не имеет значения).

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

Просто - используйте TLS (HTTPS). В определенный момент вам нужно доверять вашему серверу. На самом деле вы все равно должны защищать свои данные (например, иметь пароли)

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

0 голосов
/ 03 сентября 2018

При общении всегда следует использовать безопасный способ общения. Например, HTTPS. А при работе с сокетами вы можете использовать протокол защищенных веб-сокетов (WSS), в котором соединение шифруется через TLS / SSL.

Если вы используете HTTPS и WSS, ваше сообщение уже зашифровано с использованием SSL, поэтому вам не следует шифровать данные на стороне клиента, если это не является абсолютно необходимым.

bcrypt - это функция хеширования пароля, разработанная Нильсом Провосом и Дэвидом Мазьером на основе шифра Blowfish. Хеширование необратимо . Создав хеш, вы не сможете его расшифровать. Если вам нужно расшифровать, вы можете использовать AES256. Для получения дополнительной информации об AES вы можете начать с WIKIPEDIA

bcrypt - это алгоритм, который может быть реализован на любом языке, кроме того bcrypt (пакет npm) - это реализация алгоритма.

...