Часть первая. HTTPS
- Защиту от прослушивания
- Защиту от подмены канала
- Защиту от модификации данных
Прослушивание канала
Протокол защищает канал связи от прослушивания — при условии, что злоумышленник сидит исключительно на канале связи. В реальности злоумышленник не щёлкает клювом на канале, а проникает непосредственно на машину пользователя или на сервер. На машине пользователя он инсталлирует кейлоггер, крадущий пароли и номера карт при их вводе с клавиатуры. Если с кейлоггером не получилось, можно украсть ключи, которые позволят прослушать канал и получить пароли и номера карт из него. Ну а если искомые данные у пользователя хранятся в файлах, то вообще никаких усилий не потребуется.Не инсталлируете сомнительные программы, чтобы оградить себя от хакеров? Правильно делаете, но средства взлома бывают и в известных программах, в том числе в программах с открытыми исходниками; когда их обнаруживают, случается скандал. В программах с закрытыми исходниками средства взлома обнаружить сложнее, поэтому с ними скандалы возникают реже. Злой умысел разработчиков или случайность — неважно, вы скачали программу и тем самым подарили свою машину хакерам. Пользуетесь антивирусом? Антивирусы ловят только то, что уже известно. Если вы оказались в первой волне заражения, антивирус не спасёт.
Не инсталлируете программы, пользуетесь только браузером? В браузерах есть уязвимости, позволяющие выполнить программный код на вашем устройстве. Уязвимости находятся каждый год, их исправляют, потом находятся новые. В движках или в библиотеках типа libpng, неважно. Вы можете зайти на сайт злоумышленника, он особым образом вызовет переполнение буфера в вашем браузере, исполнит программный код по установке руткита и будет дальше делать на вашей машине всё что хочет.
Аналогичные уязвимости есть в серверных программах, которым злоумышленник может послать специально сформированный запрос и получить в итоге контроль над сервером.
Более того, злоумышленник может не озадачиваться полным контролем над сервером. Ему достаточно пропихнуть в веб-страницу свой код — после чего все данные, введённые пользователем на странице, отправятся из браузера прямиком на сервер злоумышленника. Сегодняшняя новость: «Мошенники смогли разместить на YouTube рекламу с кодом для майнинга криптовалюты». Мошеннический Javascript на сервисе Google, каково?
Особого упоминания заслуживает Heartbleed — ошибка в реализации OpenSSL, которая, фактически, сводила на нет защищённость SSH, HTTPS и всего такого. С марта 2012 по апрель 2014 хакеры могли беспрепятственно красть ключи от любых защищённых соединений.
Помимо программ есть операционные системы, также полные дыр.
Наконец, есть уязвимости в аппаратной части. В конце 2017 г. мир узнал, что почти все процессоры с 1995 года имеют уязвимости Meltdown и Spectre, позволяющие программам читать память ядра и других программ. То есть, читать пароли и ключи прямо из оперативной памяти. На мобильных устройствах тоже. Выходят заплатки для операционных систем, программ и микрокода, но их эффективность ограничена. Ошибки в процессорах не исправить.
Ещё одна декабрьская новость: найден способ захватывать контроль над выключенными компьютерами. Поток таких новостей никогда не иссякнет. Серверы и машины пользователей никогда не будут защищены от проникновений. Следовательно, HTTPS никогда не станет гарантией защиты соединения.
Подмена канала
Ленивый злоумышленник даже не станет взламывать ваш канал или красть ваши данные вышеперечисленными способами. Он просто подделает канал, и вы ему дадите все данные добровольно. По защищённому соединению. Простейший способ — заманить вас на легально заведённый адрес, напоминающий настоящий по доменному имени, дизайну и степени надёжности. Критерием надёжности сайта с защищённым соединением является сертификат. Сертификаты продаются удостоверяющими центрами (CA), гарантирующими добропорядочность сайтов. В 2016 г. появился бесплатный центр Let’s Encrypt.Считаете, что CA помогут браузеру надёжно отличить мошенников от честных людей? Нет такого. Центры подвержены коррупции и бардаку, как и всё в мире. Платный центр Symantec недавно потерял репутацию настолько, что Google планирует отказаться от признания его сертификатов. На молодой и бесплатный Let’s Encrypt тоже поступают жалобы.

