Pull to refresh

Comments 78

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

Немного позанудствую: шифровать для этого необязательно, достаточно просто подписывать (у того же ВК все запросы к API таки подписывались, пока на HTTPS не перешли; криво-косо, правда, но не суть, суть в самой идее)


Но всё же картинки условного ВК шифровать надо как минимум затем, чтобы провайдер мои личные фотки не разглядывал (условному ВК я, допустим, доверяю, а провайдеру не очень)

Да подпись решает часть проблем, но речь про подделку ответа, а не запроса. Браузер же не заставить проверять чексумму ответа, который передан в URL, или я чего-то не знаю?

Ну, теоретически допилить браузер, чтобы проверял, думаю, ничего не мешает. На практике все ударились в HTTPS и это никому не нужно)


Хотя вообще есть проверка чексумм для сторонних ресурсов типа CDN, но она другую задачу решает

Хотя вообще есть проверка чексумм для сторонних ресурсов типа CDN

Без шифрования трафика это не работает. Информация о том, какой должен быть хэш, передается либо в http-заголовках, либо в мета-тэге html-я.
Что мешает злоумышленнику поменять не только скрипт, но и указать в http-заголовках и мета-тэгах «правильный» хэш?

Ничего не мешает. Я ж сказал, этот механизм другую задачу решает, вы зануда ещё больше чем я.

Не другую. Этот механизм решает ту же самую задачу — доверия.
Он позволяет разработчику сайта/сервиса сообщить браузеру клиента «вот этому скрипту можно доверять, а вот этому — нет».
Доверия к стороннему ресурсу (HTTPS не спасёт от банальной подмены файла админом на сервере CDN), а не к каналу передачи данных (это тоже, но лишь как побочный эффект), так что задача всё-таки немножко другая
Это работает, если у вас html идёт по https, а подгружаемый ресурс — по http со сверкой хэша с зашифрованным html.

Типа habrahabr — https; habrastorage — http.
Я:
Без шифрования трафика это не работает.

Вы:
Это работает, если у вас html идёт по https

Вопрос: а когда https у нас стал нешифрованным?)
Суть в том, что вместо того, чтобы шифровать всё мы шифруем только html, содержащий ссылки и хэши. А картинки и видео не шифруем. Таким образом сайт/поддомен отвечающий за раздачу медиаданных может работать без шифрования.

Современный подход требует шифровать вообще всё (сайт, загружающий нешифрованные картинки помечается как «не совсем безопасный»)
Суть в том, что content security policy работает только в случае, когда csp-правила передаются по защищенному каналу.
Если это не так — ни о какой security речи быть не может.
Ну… правила передаются по защищённому каналу, а содержимое — по незащищённому.
А сейчас веб не имеет механизмов правил для медиа и требует всё передавать по защищённому(интересно распространяется ли паника «не-https» на стили, полученные по http, но с integrity). Я пытаюсь оппонировать именно позиции «передавать всё-всё-всё по защищённому, всё что не передаётся по защищённому — потенциально скомпрометировано», которую как раз и продвигает Хром.
сейчас веб не имеет механизмов правил для медиа и требует всё передавать по защищённому
Насколько я понимаю, непосредственно веб вполне позволяет задавать правила применительно к различным типам контента.

интересно распространяется ли паника «не-https» на стили, полученные по http, но с integrity
Это вопрос уже не к самой CSP, а к конкретной её реализации браузерами.
Лично я, например, навскидку не вижу проблем в описанном случае (контент, полученный по небезопасному каналу, который считается «разрешенным» автором сайта/сервиса).
Если же какой-то браузер считает по-другому, то никто не мешает завести соответствующий тикет и как минимум в процессе обсуждения понять, какую угрозу безопасности это может создать.
Ммм… не нашёл нормальных примеров хэш-валидации медиа и картинок для CSP. SRI также описывает integrity только для скриптов и стилей.

А так-то да. Если бы вопрос стоял остро — так бы и поступал.
Да не то, чтобы другую. Если расширить механизм SRI на img/audio/video то можно было бы использовать механизмы в духе CDN или просто прозрачных проксей для публично доступных медиаданных.
Вы неправы. Подписывать и проверять запросы/ответы API — недостаточно.

Пусть сервер вам отправил в корневой html
<script src="http://example.com/app.js"></script>
И пусть по пути произошла трансформация в
<script src="http://evil.com/evil_app.js"></script>


