Мой вопрос касается сертификатов конкретно в ssl, но я думаю, что вопросы должны относиться ко всем сертификатам. Я включил процедуру SSL для ясности.
В SSL это, как я понимаю, процедура:
1) Клиент
- отправляет поддерживаемые криптоалгоритмы
- отправляет клиенту nonce
2) Сервер
- выбирает (и отправляет)
- симметричный алгоритм
- алгоритм открытого ключа
- алгоритм MAC
- отправляет сертификат
- отправляет одноразовый сервер
3) Клиент
- проверяет сертификат
- Генерирует секретный ключ перед мастером (pms)
- шифрует с сервера открытый ключ и отправляет
4) Клиент и сервер
- вычислить главный секрет (MS) из PMS и одноразовых номеров
- PMS нарезанный, чтобы генерировать два шифрования и два ключа Mac
5) Клиент
- отправляет макинтош всех рукопожатий (чтобы убедиться, что они не были ранее модифицированы)
6) Сервер
- отправляет макинтош всех рукопожатий
Вопрос
Что мешает человеку в средней атаке произойти на втором шаге? Почему человек, находящийся посередине, не может сказать «трудно», захватить сертификат, отправленный сервером, и изменить в нем открытый ключ (на что-то, к чему у него есть закрытый ключ).
Я предполагаю, что сертификат как-то зашифрован.
Однако сервер не может зашифровать сертификат, поскольку у клиента еще нет открытого ключа. Когда сервер получает ключ от органа (например, veri-sign), будет ли ключ предварительно зашифрован с использованием открытого ключа verisign? Я думаю, что это должно работать, потому что все веб-браузеры должны иметь открытые ключи большинства органов власти.