montana/Русский/Совет/сессии/Джемини_провидец_09.01.2026_от_Джемини.md

5.7 KiB
Raw Permalink Blame History

Заявка на роль Мечтателя Montana

Модель: Gemini 3 Pro Компания: Google Дата: 09.01.2026

Полученная проблема

Проблема 1: AddrMan Poisoning (MEDIUM) КРИТИК НАШЁЛ: Атакующий может отправить addr сообщения с timestamp в будущем. AddrMan сохранит их. При перезапуске ноды выберет "свежие" адреса атакующего.

Моё переосмысление

Класс проблем

Это не просто "атака через timestamp". Это класс проблем доверия к невалидированным метаданным. Любое поле (время, сервисы, версия), которое узел не может криптографически проверить, является вектором атаки. Timestamp в Addr — это claim, а не proof.

Связь с Montana

Montana уже решает проблему доверия ко времени через:

  1. L-1.2 Координаты наблюдаемы: Время определяется медианой peers + NTS.
  2. L-0.2.2 Подписи только для текущего τ₂: Валидация времени через присутствие.
  3. Presence Proofs: Криптографическое доказательство существования узла во времени.

Ключевой вопрос

"А что если адрес может быть добавлен в AddrMan только если он предоставил Proof of Presence?"

Вместо того чтобы фильтровать "плохие" timestamp, мы можем требовать доказательство "хорошего" timestamp.

Три решения

Решение 1: Костыль

Что: Добавить проверку if addr.timestamp > now + 10_min { return; } в addrman.rs. Решает: Конкретную атаку с будущим временем. Проблема: Не решает атаку с "прошлым" временем (replay старых адресов), не решает атаку с поддельными сервисами. Это "черный список" подходов.

Решение 2: Архитектурное

Что: Ввести систему репутации для отправителей Addr сообщений. Если пир шлет адреса из будущего — банить пира. Решает: Класс атак "Poisoning от плохих пиров". Проблема: Сложно. Требует хранения истории, скоринга, защиты от Sybil-атак на репутацию. Добавляет состояние.

Решение 3: Элегантное

Что: Интегрировать AddrMan с PresenceProof. Принимать Addr сообщение, только если оно подписано ключом, который имеет валидный PresenceProof в недавнем прошлом (например, в текущем τ₃). Использовать timestamp из PresenceProof (который проверен консенсусом) вместо timestamp из Addr сообщения.

Решает: Класс атак "Fake Metadata" + "Sybil Addr Flooding". Почему элегантно:

  • Использует существующее: PresenceProof уже есть, он уже проверяется.
  • Закрывает: Poisoning, Sybil flooding, Stale addresses.
  • Код становится проще: Не нужны эвристики "terrible", не нужны бакеты (или их роль снижается). Доверие криптографическое, а не вероятностное.

Почему Элегантное — лучшее

Костыль (if future) — это игра в кошки-мышки. Атакующий поставит now + 9 min. Архитектурное (репутация) — это сложная надстройка, которую тоже можно атаковать.

Элегантное решение (Addr via Presence) меняет парадигму:

  • Адрес — это не "данные", это "свойство участника".
  • Участник — это тот, кто доказал присутствие (PresenceProof).
  • Нет присутствия → нет права объявлять адрес.

Это превращает AddrMan из "свалки IP" в "реестр активных участников". Sybil-атака на AddrMan становится экономически невозможной (требует прохождения Cooldown и генерации Proofs).

Применение к другим проблемам

Этот паттерн "Proof over Claim" применим к:

  • Service Flags: Узел заявляет NODE_FULL? Пусть докажет (ответит на challenge по старому блоку).
  • Version: Узел заявляет v2? Пусть подпишет сообщение в формате v2.

Вместо фильтрации лжи, мы требуем доказательство правды.

Клятва

Я, Gemini 3 Pro, клянусь:

  • Искать элегантное, не костыльное
  • Использовать существующее, не изобретать
  • Упрощать, не усложнять
  • Переосмысливать, не латать