Я пытаюсь лучше понять, как работает TLS. Я понимаю, что в обычном случае использования вам нужны различные случайные значения, сгенерированные и используемые при обмене ключами, чтобы предотвратить повторное использование какой-либо MITM предыдущей передачи для подделки сервера или клиента.
Однако давайте предположим некоторый вырожденный случай, когда есть один сервер, единственный открытый ключ которого уже известен его клиентам, а также различным злоумышленникам. В этом случае, я думаю, все, что, строго говоря, необходимо для выполнения безопасного обмена ключами, будет следующим:
- Клиент использует открытый ключ RSA сервера для шифрования случайного симметричного сеансового ключа.
- Клиент отправляет серверу зашифрованный сеансовый ключ
- Сервер расшифровывает ключ сеанса, используя закрытый ключ RSA сервера.
- Сервер использует сеансовый ключ для шифрования «готового» сообщения.
- Сервер отправляет клиенту зашифрованное «завершенное» сообщение
- Клиент использует сеансовый ключ для расшифровки «готового» сообщения.
- Клиент подтверждает, что сообщение «закончено», рукопожатие завершено
Таким образом, в этом упрощенном процессе единственным значением, изменяющимся в каждом сеансе, является сам ключ сеанса, поэтому случайный выбор предыдущего клиента или сервера не используется; и нет премастерного секрета, опять же только сеансовый ключ.
Это похоже на резкое упрощение вещей, но мне трудно понять, что я упускаю. Если основная цель обмена ключами состоит в том, чтобы убедиться, что сервер является единственным, кто получает ключ сеанса, это кажется безопасным. Доказательство от противного, снова отслеживая описанный выше процесс, но с точки зрения противника:
- У злоумышленника уже есть открытый ключ сервера, и он может зашифровать свой собственный симметричный сеансовый ключ для целей MITM.
- Злоумышленник может видеть зашифрованный сеансовый ключ от клиента, но не может его расшифровать; может отправить серверу свой собственный зашифрованный сеансовый ключ MITM
- Сервер расшифровывает сеансовый ключ MITM, не зная о его происхождении
- Сервер использует сеансовый ключ MITM для шифрования "готово"
- Сервер отправляет клиенту (фактически противнику) зашифрованное "готовое"
- Злоумышленник может расшифровать «готово», но не может повторно зашифровать и отправить клиенту с сеансовым ключом клиента, который злоумышленник не может расшифровать.
- В конечном итоге клиент никогда не получит правильно зашифрованное «готовое» ни от сервера, ни от злоумышленника.
Таким образом, кажется, что единственная потенциальная слабость здесь заключается в том, что сервер не может узнать, общается ли он с законным клиентом или противником, но, насколько я понимаю, аутентификация клиента никогда не рассматривалась с самого начала. Аутентификация сервера есть, но в данном случае это не проблема, так как есть только один сервер.
Итак, правильно ли я понимаю, что если бы кто-то использовал эту схему, противник не смог бы выполнить атаку MITM? Или как это победить?