Files

119 lines
4.2 KiB
Protocol Buffer
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Protobuf схема для Hidden Services
// Файл: protos/hidden_service.proto
// Версия: 1.0
// Дата: 23 ноября 2025
syntax = "proto3";
package phantom;
// Дескриптор сервиса - публикуется в DHT
message ServiceDescriptor {
// Публичный ключ сервиса (Ed25519, 32 байта)
// Используется для проверки подписи и генерации .phantom адреса
bytes public_key = 1;
// Список точек входа (Introduction Points)
// Рекомендуется 3-5 точек для надежности
repeated IntroductionPoint introduction_points = 2;
// Версия протокола (текущая: 1)
uint32 protocol_version = 3;
// Временная метка создания (Unix timestamp в секундах)
// Используется для определения свежести дескриптора
uint64 timestamp = 4;
// Подпись всех полей выше (Ed25519)
// signature = Ed25519_sign(identity_key, serialize(public_key, introduction_points, protocol_version, timestamp))
bytes signature = 5;
// TTL (Time To Live) в секундах
// Рекомендуется 3600 (1 час)
uint32 ttl = 6;
}
// Точка входа (Introduction Point)
message IntroductionPoint {
// Фантомный адрес узла (32 байта)
bytes address = 1;
// Публичный ключ для шифрования сообщений от клиента (X25519, 32 байта)
// Используется для шифрования Introduce1
bytes encryption_key = 2;
// Порт (опционально, если используется)
uint32 port = 3;
}
// Сообщение о рандеву от клиента к точке входа
// Зашифровано для публичного ключа сервиса
message Introduce1 {
// Фантомный адрес точки рандеву (32 байта)
bytes rendezvous_address = 1;
// Одноразовый секрет (cookie, 32 байта)
// Генерируется клиентом случайным образом
bytes rendezvous_cookie = 2;
// Публичный ключ клиента для DH-обмена (X25519, 32 байта)
// Используется для установки сквозного шифрования
bytes client_dh_public_key = 3;
// Временная метка создания (Unix timestamp)
uint64 timestamp = 4;
// Proof-of-work (опционально, для защиты от DoS)
// Формат: nonce, который при хэшировании с другими полями дает N нулевых бит
bytes proof_of_work = 5;
}
// Сообщение от сервиса к точке рандеву
message Rendezvous1 {
// Тот же одноразовый секрет, что и в Introduce1
bytes rendezvous_cookie = 1;
// Публичный ключ сервиса для DH-обмена (X25519, 32 байта)
bytes service_dh_public_key = 2;
// Временная метка создания (Unix timestamp)
uint64 timestamp = 3;
}
// Подтверждение от точки рандеву клиенту
message RendezvousEstablished {
// Статус установки соединения
enum Status {
SUCCESS = 0;
TIMEOUT = 1;
INVALID_COOKIE = 2;
}
Status status = 1;
// Публичный ключ сервиса для DH-обмена (если успешно)
bytes service_dh_public_key = 2;
}
// Запрос дескриптора из DHT
message GetServiceDescriptor {
// Хэш публичного ключа сервиса (32 байта)
// Вычисляется из .phantom адреса
bytes service_id = 1;
}
// Ответ с дескриптором из DHT
message ServiceDescriptorResponse {
// Статус запроса
enum Status {
FOUND = 0;
NOT_FOUND = 1;
EXPIRED = 2;
}
Status status = 1;
// Дескриптор (если найден)
ServiceDescriptor descriptor = 2;
}