Библиотека шифрования на стороне клиента

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

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

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

  2. Стоит ли мне беспокоиться о шифровании информации.

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

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

Любая помощь будет оценена по достоинству! Заранее спасибо.

Как вы общаетесь между сервером и клиентом?

Talha Junaid 03.09.2018 09:22

Имена пользователей, пароли, общая информация о пользователях передаются через axios. Сообщения через socket.io.

Drake Izatt 03.09.2018 09:23

Вы используете HTTPS или HTTP для связи?

Janith 03.09.2018 09:29

Axios использует HTTP.

Drake Izatt 03.09.2018 09:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
2 165
2

Ответы 2

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

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

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

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

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

What is the risk factor in having server-client communication where the exchange of information between them is never encrypted.

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

Should I bother encrypting the information.

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

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

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

If I should bother encrypting the information on the client before transmission, what is the best client-side encryption library to do so (in a React context, if that makes a difference).

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

Also, how would I go about sending encrypted server information to the client, which decrypts it with a different technology than bcrypt; or, should I use entirely client-side encryption, while the server just reads and writes the encrypted information with no knowledge of its contents.

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

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

Твердый ответ. Не могли бы вы помочь мне понять процесс преобразования веб-сайта HTTP и его кода в HTTPS?

Drake Izatt 03.09.2018 21:00

@DrakeIzatt: весь код и веб-сайт остаются прежними, только веб-сервер должен поддерживать SSL. Вам необходимо установить (купить или настроить) пару ключей SSL (закрытый ключ и сертификат). Это зависит от вашего веб-сервера (или провайдера), который вы используете. Для локального DEV вы можете создать свой собственный сертификат (ему не будут доверять по какой-либо причине), для производства вы скорее доверяете одному (приобретенному центром сертификации)

gusto2 03.09.2018 21:48

Другие вопросы по теме