惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
Vercel News
Vercel News
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
Jina AI
Jina AI
B
Blog
Recorded Future
Recorded Future
MyScale Blog
MyScale Blog
I
InfoQ
aimingoo的专栏
aimingoo的专栏
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
雷峰网
雷峰网
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
爱范儿
爱范儿
Last Week in AI
Last Week in AI
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Schneier on Security
Schneier on Security
V
V2EX
TaoSecurity Blog
TaoSecurity Blog
H
Hacker News: Front Page
Cloudbric
Cloudbric
D
DataBreaches.Net
B
Blog RSS Feed
P
Palo Alto Networks Blog
云风的 BLOG
云风的 BLOG
NISL@THU
NISL@THU
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
F
Fortinet All Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
K
Kaspersky official blog
Forbes - Security
Forbes - Security

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Nonce Observatory:
tqec · 2026-05-06 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение13 мин

Охват и читатели0

Обзор

как мы превратили подписи в систему наблюдаемых nonce-инвариантов, решёток и проверяемых forensic-отчётов

Не “сломать Bitcoin”, а научиться видеть слабые nonce

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

Именно nonce — одно из самых хрупких мест ECDSA и Schnorr-подписей. Не потому, что сами протоколы “плохие”, а потому, что они требуют дисциплины: каждый nonce должен быть секретным, уникальным и достаточно случайным. Если nonce повторился, частично утёк, оказался слишком коротким или начал следовать закономерности, приватный ключ может стать вычислимым.

Но реальная проблема сложнее, чем “найти одинаковый r”. Повтор nonce — это катастрофа, которую видно сразу. А что делать, если nonce не повторяется, но лежит в малом окне? Если у него общий префикс? Если последовательность nonce напоминает ladder? Если есть recurrence? Если в MuSig2 дефект спрятан не в одной подписи, а в effective nonce после агрегации коэффициентов?

Так появилась идея nonce-observatory: не пытаться сразу “восстановить ключ”, а построить систему наблюдения за скрытой nonce-геометрией.

Главная идея проста:

подпись — это не просто пара чисел (r, s);
подпись — это публичная проекция скрытого nonce k и приватного ключа d.

Если аккуратно построить protocol bridge, то из публичных подписей можно получить affine-семейства скрытых nonce-кандидатов, точные целочисленные инварианты, признаки сжатия, решёточные HNP-маршруты и, только в строго проверяемых случаях, candidate private key.

Но в системе действует железное правило:

сигнал ≠ восстановление;
кандидат ≠ приватный ключ;
d принимается только если d·G == observed public key.

Именно это отличает исследовательский forensic engine от “скрипта, который обещает взломать Bitcoin”.


Что уже было известно до нас

Сначала честно: мы не изобрели HNP, LLL, ECDSA lattice attacks или Polynonce.

Hidden Number Problem — известная математическая рамка, появившаяся в работе Boneh–Venkatesan. Интуитивно HNP — это задача восстановления скрытого числа, когда мы много раз видим частичную или “шумную” информацию о линейных выражениях от него в модульной арифметике. В ECDSA это естественно возникает, если nonce частично известен или ограничен. (isa-afp.org)

Есть публичные реализации ECDSA lattice attacks, где приватный ключ восстанавливается при известных MSB/LSB битах nonce. Например, Bitlogik демонстрирует восстановление ECDSA key при известной части ephemeral nonce. (GitHub)

Есть Polynonce — класс атак на polynomial nonce recurrence в ECDSA; Kudelski применяли такую идею к Bitcoin/Ethereum-датасетам и публично описывали методологию и результаты. (Kudelski Security)

Есть Minerva — lattice attack на утечку bit-length nonce через timing leakage в ECDSA и родственных алгоритмах. (Minerva)

Есть BIP340 — стандарт Schnorr-подписей для secp256k1, где верификация строится вокруг уравнения s·G = R + e·P, а публичные ключи и nonce-точки используют x-only представление и even-Y convention. (Bips)

Есть BIP327/MuSig2 — стандарт multi-signature scheme, совместимый с BIP340. (Bips)

