Множественные правки и добавления

This commit is contained in:
Shr3dd3r 2023-09-06 06:01:23 +03:00
parent 7384806403
commit dbfe40bc02
5 changed files with 23 additions and 19 deletions

View File

@ -2,7 +2,8 @@
После успешной установки защищённого соединения, происходит обмен характеристиками обоих сторон, AKA "рукопожатие". Запрашивающий соединение отправляет пакет следующего формата: После успешной установки защищённого соединения, происходит обмен характеристиками обоих сторон, AKA "рукопожатие". Запрашивающий соединение отправляет пакет следующего формата:
`[magic number: 8B][protocol version: 4B][sizes: 1B][crypto params: 6B][reconnection flags: 4B]` <!--`[magic number: 8B][protocol version: 4B][sizes: 1B][crypto params: 6B][reconnection flags: 4B]`-->
`[magic number: 8B][protocol version: 4B][crypto params: 6B][reconnection flags: 4B]`
- Магическое число - Магическое число
- _Тип:_ `uint64_t` - _Тип:_ `uint64_t`
@ -10,7 +11,7 @@
- Версия протокола - Версия протокола
- _Тип:_ `uint32_t` - _Тип:_ `uint32_t`
- Поддерживаемая запрашивающим версия протокола. - Поддерживаемая запрашивающим версия протокола.
- Размерности частей пакета <!--- Размерности частей пакета
- _Тип:_ `uint8_t` - _Тип:_ `uint8_t`
- Описывает некоторые параметры пакетов. - Описывает некоторые параметры пакетов.
- Маска `0b11000000`: выделено под размерности типа событий - Маска `0b11000000`: выделено под размерности типа событий
@ -28,7 +29,7 @@
- `0b01`: размер данных это `uint8_t` - `0b01`: размер данных это `uint8_t`
- `0b10`: размер данных это `uint16_t` - `0b10`: размер данных это `uint16_t`
- `0b11`: размер данных это `uint64_t` - `0b11`: размер данных это `uint64_t`
- Маска `0b00000011`: резерв - Маска `0b00000011`: резерв-->
- Параметры криптографии - Параметры криптографии
- _Тип:_ `CryptoAlgo[3]` - _Тип:_ `CryptoAlgo[3]`
- Описывает используемые криптографические алгоритмы на уровне "клиент-сервер". Первый элемент это используемый алгоритм для хэша полезной нагрузки; второй это алгоритм ассиметричного шифрования; третий элемент это алгоритм симметричного шифра. - Описывает используемые криптографические алгоритмы на уровне "клиент-сервер". Первый элемент это используемый алгоритм для хэша полезной нагрузки; второй это алгоритм ассиметричного шифрования; третий элемент это алгоритм симметричного шифра.
@ -74,7 +75,7 @@
- 0x02: неподдерживаемая версия протокола. - 0x02: неподдерживаемая версия протокола.
- 0x03: невозможно выделить новый порт для подключения. - 0x03: невозможно выделить новый порт для подключения.
- 0x04: указанный транспортный протокол не поддерживается. - 0x04: указанный транспортный протокол не поддерживается.
- 0x05: указанная конфигурация размерностей не поддерживается. <!--- 0x05: указанная конфигурация размерностей не поддерживается.-->
- 0x06: недопустимые параметры криптографии. - 0x06: недопустимые параметры криптографии.
- 0x07: один из указанных криптографических алгоритмов отключён на сервере. - 0x07: один из указанных криптографических алгоритмов отключён на сервере.
- Описание ошибки - Описание ошибки

View File

@ -1,6 +1,7 @@
# Список зарезервированных ключей ячеек # Список зарезервированных ключей ячеек
<!-- TODO: сделать папку и там разместить подробное описание некоторых ключей --> <!-- TODO: сделать папку и там разместить подробное описание некоторых ключей -->
Перечисленные здесь значения являются либо совсем базовыми, либо предназначены для использования сервером. Все данные транзитных пакетов (т.е. тех, которые предназначены для кого-то кроме подключённого напрямую серверу), для которых критична подлинность, должны передаваться в ячейке `Data` и быть подписанными с помощью ячейки `SignedDataHash`.
@ -46,7 +47,7 @@
- CryptoAlgos - CryptoAlgos
- _Значение:_ `0x11` - _Значение:_ `0x11`
- _Тип:_ `CryptoAlgo[3]` - _Тип:_ `CryptoAlgo[3]`
- Используемые криптографические алгоритмы. Первый элемент выделен под хэш-функцию; второй элемент для ассиметричной функции; третий элемет для симметричной функции. - Используемые криптографические алгоритмы. Первый элемент выделен под хэш-функцию; второй элемент для ассиметричной функции; третий элемент для симметричной функции.
- CryptoKeyID - CryptoKeyID
- _Значение:_ `0x12` - _Значение:_ `0x12`
- _Тип:_ `uint32_t` - _Тип:_ `uint32_t`

