2010-11-30 5 views
1

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

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

Заранее спасибо

С наилучшими пожеланиями, Петар

+0

Как это не по теме? – 2010-11-30 13:22:52

+0

Это сайт программирования Q & A, а не сайт Q & A протокола. Некоторые будут рассматривать ваш вопрос вне темы, другие - нет. – 2010-11-30 21:41:43

+0

Я бы рекомендовал прочитать [RFC 2246 (TLS 1.0)] (http://www.rfc-editor.org/rfc/rfc2246.txt). Для упрощения целей вы можете игнорировать все, что не относится к шифрам RSA или DHE_RSA. Сначала прочитайте раздел 7.3 и получите копию этой первой диаграммы, обозначенной цифрой 1, когда вы читаете оставшуюся часть. – 2010-11-30 21:48:42

ответ

3

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

Возможно установить зашифрованные сообщения между двумя сторонами без каких-либо ключей, которые были обменены заранее (например, см. Diffie–Hellman key exchange).

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

Так рабочий процесс идет примерно так:.

  1. Подключение производится между клиентом и сервером.
  2. Клиент уже знает открытый ключ сервера (асимметричную криптографию), поэтому он может доказать, что другой конечной точкой является то, что они говорят: открытый ключ используется для дешифрования токена, который при проверке показывает, что это действительно зашифрованный с помощью закрытого ключа сервера.
  3. Теперь, когда аутентификация завершена, обе стороны используют некоторый метод, например, Diffie-Hellman, чтобы установить shared secret.
  4. Этот общий секрет используется как ключ шифрования/дешифрования (симметричная криптография) для всех обменов данных для остальной части сеанса клиент/сервер.
  5. Когда соединение закрыто, вышеуказанный ключ шифрования отбрасывается. Если установлено новое соединение, алгоритм выше будет генерировать новый ключ шифрования для этого нового сеанса.
5

упрощенно много: клиент генерирует ключ для симметричного шифрования и отправляет его к серверу, шифруя его с помощью открытого ключа сервера. Таким образом происходит обмен безопасными ключами. Оттуда на клиентском и сервере используется симметричная криптография с обменным ключом. Стандартный способ - это Diffie-Helman key exchange, который немного более сложный, чем данный пример.

Смежные вопросы