Возможно, существует серьезный недостаток аутентификации, да, в зависимости от реализации. Если Боб - это сервер, а Алиса - клиент, а Мэллори - злонамеренный подслушиватель:
Если Алиса генерирует случайное число, объединяет это с ее именем пользователя, зашифровывает его своим личным ключом и отправляет на сервер. Сервер расшифровывает и проверяет открытый ключ Алисы. Без сервера, сохраняющего случайное число, это восприимчиво к повторным атакам - Мэллори мог просто прослушать, сохранить блоки, которые Алиса отправляет на сервер, и просто повторить их позже. Без их сохранения сервер не был бы более мудрее.
Чтобы защитить сервер от этого, серверу пришлось бы генерировать случайное число. Это также должно быть безопасным случайным числом, в противном случае Мэллори может предсказать или, по крайней мере, угадать, каким будет следующий номер.
Если Мэллори может перехватывать сообщения, то он может претендовать на роль Алисы - он перехватывает все сообщения и просто передает их, даже если сервер генерирует случайное число.
Алиса и Боб оба должны быть в состоянии доказать, что это был другой, кто обманул. Они также должны иметь возможность обнаруживать фальсификацию у Мэллори - для обеспечения подлинности сообщений протокол требует дополнительных слоев.
В настоящее время идет исследование, но, насколько мне известно, очень сложно аутентифицировать пользователя без доверенного центра сертификации, который также используется: открытые ключи могут быть известны всем, но любой злоумышленник может обменять свой собственный открытый ключ на другой, без обнаружения, если только доверительное управление не установлено через центр сертификации.
Кажется безопасным, если соединение с сервером уже закреплено, например, с помощью TLS. Тем не менее, поскольку это напрямую не связано с программированием, оно лучше подходит для [security.se] –
Я даже не вижу необходимости того, чтобы сайт был TLS защищен этим протоколом. Единственное, что можно понюхать, - это открытый ключ, который является общедоступным и подписанным, что также может быть общедоступным. – lmeunier
Он по-прежнему уязвим против злоумышленника «человек в середине», не проверяя открытый ключ сервера (доверительный корень). –