Может, вы и останетесь защищены от подделки запросов/ответов (в случае, если при каждом обращении к API в ответе кроме собственно ответа будет приходить одноразовый токен для следующего обращения к API), но от прослушки и утечки данных налево — уже нет.

А без шифрования соединения защититься от такой подмены вы не сможете. Content security policy определяется в http-заголовках и мета-тэгах, а значит, также может (и будет) подменена злоумышленником.
Пусть сервер вам отправил в корневой html

Этот код, естественно, тоже должен быть подписан. И заголовки content security policy тоже должны быть подписаны. А если это всё подписано, то и трансформация в evil_app.js будет невозможна. Я прав :)


Про прослушку я и сам выше упоминал. Выкидывать шифрование и юзать только подписи я не призываю.)

Этот код, естественно, тоже должен быть подписан. И заголовки content security policy тоже должны быть подписаны. А если это всё подписано, то и трансформация в evil_app.js будет невозможна. Я прав :)

Как браузер проверит, что подпись — правильная и принадлежит example.com, а не вставлена злоумышленником?

Да хоть с помощью тех же HTTPS-сертификатов. Насколько я знаю, технически ничего не мешает юзать их как для шифрования, так и для подписи.

О! Теперь мы добрались до интересного.
Расскажете, в чем смысл использовать механизмы сертификатов для наложения подписей, но не для шифрования всего трафика (hint: ассиметричное шифрование используется при установке соединения, сам трафик шифруется уже симметричным ключом)?

Я нигде не говорил и не собираюсь говорить, что в этом есть какой-то смысл. Я лишь немного позанудствовал, сказав, что для защиты от подмены данных достаточно подписи. Всё остальное вы додумали за меня.


Ещё раз, по пунктам персонально для вас:


  • я НЕ утверждаю, что подпись лучше шифрования;
  • я НЕ утверждаю, что браузеры должны реализовать создание и проверку подписей в протоколе HTTP;
  • я НЕ утверждаю, что нужно бросать шифрование и переходить на подписи;
  • я в первом же своём комментарии сказал, что всё равно всё нужно шифровать для скрытия данных. Чего вы до меня докопались — я не понимаю.
я в первом же своём комментарии сказал, что всё равно всё нужно шифровать для скрытия данных. Чего вы до меня докопались — я не понимаю.

Этот же самый комментарии был начат с утверждения, что шифрование необязательно для защиты от подмены контента.

Я тоже зануда, и согласен с автором первого комментария — для защиты от подмены контента «по дороге» нужна TLS.

Вы же утверждаете, что без шифрования соединения можно обойтись, но при этом на ходу начинаете придумывать механизмы, удивительно похожие на имеющиеся)
механизмы, удивительно похожие на имеющиеся)

Подписи, внезапно, базируются на тех же механизмах, что и шифрование, ага :)

Я лишь немного позанудствовал, сказав, что для защиты от подмены данных достаточно подписи.
Нет, недостаточно.
Нужен механизм проверки аутентичности данной подписи.

Подписи, внезапно, базируются на тех же механизмах, что и шифрование
Да, механизмы подписей и ассиметричного шифрования вообще, базируются на тех же механизмах.

А вот шифрование канала передачи включает в себя такие механизмы, как tls-handshake и certificate authority, решающие проблему проверки аутентичности сторон.

Именно эти существующие в tls механизмы Вы начали добавлять по ходу обсуждения в первоначально «достаточную» подпись.
Именно эти существующие в tls механизмы Вы начали добавлять по ходу обсуждения в первоначально «достаточную» подпись.

Это неотъемлемая часть подписи, я не знаю, с чего это вы вдруг решили, что я считал, что без них «достаточно», ничего подобного. Вы уже не зануда, вы просто выдумываете то, чего не было. Мне надоело опровергать несуществующие события, наверно я вам прекращу отвечать уже

При желании можно подделать и зашифрованный трафик.
Конечно, это будет достаточно сложно, но не невозможно. Естественно, для этого надо быть посредником в передаче трафика (например, провайдером или владельцем локальной сети с выходом в интернет) и иметь достаточно ресурсов, чтобы поднять свой DNS, свой удостоверяющий центр, имитирующий работу настоящего, настроить маршрутизацию и т.п…
Можно даже сделать так, что конечный пользователь ничего не заметит, кроме дополнительных тормозов.


