Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
e07626bca7 | |||
550661e71f | |||
08001d7aaa | |||
c27ecd812d | |||
310d7e9372 | |||
ed54ecb7f9 | |||
07a2413612 | |||
999514abec | |||
0c4e6cfcd1 | |||
812465ec2e | |||
acae23fe35 | |||
75630f92cf | |||
c6b88359f9 | |||
29348a49d4 | |||
dbfe40bc02 | |||
7384806403 | |||
476dda2e30 | |||
8e70978778 | |||
c38d674031 | |||
b38e0bc616 | |||
72bfaea76d | |||
2ab79a3523 |
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
_old/*
|
||||
schemes/
|
||||
Терминология.md
|
15
README.md
15
README.md
@ -1,3 +1,14 @@
|
||||
# marafon-proto-specs
|
||||
# Спецификация протокола Stadium версии 1.0
|
||||
|
||||
Спецификация протокола "Марафона".
|
||||
Stadium это протокол для безопасной коммуникации общего назначения, ведомый целью унифицировать обмен данными по разным транспортным протоколам в гибкой и безопасной манере.
|
||||
|
||||
Основной фокус при работе над этим проектом идёт на:
|
||||
|
||||
- Возможность функционирования при низкой пропускной способности канала;
|
||||
- Приемлимое функционирование в условиях больших потерь пакетов;
|
||||
- Минимизацию оверхэда;
|
||||
- Поддержку широкого спектра транспортных протоколов "из коробки";
|
||||
- Гибкое и кастомизируемое шифрование;
|
||||
- Совместимость между разными версиями ПО.
|
||||
|
||||
**Внимание!** В данный момент проект находится в стадии активного проектирования.
|
||||
|
63
Оглавление.txt
Normal file
63
Оглавление.txt
Normal 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
15
Сессия.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Сессия
|
||||
|
||||
*Сессия* объединяет в себе несколько *потоков*, созданных одним *клиентом*. Все *пакеты*, отправленные в любом из *потоков* принадлежащих одной *сессии*, интерпретируются как *пакеты* от одного и того-же *клиента*.
|
||||
|
||||
*Сессия* создаётся в следствии *рукопожатия* определённого типа. При создании *сессии* всегда создаётся один принадлежащий ей *поток*. Создание *сессии* может быть провалено в следствие передачи некорректной версии *протокола*.
|
||||
|
||||
*Сессия* существует до тех пор, пока в её рамках существует хотя бы один *поток*, при уничтожении последнего *потока* в ней - *сессия* уничтожается. *Клиент* может явно запросить у *сервера* уничтожение *сессии*. При уничтожении *сессии* также уничтожаются все принадлежащие её *потоки*. Если *сервер* собирается уничтожить *сессию* по своей воле, то ему следует предупредить об этом *клиента*.
|
||||
|
||||
У каждой *сессии* есть собственный, независимый от других *сессий*, набор параметров, который задаётся *клиентом* во время её создания и не может быть изменён в последствии. *Сервер* должен отклонять некорректные конфигурации параметров. В набор параметров *сессии* входит версия *протокола*, которая требуется для обеспечения совместимости. Оба *узла* должны коммуницировать в рамках установленной версии и имеют право уничтожить *сессию*, в случае несоблюдения этого условия.
|
||||
|
||||
<!--
|
||||
TODO:
|
||||
1. указать где надо конкретные системные события
|
||||
2. исключения?
|
||||
-->
|
Loading…
Reference in New Issue
Block a user