Require a fresh responder token when reattaching Merkle sessions
This commit is contained in:
1 parent
d20f31c165
commit
137e30ec82
2 files changed
+34
-4
No files matched your search
@@ -655,6 +655,15 @@ BAD_FORMAT, DEFERRED, ERROR), сохранение корректной суще
|
||||
- Exit0, tracked allocations восстановлены. /tmp/db-sync-completion-design-build.log и
|
||||
/tmp/db-sync-completion-design.log. Это диагностика существующего кода, не тест новой реализации.
|
||||
|
||||
Повторная проверка самого плана выявила обязательную предпосылку общего движка:
|
||||
при merkle_sync_cancel сессия и её round освобождаются. Новый follower начинает с round0,
|
||||
поэтому прежний BEGIN7 принимается как новый и получает READY. Локальный стенд
|
||||
/tmp/merkle-reattach-design.c/.mk это подтвердил на штатной protocol-фикстуре после cancel/start:
|
||||
round7,stateSERVE,READY в очереди. Применение старых PAGE или ложный MT_OK этим стендом
|
||||
не проверялись и не заявляются. Логи /tmp/merkle-reattach-design-build.log и
|
||||
/tmp/merkle-reattach-design.log,exit0,allocations восстановлены.
|
||||
Значит, при переносе нельзя безусловно считать поле round достаточной защитой после пересоздания сессии.
|
||||
|
||||
Варианты:
|
||||
А. Сохранить собственный bulk-протокол: потребуются канонический хеш без id, поиск настоящего общего
|
||||
префикса либо полный fallback с0, устойчивый курсор, два явных прохода, round/request/state,
|
||||
@@ -668,6 +677,19 @@ BAD_FORMAT, DEFERRED, ERROR), сохранение корректной суще
|
||||
|
||||
Конкретный план вариантаБ:
|
||||
|
||||
0. До подключения истории закрепить изоляцию пересозданных сессий общего Merkle.
|
||||
В новой версии wire использовать двустороннее подтверждение попытки:
|
||||
BEGIN несёт свежий round_id инициатора; READY добавляет свежий accept_id ответчика;
|
||||
последующие QUERY/PAGE/TURN/CHECK/DONE/ERROR проверяют пару идентификаторов, request и фазу.
|
||||
Идентификаторы — случайные128 бит с проверкой отказа генерации; каждый новый раунд/handshake
|
||||
получает новые значения, отмена уничтожает действующий accept_id. Поля namespace/dataset/соединение
|
||||
остаются частью области сессии. READY принимается только для ожидаемого текущего BEGIN.
|
||||
Поздний BEGIN после cancel может получить свежий challenge; старые PAGE/DONE содержат прежний accept_id
|
||||
и не могут примениться или завершить новый запрос. Дубликат BEGIN активной попытки не перезапускает
|
||||
её применение; повтор WAKE может вызвать новый handshake, но не является успехом или применением данных.
|
||||
Так не требуется хранить неограниченный архив отменённых сессий или надеяться на порядок доставки.
|
||||
Проверить это для MEMBERS/FEEDBACK прежде, чем добавлять MESSAGES. Старая версия wire не поддерживается.
|
||||
|
||||
1. Канонический набор истории.
|
||||
Namespace — числовой channel_id; dataset отдельный от MEMBERS/FEEDBACK.
|
||||
Ключ — существующий message_id[32], проверяемый вычислением из group_id/timestamp/signature.
|
||||
@@ -706,13 +728,15 @@ BAD_FORMAT, DEFERRED, ERROR), сохранение корректной суще
|
||||
после закрытия курсора в проверяемой транзакции, обновляет индекс и запускает повтор.
|
||||
|
||||
4. Управление раундом и успехом.
|
||||
Используются существующие round/request/state, два pull-прохода, CHECK/DONE, полный32-байтовый корень,
|
||||
Используются общий request/state и усиленная пара идентификаторов из п.0, два pull-прохода,
|
||||
CHECK/DONE, полный32-байтовый корень,
|
||||
revision, deadline и очередь с waiter. Ошибка или повтор неизменной пары разных корней — не успех.
|
||||
done для db_sync/media поступает только от MT_OK; постановка пакета в очередь и конец страницы
|
||||
не подтверждают завершение истории. Последующие изменения вновь делают сессию dirty.
|
||||
Успех означает подтверждённую контрольную точку данного раунда, не вечную глобальную синхронность
|
||||
при продолжающейся записи. Старый round/request не изменяет данные/позиции, не продлевает deadline
|
||||
и не завершает новый запрос. Эти свойства нужно проверить именно для подключённой модели истории.
|
||||
при продолжающейся записи. PAGE/DONE/ERROR прежней пары идентификаторов не изменяет данные/позиции,
|
||||
не продлевает deadline и не завершает новый запрос. BEGIN/WAKE рассматриваются отдельно как handshake,
|
||||
а не как доказательство результата. Эти свойства проверяются и для подключённой модели истории.
|
||||
|
||||
5. Интеграция, права и владение.
|
||||
Регистрировать MESSAGES после создания общего движка при chat startup; data_ctx — стабильный inst,
|
||||
@@ -777,6 +801,8 @@ BAD_FORMAT, DEFERRED, ERROR), сохранение корректной суще
|
||||
пакет заполнен раньше лимита записей, дубликаты и повтор последней страницы.
|
||||
- PUSH/вставка до и после курсора; третий узел; удаление/TTL; изменения между CHECK и отправкой DONE.
|
||||
- Старые round/request, неожиданные фазы, отмена/повтор, DOWN/REINIT/restart, старый UP без нового события.
|
||||
- Cancel/start follower, затем прежний BEGIN и PAGE/DONE старого accept_id; новая попытка того же namespace
|
||||
на том же UP-соединении; повторы BEGIN/READY/WAKE и старый ERROR. Никакой успех/запись от старой пары.
|
||||
- SQL prepare/bind/step/commit, BLOB NOMEM, хеш/VerifyInit, очередь/таймер/waiter: нет частичных данных,
|
||||
ложного MT_OK, потери корректных строк или callback после cancel/free.
|
||||
- ACTIVE-допуск пира, отзыв/возврат, сохранение старых сообщений исключённого автора; различие sound_on/off
|
||||
@@ -789,6 +815,7 @@ BAD_FORMAT, DEFERRED, ERROR), сохранение корректной суще
|
||||
callback отписывает себя/следующий callback и удаляет канал без UAF.
|
||||
- Общий check.sh со STUN и целевые ASAN/UBSan/LSan после реализации.
|
||||
|
||||
Статус: план вариантаБ сформирован и логически проверен при указанных предположениях;
|
||||
Статус: план вариантаБ сформирован и уточнён после отдельной проверки reattach;
|
||||
логическое обоснование требует п.0 и согласованного индекса, а не опирается на неизменённый старый движок.
|
||||
новая модель и её тесты ещё не реализованы. Перенос нельзя объявлять проверенным текущими203/203
|
||||
и8/8: эти результаты относятся к уже выполненному исправлению раздела11.
|
||||
@@ -105,6 +105,9 @@
|
||||
План: история как MT_DATA_MESSAGES в общем Merkle, канонический набор без local id, атомарный индекс,
|
||||
полный корень/раунды/курсор; оставить PUSH/ACK. Учесть startup/stop, права, callback dispatch и sleep/sound
|
||||
(общий движок сейчас запрещает сон, db_sync допускает sound_on), исправить TTL ms/us и индекс после DELETE.
|
||||
Обязательный первый этап: изоляция Merkle после cancel/start. Стенд /tmp/merkle-reattach-design.c
|
||||
подтвердил принятие прежнего BEGIN7 новой follower-сессией; PAGE/ложный MT_OK не проверялись.
|
||||
План усилен свежими round_id/accept_id обеих сторон handshake; старые пакеты не подтверждают новый запрос.
|
||||
План отдельно обосновывает сходимость, предпосылки и регрессии; runtime не менялся, перенос не реализован.
|
||||
[member_merkle_audit_findings.txt](member_merkle_audit_findings.txt), раздел12.
|
||||
|
||||
|
||||
Reference in new issue
Block a user