Назад | Перейти на главную страницу

Как работает простое шифрование TLS / SSL

Я читал в Wiki о TSL / SSL, но есть что-то, что меня немного сбивает с толку

Чтобы сгенерировать ключи сеанса, используемые для безопасного соединения, клиент шифрует случайное число (RN) с помощью открытого ключа сервера (PbK) и отправляет результат на сервер. Только сервер должен иметь возможность расшифровать его (с помощью своего закрытого ключа (PvK)): это тот факт, который делает ключи скрытыми от третьих лиц, поскольку только сервер и клиент имеют доступ к этим данным. Клиент знает PbK и RN, а сервер знает PvK и (после расшифровки сообщения клиента) RN. Третья сторона может узнать RN только в том случае, если PvK был скомпрометирован. Из случайного числа обе стороны генерируют ключевой материал для шифрования и дешифрования.

ссылка: http://en.wikipedia.org/wiki/SSL/TLS

В нем говорится, что если PvK скомпрометирован, то RN также будет скомпрометирован, разве не RN является ключом для шифрования сообщения, и какой смысл, если он скомпрометирован? Заранее спасибо!!

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

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

Симметричное шифрование - это то, что соединение будет использовать после установки. Один ключ используется как для шифрования, так и для дешифрования. Симметричное шифрование обычно быстрее асимметричного.

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

Итак, начало нашего разговора по SSL, я отправляю вам свой открытый ключ. Неважно, прочитает ли кто-нибудь это по сети, это публично.

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

Вы шифруете случайное число (сеансовый ключ) моим открытым ключом. Это означает, что только тот, кто владеет моим закрытым ключом, может расшифровать наш сеансовый ключ.

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

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

Я не уверен, что понимаю вопрос, и я не эксперт в SSL, но:

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

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

Под «скомпрометированными» людьми подразумевается, что информация известна другой стороне, которая не должна иметь к ней доступа.

Насколько я понимаю, RN - это зашифрованное значение с помощью PublicKey, поэтому вполне естественно, что его «взломают» любой, кто обнюхивает сеть. Но это нормально, поскольку RN непонятен и может быть расшифрован только тем, у кого есть первичный ключ.