View File

@ -1,14 +1,14 @@
# Спецификация протокола Stadium v1.0 # Спецификация протокола Stadium v1.0
Протокол Stadium это протокол для безопасной коммуникации общего назначения, работающий поверх любого поддерживаемого транспорта. Данная спецификация описывает лишь базу, поверх которой может быть реализованы расширения (SPX - Stadium Protocol eXtension) для более конкретных нужд. Помимо прочего, данный протокол служит основой для полнофункционального мессенджера Marafon, спецификация расширения которого находится в папке `SPX/Marafon/`. Stadium это протокол для безопасной коммуникации общего назначения, работающий поверх любого поддерживаемого транспорта. Данная спецификация описывает лишь базу, поверх которой могут быть реализованы расширения (SPX - Stadium Protocol eXtension) для более конкретных нужд. Помимо прочего, данный протокол служит основой для полнофункционального мессенджера Marafon, спецификация расширения которого находится в папке `SPX/Marafon/`.
Основной фокус при работе над сим проектом идёт на: Основной фокус при работе над сим проектом идёт на:
- Снижение оверхэдов, по сравнению с классическими решениями (Matrix, Discord, WhatsApp, пр. (Reject HTML+JSON, return to binary.)). - Снижение оверхэдов, по сравнению с классическими решениями (Matrix, Discord, WhatsApp, пр. (Reject HTML+JSON, return to binary));
- Устойчивость к цензуре. - Устойчивость к цензуре;
- Федеративность. - Федеративность;
- Поддержка гибкого сквозного шифрования. (возможность как клиенту так и серверу выбирать, какие криптографические алгоритмы использовать) - Поддержка гибкого сквозного шифрования. (возможность как клиенту так и серверу выбирать, какие криптографические алгоритмы использовать;
- Совместимость со всеми мажорными оверлейными сетями (Tor, I2P и yggdrasil). - Совместимость со всеми мажорными оверлейными сетями (Tor, I2P и yggdrasil);
- Расширяемость. - Расширяемость.
В сей спецификации вы иногда сможете встретить примеры кода и упоминание типов данных языка C++, так как без них обойтись моментами сложно. В сей спецификации вы иногда сможете встретить примеры кода и упоминание типов данных языка C++, так как без них обойтись моментами сложно.
@ -60,7 +60,7 @@
`[cell_1][cell_2][cell_3]...[cell_n]` `[cell_1][cell_2][cell_3]...[cell_n]`
Ключ и длинна данных являются шестнадцатеричными числами, размерность которых задаётся на этапе хэндшейка. Полезная нагрузка не может отсутствовать полностью (кроме особо-оговорённых случаев), а ключ не может являться нулём. Если значение конкретной пары пусто, то длинна данных должна быть нулём. Ключ и длинна данных являются шестнадцатеричными числами, размерность которых фиксирована и составляет 8 и 16 бит соответственно. <!--задаётся на этапе хэндшейка.--> Полезная нагрузка не может отсутствовать полностью (кроме особо-оговорённых случаев), а ключ не может являться нулём. Если значение конкретной пары пусто, то длинна данных должна быть нулём.
Исходя из всего вышеописанного, итоговая примерная структура пакета выглядит следующим образом: Исходя из всего вышеописанного, итоговая примерная структура пакета выглядит следующим образом:
@ -70,9 +70,9 @@
### Зарезервированные события ### Зарезервированные события
Некоторые категории событий зарезервированы под нужды базового протокола или просто для событий определённого рода. Второе носит рекомендательный характер; вы также можете использовать иные диапазоны для тех-же целей. Некоторые категории событий зарезервированы под нужды базового протокола или просто для событий определённого рода. Второе носит рекомендательный характер; вы также можете использовать иные диапазоны для тех-же целей. Ниже приведены диапазоны зарезервированных значений.
Все из зарезервированных типов помещаются в минимальную размерность типа события (т.е. по одному байту на категорию и подкатегорию). Ниже приведены диапазоны зарезервированных значений. <!--Все из зарезервированных типов помещаются в минимальную размерность типа события (т.е. по одному байту на категорию и подкатегорию).-->
Зарезервировано для нужд протокола и запрещено к использованию в частных реализациях (см. также файлы в директории `reserved/` для конкретных примеров): Зарезервировано для нужд протокола и запрещено к использованию в частных реализациях (см. также файлы в директории `reserved/` для конкретных примеров):
@ -90,7 +90,7 @@
### Зарезервированные ключи ячеек ### Зарезервированные ключи ячеек
У данных в формате KLDR также существуют зарезервированные ключи, которые аналогичным образом помещаются в минимальную размерность ключа: У данных в формате KLDR также существуют зарезервированные ключи<!--, которые аналогичным образом помещаются в минимальную размерность ключа-->:
- `0x00` - `0x00`
- Запрещено к использованию. - Запрещено к использованию.
@ -129,7 +129,7 @@
Первый тип является восьмибайтным числом без знака (`uint64_t`). Валидный объект не может иметь ID равный нулю. Первый тип является восьмибайтным числом без знака (`uint64_t`). Валидный объект не может иметь ID равный нулю.
Второй тип является структурой из одного восьмибайтного числа без знака для ID объекта, массива размером 64 байт для дескриптора сервера и однобайтового числа (`uint8_t`) для использованного алгоритма хэширования дескриптора. Второй тип является структурой из одного восьмибайтного числа без знака для ID объекта, массива размером 64 байт для дескриптора сервера и двухбайтного числа (`CryptoAlgo`) для использованного алгоритма хэширования дескриптора.
Сервер должен проверять идентификатор на валидность и отвергать его, если он ложен в текущем контексте. Сервер должен проверять идентификатор на валидность и отвергать его, если он ложен в текущем контексте.
@ -137,7 +137,7 @@
## Серверный дескриптор ## Серверный дескриптор
Серверный дескриптор являет из себя хэш открытого ключа серверной подписи и может быть представлен в виде base64-кодированной строки, если необходимо. Длинна хэша может варьироваться от 128 до 512 бит. Используемый алгоритм хэширования определяется сервером-владельцем дескриптора. Серверный дескриптор являет из себя хэш открытого ключа серверной подписи и может быть представлен в виде base64-кодированной строки, если необходимо. Длинна хэша может варьироваться, но всегда менее или равно 512 бит. Используемый алгоритм хэширования определяется сервером-владельцем дескриптора.
Дескриптор может быть ассоциирован с несколькими доменами и/или IP/I2P/Tor-адресами, как на стороне сервера, так и на стороне клиента. Клиент может запросить у сервера список ассоциированных с дескриптором адресов, подписанных закрытым ключом сервера-владельца дескриптора и проверить их на достоверность с помощью его-же публичного ключа. Дескриптор может быть ассоциирован с несколькими доменами и/или IP/I2P/Tor-адресами, как на стороне сервера, так и на стороне клиента. Клиент может запросить у сервера список ассоциированных с дескриптором адресов, подписанных закрытым ключом сервера-владельца дескриптора и проверить их на достоверность с помощью его-же публичного ключа.

View File

@ -3,3 +3,5 @@
Спецификация протокола Stadium и его официального расширения для нашего мессенджера - Marafon SPX. Спецификация протокола Stadium и его официального расширения для нашего мессенджера - Marafon SPX.
**ПРОЕКТ В АКТИВНОЙ РАЗРАБОТКЕ/PROJECT UNDER ACTIVE DEVELOPMENT** **ПРОЕКТ В АКТИВНОЙ РАЗРАБОТКЕ/PROJECT UNDER ACTIVE DEVELOPMENT**
All text will be translated to english later.

View File

@ -6,7 +6,7 @@
## Client2Server ## Client2Server
Какое-то описание метода. На данный момент, "оффициально" поддерживается два формата, в которых могут быть представлены данные: KLDR (расположенные последовательно "ключ-длина-значение") и фиксированная схема. Тут представлен пример в формате KLDR. Какое-то описание метода. На данный момент, "официально" поддерживается два формата, в которых могут быть представлены данные: KLDR (расположенные последовательно "ключ-длина-значение") и фиксированная схема. Тут представлен пример в формате KLDR.
**Ячейки:** **Ячейки:**