То есть отдельные кирпичи известны. Новизна nonce-observatory не в том, что мы “открыли LLL” или “открыли HNP”. Новизна — в том, что мы собрали эти кирпичи в строгую forensic-систему, где каждый переход контролируется evidence gate.


В чём уникальность nonce-observatory

Я бы сформулировал так:

nonce-observatory — это multi-protocol forensic operating system для weak-nonce analysis, где ECDSA, Schnorr/BIP340 и MuSig2/BIP327 переводятся в protocol-valid affine nonce geometry, а любые recovery claims разрешены только через exact public-key validation.

Ключевые элементы, которые в такой комбинации публично встречаются редко или вообще не видны как единая система:

ECDSA / Schnorr / MuSig2 bridge
+ affine hidden-nonce families
+ exact integer/rational metrics
+ null baseline / positive controls
+ recoverability sanity
+ HNP/Kannan/HNF route
+ Q-LLL backend
+ fplll same-case baseline
+ target embedding decoder
+ nonce error reconstruction
+ cross-signature vote
+ d·G == pubkey acceptance
+ redaction layer
+ claim-boundary scanner
+ full-system audit
+ local AI sidecar on gpt-oss-20b-TurboQuant-MLX-8bit

Это не “одна атака”. Это инженерная среда, которая умеет:

увидеть сигнал;
понять, есть ли bridge к recovery;
отказать, если bridge слабый;
построить lattice/HNP route;
проверить recoverability;
запустить backend;
декодировать candidate;
принять candidate только по d·G == P;
сформировать public-safe evidence.

Математический минимум: почему nonce опасен

ECDSA

ECDSA-подпись удовлетворяет уравнению:

s = k^{-1}(z + r·d) mod n

где:

d — приватный ключ
k — nonce
z — hash сообщения
(r, s) — подпись
n — порядок группы secp256k1

Перепишем:

s·k ≡ z + r·d mod n

или:

k ≡ s^{-1}(z + r·d) mod n

Теперь введём гипотетический секрет d':

k_i(d') = s_i^{-1}(z_i + r_i·d') mod n

Для группы подписей одного public key получаем семейство:

K(d') = { k_1(d'), k_2(d'), ..., k_m(d') }

Истинный d — это параметр, при котором скрытые nonce соответствуют тому, что реально происходило при подписании. Если генератор nonce был слабым, это может проявиться как сжатие, повтор, малый диапазон, prefix family, recurrence или HNP-структура.

Schnorr / BIP340

BIP340-подпись удовлетворяет:

s·G = R + e·P

где:

e = H_challenge(r || P || m) mod n

Из публичных данных можно восстановить:

R* = s·G − e·P

И проверить membership:

r ∈ [0, p)
s ∈ [0, n)
R* != O
y(R*) even
x(R*) == r

Это важно. Мы не “угадываем” R. Мы реконструируем единственную protocol-valid точку и проверяем её соответствие BIP340.

Affine-модель:

s = k + e·d mod n

значит:

