Вопрос по – SSL-аутентификация путем сравнения сертификата по отпечатку пальца?

14

Вопрос для всех экспертов по SSL там:

У нас есть встроенное устройство с небольшим веб-сервером, и мы можем установить на него наши собственные самозаверяющие сертификаты SSL. Клиент написан на .NET (но это не имеет большого значения).

Как я могу аутентифицировать устройство в .NET? Достаточно лиcompare the fingerprint сертификатаagainst a known entry в базе данных?

Насколько я понимаю, отпечаток пальца - это хэш всего сертификата, включая открытый ключ. Устройство, имитирующее мое устройство, может, конечно, отправить тот же открытый сертификат, но оно не может знать закрытый ключ, верно?

Или мне нужно создать собственную цепочку доверия, создать собственный корневой сертификат CA, подписать сертификат веб-сервера и установить его на клиенте?

Ваш Ответ

3   ответа
4

То, что вы предлагаете, в принципе хорошо. Например, используется во времяключевые подписи сторон, Здесь участники обычно просто обмениваются своим именем и отпечатками пальцев своих открытых ключей и удостоверяются, что человек на вечеринке действительно является тем, кем он / она утверждает. Просто проверить отпечатки пальцев гораздо проще, чем проверить длинный открытый ключ.

Другим примером является так называемыйсамосертифицирующаяся файловая система, И здесь по защищенному каналу обмениваются только хэши открытых ключей. (Т.е. эти хеши встроены в URL-адреса.) В этой схеме открытые ключи не должны отправляться надежно. Получатель должен только проверить, что хэш открытых ключей соответствует хешам, встроенным в URL. Конечно, получатель также должен убедиться, что эти URL-адреса поступают из надежного источника.

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

Масштабируемость действительно хорошая причина для PKI, спасибо! chris166
Хороший способ провести аналогию между проверкой отпечатков пальцев и подписыванием ключей. Сопротивление хэшей SHA-1 столкновениям играет главную роль в обоих случаях.
1

Short:

Теоретически, вы делаете именно то, что делает для вас центр сертификации. Так должно быть хорошо.

Longer:

Когда центр сертификации подписывает ваш открытый ключ / сертификат / запрос сертификата, он не подписывает полные данные сертификата. Но только вычисленное значение хеша для всех данных сертификата. Это держит подпись маленькой.

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

Как заявили другие парни, вы должны обязательно использовать безопасный / безопасный алгоритм хеширования. SHA-1 больше не является безопасным.

more detailed informations to this topic:

3

Таким же образом, вы не должны и не должны считать два объекта равными только потому, что их хеш-коды совпадают, вы не должны считать сертификат подлинным только потому, что его отпечаток пальца появляется в списке «известных отпечатков пальцев» сертификата. ,

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

@Accipitridae: Хороший вопрос. +1. Будь мы прокляты, если мы это сделаем, будь мы прокляты, если мы этого не сделаем, и я полагаю, что нелегко обойти слабости. Но ведутся работы по замене старых алгоритмов. Увидетьcsrc.nist.gov/groups/ST/hash/index.html
А? Криптографические хеш-функции, такие как SHA1, были разработаны таким образом, что невозможно найти два входа, которые хэшируют на один и тот же выход. Следовательно, если их хеш совпадает, то можно с уверенностью предположить, что входные данные равны. Следовательно, также можно предположить, что мотивированный злоумышленник НЕ может создать два сертификата с совпадающими хешами (по крайней мере, пока хеш не сломан). Более того, одной проверки самозаверяющего сертификата недостаточно. Вы должны быть в состоянии доверять ключу подписи.
Столкновенияare факт жизни с хэш-алгоритмами. И несмотря на то, что некоторые из этих алгоритмов были разработаны с наилучшими намерениями, MD5 уже был свергнут, и было показано, что SHA-1 также имеет слабые стороны. Увидетьcrn.com/security/212700354 а такжеrsa.com/rsalabs/node.asp?id=2834, Я утверждаю, что лучше проверять сертификат тщательно, а не полагаться только на отпечатки пальцев.
@Accipitridae: об этом я тоже думал. chris166
... и чтобы проверить достоверность подписи, вы сначала хешируете свои данные, а затем проверяете, что это то же хеш-значение, которое было подписано. Следовательно, если вы проверяете цифровые подписи, тогда вы действительно полагаетесь на сопротивление коллизии вашего алгоритма хеширования.

Похожие вопросы