Описан поток и мелкие правки
This commit is contained in:
parent
310d7e9372
commit
c27ecd812d
@ -1,13 +1,13 @@
|
|||||||
# Неформальная спецификация протокола Stadium версии 0.5
|
# Неформальная спецификация протокола Stadium версии 1.0
|
||||||
|
|
||||||
Stadium это протокол для безопасной коммуникации общего назначения, работающий поверх обширного перечня транспорта и архитектурно не зависящий от оного. Данная спецификация описывает базу, на основе которой могут быть реализованы расширения (_SPX - Stadium Protocol eXtension_) для более конкретных нужд. <!--Помимо прочего, данный протокол служит основой для полнофункционального мессенджера Marafon, спецификация расширения которого находится в папке `SPX/Marafon/`.-->
|
Stadium это протокол для безопасной коммуникации общего назначения, работающий поверх обширного перечня транспорта и архитектурно не зависящий от оного. Данная спецификация описывает базу, на основе которой могут быть реализованы расширения (_SPX - Stadium Protocol eXtension_) для более конкретных нужд. <!--Помимо прочего, данный протокол служит основой для полнофункционального мессенджера Marafon, спецификация расширения которого находится в папке `SPX/Marafon/`.-->
|
||||||
|
|
||||||
Основной фокус при работе над этим проектом идёт на:
|
Основной фокус при работе над этим проектом идёт на:
|
||||||
|
|
||||||
- Минимизация оверхэда и возможность функционирования в условиях низкой пропускной способности канала;
|
- Минимизация оверхэда и возможность функционирования в условиях низкой пропускной способности канала;
|
||||||
- Приемлимое функционирование в условиях большого количества потерь пакетов;
|
- Приемлимое функционирование в условиях больших потерь пакетов;
|
||||||
- Поддержка широкого спектра транспортных протоколов из коробки;
|
- Поддержка широкого спектра транспортных протоколов "из коробки";
|
||||||
- Гибкое и кастомизируемое сквозное шифрование;
|
- Гибкое и кастомизируемое шифрование;
|
||||||
- Расширяемость и возможность подгонки под конкретные задачи.
|
- Расширяемость и возможность подгонки под конкретные задачи.
|
||||||
|
|
||||||
**Внимание!** В данный момент проект находится в стадии активного проектирования. Данная версия спецификации акцентирует внимание на закреплении общих, преимущественно фундаментальных идей и концепций, потому и является *неформальной*.
|
**Внимание!** В данный момент проект находится в стадии активного проектирования. Данная версия спецификации акцентирует внимание на закреплении общих, преимущественно фундаментальных идей и концепций, потому и является *неформальной*.
|
||||||
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
Более детальное описание схемы:
|
Более детальное описание схемы:
|
||||||
|
|
||||||
1. Алиса отправляет Бобу зашифрованный с помощью публичного IK запрос рукопожатия, содержащий публичный SSK Алисы; инициализационное значение и константу для KDF, отвечающей за обновление PEK Алисы; инициализационное значение и константу для KDF, генерирующего StreamId Алисы; а также прочие параметры создаваемых сессии и потока.
|
1. Алиса отправляет Бобу зашифрованный с помощью публичного IK запрос рукопожатия с целью создания новой сессии и шифрованного потока, содержащий публичный SSK Алисы; инициализационное значение и константу для KDF, отвечающей за обновление PEK Алисы; инициализационное значение и константу для KDF, генерирующего StreamId Алисы; а также прочие параметры создаваемых сессии и потока.
|
||||||
2. Боб принимает шифрованный запрос рукопожатия, расшифровывает с помощью своего приватного IK и отвечает Алисе своим публичным SSK; инициализационным значением и константой KDF, отвечающей за обновление PEK Боба; инициализационное значение и константу для KDF, генерирующего StreamId Боба; а также прочей своей частью параметров, зашифровав их с помощью публичного SSK Алисы.
|
2. Боб принимает шифрованный запрос рукопожатия, расшифровывает с помощью своего приватного IK и отвечает Алисе своим публичным SSK; инициализационным значением и константой KDF, отвечающей за обновление PEK Боба; инициализационное значение и константу для KDF, генерирующего StreamId Боба; а также прочей своей частью параметров, зашифровав их с помощью публичного SSK Алисы.
|
||||||
3. Алиса шифрует пакет с помощью своего PEK, подписывает с помощью своего приватного SSK, снабжает текущим StreamId и отправляет Бобу.
|
3. Алиса шифрует пакет с помощью своего PEK, подписывает с помощью своего приватного SSK, снабжает текущим StreamId и отправляет Бобу.
|
||||||
4. Боб получает пакет, проверяет его с помощью публичного SSK Алисы и расшифровывает с помощью PEK Алисы. После этого Алиса и Боб обновляют PEK и StreamId Алисы с помощью двух KDF.
|
4. Боб получает пакет, проверяет его с помощью публичного SSK Алисы и расшифровывает с помощью PEK Алисы. После этого Алиса и Боб обновляют PEK и StreamId Алисы с помощью двух KDF.
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
4.3. Ответ на рукопожатие
|
4.3. Ответ на рукопожатие
|
||||||
5. Сессия
|
5. Сессия
|
||||||
5.1. Поток
|
5.1. Поток
|
||||||
5.1.1. Состояние
|
5.1.1. Состояние [StreamState; Running, Desynchronized]
|
||||||
5.1.2. Идентификатор потока [StreamId, SrvStreamId, CltStreamId]
|
5.1.2. Идентификатор потока [StreamId, SrvStreamId, CltStreamId]
|
||||||
5.1.3. Секрет потока [StreamSecret]
|
5.1.3. Секрет потока [StreamSecret]
|
||||||
5.1.4. Криптографические параметры потока
|
5.1.4. Криптографические параметры потока
|
||||||
@ -39,7 +39,7 @@
|
|||||||
7.1. Заголовок пакета
|
7.1. Заголовок пакета
|
||||||
7.1.1. Код аутентификации [Packet Authentication Code, PAC, CltPAC, SrvPAC; проверка целостности и достоверности]
|
7.1.1. Код аутентификации [Packet Authentication Code, PAC, CltPAC, SrvPAC; проверка целостности и достоверности]
|
||||||
7.1.2. Флаги
|
7.1.2. Флаги
|
||||||
7.1.3. Идентификатор ответа [RespId]
|
7.1.3. Идентификатор ответа [RespId; мб стоит сделать PacketID и обязательным для всех, дабы перезапрашивать в случае повреждения]
|
||||||
7.2. Полезная нагрузка
|
7.2. Полезная нагрузка
|
||||||
7.2.1. Шум в полезной нагрузке пакета
|
7.2.1. Шум в полезной нагрузке пакета
|
||||||
7.3. Структура и шифрование
|
7.3. Структура и шифрование
|
||||||
@ -52,7 +52,7 @@
|
|||||||
8.2.3. Гарантия обнаружения недоставки [?]
|
8.2.3. Гарантия обнаружения недоставки [?]
|
||||||
8.2.4. Гарантия целостности
|
8.2.4. Гарантия целостности
|
||||||
8.2.5. Наличие шифрования
|
8.2.5. Наличие шифрования
|
||||||
8.3. Список адаптеров [возможно, что стоит вынести в отдельную спеку]
|
8.3. Список адаптеров [мб стоит вынести в отдельную спеку]
|
||||||
8.3.1. UDP-raw
|
8.3.1. UDP-raw
|
||||||
8.3.2. TCP-raw
|
8.3.2. TCP-raw
|
||||||
8.3.3. HTTP1.1-text+binary [текстовые HTTP/1.1 POST-запросы и бинарные ответы]
|
8.3.3. HTTP1.1-text+binary [текстовые HTTP/1.1 POST-запросы и бинарные ответы]
|
||||||
|
7
Поток.md
Normal file
7
Поток.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Поток
|
||||||
|
|
||||||
|
Поток - это логический канал для передачи пакетов, существующий в пределах конкретной сессии. Потоки могут создаваться и уничтожаться по инициативе клиента, сервер может только ограничивать создание новых потоков или уничтожать потоки исходя из соображений защиты от DoS-атак. При создании новой сессии всегда создаётся как минимум один поток.
|
||||||
|
|
||||||
|
У потока есть некий набор параметров, часть из которых он разделяет с сессией. У каждого потока есть свой уникальный идентификатор. Поток может быть как "шифрованным", так и "нешифрованным", что влияет на формат пакетов: в нешифрованном потоке, идентификатор потока статичен, а в шифрованном - обновляется и уникален для каждого пакета. Шифрованный поток может находиться в одном из двух состояний: "работает" или "рассинхронизирован", а нешифрованный только в первом. Поток может гарантировать последовательность отправки пакетов и информирование в случае недоставки или повреждения пакета, но это остаётся на усмотрение клиента и отключаемо в случае ненадобности.
|
||||||
|
|
||||||
|
Поток привязан к транспортному протоколу, по которому осуществляется физическая передача пакетов и существует в рамках жизни сессии. Один транспортный протокол может использоваться сразу несколькими потоками. Все потоки двунаправленны, т.е. пакеты могут отправляться как от клиента к серверу, так и наоборот.
|
Loading…
Reference in New Issue
Block a user