k_i(d') = s_i − e_i·d' mod n

То есть Schnorr тоже ложится в affine hidden-nonce geometry.

MuSig2 / BIP327

MuSig2 сложнее. Там есть aggregate key, aggregate nonce, nonce coefficient, key aggregation coefficient, parity corrections. Но partial signature участника можно привести к форме:

s_i = k_eff,i + c_i·d_i mod n

где:

k_eff = k1_eff + b·k2_eff
c_i = e·a_i·g·gacc

Здесь b, a_i, g, gacc — не украшения, а часть protocol bridge. Ошибка в этих коэффициентах ломает анализ.

Суть: MuSig2 partial signature можно свести к Schnorr-like affine equation, но только если аккуратно раскрыть все коэффициенты контекста.


От “сигнала” к “восстановлению”: зачем нужен HNP

HNP — это мост между слабостью nonce и решёткой.

Предположим, nonce не полностью известен, но имеет вид:

k_i = known_i + ε_i

где ε_i — маленькая ошибка.

Подставляем в ECDSA:

s_i·(known_i + ε_i) ≡ z_i + r_i·d mod n

Переносим:

r_i·d − s_i·ε_i ≡ s_i·known_i − z_i mod n

Теперь неизвестны:

d
ε_1, ε_2, ..., ε_m

Но ε_i маленькие. Это типичный HNP/lattice case: правильное решение соответствует короткому или декодируемому вектору.

В nonce-observatory это выглядит так:

signature corpus
  → leakage contract
  → HNP/Kannan lattice case
  → exact HNF row-lattice basis
  → Q-LLL / fplll
  → target_embedding_decode
  → nonce_error_reconstruct
  → cross_signature_vote
  → candidate d
  → d·G == pubkey

Важно: HNP не используется против корректных случайных nonce. HNP route работает только если есть явная nonce-слабость: известные биты, малый error bound, bounded nonce, window locality, prefix leakage или synthetic positive-control.


Что использует Q-LLL

Q-LLL не “угадывает приватный ключ”.

Он не использует маленький d.

Он не делает brute force по nonce.

Он не принимает решение потому, что AI сказал “похоже”.

Q-LLL использует только то, что можно превратить в lattice object:

bounded / partial nonce leakage
→ HNP
→ Kannan target embedding
→ short/decodeable vector

Типы слабостей, которые в принципе могут вести к Q-LLL/HNP route:

Слабость

Что это значит

Используется как

known MSB/LSB nonce

известны старшие/младшие биты k

HNP

short nonce

nonce существенно меньше n

bounded HNP

bounded error

k = known + ε, где ε мал

HNP

prefix leakage

общий префикс nonce

bounded-error HNP

window locality

nonce в малом modular-window

candidate HNP route

biased family

неравномерное распределение

signal, иногда route

recurrence

nonce связаны законом

скорее Polynonce-like или custom route

repeated nonce

один nonce дважды

обычно direct algebra, Q-LLL не нужен

В нашем последнем milestone Q-LLL использует controlled ECDSA-HNP positive-control: d берётся из полного диапазона secp256k1, но nonce имеет специальную recoverable HNP-структуру.


Почему было недостаточно “запустить Q-LLL”

На раннем full-range checkpoint Q-LLL и fplll оба запускались, но не восстанавливали d. Это не означало, что Q-LLL “плохой”. Recoverability sanity показал:

truth_vector_constructible: true
truth_vector_norm2_bits: 512
truth_vs_det_root_floor: truth_norm2_greater
case_expected_to_recover: false
likely_cause: truth_vector_not_short_enough_for_current_lattice

Перевод на человеческий:

правильный solution vector существует,
но в этой lattice formulation он слишком длинный,
поэтому reduced basis не обязан его вытаскивать.

То есть проблема была не в backend, а в постановке.

Дальше recoverability layer нашёл другой вариант:

kannan_plus_b_transform

Он был recoverable, но имел overcomplete/rank-deficient форму [6,5]: fplll такую систему обрабатывал, а reference Q-LLL требовал square full-rank row basis.

Мы не стали переписывать Go/Q-LLL под rank-deficient systems. Вместо этого сделали более аккуратный путь:

overcomplete Kannan row system
→ exact HNF row-lattice basis
→ square full-rank Q-LLL-compatible basis

Так появились модели:

kannan_plus_b_transform_hnf_basis
kannan_minus_b_transform_hnf_basis

Это важная инженерная часть: мы сохранили integer row-lattice, но дали Q-LLL форму, которую он может корректно редуцировать.


Главный milestone: full-range Q-LLL recovery

Текущий golden state:

secret_bits: 0
secret_range: full_secp256k1
nonce_bruteforce_disabled: true
lattice_model: kannan_plus_b_transform_hnf_basis
basis_conversion: exact_row_lattice_hnf_basis
decoders:
  target_embedding_decode
  nonce_error_reconstruct
  cross_signature_vote
candidate_source: target_embedding_decode
candidate_acceptance_rule: d*G == pubkey

Результат same-case:

fplll:
  backend_ok: 3
  pubkey_matches: 3
  matches_truth_d: 3

Q-LLL:
  backend_ok: 3
  pubkey_matches: 3
  matches_truth_d: 3

Это означает:

Q-LLL достиг parity с fplll
на full-range controlled ECDSA-HNP regression
без nonce brute force
с acceptance только через d·G == pubkey.

Это не доказывает, что Q-LLL лучше fplll.

Это не доказывает, что реальные сети уязвимы.

Это доказывает:

в корректной recoverable HNP-постановке
Q-LLL может восстановить full-range secp256k1 scalar
внутри nonce-observatory route
с точной публичной проверкой кандидата.

Что такое Q-LLL в этом проекте

Q-LLL в проекте — это не “магическая новая атака”.

Это lattice backend с quantized/oracle machinery и exact-certified boundaries.

Проще:

обычный LLL/fplll:
  редуцирует решётку классическим способом

Q-LLL:
  использует quantized/oracle routing для выбора перспективных действий,
  но все принятые мутации и финальный результат должны проходить exact certificate

В отчётах фиксируется:

valid: true
transform_matches: true
final_exact_certificate: true
exact_gso_calls_during_oracle: 0
fallback: false

То есть quantized/oracle слой не является “истиной”. Он только помогает маршрутизации. Истина остаётся в exact certificate и d·G == pubkey.


Как это отличается от обычных HNP-скриптов

Обычный ECDSA lattice-скрипт часто выглядит так:

есть known nonce bits
строим матрицу
запускаем LLL
пытаемся вытащить d

nonce-observatory делает больше:

1. проверяет protocol validity;
2. строит affine nonce-family;
3. ищет signal;
4. проверяет recoverability;
5. выбирает lattice variant;
6. приводит basis к backend-compatible форме;
7. запускает Q-LLL/fplll same-case;
8. декодирует target embedding;
9. реконструирует nonce errors;
10. голосует по подписям;
11. принимает d только через d·G == pubkey;
12. редактирует секреты в public-safe reports;
13. сканирует claim boundary;
14. гоняет full-system audit.

Именно эта цепочка делает систему интересной.


Сравнение с другими подходами

Подход

Что делает

Ограничение

repeated-r scanner

ищет одинаковый r

не видит мягкие слабости

Bitlogik-style lattice attack

восстанавливает ECDSA key при известных битах nonce

не является multi-protocol forensic system

Minerva

использует timing/bit-length leakage

требует side-channel leakage

Polynonce

ищет polynomial recurrence nonce

другой класс nonce-дефекта

fplll/BKZ

сильный generic lattice backend

сам не строит evidence contract

blockchain analytics

анализ адресов/транзакций

обычно не анализирует nonce-геометрию

nonce-observatory

protocol-valid nonce-forensics + HNP routes + Q-LLL/fplll + evidence gates

пока не заявляет real-network recovery и Q-LLL superiority


Где здесь AI и зачем gpt-oss-20b-TurboQuant-MLX-8bit

Отдельная важная часть проекта — локальный AI-sidecar.

Используется локальная модель:

gpt-oss-20b-TurboQuant-MLX-8bit

в окружении Apple Silicon / MLX. Важно понимать роль модели.

Она не делает криптографический вывод.

Она не принимает d.

Она не заменяет верификатор.

Она не имеет права сказать:

этот private key правильный

Её роль другая:

читать отчёты;
классифицировать failure mode;
предлагать следующий route;
проверять claim wording;
искать противоречия;
помогать с audit planning;
подсказывать, какие variants прогнать;
объяснять, почему recovery не должен был произойти;
генерировать buyer-safe summaries.

Почему именно локальная модель важна?

OpenAI выпустила open-weight gpt-oss-120b и gpt-oss-20b как модели, которые можно запускать на собственной инфраструктуре; официальная документация подчёркивает, что они не доступны через ChatGPT/API как hosted-модели и предназначены для запуска под контролем пользователя. (OpenAI Help Center)

OpenAI также указывала, что gpt-oss-20b требует существенно меньше памяти, чем 120b, и распространяется в нативно квантованной форме MXFP4; это делает локальный deployment практичным для задач, где важны приватность, контроль и стоимость. (OpenAI)

В нашем случае модель используется как локальный reviewer/planner, а не как remote oracle. Это важно для криптографической дисциплины: sensitive artifacts, internal reports и маршруты можно анализировать локально, без отправки в облачный сервис.

Где появляется TurboQuant

TurboQuant как исследовательская идея связан с онлайн-векторным квантованием: случайные вращения, scalar quantizers, почти оптимальные границы MSE-искажения, а для inner product — отдельная схема через QJL-остаток, потому что MSE-оптимальный квантователь может давать смещение в оценке скалярного произведения.

В проекте это важно концептуально: quantized machinery допустим как routing/acceleration layer, но не как источник криптографической истины.

То есть правильная архитектурная линия такая:

quantized model / AI / Q-LLL oracle:
  может предложить маршрут, оценить отчёт, помочь выбрать variant

exact verifier:
  принимает или отклоняет криптографический claim

Это принципиально. Если бы AI принимал d, система была бы небезопасной. Но AI у нас работает как sidecar:

AI suggests;
exact verifier decides.

Что делает AI route planner

AI-sidecar planner получает telemetry:

recoverability_sanity report
variant_sweep report
no_recovery_diagnosis
Q-LLL oracle quality report
hardness ladder plan

И выдаёт:

failure_class
recommended_next_variants
forbidden_actions
claim_boundary reminders

Например:

failure_class: truth_vector_not_short_enough
recommendation:
  do not benchmark backend on this variant;
  try Kannan target embedding;
  check HNF basis conversion;
  enable target_embedding_decode.

Это не криптография, но это ускоряет исследовательский цикл.

Система перестаёт быть набором ручных запусков и превращается в управляемый experiment engine.


Full-system audit: почему это важнее красивого demo

После full-range Q-LLL recovery можно было бы остановиться и написать громкий пост. Мы сделали иначе: добавили full-system audit.

Результат:

full_system_audit_passed: true
failure_classes: []
pytest: 79 passed
static_audit_passed: true
qlll_integration_passed: true
qlll_full_range_hnp_passed: true
fplll_full_range_hnp_passed: true
redaction_scan_passed: true
claim_boundary_passed: true
release_hygiene_passed: true
macos_metadata_scan_passed: true

Full-range HNP regression внутри аудита:

cases_total: 3
qlll_positive_control_passed: 3
qlll_pubkey_match_cases: 3
qlll_truth_match_cases: 3
fplll_pubkey_match_cases: 3
fplll_truth_match_cases: 3
qlll_first_recovery_rank_p50/p90/p99: 1/1/1
fplll_first_recovery_rank_p50/p90/p99: 1/1/1

Это означает, что milestone не висит отдельно. Он включён в систему regression/audit gates.


Почему redaction — часть науки, а не бюрократия

Если система работает с synthetic truth, candidate private scalars, raw nonce coordinates и recovery reports, то public-safe слой обязателен.

Мы добавили redaction layer и scanner для опасных полей:

candidate_d
d
secret_d
truth_d
raw_secret_coordinate
k
raw_nonce
MuSig nonce fields

Внутренние отчёты могут содержать synthetic truth для проверки. Но redacted/public reports не должны раскрывать scalar material.

Это не просто “безопасность публикации”. Это часть научной честности:

если claim public-safe,
то он не должен зависеть от скрытого truth material.

Что нового именно в нашем подходе

Снова аккуратно: почти каждый отдельный элемент имеет предшественников.

Но как единая система, новизна выглядит так:

1. Protocol-valid nonce observatory

Мы не анализируем подписи “как числа из CSV”. Мы строим bridge к протоколу:

ECDSA verification
BIP340 R* membership
MuSig2 affine partial-signature reduction

2. Affine hidden-nonce geometry

Для каждой подписи строится hidden nonce family:

k_i(d')

И анализируется не один nonce, а семейство.

3. Recovery claim отделён от observational signal

Система может сказать:

observational_signal_only

и остановиться.

4. Recoverability sanity перед solver benchmark

Система проверяет, должен ли case вообще восстанавливаться:

truth_vector_constructible
truth_vector_norm2
determinant-root comparison
case_expected_to_recover

5. Exact HNF row-lattice conversion для Q-LLL-compatible recoverable HNP basis

Это была ключевая инженерная развилка:

recoverable Kannan system
→ exact HNF row-lattice basis
→ Q-LLL-compatible full-rank basis

6. Decoder stack после reduction

Не просто “посмотрели строки basis”, а:

target_embedding_decode
nonce_error_reconstruct
cross_signature_vote

7. AI как sidecar, не oracle

AI участвует в исследовательском процессе, но не имеет права принимать криптографические утверждения.

8. Full-system audit как обязательный gate

Не просто “получилось один раз”, а:

pytest
integration
full-range HNP regression
redaction
claim boundary
release hygiene

Что мы не утверждаем

Это важный раздел.

Мы не утверждаем:

система ломает Bitcoin;
Q-LLL лучше fplll;
AI восстанавливает приватные ключи;
реальные сетевые подписи уязвимы;
любой Schnorr/MuSig2 можно свести к recovery;
controlled HNP равен real-world exploit.

Мы утверждаем:

nonce-observatory построила протокольно-валидную forensic-систему;
она умеет строить observable nonce geometry;
она умеет отличать signal от recovery;
она умеет отказывать claims;
она умеет проводить full-range controlled ECDSA-HNP recovery;
Q-LLL достиг same-case parity с fplll на HNF-Kannan controlled regression;
final acceptance остаётся только d·G == pubkey.

Почему это может быть полезно

Для криптоаудита

Можно проверять кошельки, библиотеки, HSM, multisig-протоколы и кастомные signing flows на слабые nonce patterns.

Для incident response

Можно разбирать публичные подписи и честно отвечать:

есть exploitable nonce relation?
есть repeated-r?
есть HNP route?
есть recovery evidence?
или только negative forensic result?

Для research

Можно сравнивать:

ECDSA HNP variants
Polynonce-like relations
Schnorr affine families
MuSig2 partial nonce structures
Q-LLL vs fplll

Для buyer-safe демонстраций

Можно показывать controlled recovery без раскрытия реальных секретов:

synthetic positive-control
full-range d
no nonce brute force
redacted reports
public-key validation

Что дальше

Следующий этап — не новый громкий claim, а расширение benchmark envelope.

План:

seeds: 50–200
nonce_bits: 4,6,8,10,12,16,20,24
sample_count: 4,8,16,32
models:
  kannan_plus_b_transform_hnf_basis
  kannan_minus_b_transform_hnf_basis
backends:
  Q-LLL
  fplll
metrics:
  recovery_rate
  first_recovery_rank
  runtime
  timeout
  backend_failures
  false_positive_candidates
  pubkey_matches

Только после этого можно говорить что-то о производительности Q-LLL против fplll.

Пока честный статус:

Q-LLL/fplll parity: доказана на текущем full-range controlled regression
Q-LLL superiority: не заявляется

Итог

nonce-observatory — это не “скрипт для взлома приватных ключей”. Это исследовательская и forensic-система, которая делает с цифровыми подписями то, чего часто не хватает в криптоинструментах:

протокол → математика → evidence → отказ или recovery → audit

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

Главный результат на сегодня:

Full-range ECDSA-HNP controlled recovery:
  secret range: full secp256k1
  nonce brute force: disabled
  lattice: HNF-converted Kannan basis
  backend: Q-LLL and fplll
  decoder: target embedding + nonce error reconstruction + cross-signature vote
  acceptance: d·G == pubkey
  audit: full-system passed

И главный принцип остаётся неизменным:

AI может помогать думать.
Q-LLL может помогать редуцировать.
fplll может быть baseline.
Но истина — только в точной криптографической проверке.

Именно это, на мой взгляд, и есть самая сильная часть проекта: не один “эффектный recovery”, а дисциплина, которая не позволяет системе врать, даже когда очень хочется заявить больше.