Обновить
64K+

Криптография *

Шифрование и криптоанализ

115,91
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Квантовый взлом шифрования RSA и ECC подешевел: от миллиона кубитов до нескольких десятков тысяч

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели1.8K

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

В марте 2026 года две независимые группы объявили о результатах, которые заметно сокращают разрыв между теорией и реальными машинами. Звёздная команда квантовых физиков из Калифорнийского технологического института (Калтеха) представила проект квантового компьютера, способного взламывать шифрование RSA и ECC всего лишь с помощью десятков тысяч кубитов, и заявила о создании компании для его разработки. А исследователи из Google объявили о разработке реализации алгоритма Шора, которая в десять раз эффективнее лучшего из предыдущих методов.

Но почему именно алгоритм Шора так интересует большинство специалистов по квантовым вычислениям? Примерно 30 лет назад математик Питер Шор взял за основу узкоспециализированный физический проект — компьютер, который работал бы по контринтуитивным законам квантовой механики, — и потряс мир.

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

Читать далее

Новости

От Root CA до User Authorization в nginx+apache. Часть 4. Свой web-УЦ: выпуск из браузера, роли и аудит

Уровень сложностиСредний
Время на прочтение82 мин
Охват и читатели6.7K

Четвёртая часть цикла про свой удостоверяющий центр. В первой мы развернули Root CA и три промежуточных центра, во второй научились отзывать сертификаты и подняли OCSP-responder, в третьей настроили вход по клиентскому сертификату в nginx и Apache. Осталось ответить на вопрос, который возникает сразу после первого успешного входа: а откуда у людей берутся сертификаты?

Пока удостоверяющим центром пользуется один человек, openssl в терминале — идеальный интерфейс. Как только приходит второй с просьбой «выпусти мне тоже», начинается то, ради чего существуют регистрационные центры: заявки, роли, журнал и ответ на вопрос «кто и на каком основании это подписал».

В четвёртой части:

— PKCS#10 прямо в браузере. Ключ рождается в WebCrypto и не покидает его, запрос собирается на голом JavaScript без единой библиотеки, а результат проверяется настоящим openssl, а не «на глаз».

— Почему кнопке «получить сертификат» нельзя доверять отличительное имя: позволь заявителю назвать себя самому — и он выпишет себе сертификат с DN администратора. Настоящий, подписанный вашим же центром.

— PKIDesk: движок управления сертификатами на Go, без единой зависимости, под Apache-2.0. Разрезан по границе доверия — у веб-части нет ни ключей УЦ, ни index.txt, ни даже бинарника openssl. Плюс пять архитектурных развилок, за которые придётся отвечать перед аудитом.

— Три дефекта, которые вылезли только на живом стенде: правило subjectAltName = supplied, которое не выполнится никогда; просроченный сертификат, который остаётся действующим и занимает subject; гонка «выпустил — сразу зашёл», где nginx запоминает неудачную проверку отзыва.

— Четыре расширенных справочника, 237 параметров: openssl req, openssl genpkey, структура PKCS#10 и Web Crypto API — синтаксис, значения, умолчания и подводные камни, сверенные с официальной документацией.

Читать далее

«Файл подписан, значит безопасный» — цифровая подпись отвечает не на тот вопрос

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели6.4K

«Он подписан, издатель известный» — этим аргументом закрывают вопрос про стороннюю программу, которую тянут в сборку или ставят на рабочий компьютер. Возразить с ходу нечем: вкладка «Цифровые подписи» в свойствах файла и правда показывает «Эта цифровая подпись действительна». Случаи, когда вредоносный файл подписан настоящим сертификатом, редки — на них и не рассчитывают. В таких разговорах я обычно зануда.

Подпись действительно кое-что подтверждает. Просто не то, что от неё ждут. Она говорит: «этот файл в момент подписи выпустил вот такой издатель, и после подписи содержимое не меняли». Она не говорит: «файл безопасен», «издатель — тот, за кого себя выдаёт прямо сейчас» и «ключ не украли полгода назад».

Читать далее

«Подписываем данные SHA-256 с секретным ключом». Такую подпись подделывают, не зная ключа

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.6K

Знакомая схема защиты от подмены. Сервер кладёт клиенту cookie user=guest&role=reader и рядом — подпись sha256(secret + данные), чтобы клиент не переписал reader на admin. Секрет знает только сервер, поэтому пересчитать подпись под изменённые данные клиент вроде бы не может.

