Почему корневые центры сертификации с сигнатурами SHA1 не представляют опасности

6450
Chris K

Взять, к примеру, веб-сайт Verisign, у которого есть корневой центр сертификации с хэш-подписью sha1. Я ошибаюсь, понимая, что это было одно из обнаружений коллизий, они могли выдать себя за корневой CA Verisign и использовать его для создания промежуточного и затем серверного сертификата, которому доверял бы браузер или ОС.

https://www.entrust.com/need-sha-2-signed-root-certificates/ сообщает:

Короче говоря, подпись корневого сертификата не проверяется, поскольку программное обеспечение напрямую доверяет открытому ключу корневого сертификата. Корневой сертификат является самоподписанным и не подписан другим объектом, которому предоставлены полномочия. Корневой сертификат получает полномочия через программу корневого сертификата, управляемую операционной системой или разработчиком браузера.

и ссылается на ссылку Google: https://security.googleblog.com/2014/09/gradually-sunsetting-sha-1.html

Примечание: подписи на основе SHA-1 для доверенных корневых сертификатов не являются проблемой, поскольку клиенты TLS доверяют им по своей идентичности, а не по подписи своего хэша

Предположим, я являюсь автором нового браузера - SuperUserBrowser. Как еще я могу поверить, что корневые сертификаты, которые я поставляю с моим браузером, являются реальными, кроме хэш-подписи?

Почему корневой ЦС с подписью SHA1 «не проблема»?

