Не понимаю
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 10:28 am (UTC)no subject
Date: 2010-10-06 10:29 am (UTC)Это не всегда очевидно. Более того, в TLS может работать вообще без сертификатов (ephemeral key exchange).
no subject
Date: 2010-10-06 10:30 am (UTC)Совершенно верное впечатление. Я думаю, что даже 99%. Или даже 99.9%. Именно не нужна, за исключением редких манипуляций с платёжными системами и логина в GMail, у которых с сертификатами как раз всё в порядке.
no subject
Date: 2010-10-06 10:32 am (UTC)"Очевидно" имеется в виду с содержательной точки зрения. Зачем нам устанавливать защищенное соединение неизвестно с кем?
Только зря CPU-такты тратить на шифрование.
no subject
Date: 2010-10-06 10:34 am (UTC)Плюс к тому в нынешнюю эпоху когда ethernet-хабы уже практически вымерли, и используются исключительно свитчи, прослушивание требует примерно столь же нетривиальных действий, по изменению топологии как встраивание между юзером и каким-то из промежуточных узлов по пути к серверу.
no subject
Date: 2010-10-06 10:35 am (UTC)no subject
Date: 2010-10-06 10:45 am (UTC)2. Насчёт вашего CPU не знаю, но такая потребность - в зашифрованном, но не аутентифицированном подключении - может быть.
no subject
Date: 2010-10-06 10:48 am (UTC)Чую, что объяснение как-то завязано на правило Парето. Поскольку 99% юзеров ходят на 1% серверов...
no subject
Date: 2010-10-06 10:57 am (UTC)Есть мнение, что и остальные источники информации про TLS по большей части примерно такие же.
P.S. Ну а смысл "выложить сертификат этого УЦ, чтобы пользователи его себе установили"? Чем это принципиально отличается от самоподписанного сертификата? Я точно так же выпишу себе сертификат на имя В Натуре Бил Гейц и выложу его на тот свой сервер, который будет server-in-the-middle, прикидывающимся microsoft.com. И?
no subject
Date: 2010-10-06 10:59 am (UTC)no subject
Date: 2010-10-06 11:03 am (UTC)О! :-)
Казалось бы чего проще ... :)
Date: 2010-10-06 11:04 am (UTC)Re: Казалось бы чего проще ... :)
Date: 2010-10-06 11:08 am (UTC)И почему-то все нормальыне страны, заботящиеся о своей безопасности, что Россия, что США, в качестве государственных стандартов подписи принимают как раз алгоритмы на базе схемы Эль-Гамаля. Японский eSign - что-то более хитрое, за него не скажу, искусственное там разделение или нет.
Re: Казалось бы чего проще ... :)
Date: 2010-10-06 11:10 am (UTC)no subject
Date: 2010-10-06 11:10 am (UTC)Смысл в разнесенности по времени событий установки сертификата УЦ и доступа к защищенному ресурсу. Злоумышленник, как правило, не может НЕПРЕРЫВНО сидеть и контролировать ВСЕ протоколы на предмет не всплывет ли где-нибудь в IMAP или обычном HTTP фингерпринт этого сертификата УЦ.
Ну и для особых параноиков должна быть предусмотрена возможность сверить фингерпринт по телефону.
no subject
Date: 2010-10-06 11:14 am (UTC)Это старый добрый RSA.
no subject
Date: 2010-10-06 11:22 am (UTC)no subject
Date: 2010-10-06 11:39 am (UTC)no subject
Date: 2010-10-06 11:39 am (UTC)no subject
Date: 2010-10-06 11:43 am (UTC)Но вот даже в Криптокоме (основным бизнесом которого была именно электронная подпись) мне в свое время пришлось злобно пинать некоторых разработчиков чтобы они не молча жали "Ok" в диалоге аутлука, сообдавшего что он не может аутентифицировать корпоративный сервер, а предприняли два телодвижения с тем чтобы поставить нужный сертификат.
Почему-то люди нифига не соотносили проблемы безопасности софта который они разрабатывают и софта, которым они пользуются в процессе этой разработки (что самое смещное через некоторое время это стал практически один и тот же софт).
no subject
Date: 2010-10-06 11:52 am (UTC)Если физически все собраны компактно вместе и закрыты от мира общим брандмауэром, тщательное слежение за сертификатами соседних машин и правда выглядит формальным ритуалом.
no subject
Date: 2010-10-06 11:56 am (UTC)А в одном из проектов которые мы позже разрабатывали я настоял на том, что вот эта сеть у нас считается trusted и передача по ней никак не защищается.
Правда, в этом проекте RSA и AES за защиту не считались, поэтому требование "защищенности" резко снижало набор допустимого к применению софта.
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)