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

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

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

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

0
Usman Masood 23 Июн 2009 в 14:33

6 ответов

Лучший ответ

Не надо.

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

2
Tobias 23 Июн 2009 в 18:39

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

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

3
Thilo 23 Июн 2009 в 10:38

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

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

1
Anton Tykhyy 23 Июн 2009 в 16:59

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

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

1
Patrick 23 Июн 2009 в 18:50

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

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

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

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

1
Gab Royer 23 Июн 2009 в 19:08

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

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

0
markus 23 Июн 2009 в 18:47