Compare commits

...

22 Commits
master ... 1.0

Author SHA1 Message Date
e07626bca7 Правка README.md
Разжирения нинужны.
2024-05-23 21:10:54 +03:00
550661e71f Начало разработки полной версии спецификации
Практически исчерпывающе описано понятие сессии.
2024-05-23 21:07:36 +03:00
08001d7aaa Около-готова неформальная версия спеки 2024-04-24 20:23:22 +03:00
c27ecd812d Описан поток и мелкие правки 2024-04-22 23:25:33 +03:00
310d7e9372 Описание событий и общих положений на тему криптографии 2024-04-16 22:43:02 +03:00
ed54ecb7f9 Тотальный передел, глава вторая 2024-03-11 21:30:22 +03:00
07a2413612 Пример файла с описанием типа события готов 2023-12-21 04:35:13 +03:00
999514abec Основа касательно потоков готова 2023-12-19 06:08:43 +03:00
0c4e6cfcd1 Таки нужна поддержка нескольких потоков событий 2023-12-15 21:07:25 +03:00
812465ec2e Продолжаем новое 2023-12-09 00:19:16 +03:00
acae23fe35 Давай по новой (c) 2023-11-20 05:25:05 +03:00
75630f92cf Правки по сессии и структуре пакета 2023-10-28 05:05:32 +03:00
c6b88359f9 Правки касательно ХШ, криптографии и пр. мелочь 2023-10-03 03:10:20 +03:00
29348a49d4 Изменения касательно серверных сессий и пр. правки 2023-09-08 03:25:47 +03:00
dbfe40bc02 Множественные правки и добавления 2023-09-06 06:01:23 +03:00
7384806403 Забыл, что именно, но типа чото добавил 2023-07-17 05:29:20 +03:00
476dda2e30 Сессии, ID, аутентификация и прочее 2023-07-11 04:43:24 +03:00
8e70978778 Do i rly need to comment this sheat? 2023-07-08 04:39:56 +03:00
c38d674031 Marafon Protocol -> Stadium 2023-07-04 23:22:39 +03:00
b38e0bc616 Ну чо, теперь делаем более жирную тему. 2023-07-04 06:30:55 +03:00
72bfaea76d Множественные изменения и +3 события 2023-07-01 05:31:44 +03:00
2ab79a3523 The beginning. 2023-06-30 00:54:02 +03:00
4 changed files with 94 additions and 2 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
_old/*
schemes/
Терминология.md

View File

@ -1,3 +1,14 @@
# marafon-proto-specs
# Спецификация протокола Stadium версии 1.0
Спецификация протокола "Марафона".
Stadium это протокол для безопасной коммуникации общего назначения, ведомый целью унифицировать обмен данными по разным транспортным протоколам в гибкой и безопасной манере.
Основной фокус при работе над этим проектом идёт на:
- Возможность функционирования при низкой пропускной способности канала;
- Приемлимое функционирование в условиях больших потерь пакетов;
- Минимизацию оверхэда;
- Поддержку широкого спектра транспортных протоколов "из коробки";
- Гибкое и кастомизируемое шифрование;
- Совместимость между разными версиями ПО.
**Внимание!** В данный момент проект находится в стадии активного проектирования.

63
Оглавление.txt Normal file
View File

@ -0,0 +1,63 @@
- Введение
- Безопасность и модель угроз
- Базовая терминология
- Криптография
- Дескриптор криптоалгоритма [CryptoDs]
- Дескриптор хэш-функции [HashCryptoDs]
- Дескриптор симметричного шифра [SymCiphCryptoDs]
- Дескриптор асимметричного шифра [AsymCiphCryptoDs]
- Дескриптор набора криптоалгоритмов [CryptoPack]
- Набор для хэширования [HashCryptoPack]
- Набор для симметричного шифрования [SymCiphCryptoPack]
- Набор для подписи [SignCryptoPack; набор для подписи, т.е. AsymCiphCryptoDs + HashCryptoDs]
- Набор для генерации ключей [KDCryptoPack; набор для Key Derivation, т.е. существующая KDF или SymCiphCryptoDs + HashCryptoDs]
- Стартовое значение для KDF [KDInitValue; значение, которым впервые инициализируется KDF]
- Константа для KDF [KDPrivConst; приватное значение, используемое в качестве второго аргумента KDF]
- Установка соединения
- Возможные параметры
- Магическое число протокола
- Версия протокола
- Запрос рукопожатия
- Ответ на рукопожатие
- Сессия
- Поток
- Состояние [StreamState; Running, Desynchronized]
- Идентификатор потока [StreamId, SrvStreamId, CltStreamId]
- Секрет потока [StreamSecret]
- Криптографические параметры потока
- Параметры сжатия потока
- Контроль последовательности
- Шумовые пакеты
- Событие
- Тип события
- Зарезервированные типы и диапазоны типов событий
- Содержание события
- Формат содержания зарезервированных событий
- Запрос и ответ [абстрактно]
- Пакет
- Заголовок пакета
- Код аутентификации [Packet Authentication Code, PAC, CltPAC, SrvPAC; проверка целостности и достоверности]
- Флаги [сжатие, наличие шума, наличие идентификатора]
- Идентификатор [PacketID; присутствует только если включены подтверждения доставки или требуется ответ]
- Полезная нагрузка
- Шум в полезной нагрузке пакета
- Структура и шифрование
- Пачка пакетов и разбиение полезной нагрузки
- Транспортный адаптер
- Дескриптор транспортного адаптера [TransportDs]
- Свойства адаптеров
- Максимальный размер полезной нагрузки
- Гарантия последовательности
- Гарантия обнаружения недоставки [?]
- Гарантия целостности
- Наличие шифрования
- Список адаптеров [мб стоит вынести в отдельную спеку]
- UDP-raw
- TCP-raw
- HTTP1.1-text+binary [текстовые HTTP/1.1 POST-запросы и бинарные ответы]
- [???]
- Сериализация данных [Linear Binary Map (?)]
- Используемые ключи полезной нагрузки
- Расширения протокола [SPX]
- Идентификатор расширения [SPXI]
- Дескриптор расширения [SPXD]

15
Сессия.md Normal file
View File

@ -0,0 +1,15 @@
# Сессия
*Сессия* объединяет в себе несколько *потоков*, созданных одним *клиентом*. Все *пакеты*, отправленные в любом из *потоков* принадлежащих одной *сессии*, интерпретируются как *пакеты* от одного и того-же *клиента*.
*Сессия* создаётся в следствии *рукопожатия* определённого типа. При создании *сессии* всегда создаётся один принадлежащий ей *поток*. Создание *сессии* может быть провалено в следствие передачи некорректной версии *протокола*.
*Сессия* существует до тех пор, пока в её рамках существует хотя бы один *поток*, при уничтожении последнего *потока* в ней - *сессия* уничтожается. *Клиент* может явно запросить у *сервера* уничтожение *сессии*. При уничтожении *сессии* также уничтожаются все принадлежащие её *потоки*. Если *сервер* собирается уничтожить *сессию* по своей воле, то ему следует предупредить об этом *клиента*.
У каждой *сессии* есть собственный, независимый от других *сессий*, набор параметров, который задаётся *клиентом* во время её создания и не может быть изменён в последствии. *Сервер* должен отклонять некорректные конфигурации параметров. В набор параметров *сессии* входит версия *протокола*, которая требуется для обеспечения совместимости. Оба *узла* должны коммуницировать в рамках установленной версии и имеют право уничтожить *сессию*, в случае несоблюдения этого условия.
<!--
TODO:
1. указать где надо конкретные системные события
2. исключения?
-->