Модификация данных
Протокол защищает канал связи от модификации — при условии, что злоумышленник, опять же, не лезет на сервер или машину пользователя. В действительности, конечно, он это делает.Допустим, злодей хочет показать вам рекламу. При HTTP можно быть купить у провайдера пакет рекламы, вставляемой в страницы, а HTTPS сделал это невозможным, ну и что? Показ рекламы с тем же успехом можно купить у сайта напрямую или через всякие агентства по рекламе в вебе. На десктопе рекламой блещет скайп, на мобильных устройствах рекламу содержит каждое второе бесплатное приложение.
Ещё одна иллюстрация — AdBlock, превратившийся из блокировщика рекламы в её менеджера, не говоря уже о сайтах, которые детектируют AdBlock, издеваются над пользователем и всё равно показывают ему рекламу. Словом, вам покажут всю рекламу, которая вам полагается: так работает бизнес. Если вы хотите уменьшить количество рекламы в жизни, то заниматься надо не игрой в шпионов по HTTPS, а гораздо более скучной вещью — законами.
Что плохо в HTTPS?
- Соединение устанавливается дольше, чем в HTTP. Шифрование/дешифрование создаёт дополнительную нагрузку на процессор.
- Пользовательские проблемы из-за навязанной технологии. Например: на гаджете открыт сайт по HTTPS через сотовую сеть, гаджет подключается к публичному вай-фаю, пользователь совершает переход внутри сайта (т.е. обращается к тому же сайту, но к другой странице), провайдер публичного вай-фая перенаправляет пользователя на свою страницу авторизации, гаджет считает это попыткой хакерской атаки и жалуется на неправильный сертификат, страницу не показывает, пользователь во фрустрации.
- Сложность легального анализа трафика для сбора данных и блокировки контента. Считаете, что тайна любого трафика священна и провайдер не должен его видеть вообще? Ну, заметьте, что средства анализа трафика и блокировки добровольно-принудительно внедрились во все крупные сайты с согласия хозяев. Наверняка не за горами легальное прослушивание HTTPS-трафика на стороне провайдера (изобретут официальные сертификаты для прослушивания, если ещё не). Технологии шифрования, как и в случае с рекламой, ничего принципиально не поменяли и не поменяют. Для перемен нужны законы.
- Забота для вебмастера добывать сертификат для сайта. Самоподписанные сертификаты объявлены браузерами практически вне закона. Приличные сертификаты нужно покупать. Или получить сертификат в Let’s Encrypt и нервно ожидать момента, когда эта организация начнёт наглеть и играть в хотелки с вебмастерами; или же навыдаёт кучу сертификатов мошенническим сайтам и лишится доверия браузеров. Да и с платным центром сертификации это тоже может произойти, см. выше про Symantec.
Часть вторая. Сглаженные шрифты
Большая часть шрифтов в наши дни — векторные: TrueType от Microsoft, Type 1 от Apple, OpenType от Microsoft и Apple вместе, METAFONT от Дональда Кнута. Глифы векторных шрифтов состоят из кривых (2, 3, 2+3 и произвольного порядка соответственно). Считается, что векторные шрифты должны быть в равной степени применимы для экрана и для печати (чего на самом деле не бывает).С печатью более-менее всё хорошо. Лазерные принтеры растеризуют чёрные векторные глифы бинарным способом, без полутонировния. При большой плотности точек, которую имеют принтеры (600-1200 DPI), ступенчатость линий не является проблемой.
С экраном в основном всё плохо. Если при плотности пикселей ~96 PPI растеризовать кривые «как есть», получается неприятная глазу ступенчатая картинка. Алгоритмы удаления ступенчатости не дают объективно хорошего результата, это не точная наука. Существуют дисплеи высокой плотности (200-400 PPI), на которых проблема ступенчатости стоит менее остро. Но, во-первых, эти дисплеи мало распространены (преимущественно на мониторах Apple и топовых мобильных устройствах), и во-вторых, бороться со ступенчатостью нужно и на этих дисплеях тоже, особенно для прямых косых линий и для любой анимации с текстом.
Я не буду касаться рендеринга текста в PDF. Он, как правило, плох, но PDF — формат в первую очередь для печати, а не для экрана, так что грешно придираться.
Я не буду касаться рендеринга крупного текста (заголовков и пр). В конце концов, крупный текст состоит преимущественно из массивов одноцветных пикселей, и бахрома по краям не мешает его читать. Да его и не так много.
Но вот обычный текст, небольшого размера, в браузере и текстовых редакторах. Текст, который приходится читать с экрана в большом количестве. В нём, за редкими исключениями, что-то не так.
В большинстве глифов (если это не курсив или иной шрифт с украшениями) есть строгие вертикальные и горизонтальные линии. Это во всех отношениях хорошо, это упрощает чтение. Казалось бы, это должно упрощать и сглаживание. В том смысле, что вертикальные и горизонтальные линии вообще не нужно сглаживать! Они прекрасно отображаются прямоугольной сеткой пикселей на экране. Сглаживать нужно лишь косые и кривые линии.
Но, вот беда, глиф стоит в строке так, что его вертикальный край не попадает точно между пикселями. В такой ситуации можно пойти по одному из трёх путей:
1. Применить «сглаживание», несмотря ни на что
Получится как-то так:2. Применить субпиксельное сглаживание (ClearType)
Эта технология использует физические свойства жидкокристаллических дисплеев и увеличивает разрешение растеризации чёрных глифов в три раза по горизонтали, а по вертикали не увеличивает. (По этой причине ClearType не используется на смартфонах и планшетах, каковые устройства должны работать одинаково при различных поворотах экрана.)При растеризации серых точек (при сглаживании) применение ClearType порождает малозаметные цветные артефакты на границах.
Для отображения белых глифов на чёрном фоне алгоритм субпиксельного сглаживания возможен, хотя и несколько отличается и, кажется, отсутствует на практике.
К сожалению, субпиксельное сглаживание всегда сглаживает линии, даже вертикальные. То есть, несмотря на втрое большее горизонтальное разрешение, ему присущи недостатки обычного сглаживания. Посмотрите на ножки буквы m, они все различаются. Вертикальные черты в h и i, T и L — все различаются.
3. Применить хинтинг
Хинтинг — это специальные инструкции по подгонке глифов под пиксельную сетку в мелких кеглях. Пропорции при этом немного страдают, но читабельность повышается значительно. Иллюстрация из Википедии (хинтинг + сглаживание):Хинтинг бывает и без сглаживания, что не делает его хуже. Вот примеры отличного хинтинга:

4. Не использовать векторный шрифт
Пиксельные бинарные шрифты маргинальны и элитны — одновременно. Нет ничего лучше пиксельного шрифта для отображения некрупного кегля на обычном мониторе. Но пиксели не масштабируются и плохо выглядят на печати, поэтому операционные системы и программы подсовывают пользователям в первую очередь векторные шрифты. Современные браузеры и офисные программы не позволяют использовать пиксельные шрифты. Все программы на Java, включая среды разработки (NetBeans, продукты JetBrains и пр.) не позволяют использовать пиксельные шрифты. Остаются эмуляторы терминалов, Emacs, DrRacket и прочие аутсайдеры.Пиксельные шрифты продолжают развиваться, несмотря на то, что пик их славы прошёл в 1980-е. Наиболее хорошо развиваются моноширинные пиксельные шрифты, по причине их востребованности программистами, коим не нужно масштабирование и печать. Вот блестящий Terminus, созданный в 2010 г.:
Пользователи экранов с 200+ PPI взирают на все эти проблемы с лёгким недоумением.
Часть третья. Нейросети
CUDA позволила применить «deep learning» на реальных задачах, для которых мощности традиционных CPU не хватало. Нейросети начали захватывать мир, и к настоящему моменту захватили.
Из каждого утюга слышны новости об успехах нейросетей. Использовать технологии машинного обучения, отличающиеся от deep leaning, стало неприлично. Для нейросетей есть современные средства на Питоне. Вся движуха AI сегодня в нейросетях, а более строгие математические методы считаются вчерашним днём и нишевыми инструментами. Школьники создают нейросети для определения жанра музыки. Геологи создают нейросети для поиска месторождений.
Откуда этот ажиотаж, зачем?
Нейросеть не может победить другие алгоритмы
Точнее, может — если эти алгоритмы такие же глупые, как она. Генетические алгоритмы, например. Но не о них речь. Нейросети уместны там, где не придумано алгоритмов, использующих специфику задачи. Нейросети не используют специфику задачи и поэтому могут решить любую задачу. В этом сила нейросетей и одновременно их слабость. Никакую задачу нейросети не могут решить хорошо и математически доказуемо.Нейросеть — это абстрактная модель, под которую можно подогнать любые данные. Размер модели (и, соответственно, её дискриминирующие свойства) можно настраивать путём добавления нейронов или целых слоёв. Нейросеть «обучается» аппроксимировать некоторую функцию, которая, якобы, имеет какое-то отношение к требуемому результату (на самом деле не имеет, т.к. никакие свойства предметной области не находят прямого отражения в получившейся функции).
Заметим, что нейросеть — не единственный подход такого рода. Можно назвать битовые отпечатки, байесовские классификаторы, SVM, Монте-Карло + цепи Маркова, кластерный анализ. Эти вещи в принципе не хуже нейросетей и друг друга.
Машинное обучение на нейросетях вырвалось вперёд по сравнению с другими глупыми методами по одной основной причине: те самые GPU. Оказалось, что нейросетевые вычисления хорошо параллелятся и позволяют максимально эффективно использовать вычислительные ресурсы. Победа нейросетей — это победа видеокарт.
Это, кстати, видно и по общему положению дел в области. Львиная доля публикаций на тему нейросетевых алгоритмов сводится к описанию эксперимента вида «мы взяли фреймворк, настроили какие-то параметры, достали где-то обучающее и тестовое множества, и что-то получилось». Фактически, наука превратилась в игры с инструментами. Почему люди считают это стоящим занятием? Потому что конфигурирование и запуск фреймворков — большая работа, есть над чем потрудиться и испытать гордость за хорошо сделанное дело. В поддержке популярности нейросетей есть и экономическая подоплёка: продажи GPU, продажи обучающих и тестовых множеств, продажи обученных моделей.
Польза нейросетей дико преувеличивается
Большая часть задач решается более адекватными средствами: хоть линейная регрессия, хоть байес, хоть алгоритм Дейкстры для поиска кратчайшего пути. Нейросеть, как правило, на таких задачах с треском проваливается. Если можно применить математически обоснованный метод, его нужно применять, и он будет выгоднее нейросети. Использование нейросети равнозначно печальному признанию в том, что приличного алгоритма придумать не получилось.В задачах с динамикой процессов нейросети бесполезны в принципе. Нейросеть не знает, что такое время и динамическая модель.
С распознаванием речи всё то же самое.






