Поломается не сама SHA-256, а конструкция вокруг неё: к данным можно дописать хвост &role=admin и предъявить к нему валидную подпись, не зная секрета вообще. Атака называется length extension, и в статье мы её проделаем на своём же сервере.

Читать далее

Защита биткоина от несуществующих квантовых компьютеров

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели12K

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

На самом деле сообщество Bitcoin давно выработало технические решения для данной проблемы. Максимум, что требуется — обычный софтфорк, то есть обновление ПО. Его не проводят лишь потому, что КК стоят в книжном магазине на полке «Научная фантастика», если перефразировать известный анекдот.

Читать далее

Физики впервые сгенерировали сертифицированно идеальную случайность из ненадёжных сигналов

Время на прочтение4 мин
Охват и читатели17K

Числа, генерируемые обычными программными ГСЧ, абсолютно детерминированы. Физические же ГСЧ (даже квантовые) не детерминированы, но из-за несовершенства компонентов они выдают «грязную» случайность — с микро-закономерностями и смещениями. Это можно использовать для взлома шифра.

Вот почему истинная непредсказуемость крайне важна.

Учёные из Швейцарского федерального технологического института Цюриха (ETH Zurich) опубликовали научную работу, в которой случайность достигает настолько высокого уровня (см. диаграмму в конце статьи со значением CHSH S = 2,271), который вообще невозможен в любой локально-реалистической теории. Только квантовые эффекты позволяют повысить теоретически возможный лимит S с 2 до 2√2.

Читать далее

Рыбно‑пузырьковая энтропия в KMS

Время на прочтение9 мин
Охват и читатели12K

Смоделируем ситуацию: внезапно бот проходит вашу капчу, потому что заранее знает, какие случайные числа будут сгенерированы. Если рандом предсказуем, то защита становится иллюзией. Чтобы такая ситуация была невозможна, мы используем различные источники рандома. 

Наверняка многие знают про броуновское движение и прочие природные рандомайзеры. Два года назад у меня родилась идея, которую коллеги поначалу приняли за шутку. Рыбы, пузыри, каустики на дне, колышущиеся водоросли — каждую секунду картинка меняется так, как не предскажет ни одна модель. И тут я понял, что можно забрать весь этот хаос в продакшн.

Читать далее

Ловушка для собственного бэкенда: как заметить, что тебя уже взломали

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.1K

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

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

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

Читать далее

От Root CA до User Authorization в nginx+apache. Часть 3. Вход по клиентскому сертификату: прокси или приложение

Уровень сложностиСредний
Время на прочтение147 мин
Охват и читатели6.9K

В первой части я обещал беспарольный вход в админку. Здесь он наконец заработал.

Что внутри:

— mTLS в nginx и apache: все директивы, все переменные $ssl_client_* и SSL_CLIENT_*, семь справочников на 309 параметров, сверенных с документацией; — вход по кнопке вместо диалога выбора сертификата на первом же заходе — с отдельным хостом, одноразовым пропуском и защитой от login CSRF; — выпуск сертификата в один клик: ключ рождается в браузере и не уезжает на сервер; — свой web-УЦ на Go без единой зависимости, где ключ УЦ отделён от веба сетевой границей.

И честная часть: три дефекта, которые вылезли только на живом стенде, окно версий nginx между CVE и регрессией, и дыра, которую состязательная проверка нашла в уже работавшем коде.

Читать далее

.fsecurity — как можно разделять файлы, базы данных и ключи шифрования

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели4.6K

Разработал .fsecurity — отдельный модуль FlautCompany для защиты файлов, в котором ключи шифрования не хранятся в базе данных. Разбираю архитектуру и принцип разделения данных и ключей.

Читать далее

Делаем пост‑квантовый протокол удобным, не ломая шифрование на TypeScript. Обновленная и гибкая библиотека

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.3K

Как я улучшил гибридный квантово-устройчивый протокол шифрования за 4 месяца экспериментов. Разбор различных методов ротации ключей, NTT и других нюансов проектирования протоколов шифрования с объяснением.

Читать далее

Второй фактор, который жил в чужой странице: как я выбросил WebAuthn из своего сервиса ключей

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели7K

