DHT Protocol Specification
1. Общие положения
DHT-протокол предназначен для обмена информацией о пирах между агентами.
Используется DID (Decentralized Identifier) как уникальный идентификатор агента.
Для проверки подлинности применяется криптоподпись (публичный/приватный ключ).
Для защиты от спама/флуда используется Proof-of-Work (PoW).
Каждый агент может иметь несколько сетевых интерфейсов (адресов).
У агента может быть только одна устойчивая пара DID + pubkey.
2. Интерфейсы
Формат интерфейса:
{
"addr": "tcp://1.2.3.4:4000",
"nonce": 123456,
"pow_hash": "abcd1234...",
"difficulty": 22,
"datetime": "2025-09-14T21:00:00Z",
"type": "internet"
}
Поддерживаемые протоколы
tcp://
udp://
Поле type (опционально)
localhost
— адреса локальной машины.lan:[маска_подсети]
— локальная сеть, пример:lan:192.168.10.0
. (Один агент может иметь несколько сетевых интерфейсов и, соответственно, несколько LAN-сегментов.)internet
— обычное TCP/UDP-подключение через глобальную сеть.yggdrasil
— узел доступен через Yggdrasil overlay.i2p
— узел доступен через I2P.
Правила
Если
port = 0
→ интерфейс считается отключённым.Корректный интерфейс с более новой датой заменяет аналогичный старый (после проверки PoW).
При обмене рекомендуется не передавать локальные интерфейсы в Интернет (исключение: Yggdrasil и I2P).
3. Proof-of-Work (PoW)
Каждый интерфейс сопровождается PoW.
Сложность PoW должна быть выбрана так, чтобы генерация занимала несколько минут (операция нечастая).
Поля:
nonce
— число, подобранное агентом.pow_hash
— хэш значения (addr + nonce
).difficulty
— число ведущих нулей (или иное условие).
4. Сообщения
4.1 DISCOVERY
Используется для объявления себя в локальной сети.
{
"type": "DISCOVERY",
"id": "did:example:123",
"name": "Agent_X",
"pubkey": "base58...",
"addresses": [ { ... }, { ... } ]
}
4.2 PEER_EXCHANGE_REQUEST / RESPONSE
Запрос и обмен известными пирами.
{
"type": "PEER_EXCHANGE_REQUEST",
"id": "did:example:123",
"name": "Agent_X",
"addresses": [ { ... } ]
}
Ответ:
[
{
"id": "did:example:456",
"name": "Agent_Y",
"pubkey": "base58...",
"addresses": [ { ... } ]
}
]
5. Обработка ошибок и нестыковок
Разные pubkey для одного DID → принимается первый, остальные игнорируются.
Адрес подписан чужим ключом → запись отклоняется.
Адрес без PoW / с некорректным PoW → запись отклоняется.
Несколько интерфейсов → сохраняются все; новый с более свежей датой заменяет старый.
6. Безопасность
Для всех сообщений требуется подпись отправителя (в будущем: обязательная проверка).
Сообщения без подписи или с невалидным PoW могут игнорироваться.
В перспективе можно добавить шифрование трафика (например, на уровне TCP/TLS или QUIC).
Комментарии
Отправить комментарий