А многим сайтам хватило бы проверяемой подписи. Тогда и достоверность подтверждается, и закэшировать можно без лишних проблем.

Хотя бы потому, что он отвечает, с точки зрения браузера как настоящий.
Там, конечно, есть ряд сложностей, но при желании и наличии ресурсов они вполне преодолимы. Например, при помощи уязвимости в ОС можно подменить пользователю браузер. В этом случае свой удостоверяющий центр нужен только для того, чтобы был трафик к удостоверяющему центру.

при помощи уязвимости в ОС

А, ну если так разве что… Но для этого сперва нужно найти подходящие уязвимости во всех популярных ОС всех популярных версий и каким-то образом защититься от переустановок

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

В принципе нет ничего невозможного, но что-то я подозреваю, что всё упомянутое капец какое сложное и дорогое, уязвимости у удостоверяющего центра найти будет ещё труднее чем в ОС у пользователей
При желании можно подделать и зашифрованный трафик.
Смелое заявление!
свой удостоверяющий центр
А корневой сертификат (поддельного CA) пользователю как добавить?
Ну и нахрена мне пихать HTTPS в мой роутерный 192.168.1.1, доступ к которому есть только по непосредственно подключенному к нему кабелю?
Не обязательно, но вы просто будете видеть плашку «Небезопасно». Вроде не так плохо, нет?

Не совсем: мой фаерфокс уже давно забыл пароль от роутера, потому что HTTPS отсутствует, приходится каждый раз руками набирать. Хром пока вроде бы запоминает, но нет уверенности, что так останется и в будущем или что в будущем не добавится каких-нибудь новых ограничений

Сегодня гугл решает что с людей надо больше денег брать за ssl, завтра он начнет контролировать какие центры сертификации ему выгодны. Монополия, мать ее… А ведь еще недавно все так радовались концу моноплии IE…
UFO just landed and posted this here
Сегодня просто помечает, завтра не открывает без добавления в исключения, послезавтра не открывает вообще, послепослезавтра Let's Encrypt закрывается и оставшиеся сертификаты резко дорожают… [/параноик_mode]
Это запрет и навязывание. Прямое использование своей монополии для навязывания технологии. Завтра он решит вообще не заходить на сайты без https и все, половина шаредов глубоко в ..., тогда как многим он вообще не нужен.
UFO just landed and posted this here
А что вам не нравится в шареде? Или вы предпочтете криво настроенный VPS, который может стать частью ботнета, после его настройки по первой инструкции с интернета? Разница для простого смертного большая — найти и поставить бложик на шареде, и найти и поставить бложик на VPS'е. Это уровень вообще разный.
UFO just landed and posted this here
UFO just landed and posted this here
А простите за чей счет пир с LE? Я как-то не доверяю продуктам которым я не плачу деньги, ибо иначе я становлюсь их продуктом. И почему я должен доверять их центру? Совсем недавно symantec был доверенным и надежным. И где гарантии что они не введут платную подписку, когда хром станет весь простой трафик помечать как небезопасный?

+ косвенные деньги — процессорное время для работы с шифрованием вроде как не бесплатное.

Я не против самого SSL, но я против его повсеместного применения. Моим сайтам, нужным десятку человек в день, вполне себе хватает бесплатного шареда от провайдера и введение шифрования для меня будет дополнительной финансовой нагрузкой (смена тарифа как минимум), которые лично я нести не очень хочу, т.к. все проекты на энтуазизме.
UFO just landed and posted this here
Я же отметил- за счёт гугла как минимум. А на сайте LE указаны остальные 49 спонсоров.

Коммерческие компании вводят SSL чтоб их рекламу не резали провайдеры местечковые, а весь мир радуется защите… Заманчиво…


Сейчас большинство процессоров, включая серверные, имеют блоки ускорения AES.

А они не потребляют энергии? Оо


Проблемы вашего шареда, который не может ввести поддержку бесплатных сертификатов. Пишите в поддержку, пускай поправляют.

Даже не подумаю. Для моих нужд не нужен https, у меня там и авторизации нет, и пользовательских данных ноль.

UFO just landed and posted this here
В счетах за электричество этого не найти.

Ну да, только вот в масштабе датацетра я думаю это будет заметно.


Вы тут уже написали больше символов, чем нужно для открытия тикета с названием «Прикрутите бесплатные сертификаты от LE».

