Я предполагаю многое о протоколе, который не является явным в вопросе. Я заявляю об этом во втором разделе этого ответа. Также я не буду делать свои аргументы слишком подробными.
Желаемая страховка есть
(участники) уверены, что другой участвовал в протоколе с ними
но я удалю с ними, поскольку это неясно, и я не вижу точного определения, которому может соответствовать крипто (человек посередине всегда может передавать сообщения без изменений). я заменю его на с момента запуска протокола, который не следует путать с гораздо более сильным так, как обычно идет протокол.
На шаге 1 $N_A$ был случайно выбран $А$ и зашифровано под $пк(Б)$, как часть открытого текста $\{N_A,A\}_{pk(B)}$. Таким образом, только $А$ или какая-то сущность, обладающая некоторой степенью способности расшифровывать $\{N_A,A\}_{pk(B)}$, то есть только $В$, может знать что-нибудь о $N_A$ рядом с его длиной. Таким образом, когда по завершении шага 2 $А$ получает что-то, что расшифровывает $N_A$, и они знают, что не использовали $N_A$ для другой цели, кроме генерации сообщения шага 1, они уверены, что $В$ участвовал в протоколе. Я не буду делать это заверение количественным, оставив его для другого направления.
На шаге 2 $N_B$ был случайно выбран $В$ и зашифровано под $пк(А)$, как часть открытого текста $\{N_B,N_A\}_{пк(А)}$. Таким образом, только $В$ или объект, обладающий некоторой степенью способности расшифровывать $\{N_B,N_A\}_{пк(А)}$, то есть только $А$, может знать что-нибудь о $N_B$ рядом с его длиной. Предполагая
 (а) хеш — это случайный оракул с выходной шириной $k_H$,
(б) $N_B$ был выбран равномерно случайным образом и имеет ширину $k_N$,
 (c) любой противник имеет преимущество, ограниченное $\эпсилон$ против шифрования,
затем указанный противник как вероятность, ограниченная сверху $2^{-k_H}+2^{-k_N}+\эпсилон$ чтобы точно найти значение хеша шага 3. Таким образом, когда по завершении шага 3 $В$ находит такое значение для хэша, который они пересчитывают, и они знают, что не использовали $N_B$ для другой цели, кроме генерации сообщения шага 2, они уверены, что $А$ участвовал в протоколе.
Если это рассуждение верно, шаг 3 можно упростить до $A\стрелка вправо B:\ решетка (N_B)$. Если нет, то я хочу знать, почему! Это не следует рассматривать как предложение сделать это упрощение: включение идентификаторов в то, что хешируется, может только помочь, и я смутно вижу, что это может заблокировать некоторые преднамеренные изменения протокола, но не такие, которые нарушают гарантии безопасности, как я повторил. Это.
Частичный список предположений, не указанных в вопросе
- Позднее добавление: общедоступные ключи известны и доверительны до запуска протокола.
- Позднее добавление: шифр безопасен для IND-CCA2. Поскольку я не уверен в том, сможем ли мы обойтись меньшим имуществом, я предпочел бы ошибиться на всякий случай.
- Как часто не указывается при анализе протокола, получатели сообщений
- попытаться расшифровать и прервать, если это не удается (как это делают многие шифры IND-CCA2)
- анализировать расшифрованные сообщения в соответствии с соглашением, изложенным для их генерации, и прерывать, если это не удается
- проверяйте полученные значения на соответствие их ожидаемому значению, если они известны из предыдущего шага или могут быть вычислены иным образом (как это происходит для хэша шага 3 на $В$ сторона) и прервать при отсутствии совпадений. Не кажется необходимым, чтобы такое сравнение производилось за постоянное время.
- или/и повторно использовать указанное значение для переменных с тем же именем на следующих шагах.
- В открытом тексте зашифрованных сообщений знак запятой символизирует форму конкатенации с условием, что из результата остается возможность разделения в точке, где произошла конкатенация, например. потому что одно из двух объединенных сообщений имеет фиксированный размер. Это не кажется необходимым для знака запятой, используемого в сообщении, хешированном на шаге 3.
- В сообщениях, $А$ и $В$ являются личности одноименных участников.
- Объекты используют свои закрытые ключи только для расшифровки получаемых ими сообщений.
- После шага 1, $В$ решает, какой открытый ключ они используют для шифрования на шаге 2 и какому получателю отправить на этом шаге, на основе второй части $А$ расшифрованного сообщения шага 1, и прервать, если они не знают соответствующий открытый ключ. Это не обязательно для безопасности протокола, как указано, они проверяют, что эта вторая часть не является их собственной личностью.
- Если участники пытаются установить несколько одновременных подключений, как это обычно делают серверы, предполагается, что они сохраняют отдельные переменные для каждого экземпляра протокола. Я не вижу причин, по которым не было бы нормально, если бы множественные попытки подключения, в которые вовлечена сущность, были бы в потенциально разных направлениях.
- Я игнорирую побочные каналы, которые еще не обсуждались, атаки сбоев и ошибки реализации.