Диффи-Хеллмана вместо SSL?

Можно ли использовать алгоритм обмена ключами Диффи-Хеллмана для шифрования связи клиент-сервер на веб-странице вместо SSL? Если можно, то каковы недостатки (например, почему стандарт использует SSL, для которого требуется центр сертификации)? Насколько я понимаю, Диффи-Хеллмана можно использовать для тайного установления общего ключа, который затем можно использовать для шифрования любых дальнейших сообщений.


person kmnan    schedule 27.10.2009    source источник


Ответы (5)


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

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

Просто для очевидного примера, использование DH (самого по себе) Man в средней атаке довольно просто. Если я смогу заставить вас подключиться к моему серверу вместо того, который вы намеревались сделать, я могу использовать DH для установления «безопасного» сеанса с вами. Затем я подключаюсь к серверу, который вы изначально намеревались использовать. Каждый пакет, который я получаю от вас, я расшифровываю, повторно шифрую с помощью ключа, который я использовал для подключения к этому серверу, и отправляю на этот сервер. Я делаю то же самое со всеми его ответными пакетами. Для вас все выглядит так, как будто оно было получено непосредственно с исходного сервера, и сделанная вами покупка (например) работает как обычно. Единственное, что изменится, - это то, что я также сохраню номер вашей кредитной карты, и когда вы попытаетесь заправить свою машину топливом на следующий день, плата будет отклонена, потому что тем временем я потратил весь ваш кредит.

Аутентификация в SSL, по крайней мере, предназначена для предотвращения этого. Если ваш браузер попытался подключиться (например) к www.amazon.com, он должен выдать вам предупреждение, если в моем сертификате SSL не указано, что он был выпущен на www.amazon.com - и ЦС не должен выдавать такой сертификат кому угодно, кроме Amazon.

DH сам по себе даже не гарантирует большей части того, что я сказал выше. Сам по себе DH - это просто способ обмена ключами (или, возможно, это можно было бы сформулировать как «обмен информацией, необходимой обеим сторонам для создания идентичных ключей, никогда не обмениваясь самим ключом в открытом виде»). После того, как обе стороны получат ключ, они могут (и предположительно будут) использовать его для шифрования / дешифрования данных, но это шифрование фактически отделено от самого DH.

person Jerry Coffin    schedule 27.10.2009

Фактически Diffie-Hellman является частью SSL. Но одна часть не заменяет другие.

Из здесь SSL Diffie-Helman используется для:

Это обмен ключами Диффи-Хеллмана, при котором сертификат сервера содержит общедоступные параметры Диффи-Хеллмана, подписанные центром сертификации (CA). То есть сертификат открытого ключа содержит параметры открытого ключа Диффи-Хеллмана. Клиент предоставляет свои параметры открытого ключа Диффи-Хеллмана либо в сертификате, если требуется аутентификация клиента, либо в сообщении обмена ключами. Этот метод приводит к фиксированному секретному ключу между двумя одноранговыми узлами на основе расчета Диффи-Хеллмана с использованием фиксированных открытых ключей.

person alexkr    schedule 27.10.2009
comment
Поэтому я думаю, что нет способа избежать использования PKI. Мне просто было интересно из любопытства, есть ли способ для 2 сторон (независимо от накладных расходов алгоритма) надежно установить зашифрованную ссылку без использования третьей стороны. - person kmnan; 27.10.2009
comment
Теоретически нет. Потому что без ЛЮБОГО использования третьей стороны вы не можете быть уверены, что устанавливаете зашифрованную ссылку с желаемой целью. - person alexkr; 27.10.2009
comment
Конечно, есть. Например, если две стороны обмениваются своими открытыми ключами во время подписания ключей, им не нужна третья сторона для установления безопасного соединения. - person Accipitridae; 27.10.2009
comment
В более общем смысле, безопасный канал не может быть установлен полностью внутри полосы. Будь то внеполосный обмен ключевыми материалами между сторонами или внеполосное получение сторонних ключей, вам потребуется дополнительная помощь для установления безопасного соединения. - person erickson; 04.11.2009

Вы можете использовать анонимное соглашение о ключах Диффи-Хеллмана с SSL. Это обеспечивает конфиденциальность на канале, но без аутентификации.

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

Если отсутствие сертификата мешает вам использовать SSL там, где он действительно необходим, получите бесплатный на startcom.org. < / а>

person erickson    schedule 27.10.2009
comment
+1 - Аккуратная ссылка, я создавал свои собственные сертификаты для моего личного домашнего сервера ... Я не знал, что есть бесплатные сертификаты, которые используют встроенный в браузер ЦС, поэтому посетителям не нужно добавлять исключение - person John Rasch; 29.10.2009
comment
К сожалению, я не думаю, что IE их поддерживает. Я не просматривал его в последнее время, поэтому не уверен, что это все еще так. - person erickson; 29.10.2009
comment
На самом деле, быстрая проверка на startcom.org показывает, что они поддерживают Internet Explorer. - person cmaduro; 25.04.2010
comment
Поддержите его или включите свой сертификат в набор по умолчанию? - person erickson; 25.04.2010

Обмен ключами Диффи-Хеллмана только для обмена ключами. Он не дает вам аутентификации (с кем вы разговариваете), для этого вам нужны сертификаты и PKI.

Итак, да, вы можете использовать шифрование, но вы не знаете, с кем разговариваете.

person Henri    schedule 27.10.2009

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

Вопрос в том:

  • Вы хотите вообще кем-нибудь зашифровать данные?
  • Вы хотите быть уверены, с кем разговариваете?

Как уже указывалось, SSL использует обмен ключами DH для установления сеансового ключа. Однако это также гарантирует, что программа на другом конце - это тот, кому вы доверяете (прямо или косвенно). Если вам не нужно беспокоиться о том, заслуживает ли другой человек доверия, вы можете просто использовать простой обмен ключами DH, а затем отправлять зашифрованные данные без сертификатов. Но вы не будете уверены, с кем говорите, если не подтвердите это - и сертификаты, используемые SSL и т. Д., Помогают с этой проверкой.

person Jonathan Leffler    schedule 27.10.2009