Еще раз: Мне НЕ НУЖЕН сертификат на мой го*сайт. Мне не нужен не платный, не бесплатный, со скидкой или без, от LE или нортона. Меня устраивает работа по обычному протоколу http, в одностороннем порядке — я показываю людям котиков, они радуются и закрывают картинку.

UFO just landed and posted this here
Подождите, а кто сказал что это нежелательно? Какая-то корпорация? Вам не кажется что это абсурд? 10 лет показывается без ssl и все ок, теперь надо обязательно ssl потому что… захотела корпорация.
Я не буду писать провайдеру или доказывать вам и другим. Я лишь высказываю свою мысль, недовольство, собственно как и все остальные комментаторы на хабре.
Мне кажется вы не совсем корректно формулируете претензии: человек же по сути обсуждает не своего провайдера, а будущее интернета в котором каждый котик должен передаваться в зашифрованном виде.

Вопрос не в том, как ему быть с провайдером, а насколько (и почему) котики требуют шифрования.
Что случится если этот комментарий не будет зашифрован?
Что случится если график в посте не будет зашифрован?
Что случится если лого Яндекса не будет зашифровано?
Что случится если этот комментарий не будет зашифрован?

Туда будет встроена реклама от провайдера.


Что случится если график в посте не будет зашифрован?

Туда будет встроена реклама от провайдера.


Что случится если лого Яндекса не будет зашифровано?

Туда будет встроена реклама от провайдера.


Это если из относительно безобидного и не вспоминать про майнеры биткоинов и про RCE в png-файлах :)

Вообще-то это означает, что мы используем шифрование не по назначению. Шифрование должно использоваться, чтобы защитить данные от перехвата. Для того, чтобы защитить данные от подмены надо использовать механизмы подписей и хэшей, отличающиеся тем, что данные могут быть доступны и вне шифровки.
Выше уже была начатая мной ветка про подписи. Ну а вообще — во-первых, зачем делать одновременно подписи и шифрование, когда можно сделать сразу шифрование всем? Во-вторых, для подписи тоже нужны те же сертификаты для проверки подлинности, и снова привет, Let's Encrypt
Для проверки целостности не обязательно требуются подписи, можно обойтись хэшами, если они пришли из подписанного/зашифрованного документа.

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

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

В принципе я бы тоже был не против описанного вами, если предоставить выбор. Например, я не хочу, чтобы мой провайдер знал, что я смотрю, кхм, «овальные» ролики на ютубе, или что я любуюсь на котиков, которые выкладывает daggert на своём сайте — я хочу, чтобы это всё шифровалось (про всякие косвенные каналы, позволяющие даже при шифровании узнать, что я смотрю, пока молчу). Если отказываться от шифрования и ограничиваться подписью, то я буду лишён права выбора, и мне придётся подключать какой-нибудь VPN (но тогда уже владелец VPN будет знать, что я смотрю овального и котиков, мда).

Вот в этом ключевой момент: во-первых, шифрование факта просмотра. Мне не кажется, что мир в котором настолько всё шифруется — это нормально. ВЫ хотите — вы используете VPN/TOR/что вам угодно. А сейчас мы говорим, что все разработчики должны исходить из того, что дать возможность оператору узнать о факте доступа к публично доступной информации — это плохо.

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

Есть такая полезная штука — кэш между поставщиком контента и компьютером получателя. Внезапно, эта простая мера позволяет неплохо оптимизировать трафик.
Конечно, есть методы кэширования и для зашифрованного трафика, но это дополнительные сложности.
Можно поставщику контента, если он богатый, ставить локальные сервера в сети провайдера (как у гугла).
Можно применять методы, вынуждающие браузер ругаться на сертификат.
Но проще кэшировать незашифрованный контент.
Так что подписывание (теми же сертификатами, что и в HTTPS, на другом подобном механизме) вполне может пригодиться.
И это совсем не означает отказа от шифрования там, где оно действительно нужно.

Хорошо бы еще брать в расчет энергитическую стоимость — как я знаю подпись значительно дороже, чем симетричное шифрование. Я говорю о полностью динамическом варианте. Если у вас данные не меняются, то можно подписать один раз, теоретически. Практически это не реально, потому что надо подписывать чанки — никто не передает данные одним куском. Ну вобщем практически проше шифровать :)
>Практически это не реально, потому что надо подписывать чанки — никто не передает данные одним куском.
Поясните пожалуйста…
Ну, понятно, что подписывать надо, например, каждое загружаемое через AJAX сообщение. Но эти сообщения всё ещё могут совпадать в части публичных данных.