7
Проще говоря, хэши SHA-1 больше не защищены от атак грубой силы. Поскольку вы не предоставляете ссылку Google, я не могу ее комментировать, потому что лично я не вижу, чтобы Google начинал это в недавней документации. Если бы Google действительно так считал, у них не было бы заводов, которые бы отказывались от сертификатов SHA-1, когда дело доходит до Chrome. ** Любой сертификат, использующий сертификат SHA-1, является проблемой ** Ramhound 8 лет назад 0
[cURl] (https://www.bing.com/search?q=curl+certificate&qs=SC&pq=curl+certii&sc=8-11&sp=1&cvid=FD9CF6D8DA4E45429E34ED4FF72D911A&FORM=QBRE) для целей, которые вы описываете. Вы также в качестве браузера позволяете ОС определять, каким сертификатам доверять. Ramhound 8 лет назад 0
Связано: [как использовать curl для проверки того, был ли сертификат сайта отозван?] (Http://superuser.com/questions/742393/how-to-use-curl-to-verify-if-a-sites-certificate -Имеет-был-аннулирован) Ramhound 8 лет назад 0
@ramhound, добавил гугл ссылку. Примечание в нижней части статьи. Chris K 8 лет назад 0
Так что эта статья устарела в моем мнении. Это не соответствует тому, что Google в настоящее время делает с сертификатами SHA1. Неясно, если статья была недавно обновлена ​​в первом квартале 2015 года, с тех пор многое изменилось, и я знаю, что сертификаты SHA1 аннулируются Microsoft, что означает, что по крайней мере для корневых сертификатов Windows SHA1 действительно действуют. Я, честно говоря, не понимаю, «примечание», объяснение этого примечания, не появляется в статье. Заставляет меня задуматься, относится ли заметка к 2014 году и, таким образом, к ней не относится. Ramhound 8 лет назад 0
[Здесь] (https://security.googleblog.com/2015/12/an-update-on-sha-1-certificates-in.html) текущая позиция по сертификатам SHA1 от Google. Обратите внимание: «На этом этапе сайты, имеющие подпись на основе SHA-1 как часть цепочки сертификатов (не включая самозаверяющую подпись в корневом сертификате), вызовут фатальную сетевую ошибку. Это включает ** цепочки сертификатов которые заканчиваются локальным якорем доверия, а также теми, которые заканчиваются на общедоступном CA ** ", что означает, что общедоступные CA не могут быть SHA1, но означает, что ваши собственные самозаверяющие CA могут быть, потому что вы неявно доверяете себе, верно? Ramhound 8 лет назад 0
PSA: Пожалуйста, не создавайте браузер, который не использует хранилище сертификатов ОС. Есть много вещей, которые вы можете сделать неправильно в этом дизайне. Разрешить ОС, точнее пользователю, определять, каким сертификатам доверять. Используйте текущие методы для отображения пользователю, если есть проблема с сертификатом, потому что это хороший стюарт. Ramhound 8 лет назад 0
@ramhound, в отношении PSA, я бы не стал создавать такой браузер :-). Я поднял этот вопрос, потому что клиент может настроить свои собственные сертификаты, и обеспокоен тем, что Verisign все еще имеет подписанный корень SHA1. Chris K 8 лет назад 0
PSA основан на том факте, что использование Firefox собственного хранилища сертификатов раздражает. Это причина, по которой вы должны сделать аппаратное устройство доступным для Firefox, чтобы использовать его со смарт-картами. Ramhound 8 лет назад 0
Смотрите также http://security.stackexchange.com/questions/120301/sha-1-no-impact-to-root-certificate Arjan 8 лет назад 0

2 ответа на вопрос

8
Steffen Ullrich

Я ошибаюсь, понимая, что это было одно из обнаружений коллизий, они могли выдать себя за корневой CA Verisign и использовать его для создания промежуточного и затем серверного сертификата, которому доверял бы браузер или ОС.

Вы неправы.

Что касается безопасности самой подписи:
Для подписи сертификата используется проверка эмитента этого сертификата для построения цепочки доверия. Поскольку корневой ЦС является доверенным концом цепочки доверия, поскольку он является предварительно доверенным (т. Е. Хранится в хранилище доверенных сертификатов ОС), эмитент корневого ЦС не нуждается в проверке, и поэтому подпись корневого ЦС делает не важно.

А для использования корневого ЦС, подписанного с использованием слабого алгоритма хеширования, для создания новых сертификатов:
чтобы подписать другой сертификат (т. Е. Создать листовой или промежуточный сертификат), вам потребуется личный ключ ЦС. Закрытый ключ, соответствующий открытому ключу сертификата, не может быть получен из подписи, выпущенной издателем сертификата, даже если сертификат является самоподписанным (т.е. подписан с использованием закрытого ключа, который пытается получить).

Подписание сертификата выполняется сначала путем хэширования основной части сертификата с использованием необратимого алгоритма хеширования, а затем «шифрованием» его с помощью закрытого ключа эмитента. Чтобы получить закрытый ключ, необходимый для подписи нового сертификата, вам нужно будет атаковать шифрование (RSA или ECC), то есть найти ключ, который приводит к той же подписи при «шифровании» хешированного сертификата. Но поскольку подпись RSA / ECC еще не нарушена, вы не можете извлечь закрытый ключ и, следовательно, не можете генерировать новые сертификаты, используя этот ключ. Другой способ получить новый сертификат, подписанный этим сертификатом, состоит в создании сертификата, который приводит к тому же хеш-значению. Но в то время как SHA-1 уязвим к атакам столкновений (т.е. найти два входа с одинаковым выходом) он (в отличие от MD5) в настоящее время не уязвим для атаки прообразом (найти вход для данного вывода), который вам понадобится. Это означает, что этот вектор атаки тоже дает сбой.

Таким образом, из корневого центра сертификации я на самом деле не использую подпись для проверки, я использую фактический зашифрованный в нем ключ RSA2048 для проверки промежуточной и конечной точки? Подпись на промежуточной / конечной точке является дешевым вычислительным способом проверки доверия? Chris K 8 лет назад 0
@darthcoder:> Да, это правильно: для проверки подписи на листовом / промежуточном сертификате вы используете открытый ключ (RSA, ECC) из сертификата эмитента. Для создания действительной подписи вам необходимо иметь закрытый ключ эмитента. Steffen Ullrich 8 лет назад 0
Таким образом, ключ публикации в промежуточном звене проверяет подпись конечной точки, ключ публикации в корневом каталоге проверяет подпись промежуточного звена, да? Chris K 8 лет назад 0
@darthcoder: точно Steffen Ullrich 8 лет назад 0
Что такое ключ публикации промежуточного уровня, используемый для вычисления подписи конечной точки? Я использую основы открытого / закрытого ключа, но думаю, что теряю его из-за утверждения доверия - какие части конечного ключа я использую для вычисления этого хэша, используя открытый ключ промежуточного звена в качестве некоторого производного компонента для этого ? Я благодарю вас за то, что вы мирились с моими вопросами и помогали! Chris K 8 лет назад 0
@darthcoder: я думаю, вам нужен более обширный обзор по теме. См. [Wikipedia: цепочка доверия] (https://en.wikipedia.org/wiki/Chain_of_trust) или [security.se: как работает процесс проверки цифровой подписи] (http://security.stackexchange.com/questions/8034 / как-цифровая подпись проверочной-процесс-работа). security.stackexchange.com также лучший сайт, чтобы задавать такие вопросы. Steffen Ullrich 8 лет назад 0
msgstr "сначала шифрование [...], а затем хэширование результата [...]". действительно ли это наоборот, сначала вы запускаете алгоритм хэширования на сертификате, а затем шифруете хеш с помощью своего закрытого ключа? 7 лет назад 0
@ Tlen: конечно, ты прав, я исправил это. Спасибо за вклад. Steffen Ullrich 7 лет назад 0
но теперь остальная часть абзаца все еще основана на этой неверной предпосылке. Атакующий хочет создать коллизию, ему нужно создать сертификат, который выдает тот же хэш, что и подлинный сертификат. Затем он будет утверждать, что его сертификат был подписан с закрытым ключом эмитента. 7 лет назад 0
@Tlen: я переделал эту часть. Надеюсь, сейчас правильно. Еще раз спасибо. Steffen Ullrich 7 лет назад 0
Я бы также добавил еще один вектор атаки. Атакующий подготовит два сертификата с одинаковым хешем, один выглядит невинно, а второй претендует на право собственности на какой-либо банковский сайт. Сначала он подаст на утверждение и использует подпись со вторым. 7 лет назад 0
@ Tlen: Я не думаю, что эта атака сработает. Злоумышленник имеет только контроль над CSR, но не сертификат. CA выберет соответствующие поля из CSR, а также добавит новые поля, такие как серийный номер, начало, конец и т. Д. Все они изменяют хэш. И даже если злоумышленнику удастся создать два сертификата с одинаковым хешем, все равно потребуется, чтобы ЦС действительно подписал с помощью SHA-1, чего ЦС сегодня обычно не делает. Кроме того, эта атака не зависит от подписи СА самим SHA-1, то есть не связана с вопросом. Steffen Ullrich 7 лет назад 0
2
Alexander Higgins

Я ошибаюсь, понимая, что это было одно из обнаружений коллизий, они могли выдать себя за корневой CA Verisign и использовать его для создания промежуточного и затем серверного сертификата, которому доверял бы браузер или ОС.

Вы в основном ошибаетесь из-за возможности олицетворения корневого ЦС с помощью всего лишь коллизии хешей, поскольку для успешной атаки на сертификат корневого ЦС потребуется больше шагов, как подробно объясняется ниже.

Однако, как описано ниже, вы можете успешно олицетворять промежуточный CA, используя только коллизию хешей.

Короче говоря, клиент проверяет, соответствует ли зашифрованная подпись RSA на сертификате зашифрованной подписи RSA, которая будет сгенерирована с использованием открытого ключа ЦС для подписи хеша байтов сертификата TBS в указанном сертификате. Хотя открытый ключ CA можно использовать для проверки зашифрованной подписи RSA хэша сертификата TBS, необходимо знать закрытый ключ CA, чтобы сгенерировать подпись, позволяющую выдавать себя за CA.

Предположим, вы смогли сгенерировать такое хеш-коллизирование части TBS корневого сертификата CA, изменив его так, чтобы он содержал открытый ключ, для которого вы знаете закрытый ключ, проблема в том, что ваш модифицированный сертификат CA будет содержать другой открытый ключ, чем открытый ключ. Действительный сертификат CA и все клиенты, проверяющие сертификат, подписанный CA, будут иметь локально установленную копию реального сертификата CA. При проверке подписанного сертификата клиент извлекает отпечаток или подпись подписывающего лица из подписанного сертификата и извлекает открытый ключ своей локальной копии этого сертификата при попытке проверить подпись сертификата, подписанного этим СА.

Поэтому, чтобы выдать себя за корневой CA и сгенерировать зашифрованную подпись RSA, клиент будет доверять, прежде всего вам нужно найти коллизию части TBS сертификата корневого CA из сгенерированного вами сертификата TBS, который содержит общедоступный, для которого вы знаете частный ключ. Вам также необходимо найти такое столкновение, которое проходит проверку подписи RSA с использованием открытого ключа CA. На этом этапе у вас будет поддельный сертификат с коллизией хэша SHA1 и коллизией подписи RSA. Если каким-то образом вы выполнили все это, вам, наконец, нужно обмануть клиента, чтобы он извлекал ваш поддельный сертификат при поиске сертификата корневого ЦС, а не извлекал их локальную копию сертификата корневого ЦС.

Почти во всех мыслимых сценариях, в которых вы могли бы выполнить все эти вещи, были бы гораздо более эффективные возможности атаки, которые не требовали необходимости сначала находить хеш-коллизию SHA1 сертификата, который содержит известный вам закрытый ключ, который также генерирует RSA коллизия зашифрованных подписей, которые затем должны обмануть клиента, чтобы использовать его для проверки подписи, вместо того, чтобы использовать сертификат подлинного корневого ЦС, который, учитывая тот факт, что клиент ему доверяет, будет храниться локально на клиенте.

Вместо этого более вероятной атакой будет обнаружение хэш-конфликта сертификата промежуточного ЦС, с помощью которого вы можете использовать олицетворение промежуточного ЦС для подписи сертификатов. Эта атака более вероятна по двум причинам: во-первых, вы можете легко заставить клиента загрузить сертификат промежуточного ЦС, а во-вторых, коллизия хеш-кода будет проверяться по зашифрованной подписи доверенного ЦС RSA, поэтому существует необходимость попытаться обмануть клиента. доверять CA, который подписал сертификат.

Если клиенту предоставляется сертификат с веб-сайта, подписанного посредником ЦС, для которого у него нет локальной копии, он попытается загрузить ЦС посредника с веб-сайта, который представил указанный билет, с веб-сайта, который представил сертификат в первое место. Напоминая, что клиент возьмет хэш части TBS сертификата этого посредника и затем проверит, что зашифрованная подпись RSA на этом сертификате действительно была подписана с использованием открытого ключа локально доверенного CA или цепочки CA, которая ведет к локально доверенному CA успешная атака теперь упрощена до генерации коллизии хэшей части сертификата ЦС действительного посредника.

Однажды можно заменить открытый ключ сертификата проверяемого промежуточного ЦС открытым ключом, для которого известен закрытый ключ, а затем изменить другие байты по мере необходимости, чтобы сгенерировать коллизию хеша с проверяемым сертификатом. Этот этот измененный сертификат может затем использоваться для подписи других сертификатов. Такие подписанные сертификаты могут, например, быть установлены на веб-сервере вместе с этим модифицированным промежуточным сертификатом. Когда клиент получает сертификат, он считывает отпечаток CA, который его подписал. Если у клиента не установлен локальный сертификат этого посредника, он загрузит сертификат с веб-сайта и получит сертификат, который он проверяет. Затем клиент сгенерирует хэш веб-сайта TBS. s сертификат и убедитесь, что он был подписан цифровой подписью с использованием открытого ключа в сертификате промежуточного ЦС, который он загрузил. Этот процесс является рекурсивным в том смысле, что он затем создает хэш части TBS загруженного промежуточного сертификата и считывает отпечаток CA, подписавшего промежуточный сертификат. Затем он выполнит поиск сертификата этого CA и проверит, что зашифрованная подпись RSA на промежуточном сертификате была сгенерирована с использованием открытого ключа выдающего CA, чтобы подписать хэш сертификата TBS в промежуточном сертификате. Поскольку промежуточный хэш сертификата TBS в промежуточном сертификате совпадает с хешем исходного сертификата посредника, а подпись также совпадает с подписью оригинальной подписи посредника, наш модифицированный CA посредника '' Сертификат будет подтвержден. Клиент завершит процесс рекурсивно, пока не найдет сертификат, выданный ЦС, которому он доверяет, и проверка точки успешно завершена, и мы успешно выделили себя за промежуточного ЦС.

NIST и АНБ предупредили, что

«SHA-1 нельзя доверять после января 2016 года из-за растущей практичности того, что хорошо финансируемый злоумышленник или правительство могут обнаружить коллизию хеш-кода SHA-1, позволяющую им олицетворять любой веб-сайт SSL», и Microsoft и Google начали предупреждать год позже соединений, которые используют SHA-1.

http://windowsitpro.com/security/your-organization-using-sha-1-ssl-certificates

Важно, чтобы цепочка сертификатов была зашифрована сертификатами SHA-2. (Цепочка сертификатов состоит из всех сертификатов, необходимых для сертификации конечного сертификата.) Это означает, что любые промежуточные сертификаты должны также использовать SHA-2 после 1 января 2017 года. Как правило, ваш ЦС предоставляет промежуточный и корневой сертификаты ЦС, когда они предоставляют сертификат SHA-2. Иногда они предоставляют ссылку для загрузки цепочки сертификатов. Важно, чтобы вы обновили эту цепочку сертификатами SHA-2. В противном случае Windows может не доверять вашему новому сертификату SHA-2.

Корневые сертификаты - это отдельная история. На самом деле это могут быть сертификаты SHA-1, поскольку Windows неявно доверяет этим сертификатам, поскольку ОС напрямую доверяет открытому ключу корневого сертификата. Корневой сертификат является самозаверяющим и не подписывается другим лицом, которому предоставлены полномочия.

По той же причине любой самозаверяющий сертификат может использовать алгоритм SHA-1. Например, Microsoft Exchange Server генерирует самозаверяющие сертификаты SHA-1 во время установки. Эти сертификаты освобождены от новой политики SHA-2, поскольку они не связаны с ЦС. Я ожидаю, однако, что будущие выпуски Exchange будут использовать SHA-2 в самозаверяющих сертификатах.