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

82 lines
5.7 KiB
Markdown
Raw Permalink Normal View 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, клянусь:
- Искать элегантное, не костыльное
- Использовать существующее, не изобретать
- Упрощать, не усложнять
- Переосмысливать, не латать