Но в большей части я имел ввиду такие штуки как картинки или встраиваемые видео. В общем то, что описывается не как «сообщение» а как «данные».
Грубо говоря сейчас шифрование идёт на уровне транспорта — на этом уровне есть наборы байтов — каждый набор придётся подписывать заново потому что нет никакой гарантии, что при передаче одного и того же файла он будет разбит на тот же набор пакетов. Если подняться выше на уровень HTTP протокола, то он уже оперирует ресурсами, но все равно может их бить на произвольные куски (partial content) при передаче — из-за этого на этом уровне мы всё равно должны пере-подписывать каждый запрос/ответ. И только перейдя на уровень приложения мы можем не пере-подписывать статические ресурсы. Но только браузер этот уровень не контролирует — то есть доверие только на уровне приложения, что серьёзно ниже доверия браузеру (в среднем).

Кстати видео — очень яркий пример абсурдности подписи на уровне приложения — вы должны скачать его целиком, чтобы проверить подпись :) Ну или подписывать динамически каждый переданный набор байт, что дороже, чем симметричное шифрование того же набора байтов.
>может их бить на произвольные куски (partial content) при передаче
Ну вот в целом вопрос сводится к а)может не значит будет; б)произвольности кусков.

То есть например если посмотреть на этот пост, то ни текст поста, ни картинки разбивать на части смысла нет.

Собственно и видео можно подписать некоторые куски размерами от GOP/Scene до эпизода.

Но в целом меня напрягает не то, что в большинстве случаев шифрование оказывается востребованным, а то, что, как следует из поста, «большинство» начинают экстраполировать на «всегда».
То, что данные могут биться на произвольные куски(или даже если данные часто бьются на произвольные куски) не означает, что никто не передаёт данные одним куском.
Что-то мы с вами не туда углубились, коллега :) Речь в моём комментарии шла не о том – надо или нет подписывать/шифровать данные, а о сравнении эффективности этих процессов. При том, что я согласен, что подпись достаточна в большинстве случаев, на практике эффективней применить шифрование, как менее трудоемкий процесс.
>шифрование, как менее трудоемкий процесс.
Разница в трудоёмкости зависит от сценариев использования: если вы постоянно отдаёте данные, которые не предполагается интерпретировать фрагментарно, при этом одни и те же (хостинг картинок), то подпись будет и энергетически/вычислительно эффективнее шифрования, поскольку вместо тысячи согласований сессии будет одно подписание.
Давайте так. У нас есть единичный набор байт, и мы его передаём один раз – его подпись будет дороже, чем его симметричное шифрование. Это всё что я утверждаю.
>сценариев использования
Вообще не спорю – флаг в руки, барабан на шею и вперёд с песней. Но я пасс.
UFO just landed and posted this here
Не буду спорить, из того, чем пользовался я, насовсем отвалился только DownThemAll, но по мне сам браузер стал работать значительно лучше.
Они, вроде, обещали вернуть часть функционала в дальнейшем?
UFO just landed and posted this here
Обновился. Ужаснулся, грязно выругался, откатился на старую версию.
Слишком много всякой дряни включено по умолчанию. Но возможность для её отключения все же есть.
UFO just landed and posted this here
Чем дальше в лес… Если полностью абстрагироваться — это шантаж и рэкет 90х: «либо ты оплатишь крышу, либо будет ой-ой».

Есть целые направления, где сертификаты не нужны чуть более чем полностью (локальные ресурсы, локальные сети, например). Есть более обширные направления, где должно хватать самоподписанных сертификатов (закрытые сети организаций, например). Но нет — или «плати за то, что мы поддерживаем» или полируй эбонитовую палочку шерстяной тряпочкой вприсядку подстраивая под себя каждый второй браузер и рассказывай каждому первому пользователю, что это не страшно и так и задумано.

То есть замысел как-бы хороший и правильный, но исполнение слишком уж суровое.
Безопаснее всего — отказаться от Хрома.
Например, в Казахстане для этого сертификаты сайтов подменяются национальным сертификатом безопасности

Это не соответствует действительности. Да, статья по ссылке компрометирующая, однако дальше инициатив дело не пошло и никаких нац. сертификатов не используется, кроме сайтов госуслуг.
Sign up to leave a comment.