Мы храним зашифрованные данные, и рядом с ними лежат ключи, которые к этим данным не подходят. Выглядит как расстройство для взломщика.

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

Читать далее

Масштабирование WebRTC потоков с пулингом движков на Go

Уровень сложностиСложный
Время на прочтение5 мин
Охват и читатели7K

Броский заголовок есть, а теперь к сути. Сие ошибка, стандартный привет от дефолтного модуля pion/webrtc в Go. Воспроизводится просто – читаем обычные мануалы по использованию pion, выкатываешь красивый WHEP-хендлер, открываешь пару (ладно, ладно, не пару, просто красивый оборот) вкладок с плеером в браузере, и сервер начинает захлебываться. Хендшейки виснут по секундам, ICE отваливается по таймауту, а в pprof половина флеймграфа забита crypto/elliptic.p256OrdSqr и аллокациям мап внутри движка. Сюрприз? Да никакого сюрприза, если более вдумчиво почитать большинство «туториалов» по WebRTC на Go. Мне кажется, что они впринципе написаны теми, кто никогда не тестировал свою реализацию под нагрузкой даже полсотни одновременных зрителей – максимум пару-тройку потоков и успокоились на этом. Так вот, там на каждый POST-запрос с SDP-оффером создают новый webrtc.NewAPI(), регистрируют дефолтные кодеки, дергают api.NewPeerConnection() и со спокойной душой отдают ответ. На локалхосте, с парой клиентов это летает и работает без проблем. А вот на проде – превращается в катастрофу. Проблема здесь не в самом WebRTC (и уж тем более библиотеке pion`a, она очень крутая) и не в Go. Проблема в том, что глобальную и дорогую «инфраструктуру» создают на каждый(!) запросом, вместо того чтобы просто ее переиспользовать.

Читать далее

Ближайшие события

Паничный PIN, который отдавал ключ от всего: разбор ошибок

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели9.1K

Мы делаем мессенджер RCQ (rcq.app, исходники клиентов на github.com/rcq-messenger). В нём есть штука, которую в разных приложениях называют по-разному: паничный PIN, duress PIN, подставной код. Смысл один. У вас просят разблокировать телефон, вы вводите второй PIN, и человек напротив видит приложение, в котором ничего интересного нет.

В августе мы сели проверять какие у нас остались проблемы с этой фичей. Проверка началась как формальность перед внешним аудитом: пройти по коду, сверить с тем, что написано в модели угроз, поправить формулировки. Закончилась она тем, что на Android подставной PIN оказался не границей, а ключом от всей переписки.

Читать далее

Anthropic пометила текст Claude невидимым клеймом. Опенсорс-сообщество попыталось взломать уже через 48 часов

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели13K

2.08.2026 года, в день когда в ЕС реально завелась статья 50 AI Act, Anthropic сделала ход конём: с этого дня каждый текст, который выдаёт свеженькая модель Claude, тащит в себе невидимую метку. (Не пиксель или строчку метаданных в углу, а метку, вплетённую прямо в сам выбор слов) Это подали как жест прозрачности: мол, вот вам транспарентность(как просили).

Не прошло и суток, как в гитхабе набрал обороты проект, обещающий эту метку стереть. За ним — ещё десяток.

А неделю спустя независимое издание констатировало: доказать, что хоть один из них реально работает, не может никто (ни авторы ни сама Anthropic).

Эта статья – о том, почему это не баг и не провал маркетинга, а неизбежное следствие того, как устроена технология. И заодно — почему у истории куда более длинная борода, чем у чат-ботов: первые водяные знаки придумали за семьсот с лишним лет до GPT.

Читать далее

AS2 в .NET без отдельного Java-гейтвея: EDI-обмен с партнёрами прямо в маршруте

Уровень сложностиСложный
Время на прочтение15 мин
Охват и читатели11K

Если вы поставляете товар в крупную розницу, возите грузы для 3PL-оператора, шлёте платёжные извещения банку или обмениваетесь медицинскими транзакциями X12 — вы почти наверняка обмениваетесь этими документами по AS2. Заказ (EDI 850), счёт (810), уведомление об отгрузке (856), платёжное авизо (820) уходят партнёру не почтой и не через REST, а как подписанный и зашифрованный S/MIME-конверт поверх HTTP, с подписанной квиткой-распиской в ответ. Так работает регламентированный B2B-документооборот в рознице, логистике, финансах, производстве и здравоохранении уже двадцать лет: Walmart, Amazon и их сети поставщиков, банки с host-to-host каналом, автопром, дистрибьюторы — все требуют AS2.

В .NET до сих пор было два пути. Либо коммерческий AS2-шлюз — Cleo, Seeburger, BizTalk — отдельная коробка, отдельная лицензия, отдельная команда сопровождения. Либо Java-сервер с открытым кодом — OpenAS2, Mendelson Community — отдельный JVM-процесс рядом с вашим .NET-бэкендом, со своим inbox-каталогом, откуда документы надо ещё забирать джобой. В обоих случаях AS2 живёт сбоку от вашей интеграции, а не внутри неё.

redb.Route.AS2закрывает этот разрыв: AS2 становится обычным шагом маршрута в вашем .NET-процессе. Приняли конверт от партнёра, расшифровали, проверили подпись, отдали документ в pipeline — провалидировали, трансформировали, положили в Kafka или SQL — и вернули партнёру подписанную расписку. Один процесс, один деплой, одна панель наблюдаемости. Разберём, как это выглядит в коде, где применяется и почему нативный коннектор в ESB выигрывает у отдельного шлюза.

Читать далее

ISO 9797-1: поросячья латынь

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели5.3K

Увы, у меня нет профильного математического образования (я вообще гуманитарий), потому любой стандарт по криптографии для меня ничто иное, как поросячья латынь. А после детального изучения приходит горькое осознание, что это я лезу в калашный ряд со свиным рылом... И вот прилетела задача, решить которую промптом не получится (я пробовал, честно), а потому надо лезть в калашный ряд ISO9797-1 и смотреть, что там такое делается. Результаты изучения решил расписать здесь, т.к. может кому-то будет полезно, а может кто-то из crypto-лордов укажет на недочеты/ошибки.

Читать далее

Настоящее должно доказывать прошлое

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели4.7K

Может ли блокчейн проверить своё текущее состояние, не воспроизводя всю историю исполнения от genesis?

Новой ноде можно передать полностью корректный snapshot блокчейна. Каждая запись будет корректно декодироваться. Все commitments будут соответствовать данным. По всем очевидным признакам данные будут внутренне согласованы.

Но это не отвечает на главный вопрос:

Почему это состояние следует принять как результат работы цепочки?

У Bitcoin ответ простой: самостоятельно восстановить состояние. Нода начинает с genesis, проверяет цепочку, исполняет каждую транзакцию и получает текущий набор UTXO.

Доказательство настоящего находится в прошлом.

Snapshots могут ускорить этот процесс. Checkpoints могут перенести его начальную точку. Специализированная инфраструктура может выполнить историческую работу в другом месте и передать результат.

Но ни один из этих подходов не меняет саму зависимость. Состояние перед вами по-прежнему не доказывает, что было получено из genesis через валидную последовательность переходов.

Именно это я решил изменить.

Вопрос был не просто в том, можно ли сжать историю блокчейна в рекурсивное доказательство. Он звучал иначе:

Что, если консенсус будет переносить вперёд саму валидность текущего состояния?

Тогда новая нода сможет получить текущее состояние вместе с доказательством валидного пути, который к нему привёл. Чтобы понять, почему настоящее валидно, ей не придётся заново исполнять всю историю работы сети.

Трудоёмкость проверки состояния больше не будет расти лишь потому, что цепочка становится старше. Чтобы удостовериться в подлинности настоящего, ноде нужно будет работать с тем, что существует сейчас, а не со всеми транзакциями за всю жизнь сети.

Читать далее

Как продлевали Chat Control 1.0

Время на прочтение3 мин
Охват и читатели12K

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

Читать далее

Расшифровка шифротекста не зная ключ по XOR

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.5K

Доброго времени суток. Я новичок в криптографии. Хотелось бы рассказать свой ход мыслей по поводу расшифровки текста по алгоритму XOR, когда не знаешь ключ.

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

С XOR другая ситуация. Алгоритм простой, но сложность есть. Я скачал книгу с gutenberg project в текстовом формате и также взял словарик в линуксе. Сделал получение случайным образом позицию в книге и случайный ключ из словаря.

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

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

Читать далее
1
23 ...