Как двухстороннее асимметричное шифрование работает?

Скажите, что у нас есть Alice и Bob.

Alice отправляет Bob сообщение, которое она зашифровала с открытым ключом Bob's. Bob является единственным человеком, который может дешифровать его, с помощью его закрытого ключа. Но как он может быть уверен, что сообщение появилось от Alice?

Предположим, что он отвечает, шифруя его сообщение с помощью открытого ключа Alice. Только Alice может дешифровать сообщение. Но как она может быть уверена, что это было отправлено Bob?

Alice должна была бы добавить некоторый общедоступный хеш к своему сообщению, таким образом, боб может сказать, что "Это определенно прибыло от Alice?"

6
задан Amy 2 March 2010 в 16:08
поделиться

4 ответа

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

Проделайте обратную процедуру для Алисы, чтобы убедиться, что сообщение пришло от Боба.

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

5
ответ дан 8 December 2019 в 17:21
поделиться

Описанный вами сценарий действительно не обеспечивает подлинности. Поэтому и Алиса, и Боб не могут быть уверены в том, что они говорят друг с другом. Сценарий обеспечивает только конфиденциальность, но не секретность.

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

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

Описанный вами сценарий уязвим для так называемой атаки MITM (Man-in-the-middle) и не может быть решен только с помощью шифрования с открытым ключом.

9
ответ дан 8 December 2019 в 17:21
поделиться

Потому что вы делаете предположение, что закрытый ключ действительно "закрытый" - т.е. Алиса и Боб не оставляют свои USB-ключи подключенными к своей машине. когда они уходят с работы.

-1
ответ дан 8 December 2019 в 17:21
поделиться

То, о чем вы говорите, очень, очень, очень в общих чертах выглядит как еще одна реализация алгоритма асимметричного шифрования, найденная в структуре .Net.

.Net использует две ветви для асимметричного шифрования !!!

  1. RSA ** Grand Mac, папа используется для всех асимметричных целей.
  2. DSA ** больше относится к использованию и созданию цифровой подписи для проверки автора.

Оба являются абстрактными.

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

Вы говорите о варианте 2.

.Net предоставляет класс под названием DSACryptoServiceProvider, который позволяет вам помечать ваши данные значением, которое обычно называют сигнатурой.

Согласно официальному учебнику курса MS вот примерно, как это работает.

Data >>> Hash Alg >>> Hash Value >>>>>>>>> Asymm 'Alg >>>> Signature PVT.KEY отправителя >>>

Ниже показано, как Боб может проверить, действительно ли Алиса является отправителем.

Данные >>> Hash Alg >>> Hash Value || Расшифрованная подпись <<< Asymm 'Alg <<< Подпись <<< PUB отправителя.КЛЮЧ ? ==?

Как видите, Боб должен сравнить сгенерированный хэш и расшифрованную подпись , чтобы убедиться, что Алиса является отправителем. Класс DSACrypto 'имеет 4 метода, которые могут быть здесь использованы, но только два из них эффективны с точки зрения контекста. На данный момент это все, что Боб может сделать, если его открытый ключ не является открытым ключом Алисы, то, по сути, программное приложение должно остановить Боба, который не может двигаться дальше, поскольку Боб пытается использовать поддельный открытый ключ, когда пытаюсь общаться с Алисой. Это навязанные отношения и подчеркнутая важность открытого ключа. Подпись позволяет проверить владельца открытого ключа.

Вот почему? ::

Если у Боба есть открытый ключ Алисы, он может снова использовать тот же алгоритм для дешифрования зашифрованных данных с помощью методов .VerifyHash или VerifyData. Должно быть понятно, что они делают в этом контексте. Все это делается с использованием открытого ключа Алисы. Только Алиса может использовать методы SignHash и SignData, поскольку для них требуется закрытый ключ Алисы.

Как вы можете видеть выше, определенный уровень функциональности уже инкапсулирован внутри классов DSA и RSA CryptoServiceProvider. Все сводится к тому, насколько хорошо вы реализуете их для проверки Алисы как отправителя каждый раз, поскольку алгоритм DSA позволяет вам сертифицировать отправителя путем сопоставления сгенерированного вывода. Определенная подпись и хэш должны совпадать, если они совпадают, то, по сути, DSA предоставил вам определенный уровень конфиденциальности между Бобом и Алисой.

1
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: