Ресурсы: техническое описание TLS, LaTeX - в картинки (img), криптографическая библиотека Arduino, шифр "Кузнечик" на ассемблере AMD64/AVX и ARM64
Пишут, что свежие рекомендации профильного агентства правительства Австралии требуют отказаться от современных распространённых криптосистем (ECDH, ECDSA и др.) и перейти на постквантовые криптосистемы совсем скоро – к 2030 году. Занятно, что в этих рекомендациях запрещают SHA-256 в HMAC, но оставляют AES. Это тем более странно, что отказ от SHA-256 мотивируют традиционным развитием квантовых компьютеров. При этом, конечно, ничего не сказано про алгоритмы, используемые для защиты по высшим категориям (TOP SECRET).
Нетрудно посчитать, что знаменитый 2030 год планируется уже через пять лет. С одной стороны, пять лет это очень мало. С другой стороны – пяти лет может оказаться достаточно для того, чтобы появились квантовые алгоритмы для взлома, скажем, криптосистем на кодах и решётках. (Но и квантовые алгоритмы для AES – тоже нельзя исключать.) Естественно, алгоритмы будут не менее теоретическими, чем алгоритм Шора, и смогут сработать только на “гипотетических квантовых компьютерах”, но это всё равно потребует, как минимум, пересмотра рекомендаций, а как максимум – разработки новых криптосистем. Впрочем, всегда можно просто увеличить длину ключей (как долгие годы и делается с RSA).
Комментировать »
В DNS бывают “хостнеймы”, а бывают “DNS-имена” (именно так эти объекты нужно называть на русском). Хостнейм – это сетевое имя компьютера (“имя хоста”), для записи которого разрешено использовать только следующие ASCII-символы (без учета регистра при сравнении): [a-z\,\-] (от “a” до “z”, “запятая”, “минус”) и, в качестве разделителя “лейблов”, ASCII-символ “.” (“точка”). “Лейбл” – это подстрока в полном имени хоста: dxdt.ru. Все эти правила сложились, что называется, исторически.
(Есть ещё некоторые старые ограничения, требующие, например, чтобы “лейбл” всегда начинался с буквы, что позволило бы отличать запись IPv4-адресов от хостнеймов; но, к сожалению, эти ограничения сейчас применяются крайне редко, а в практике глобальной DNS – отменены, поэтому в DNS невозможно отличить хостнейм от IPv4-адреса.)
А вот в DNS-именах допускается использование и других символов. Вообще говоря, закодировать можно произвольные октеты, но это тема для другой записки, поскольку сам смысл отстройки по алфавиту от хостнеймов не настолько общий. Широко используется знак “_” (“нижнее подчёркивание”), который позволяет заведомо отличить DNS-имя от хостнейма, чтобы строго определить смысл соответствующей DNS-записи. Пример: _dmarc.dxdt.ru. – это имя (ключ) для размещения политики DMARC в TXT-записи. Такое имя не может быть хостнеймом, но может быть DNS-именем. Это важное отличие: хостнеймы вкладываются в пространство DNS-имён, но не совпадают с ним.
Комментировать »
Сейчас много новостей про то, что в Google “совершили прорыв в квантовых вычислениях”, представив “метод коррекции ошибок”. Обычное для текущего уровня “хайпа” состояние, тем более, когда в источнике новости упоминается Google.
Вообще, если почитать соответствующий препринт, то окажется, что действительно интересных выводов там три, но ни один из них не попадает в заголовки СМИ: во-первых, в предложенной схеме коррекции тут же обнаружились новые “ошибки, природа которых пока не ясна”; во-вторых, очередной раз указано, что так как для дешифрования вывода “квантовых вычислений”, использующего коды коррекции, требуется классический вычислитель, то ещё предстоит определить, не окажется ли задача дешифратора экспоненциально сложной для этого классического компьютера; в-третьих, речь вообще не про универсальные квантовые вычисления, а про реализацию некоторых кодов для небольшого количества кубитов конкретных лабораторных устройств.
Первый аспект – “новые ошибки”, – выглядит как намёк на те самые дополнительные кубиты, которые необходимы для коррекции ошибок в схеме коррекции ошибок: такая иррациональная рекурсия, в стиле вычисления точной десятичной записи значения корня из двух.
Второй аспект, про необходимый “классический вычислитель”, указывает на то, что без классического компьютера квантовый аналоговый вычислитель бесполезен даже в качестве лабораторной установки, и при этом экспоненциальный рост сложности, соответствующий моделированию квантовых алгоритмов на классических компьютерах, вполне может вылезти в процессе коррекции ошибок (что, наверное, будет особенно обидно).
Занятно, что в исходной работе нет хотя бы примерных описаний используемой “классической аппаратуры” – она как бы подразумевается существующей “за кадром”, в виде “специализированной рабочей станции” с доступом по Ethernet. Наверное, это не имеет отношения к теме публикации (хотя, казалось бы – ведь классический вычислитель точно необходим, чтобы вся эта квантовая коррекция ошибок как-то заработала).
Ну и аспект третий, – “квантовые вычисления”, – самый “хайповый”: исходная работа – про оценки порога для реализации коррекции ошибок в “квантовой памяти” (что бы это ни значило), а не про универсальные вычисления, требующие, дополнительно, совсем других элементов.
Комментировать »
Очень популярное заблуждение: DNS использует только UDP. Это заблуждение постоянно мешает на практике. Конечно, протокол UDP является основным протоколом обмена данными между клиентами и серверами в DNS. Это так. Однако UDP используется при наличии возможности, а DNS, как система, строго требует доступности серверов и по TCP. Причём, TCP является ничуть не менее “стандартным” протоколом для DNS. То есть, необходима поддержка и UDP, и TCP.
Хрестоматийный исторический пример использования TCP вместо UDP в DNS, это превышение максимального объёма данных, которые удаётся передать по UDP. Здесь часто упоминают 512 байтов, как предельное количество. Но, опять же, то и дело упускают контекст, к которому лимит в 512 байтов относится. Эти знаменитые 512 байтов, во-первых, происходят из принципов фрагментации пакетов в IP-сетях, – так-то в UDP можно передать гораздо больше, – да ещё и относятся, как ограничение, конкретно к классическому DNS: то есть, из-за 512 байтов в Интернете 13 логических корневых серверов DNS, например. Сетевые детали оставим для другой записки, а в этой важно отметить, что и лимит давно не 512 байтов, потому что есть расширение под общим названием EDNS, позволяющее задать другие границы данных ответа сервера, и возможность увеличения размера UDP-ответов пакета никак не отменяет требований по TCP.
Это всё весьма упрощенное описание. За DNS скрывается очень сложная технология, непосредственно использующая множество весьма и весьма нетривиальных особенностей в своих протоколах. Очень большой ошибкой будет посчитать, что DNS – это “запрос-ответ” про “IP-адрес”. Это только “понятийное ядро” DNS на самом базовом уровне возможно описать как элементарный протокол “запрос-ответ”. При изучении же деталей придётся быстро столкнуться с неожиданными артефактами. Например, с тем, что в DNS есть сжатие строк в DNS-сообщениях, куча хитрых статусов и флагов. Реально работающая система изобилует неожиданными “краевыми случаями”. Вот, кстати, один из примеров: рандомизация регистра символов в DNS. И это, заметьте, тут ещё ничего не сказано про DNSSEC.
В общем, вернёмся к TCP/UDP. Верная интерпретация такая: если DNS-ответ имеется, но не получается доставить его полностью по UDP, то система должна использовать TCP. Следовательно, должен быть TCP-доступ. И вовсе не только между авторитативными серверами для трансфера зоны.
К сожалению, сплошь и рядом продолжают фильтровать и отключать TCP-доступ даже к авторитативным серверам DNS, мотивируя это тем, что, мол, “DNS работает по UDP”, а поэтому прочий доступ нужно закрыть “для безопасности” (хотя, казалось бы, при чём здесь метод “порты закрыл – сервер в безопасности”?). Это неправильно и плохо: резолверы могут штатно подключаться к DNS-серверам по TCP, если им не удаётся работать по UDP, а в DNS описан типовой механизм (Truncated bit), позволяющий сообщить клиенту (резолверу), что нужно переключиться на TCP. Но это только возможный способ. Резолвер, вполне штатно, может самостоятельно перейти на TCP, если этого требует контекст запроса и сетевая конфигурация. Так что DNS работает и по TCP тоже.
Комментарии (1) »
Интернет не только работает по IP, но этот протокол и определяет Интернет. Часть IP – это IP-адреса: номера, используемые для синтеза самого протокола. Интересно, что практическому восприятию IP-адресов в Интернете (не в локальной сети) соответствует несколько уровней.
Уровень первый: IP-сеть. То есть, IP-адреса позволяют проиндексировать узлы “одноранговой сети”, сопоставив каждому узлу номер, служащий адресом, по которому отправляются “пакеты данных”. Это самый простой уровень, он не так близок к логике IP, как можно подумать, но именно этот уровень используется в совсем популярных статьях для объяснения понятия “IP-адрес”: здесь IP-адрес виден как номер сетевого узла.
Уровень второй: межсетевой обмен данными. Оказывается, в Интернете существуют автономные системы. Более того, Интернет (с прописной буквы), как глобальную сеть, невозможно определить без использования хотя бы двух автономных систем. На этом уровне, – то есть, с точки зрения межсетевой маршрутизации, – IP-адреса видны как некие “точки” на сетевой границе автономной системы. Собственно, IP-адреса просто возникают на границе автономной системы. Как там устроено внутри, какой именно узел адресуется данным номером во внутренней логике автономной системы – не ясно: IP-адрес лишь задаёт точку входа (и выхода, если это транзитная автономная система).
Уровень третий: произвольные идентификаторы. IP-адрес является лишь произвольным идентификатором, по которому через сетевой порт может отвечать не менее произвольное устройство, в том числе, совсем не тот узел, как можно было бы подумать. Здесь уже граница проводится по сетевому интерфейсу. И действительно, технически, пакеты, адресованные какому-нибудь IP-адресу в Интернете, могут быть перехвачены произвольным промежуточным узлом. Это, понятно, не относится к IP, как к протоколу. Однако, если ваш компьютер отправляет пакет по адресу A.B.C.D, полагая, что это адрес “сервера Google”, то из этого вовсе и не следует, что в конкретном сетевом сегменте по данному адресу отвечает действительно “сервер Google”. Конечно, у данного подхода есть и продолжение: почему бы не вспомнить, что IP-адрес можно заменять на уровне сокета, в операционной системе? Но тут уже понятие вычислительной сети совсем “виртуализируется”, поскольку физический уровень полностью замыкается внутри одного устройства.
Комментировать »
Немного занятной и техничной практики DNS. Если взять зону kommersant.ru, то нетрудно выяснить, что с этой зоной что-то сильно не так. Вот “покрасневший” скриншот из отчёта открытого сервиса audit.statdom.ru:

Почему тут указаны только “адреса”, которые отмечены как недоступные? Во-первых, это не адреса, а имена хостов (хостнеймы), которые выглядят похожими на IP-адреса, но намётанный глаз сразу обнаружит подвох: всё выдаёт крайняя справа точка, отделяющая корневой домен; это так называемый FQDN – Fully Qualified Domain Name (“полное имя домена”). Во-вторых, серверы имён, обозначенные таким образом, доступны быть не могут, поскольку в глобальной DNS нет имени первого уровня “20.” (две цифры – 2 и 0).
Между тем, если попробовать зайти на соответствующий апексу зоны веб-сайт kommersant.ru браузером, то, скорее всего, сайт откроется. Получается, что всё работает? Нет, далеко не всё. Но это лишь очередное подтверждение того, что DNS, как сервис и совокупность технологий, в сочетании с вебом, обладает очень высокой степенью устойчивости к ошибкам настройки (кроме, конечно, DNSSEC).
Посмотрим, как же настроена зона kommersant.ru на момент написания данной записки. В домене верхнего уровня RU зона делегрована на два сервера имён (NS) с именами ns.kommersant.ru. и ns5.kommersant.ru., что, скажем, подтверждается следующим фрагментом скриншота того же отчёта:

Поскольку это так называемые “субординатные” имена NS, – то есть, находящиеся в той же зоне, которая делегируется, – серверы зоны RU возвращают соответствующие glue-записи (в отчёте они не показаны). Glue-записи содержат IP-адреса для имён делегирования (ns.kommersant.ru. и ns5.kommersant.ru.). В DNS, glue-записи необходимы для того, чтобы исключить возможность бесконечной рекурсии. Представьте, что зона test.ru делегирована на ns.test.ru. Как же определить IP-адрес ns.test.ru? Ведь для его определения нужно знать адреса NS-ов зоны test.ru, а чтобы их знать, нужно опросить зону test.ru. Как найти адреса? Верный ответ – никак не найти, если бы только не было glue-записей, которые-то и приносят нужные адреса сразу.
Почему здесь вообще возникает такая проблема с аресами/именами? Потому, что в качестве значения DNS-записи NS могут быть указаны только имена хостов. Но соединение и обмен данными в глобальном Интернете происходят по IP. То есть, для отправки запросов и получения ответов нужны именно IP-адреса. Можно ли всё же указать IP-адреса в NS-записях? Нет, нельзя. Причина в том, что значения записей в DNS не могут подразумевать какой бы то ни было протокол обмена данными. Это очень важный и логичный момент: DNS превратилась бы в непонятную путаницу, если бы какие-то дополнительные сведения об установлении соединения “подразумевались” бы: в той же NS-записи – получаем то адрес, то хостнейм, то “какие-то минусы”, то “здесь админы рыбу заворачивали”. Заметьте, сюда ещё накладывается и тот занимательный факт, что вообще невозможно вне контекста отличить запись IPv4-адреса от хостнейма. В практике DNS есть много случаев, когда тот или иной протокол доступа, да ещё и с параметрами, прямо указывается, но корректно это делается только при помощи префиксов в самом имени, например: _443._tcp.name.test.ru. (обратите внимание: предыдущая DNS-строка – не хостнейм!).
Итак, NS-запись должна содержать имя хоста, соответствующее серверу имён. Для разрешения возможных циклов – предусмотрены glue-записи.
Однако доверенным источником полного списка серверов имён для зоны является не делегирующий сервер, не glue-записи, а ответ авторитативного сервера зоны на запрос NS. По этой причине сервис тестирования DNS-узлов получает список этих узлов с авторитативного сервера. Ну, или пытается получить. Серверы, указанные для kommersant.ru в списке делегирования, на запрос NS возвращают те самые “подложные” хостнеймы, сформированные из IP-адресов четвёртой версии. То есть, так указано в файле зоны. Указано неверно. Распространённая ошибка. Видимо, ничего не поделать. Отличить тут адрес от хостнейма программное обеспечение не может, поэтому DNS-сервер будет отвечать тем, что ему написано. А написаны, как уже указано выше, заведомо “неразрешимые” имена (нет, это не IP-адреса; IP-адреса нельзя указывать в NS-записях, поэтому резолвер никак и не может понять, что это, якобы, “IP-адреса”, потому что это хостнеймы).
Почему же работает веб-сайт? Вот почему. Для большинства сценариев доступа к вебу нужен IP-адрес, который передаётся в A-записи DNS. По IP-адресам из glue-записей для обсуждающейся зоны kommersant.ru отвечают серверы имён, которые возвращают A-записи, содержащие корректный и доступный IP-адрес, который указывает на веб-узел. И тут многое зависит от рекурсивного резолвера. Если этот резолвер использует непосредственно адреса из glue-записей для того, чтобы запросить A-записи, то всё сработает. Но glue-записи небезопасно кэшировать – кэшировать следовало бы хотя бы минимально проверенные значения NS, которые требуется достать с авторитативных серверов. Если резолвер попробует получить список NS корректным способом, то он обнаружит дефектные записи, после чего попробует отправить ещё несколько запросов и, скорее всего, всё же найдёт A-запись, чтобы вернуть её клиенту. То есть, резолвер, обычно, настроен так, чтобы хоть что-то достать из DNS (не всегда это правильный выбор, поскольку регулярно служит фундаментом для целевых атак). Так что, спрашивая и переспрашивая, игнорируя и как-то исправляя ошибки в зоне, но резолвер, в большинстве случаев, сможет найти IP-адрес, чтобы потом по этому адресу попробовал подключиться браузер, если только способ достать данный IP-адрес существует. Что же касается других функций DNS – ну, они в данной зоне просто недоступны (тем более, что упомянутые серверы имён не поддерживают современный EDNS-доступ вообще).
Вот. У подобной некорректной настройки DNS есть ещё много неприятных побочных эффектов, связанных с надёжностью и безопасностью. А ведь существует ещё и QNAME Minimization.
(Недавно я описывал другую занятную ошибку настройки DNS, из “дикой природы”, наблюдающуюся в куда более популярной зоне vk.com. Представьте, кстати, куда все эти интернеты прикатятся, если DNSSEC, – несравнимо более требовательная к уровню аккуратности технология, – вдруг получит максимальное распространение.)
(Update, 30.01.2026: в январе 2026 года настройки DNS для зоны kommersant.ru поменяли, и описанный выше эффект наблюдаться перестал; что, конечно, не отменяет важности описанных в этой заметке технических моментов.)
Комментарии (2) »
Вот одна из интересных концепций, позволяющих оптимизировать взаимодействие интернет-узлов по разным сессионным протоколам: “при повторном подключении – сразу отправляем полезные данные для приложения”; это вместо сложного этапа установления соединения, требующего отправки и приёма нескольких сообщений, до того, как полезные данные станут доступны приложению.
То есть, если при первом соединении два узла должны выполнить некоторый обмен пакетами по схеме “запрос-ответ-подтверждение”, чтобы на обоих концах “сокета” сформировался синхронный контекст, то почему бы не запомнить контекст на стороне клиента и при повторных соединениях обойтись без дополнительных шагов для формирования нового контекста, а просто отправить вместе с начальным сообщением немедленно и полезные данные?
Пример уровня сетевого транспорта – TCP Fast Open, который, почему-то, известен мало: здесь клиент в рамках первого TCP-соединения, выполняемого по обычной схеме с созданием сессии, получает специальный идентификатор (cookie), чтобы при последующих соединениях сразу начать передачу полезных данных.
В TCP штатно используется схема установления соединения с тремя этапами согласования (SYN, SYN-ACK, ACK), когда передача данных приложению начинается только после завершения всех трёх этапов. И тут уже есть интересный момент, про который, бывает, забывают даже специалисты: вообще-то, данные между узлами в TCP начинают передаваться сразу же, с первым пакетом (SYN), так же, как, скажем, в UDP; потому что если бы данные не передавались (как минимум, заголовки с идентификаторами и параметрами), то и установить соединение было бы невозможно – это очевидно. То есть, с точки зрения возможности “отправить пакет в одну сторону”, TCP не слишком-то отличается от UDP на уровне, так сказать, NOC. Другое дело, что начальная информация TCP, составляющая обмен для установления сессии, не должна быть штатно доступна на уровне абстракции “сокета”. И вот тут-то начинаются отличия от того же UDP. Но сами по себе пакеты TCP вполне могут служить транспортом для “безсессионной” доставки данных.
Вариант Fast Open, если оставить за скобками детали, лишь обобщает эту возможность (о чём прямо написано в RFC), выводя её на уровень того самого “сокета”. Это делается при помощи дополнительной информации (cookie), подтверждающей, что сессия уже была установлена с соответствующими параметрами. Это и есть пример внедрения метода “сразу отправляем полезные данные”. Для реализации аналогичных логических схем в других протоколах используется, конечно, и UDP – посмотрите на WireGuard через Wireshark.
На уровне выше – тоже есть примеры: в TLS 1.3 имеется достаточно продвинутая сокращённая схема установления соединения 0-RTT (Zero Round-Trip Time), где клиент сразу же начинает передачу полезных данных в защищённом виде, если известна дополнительная информация о TLS-сервере, которую можно было получить в предыдущих соединениях (или как-то ещё).
Так что использование одной и той же полезной логической схемы самого верхнего уровня позволяет оптимизировать разные протоколы. Если задуматься, то сюда даже попадает port knocking. Вообще, если клиент и сервер заранее договорились о некотором секрете, то и обмен данными можно свести к отправке “случайных” пакетов со “случайным шумом” по случайным адресам. Пропускная способность, впрочем, будет не велика. Это работает далеко не только для Интернета.
Комментировать »
Трудности анонимизации реальных данных в реальных условиях полезно демонстрировать на примерах, в том числе, на условных примерах. Вот такой пример, очень простой.
Предположим, некоторые объекты, принадлежащие “персонам” (потому что “персональные данные”), для подсчёта отображают в одинаковые по размеру разноцветные шары, которые укладывают в урну. Персон-источников – трое. Каждому сопоставлен цвет, в который окрашиваются шары. Однако исследователям “данные предоставляются в анонимизированном, обезличенном виде”, поэтому таблица соответствия цветов персонам – уничтожается сразу, как только урна заполнена шарами.
Исследователи “обезличенных данных”, извлекая шары из урны, могу считать, сколько у “некоторой персоны” имеется объектов-шаров, но определить, кому именно из реальных персон принадлежат объекты в заданном количестве – не могут. Это действительно так. Более того, описанный метод, в разных версиях, очень широко используется и считается хорошим инструментом анонимизации данных.
В нашей учебной схеме – три персоны. Так что, предположим, в урне обнаружено 11 зелёных шаров, 13 синих, и 27 красных. Исследователи записывают эти данные. Заметьте, что исследователи могут различить все три персоны (A, B, C). Если бы это было не так, то и анонимизации с шарами не потребовалось бы – просто не возникало бы необходимости: весь смысл обезличивания тут в том, чтобы “отсоединить” данные от конкретных узнаваемых персон. Из-за обезличивания данных исследователи не имеют возможности ответить на вопрос, сколько у конкретной узнаваемой персоны объектов, обозначенных шарами. Ну, пока что не имеют такой возможности.
Теперь представьте, что начинается следующая итерация: персона A передаёт персоне B один свой объект. Можно считать, что передаёт шар, но при этом не раскрывается цвет шара. Тем не менее, факт обмена исследователям известен, поскольку именно для определения того, как “распределяются ресурсы”, подобные исследования и затеваются. Чтобы обновить данные – применяется всё тот же метод анонимизации. Соответствие цветов, конечно, выбирается новое, и информация о нём тоже уничтожается после распределения шаров.
Теперь в урне 10 красных шаров, 13 синих и 28 зелёных. Думаю, уже всё понятно.
Исследователи ведут архив. Так что у них теперь две выборки: до передачи шара и после. Поэтому-то вся “анонимизация” вдруг исчезла, так как в одной из выборок один шар поменял “цвет” (и не важно, что он мог его реально сохранить, поскольку применялась рандомизация цветов – сопоставить цвета между выборками нетрудно). Поменявший цвет шар – это и есть тот шар, который поменял владельца. А значит, исследователям теперь известно, кому из персон принадлежит каждая выборка шаров по цвету, в том числе, с историей. Ошибка схемы анонимизации тут в том, что обезличивалось владение объектом, но вовсе не факт смены владельца. Переход шара между выборками – никак в этой схеме не маскируется. Вот если бы в каждом цвете всегда было одинаковое количество шаров – но, погодите, а что бы тогда исследователям исследовать?
Конечно, чтобы только что описанный пример сработал, требуется использование “дополнительной базы данных”, из которой известно, что была конкретная передача шара, что она произошла между выборками, а если передач шаров много, то ещё нужно учитывать чётность и так далее. Но на то он и простой пример. С другой стороны, подобная анонимизация ведь и обосновывается тем, что “защищает” от нахождения персон в “других базах”: на то оно и “обезличивание”. Однако обезличивать реальные данные, по которым можно построить историю, весьма и весьма сложно, если, конечно, нужно сохранить хоть какие-то полезные показатели в этих данных.
Ещё один хороший пример, регулярно всплывающий, это обезличивание “геопривязки”, о чём я писал ещё в 2009 году.
Комментировать »
Кстати, ECH для TLS я достаточно подробно, – но, вместе с тем, популярно, – описывал в отдельной статье на сайте ТЦИ в 2021 году. Описание там дано в контексте развития “этих интернетов”, начиная от ESNI, что, на мой взгляд, весьма полезно.
Comments Off on Ссылки: популярное описание ECH
Языки программирования на GitHub, рейтинг 2024 года: всех обогнал Python, что и понятно – первая же главная тенденция, упомянутая в отчёте GitHub, – рост активности по разработке AI/ИИ. Я GitHub, в смысле публикации результатов, практически не использую (кроме того, конечно, что это типовой источник исходных кодов и других весьма полезных данных), а вот языки программирования – использую. Python, который с первого места рейтинга, – использую регулярно, но по чуть-чуть: в основном, потому что это входной язык SAGE (система компьютерной алгебры), но и потому, что весьма удобно написать какой-то быстрый демонстрационный скрипт, иллюстрирующий работу с тем или иным API.
На втором месте рейтинга – JavaScript. Постоянно теперь использую, так как он среди основных языков в паре проектов, к которым я имею непосредственное отношение.
Третье место – TypeScript. Не использую, однако специфический код, хоть и редко, но попадается.
Четвёртое место – Java. Очень давно не использую. Однако с кодом на Java сталкиваюсь не так редко, как хотелось бы.
Пятое место – C#. Очень и очень давно не использую, не попадается.
Шестое место – C++. Иногда использую, в том числе, всякие “варианты” для Arduino и др. Код попадается постоянно. Вообще, я согласен с известным мнением, что основной недостаток “плюсов”, как явления, в том, что никто их реально не знает (буквально).
Седьмое место – PHP. Иногда использую: например, dxdt.ru работает на WordPress, а это PHP.
Восьмое место – Shell. Что бы это ни значило, однако большие bash-скрипты – и пишу, и использую постоянно.
Девятое место – C. Регулярно использую (см. комментарий к шестому пункту выше). Постоянно требуется смотреть в код на C. Для криптографических инструментов, системных сервисов – всё ещё основной язык подлинной документации (а не “руководства пользователя”).
Десятое место – Go. Сейчас у меня это основной используемый язык, он был бы на первом месте, но в рейтинге GitHub – почему-то на десятом.
Perl не попал в десятку. Шутка. Ну, то есть, действительно не попал, а я иногда использую, но гораздо реже, чем разные ассемблеры. Впрочем, Rust в десятку тоже не попал (пока так и не использую, но код иногда читать приходится).
Кстати, о языках: несмотря на название (GitHub), в том же рейтинге самый большой прирост разработчиков на данной платформе указан для Великобритании.
Комментировать »
На сайте ТЦИ опубликована моя статья «Постквантовые криптосистемы в TLS и не только». Там про ML-KEM и вес ключей, а также о сертификатах и, – немного, – о квантовых вычислениях. Цитата:
Может даже показаться, что массовый переход на постквантовую криптографию в Интернете уже почти завершился, а вот квантовых компьютеров, из-за которых всё и было затеяно много лет назад, на горизонте пока не видно. Впрочем, это не совсем так. Но, конечно, не в части видимости квантовых компьютеров на горизонте, – их не видно всё так же, как и двадцать лет назад, – а в части внедрения постквантовой криптографии. Несмотря на бесспорные практические успехи и огромнейший отрыв от сугубо теоретических квантовых компьютеров, до всеобъемлющего внедрения всё ещё далеко (если такое внедрение когда-либо вообще потребуется).
Комментировать »
Новый