1

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

Я разрабатываю приложение Client-Server на C#, которое должно быть способным к аутентификации с помощью цифровых сертификатов и цифровых подписей. Я знаю, как проверить достоверность и целостность Подписи (с SignedCms.CheckSignature()), но как это аутентифицирует какую-либо из частей?

Например:

  1. клиент запрашивает сервер для цифровой подписи,
  2. Клиент получает подпись и проверяет его,
  3. Если проверка прошла успешно, по-прежнему.

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

Что мне не хватает?

ответ

1

Вам не хватает доверия к сертификату подписи.

Рассмотрите сертификаты SSL, у них есть путь подписи к корневому ЦС, которому доверяет Windows (или любая другая ОС). Если MITM представляет собой самоподписанный сертификат, или тот, который создается ненадежным CA, он отклоняется браузером и отображается предупреждение. Таким образом, сертификат доверяется только в том случае, если он выдается CA, который вам известен, или цепи до одного, который вы знаете.

Для самоподписанных сертификатов это становится более сложным, вам необходимо безопасно обменивать ключевой отпечаток, серийный номер или другой идентификатор константы и проверять, что ключ подписи на самом деле тот, который вы ожидаете, - одна из причин, по которой самоподписанные сертификаты обычно должны " t использоваться для публичных веб-сайтов или других служб.

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

(на самом деле она становится все более сложным, но вы получите точку, я надеюсь)

+0

Что делать, если человек в середине блокирует подпись, поступающую с сервера, и отправляет клиенту всю новую цифровую подпись с полностью действующим сертификатом, выданным доверенным ЦС? –

+0

Это становится более интересным. В SSL вы должны проверить имя сертификата, чтобы убедиться, что он обрабатывает адрес, к которому вы подключаетесь.Вы полагаетесь на SSL-сертификаты, гарантируя, что они проверили, что сертификат выдается лицу, которому принадлежит это полное доменное имя. А затем публикуются списки отзыва в случае, если это не так. В других сценариях вы будете искать имя машины и, возможно, отпечаток сертификата, который изменится или проведет проверку всей цепочки, что было бы иначе, если сертификат был выпущен другим ЦС. Сказал вам, я упростил это :) – blowdart

+0

Если я хорошо понял, аспекты, касающиеся среды, отличной от ssl, подразумевают, что клиент уже имеет правильную информацию о сервере (например, отпечаток пальца). Я мог только сказать, изменился ли он, если я уже правильный отпечаток отпечатка.) Что произойдет, если он впервые подключится к серверу, и нет никакой предыдущей доверенной информации для сравнения? –

1

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

+0

Что делать, если человек в середине блоков подписи, поступающих с сервера, и отправляет клиенту все новые цифровой подписи , с полностью действующим сертификатом, выданным доверенным ЦС? –

+0

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

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