Открытый ключ или алгоритм обмена ключами Диффи-Хеллмана - PullRequest
0 голосов
/ 23 июня 2009

Рассмотрим сценарий и клиент-сервер, и у вас есть два варианта:

  1. Вы можете включить открытый ключ сервера в клиент и выполните обмен.
  2. Вы можете использовать Диффи Хеллман KeyExchange Алгоритм рукопожатия а затем обменяйте ключ.

Какой из них более безопасный? также, если открытый ключ будет приходить из магазина, скажем, из магазина клиента CA? будет ли он более безопасным, чем привязывать его в клиентском приложении?

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

Ответы [ 6 ]

3 голосов
/ 23 июня 2009

С (только) обменом ключами DH клиент не может знать, что это действительно тот сервер, с которым он разговаривает.

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

2 голосов
/ 23 июня 2009

Не.

Если вам нужно решить такую ​​проблему в рабочем коде, попросите эксперта сделать это. В криптографии так много тонких ловушек, что есть вероятность, что вы станете обманщиком.

1 голос
/ 23 июня 2009

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

Если у вас гораздо больше клиентов, чем серверов, вы можете реализовать алгоритм с открытым ключом, чтобы уменьшить обмен между ними.

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

Диффи-Хеллман Метод согласования ключей

1 голос
/ 23 июня 2009

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

Диффи-Хеллман был бы лучше, но, как сказал Тобиас, если вы бросите свой, вы, вероятно, оставите атаку.

1 голос
/ 23 июня 2009

Встроенный ключ можно заменить. Вообще говоря, если машина клиента не защищена не программными средствами, вы не можете предотвратить взлом вашего клиента со стороны достаточно мотивированного злоумышленника. Даже TPM - это без панацеи . Вопрос становится одним из компромиссов: человеко-часы злоумышленников против полезности (прибыль, слава и т. Д.). Единственный действительно безопасный способ лицензировать программу, которая выполняет вычисления, - это выполнять все лицензируемые вычисления на сервере, который вы физически контролируете; https или SSL можно сделать достаточно безопасными, выбрав подходящие длины ключей, схемы хеширования, шифры и т. Д. (Предмет, о котором я мало знаю).

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

0 голосов
/ 23 июня 2009

Как уже упоминал Тобиас, лучше, если вы не используете свой собственный протокол. Я бы предложил использовать реализацию TLS или, по крайней мере, смоделировать ваш протокол на TLS. TLS предоставляет опции для обмена ключами как по Диффи-Хеллману, так и по сертификатам.

Взгляните на: http://en.wikipedia.org/wiki/Secure_Sockets_Layer

...