Имеется стандартный ассиметричный алгоритм шифрования (пусть будет RSA).
Вопрос касательно сертификации открытых ключей центром сертификации для организации end-to-end шифрования.
Вопрос - каким образом происходит сертификация и проверяется подпись?
Выдержка из Вики:
Сертификат открытого ключа выдаётся центром сертификации и состоит из таких полей как:
- сам открытый ключ владельца сертификата,
срок действия,
- имя эмитента (центра сертификации),
- имя владельца сертификата
- и, самой важной части, цифровой подписи.
Цифровая подпись гарантирует невозможность подделки сертификата. Она является результатом криптографической хеш-функции от данных сертификата, зашифрованным закрытым ключом центра сертификации.
Как я понял принцип работы:
Пользователь А генерирует открытый и закрытый ключи. Открытый ключ направляется центру сертификации. Он генерирует некий DTO примерно следующего вида:
{
"public_key": "здесь открытый, для которого и создаётся сертификат",
"sertification_center_name": "название центра сертификации",
"sertificate_owner_name": "имя владельца сертификата",
"sign": "MD5 хэш всех этих данных после того, как они были зашифрованы закрытым ключом центра сертификации"
Мы направляем данный сертификат собеседнику. Он расшифровывает подпись сертификата, после чего вычисляет хэш-функцию от всех его полей (за исключением самой подписи) и сравнивает хэши. Если они совпали - все ок, публичным ключом можно шифровать.
Все верно? Если да, то возникает вопрос: в чем здесь дополнительное обеспечение безопасности? Что мешает подменить не обычный отправляемый публичный ключ, а сам сертификат на сертификат другого ключа?