Не понимаю
Oct. 6th, 2010 02:18 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Почему такая простая концепция, как X.509 PKI никак не укладывается в голове большинства людей.
Даже профессиональных программистов.
Казалось бы чего проще - есть понятие электронной подписи:
Есть пара взаимосвязанных последовательностей байт - секретный ключ и открытый. Открытый по секретному сгенерировать легко, наоборот - практически невозможно.
Есть некий черный ящик, в который человек может запустить сообщение и секретный ключ и получить на выходе некоторую последовательность байт, которую без наличия данного секретного ключа никак из сообщения не получить.
И есть второй черный ящик, куда пихается сообщение, подпись, и открытый ключ, и на выходе получается вывод - выработана подпись тем секретным ключом, открытую половинку которого мы пихнули в ящик, или не тем.
Очевидно, что то, что подпись выработана на данном ключе, ничего не говорит нам о том, какой именно человек или какой именно компьютер ее выработал. Соответсвенено появляется понятие доверия ключу. Поскольку собрать открытые ключи всех, чью подпись потребуется проверить заранее и надежным способом - нереально, появлется PKI, public key infrasturcture - способ получить открытый ключ кого надо (или открытый ключ, которым подписано данное сообщение) и убедиться что это именно ключ данного конкретного персонажда. Обычно для этого комбинация из ключа и данных о ее владельце подписывается кем-то, чьему ключу мы уже доверяем (например потому, что ему доверяет поставщик нашей операционной системы и включил его сертификат в дистрибутив). Такой электронный документ называется сертификатом.
Очевидно, что самоподписанный сертификат не удостоверяет ничего, кроме того, что с момента как владелец ключа его подписал, никто его не редактировал. То что владелец ключа - именно тот, чье имя написано в сертификате - ничего не значит. Вот возьму и сделаю себе самоподписанный сертификат на имя Рене де Карт. От этого я изобретателем прямоугольных координат не стану.
Очевидно, что когда мы хотим установить защищенное соединение по TLS, мы должны убедиться что мы устанавливаем соединение именно с тем, с кем хотели. Потому что в противном случае сколь угодно сильное шифрование бесполезно. "Человек посередине" легко перехватит наш пароль, потому что именно ему-то мы его и пошлем, из-за того, что не проверили что он не является нашим сервером.
И ведь создать внутрикорпоративный удостоверяющий центр чтобы выдать пять сертификатов на свои сервера, и выложить сертификат этого УЦ, чтобы пользователи его себе установили не просто, а очень просто.
Такое впечатление, что 90% тех, кто пользуется TLS и электронной почты защита не нужна. И даже security theater не нужен. Потому что свежий firefox такой театр с security exceptions устраивает, что можно было бы задуматься. Нет, продолжают выполнять чисто ритуальные действия по включению tls с самоподписанными сертификатами (или еще смешнее - создают честный УЦ, а его сертификат не распространяют).
Даже профессиональных программистов.
Казалось бы чего проще - есть понятие электронной подписи:
Есть пара взаимосвязанных последовательностей байт - секретный ключ и открытый. Открытый по секретному сгенерировать легко, наоборот - практически невозможно.
Есть некий черный ящик, в который человек может запустить сообщение и секретный ключ и получить на выходе некоторую последовательность байт, которую без наличия данного секретного ключа никак из сообщения не получить.
И есть второй черный ящик, куда пихается сообщение, подпись, и открытый ключ, и на выходе получается вывод - выработана подпись тем секретным ключом, открытую половинку которого мы пихнули в ящик, или не тем.
Очевидно, что то, что подпись выработана на данном ключе, ничего не говорит нам о том, какой именно человек или какой именно компьютер ее выработал. Соответсвенено появляется понятие доверия ключу. Поскольку собрать открытые ключи всех, чью подпись потребуется проверить заранее и надежным способом - нереально, появлется PKI, public key infrasturcture - способ получить открытый ключ кого надо (или открытый ключ, которым подписано данное сообщение) и убедиться что это именно ключ данного конкретного персонажда. Обычно для этого комбинация из ключа и данных о ее владельце подписывается кем-то, чьему ключу мы уже доверяем (например потому, что ему доверяет поставщик нашей операционной системы и включил его сертификат в дистрибутив). Такой электронный документ называется сертификатом.
Очевидно, что самоподписанный сертификат не удостоверяет ничего, кроме того, что с момента как владелец ключа его подписал, никто его не редактировал. То что владелец ключа - именно тот, чье имя написано в сертификате - ничего не значит. Вот возьму и сделаю себе самоподписанный сертификат на имя Рене де Карт. От этого я изобретателем прямоугольных координат не стану.
Очевидно, что когда мы хотим установить защищенное соединение по TLS, мы должны убедиться что мы устанавливаем соединение именно с тем, с кем хотели. Потому что в противном случае сколь угодно сильное шифрование бесполезно. "Человек посередине" легко перехватит наш пароль, потому что именно ему-то мы его и пошлем, из-за того, что не проверили что он не является нашим сервером.
И ведь создать внутрикорпоративный удостоверяющий центр чтобы выдать пять сертификатов на свои сервера, и выложить сертификат этого УЦ, чтобы пользователи его себе установили не просто, а очень просто.
Такое впечатление, что 90% тех, кто пользуется TLS и электронной почты защита не нужна. И даже security theater не нужен. Потому что свежий firefox такой театр с security exceptions устраивает, что можно было бы задуматься. Нет, продолжают выполнять чисто ритуальные действия по включению tls с самоподписанными сертификатами (или еще смешнее - создают честный УЦ, а его сертификат не распространяют).
no subject
Date: 2010-10-06 11:10 am (UTC)Смысл в разнесенности по времени событий установки сертификата УЦ и доступа к защищенному ресурсу. Злоумышленник, как правило, не может НЕПРЕРЫВНО сидеть и контролировать ВСЕ протоколы на предмет не всплывет ли где-нибудь в IMAP или обычном HTTP фингерпринт этого сертификата УЦ.
Ну и для особых параноиков должна быть предусмотрена возможность сверить фингерпринт по телефону.
no subject
Date: 2010-10-06 11:56 am (UTC)для самых параноидальных параноиков нужна ещё возможность сверить номер телефона для проверки фингерпринта! Хотя телефоны - они такие, можно и по правильному номеру позвонить неправильному человеку... Лучше всего, конечно, фингерпринт приходить сверять лично в офис, с распечаткой. Но ведь и адрес офиса придётся сверить с чем-то. Предлагаю сверять с адресом на сайте, по https :-)
Агащазблин!
Date: 2010-10-06 12:05 pm (UTC)Re: Агащазблин!
Date: 2010-10-06 12:07 pm (UTC)Re: Агащазблин!
Date: 2010-10-06 12:20 pm (UTC)Re: Агащазблин!
Date: 2010-10-06 12:10 pm (UTC)Re: Агащазблин!
Date: 2010-10-06 01:53 pm (UTC)То есть разница для злоумышленника только в том, что клиента, у которого с изрядными шансами уже есть правильный сертификат сайта, надо пропустить, а не обработать.
Re: Агащазблин!
Date: 2010-10-06 01:59 pm (UTC)А для сайтов, где первый заход останется единственным, существует startssl.com. domain validated и email validated сертификаты даром за пять минут.
Для малопосещаемых публичных сайтов действительно не имеет смысла связываться с собственным УЦ.
Теперь вот я напряженно думаю, к какой категории относится https://www.wagner.pp.ru - это внутрисемейный интранет - и тогда надо продолжать пользоваться собственным УЦ, или это таки низкопосещаемый публичный сайт, и лучше поставить сертификат от startssl.com. Вот на jabber-сервер, похоже, надо ставить сертификат от startssl.com - тогда encrypted s2s с чужими серверами работать будет.
Re: Агащазблин!
Date: 2010-10-06 02:13 pm (UTC)Дык эта, разница и в этом случае будет существенна только в случае zero-click против one-click решения. А разницу между "установить сертификат УЦ" и "добавить исключение" я с точки зрения пользователя не очень вижу. Тех ресурсов-то тоже в норме одна штука. Ну, две...
Во-во. Такая, в общем, простая и достаточно типичная задача у тебя самого, специалиста по этому делу, вызывает задумчивость. Чего ж ты хочешь от тех, кто еще не успел на этом съесть собаку?