Open stepanskryabin opened 2 years ago
Опишу что же такое WORKSPACE. Рассмотрим, как это будет выглядеть у пользователя. В его списке чатов, кроме самих чатов будут находиться отдельные пункты с пометкой workspace. При нажатии на этот пункт, от кнопки идёт волна, фон и цветовая гамма меняется в зависимости личных настроек workspace. Вместе с фоном и гаммой волна меняет и список чатов, который меняется на тот, который содержится в workspace. Появляется кнопка назад, для выхода из workspace. Внутри workspace, чаты изолированы от других чатов, к ним не получить доступа не состоя в workspace. Присоединяясь к workspace, user автоматически входит в чаты, которые выбрал администратор workspace. При желании, он может выйти из них, или войти в другие. Поиск теперь ищет не по всей бд, а по конкретному workspace. Workspace можно экспортировать, полностью перенеся на другой сервер. Теперь к самой идее. Что же такое workspace? Это отдельное пространство, вне которого данные и чаты не выходят. Это собственный изолированный уголок MoreliaTalk. Что это даёт пользователю? Он может создать собственное сообщество, с подразделением на темы, или форум, или же вообще обсуждение разработки чего-либо. Это очень похоже на сервера Discord, или Slack, однако не имеет такой выраженной направленности, то есть workspace не нацелен на развлечения, как сервер Discord, и не ставит ставку только на работу, как Slack. И в отличии от Slack и Discord, workspace не ограничивает вас в общении - выйти из workspace и зайти в глобальный чат или личную переписку с другом проще простого, а вернуться не составит проблем. Это функциональность Slack внутри мессенджера, на вроде Telegram. И эта фишка должна стать ключевой в версии MoreliaTalk 2.0. Мы с широкого пинка должны ворваться в мир мессенджеров, разумеется набрав перед этим некоторую аудиторию, а затем выпустив апдейт, который меняет правила игры. Теперь к тому, как это реализовать. И тут самое интересное. Теперь все чаты, что ранее были глобальными, становятся частью единого workspace "main". Любой пользователь по умолчанию состоит в workspace "main". Теперь права пользователей работают отдельно для каждого workspace и чата. Внутри workspace "main", чаты имеют суверинитет, и глобальный администратор MoreliaTalk не имеет к ним доступа. Внутри других workspace, админ, разумеется царь, но не бог, бог - это владелец. Так вот. Куда этот workspace добавить в протокол? Думается, что поля flow, message и другие, мы перенесём внутрь нового поля workspaces. Поле workspaces представляет собой массив, содержащий в себе объекты типа Workspace, в который входят поля, касающиеся чатов и их сообщений. Также внутрь типа Workspace будут добавлены специальный поля для получения информации о конкретном workspace и др. Все нововедения потребуют глобального изменения как протокола, так и методов сервера и клиента. В целом вроде описал идею workspace, при наличии вопросов, милости просим, отвечу. И если есть что добавить, тоже пишите.
Опишу что же такое WORKSPACE. Рассмотрим, как это будет выглядеть у пользователя. В его списке чатов, кроме самих чатов будут находиться отдельные пункты с пометкой workspace. При нажатии на этот пункт, от кнопки идёт волна, фон и цветовая гамма меняется в зависимости личных настроек workspace. Вместе с фоном и гаммой волна меняет и список чатов, который меняется на тот, который содержится в workspace. Появляется кнопка назад, для выхода из workspace. Внутри workspace, чаты изолированы от других чатов, к ним не получить доступа не состоя в workspace. Присоединяясь к workspace, user автоматически входит в чаты, которые выбрал администратор workspace. При желании, он может выйти из них, или войти в другие. Поиск теперь ищет не по всей бд, а по конкретному workspace. Workspace можно экспортировать, полностью перенеся на другой сервер. т.е. юзер автоматом присоединяется во все чаты/каналы/группы воркспейса, при акцептировании приглашения?
Права доступа автоматом так же назначаются юзеру чтобы он мог читать/писать в чаты/группы/каналы?
Теперь к самой идее. Что же такое workspace? Это отдельное пространство, вне которого данные и чаты не выходят. Это собственный изолированный уголок MoreliaTalk. Что это даёт пользователю? Он может создать собственное сообщество, с подразделением на темы, или форум, или же вообще обсуждение разработки чего-либо. Это очень похоже на сервера Discord, или Slack, однако не имеет такой выраженной направленности, то есть workspace не нацелен на развлечения, как сервер Discord, и не ставит ставку только на работу, как Slack. И в отличии от Slack и Discord, workspace не ограничивает вас в общении - выйти из workspace и зайти в глобальный чат или личную переписку с другом проще простого, а вернуться не составит проблем. Это функциональность Slack внутри мессенджера, на вроде Telegram. И эта фишка должна стать ключевой в версии MoreliaTalk 2.0. Мы с широкого пинка должны ворваться в мир мессенджеров, разумеется набрав перед этим некоторую аудиторию, а затем выпустив апдейт, который меняет правила игры. Теперь к тому, как это реализовать. И тут самое интересное. Теперь все чаты, что ранее были глобальными, становятся частью единого workspace "main". Любой пользователь по умолчанию состоит в workspace "main". Теперь права пользователей работают отдельно для каждого workspace и чата. Внутри workspace "main", чаты имеют суверинитет, и глобальный администратор MoreliaTalk не имеет к ним доступа. Внутри других workspace, админ, разумеется царь, но не бог, бог - это владелец. Так вот. Куда этот workspace добавить в протокол? Думается, что поля flow, message и другие, мы перенесём внутрь нового поля workspaces. Поле workspaces представляет собой массив, содержащий в себе объекты типа Workspace, в который входят поля, касающиеся чатов и их сообщений. Также внутрь типа Workspace будут добавлены специальный поля для получения информации о конкретном workspace и др. Все нововедения потребуют глобального изменения как протокола, так и методов сервера и клиента. В целом вроде описал идею workspace, при наличии вопросов, милости просим, отвечу. И если есть что добавить, тоже пишите.
Нужны конкретные детали Workspace. Я пока не вижу смысла глобально перекраивать объект Flow, достточно добавить пару доп полей для Workspace.
Протокол безопасности TLS 1.3 описание
Опишу что же такое WORKSPACE. Рассмотрим, как это будет выглядеть у пользователя. В его списке чатов, кроме самих чатов будут находиться отдельные пункты с пометкой workspace. При нажатии на этот пункт, от кнопки идёт волна, фон и цветовая гамма меняется в зависимости личных настроек workspace. Вместе с фоном и гаммой волна меняет и список чатов, который меняется на тот, который содержится в workspace. Появляется кнопка назад, для выхода из workspace. Внутри workspace, чаты изолированы от других чатов, к ним не получить доступа не состоя в workspace. Присоединяясь к workspace, user автоматически входит в чаты, которые выбрал администратор workspace. При желании, он может выйти из них, или войти в другие. Поиск теперь ищет не по всей бд, а по конкретному workspace. Workspace можно экспортировать, полностью перенеся на другой сервер. т.е. юзер автоматом присоединяется во все чаты/каналы/группы воркспейса, при акцептировании приглашения?
Права доступа автоматом так же назначаются юзеру чтобы он мог читать/писать в чаты/группы/каналы?
Теперь к самой идее. Что же такое workspace? Это отдельное пространство, вне которого данные и чаты не выходят. Это собственный изолированный уголок MoreliaTalk. Что это даёт пользователю? Он может создать собственное сообщество, с подразделением на темы, или форум, или же вообще обсуждение разработки чего-либо. Это очень похоже на сервера Discord, или Slack, однако не имеет такой выраженной направленности, то есть workspace не нацелен на развлечения, как сервер Discord, и не ставит ставку только на работу, как Slack. И в отличии от Slack и Discord, workspace не ограничивает вас в общении - выйти из workspace и зайти в глобальный чат или личную переписку с другом проще простого, а вернуться не составит проблем. Это функциональность Slack внутри мессенджера, на вроде Telegram. И эта фишка должна стать ключевой в версии MoreliaTalk 2.0. Мы с широкого пинка должны ворваться в мир мессенджеров, разумеется набрав перед этим некоторую аудиторию, а затем выпустив апдейт, который меняет правила игры. Теперь к тому, как это реализовать. И тут самое интересное. Теперь все чаты, что ранее были глобальными, становятся частью единого workspace "main". Любой пользователь по умолчанию состоит в workspace "main". Теперь права пользователей работают отдельно для каждого workspace и чата. Внутри workspace "main", чаты имеют суверинитет, и глобальный администратор MoreliaTalk не имеет к ним доступа. Внутри других workspace, админ, разумеется царь, но не бог, бог - это владелец. Так вот. Куда этот workspace добавить в протокол? Думается, что поля flow, message и другие, мы перенесём внутрь нового поля workspaces. Поле workspaces представляет собой массив, содержащий в себе объекты типа Workspace, в который входят поля, касающиеся чатов и их сообщений. Также внутрь типа Workspace будут добавлены специальный поля для получения информации о конкретном workspace и др. Все нововедения потребуют глобального изменения как протокола, так и методов сервера и клиента. В целом вроде описал идею workspace, при наличии вопросов, милости просим, отвечу. И если есть что добавить, тоже пишите.
Нужны конкретные детали Workspace. Я пока не вижу смысла глобально перекраивать объект Flow, достточно добавить пару доп полей для Workspace.
Я тут подумал... да, пусть workspace будет просто новым типом flow
Привет! Хотелось бы увидеть в протоколе описание шифрования: конкретные методы + общее описание схемы (алгоритма) шифрования.
Я так полагаю, задумка в end-to-end шифровании. В таком случае TLS не поможет, т.к. он обеспечивает защиту от mitm атаки между клиентом и сервером с точностью до сертификата.
Привет! Хотелось бы увидеть в протоколе описание шифрования: конкретные методы + общее описание схемы (алгоритма) шифрования.
Да, постараюсь сделать описание схемы работы в документации.
Я так полагаю, задумка в end-to-end шифровании. В таком случае TLS не поможет, т.к. он обеспечивает защиту от mitm атаки между клиентом и сервером с точностью до сертификата. Общая задумка такая: Первый уровень - шифрование на уровне протокола websocket (используется TLS 1.3). Второй уровень - сквозное шифрование между клиентом и сервером.
В случае соединения между двумя пользователями (чат) всё достаточно просто и такая схема реализована в WhatsApp и Telegram. При соединении с количеством клиентов от 3 и более (канал, группа, рабочее пространство), нет рабочей схемы как реализовать сквозное шифрование. Я склоняюсь к варианту первоначального обмена ключами между сервером и каждым клиентом (через использование индивидуальных ключей), а потом переход на универсальные ключи для конкретного канала/группы/рабочего пространства.
Я тут подумал... да, пусть workspace будет просто новым типом flow
Думай над тем, какие параметры в workspace добавить.
Я склоняюсь к варианту первоначального обмена ключами между сервером и каждым клиентом (через использование индивидуальных ключей), а потом переход на универсальные ключи для конкретного канала/группы/рабочего пространства.
Странная идея: обмениваться ключами с сервером для сквозного шифрования между клиентами.
Я склоняюсь к варианту первоначального обмена ключами между сервером и каждым клиентом (через использование индивидуальных ключей), а потом переход на универсальные ключи для конкретного канала/группы/рабочего пространства.
Странная идея: обмениваться ключами с сервером для сквозного шифрования между клиентами.
Ещё раз отмечу, что это только для случая когда у нас общаются 3 и более клиента между собой (в одной группе). Стандартными средствами сквозного шифрования невозможно решить проблему шифрования сообщений между множеством клиентов (ну или мне такие способы неизвестны) используя ТОЛЬКО ключи клиентов. Например (упрощённо) при шифровании сообщений между тремя клиентами (чтобы каждый мог читать сообщения соседа) необходимо организовать обмен ключами между клиентами, т.е. у каждого клиента будет 3 ключа (свой и ещё 2-х соседей), после чего нужно будет как-то определять какое сообщение каким ключем расшифровывать. В случае группы на 100 клиентов это уже становится нетривиальной задачей. Нужно обменяться всеми ключами и как-то потом расшифровать сообщение рандомного соседа подходящим ключем выбрав его из этой 100. Учитывая возрастающую сложность алгоритма - я его сразу отбрасываю как нереализуемый.
По этому единственным способом организации сквозного шифрования между множеством клиентов (3 и более) является использование посредника которому все клиенты доверяют, в нашем случае это сервер. Тут только вопрос как это грамотно реализовать, чтобы сервер не мог скомпрометировать цепочку связи между клиентами.
По этому единственным способом организации сквозного шифрования между множеством клиентов (3 и более) является использование посредника которому все клиенты доверяют, в нашем случае это сервер.
Тогда нужно сразу отказаться от шифрования, потому что этим занимается TLS.
Тогда нужно сразу отказаться от шифрования, потому что этим занимается TLS.
Надо не отказываться, а придумать, как реализовать)))
По этому единственным способом организации сквозного шифрования между множеством клиентов (3 и более) является использование посредника которому все клиенты доверяют, в нашем случае это сервер.
Тогда нужно сразу отказаться от шифрования, потому что этим занимается TLS.
TLS это шифрование канала передачи информации, передаваемых по открытым сетям, от клиента к серверу. Выше я речь вёл не про канальное шифрование, а про шифрование сообщений клиентов (людей).
Выше я речь вёл не про канальное шифрование, а про шифрование сообщений клиентов (людей).
Зачем шифровать сообщения людей, если мы априори считаем сервер безопасным, а канал до сервера уже шифруется?
Зачем шифровать сообщения людей, если мы априори считаем сервер безопасным, а канал до сервера уже шифруется?
А если бд угонят?
Зачем шифровать сообщения людей, если мы априори считаем сервер безопасным, а канал до сервера уже шифруется?
А если бд угонят?
Ну тогда у злоумышленника будут ключи, которыми он сможет расшифровать переписку. В любом случае сервер либо безопасный, либо нет.
Зачем шифровать сообщения людей, если мы априори считаем сервер безопасным, а канал до сервера уже шифруется?
А если бд угонят?
Ну тогда у злоумышленника будут ключи, которыми он сможет расшифровать переписку. В любом случае сервер либо безопасный, либо нет.
Вообще это хороший вопрос.... Я давно думаю что нужно отходить от централизованной роли сервера к более децентрализованной, без хранения информации о пользователях.. т.е. организовывать сервер только как посредника. Например в виде посредника подтверждающего ключи шифрования клиентов или посредника отвечающего за рассылку сообщения от одного клиента к нескольким другим клиентам подключенным к одному каналу или группе. Что-то наподобие "брокера" - как это реализовано в протокола MQTT.
НО! Есть один ньюанс, и он в том что целевая группа этого проекта бизнес, а не простые пользователи. А для бизнеса нужна именно централизованная БД и сервер её обрабатывающий.
НО! Есть один ньюанс, и он в том что целевая группа этого проекта бизнес, а не простые пользователи. А для бизнеса нужна именно централизованная БД и сервер её обрабатывающий.
Так что же вы сразу не сказали! Зачем рекламировать это как новый децентрализованный мессенджер с оконечным шифрованием на питоне? Я пошёл, удачи.
Зачем рекламировать это как новый децентрализованный мессенджер с оконечным шифрованием на питоне?
Никто и не говорил, что он децентрализован)))
НО! Есть один ньюанс, и он в том что целевая группа этого проекта бизнес, а не простые пользователи. А для бизнеса нужна именно централизованная БД и сервер её обрабатывающий.
Так что же вы сразу не сказали! Зачем рекламировать это как новый децентрализованный мессенджер с оконечным шифрованием на питоне? Я пошёл, удачи.
черновик предстоящих изменений в протокол.
1. Права пользователей
1.1 Основные типы пользователей
1.2 Права
2. Добавление новых сущностей
2.1 Новый тип flow - workspace
К основным трём потокам добавляется третий поток с наименованием Workspace который предназначен для объединения Chat, Group, Channel в единое целевое пространство.
flow
входящих в Workspace2.2 Добавление дополнительных полей в message
Для улучшения удобства обсуждения добавляется поле
threads
, а так же полеcontent
которое служит для облегчения обработки сообщений и добавления дополнительных данных о контенте.Поле threads
Поле content
Поле info
Поле thumbnail_info
2.3 Добавление дополнительных полей в user
пример:
2.3. Удаление лишних полей из message:
2.4. Изменение наименования полей в user:
Так как хранение пароля будет осуществлятся клиентом самостоятельно, сервер будет хранить только хэш пароля (клиент передаёт не голый пароль а его хэш) полученного от клиента. Для этого имя поля
password
заменяется наhash_password
.2.5 Новый объект server после data
Поле предназначено для передачи общей информации о сервере.
2.6. Новый объект ciphers после server
Поле предназначено для передачи информации о используемых протоколах шифрования.
2.7. Новый объект event после ciphers
3. Новые методы
3.1. метод handshake
запрос клиента:
ответ сервера:
ответ клиента:
ответ сервера:
3.2 метод - update_session_key
запрос клиента:
Ответ сервера:
3.3 метод update_open_key
запрос клиента:
Ответ сервера:
3.4 Разделение метода get_update на несколько методов
get_update_flow
Метод get_update_flow позволяет получить от сервера доступную информацию о flow, от времени time по натстоящее время.
Запрос клиента:
get_update_message
Метод get_update_message позволяет получить от сервера доступную информацию о сообщениях которые принадлежать определенному flow, от времени time по настоящее время.
Запрос клиента:
get_update_user
Метод get_update_user позволяет получить от сервера доступную информацию о пользователях, от времени time по настоящее время.
Запрос клиента:
3.5 Метод invite_user_to_flow
Метод предназначен для приглашения пользователя вступить в поток.
Запрос клиента:
4. Прочие изменения (не)протокола
4.1 Хранение / шифрование файлов сервером
4.2 Шифрование flow
Пользователю будет доступно настройка шифрования для чатов, групп, каналов, сообществ
Шифрование chat
В параметрах чата будут хранится оба открытых ключа шифрования пользователей время их выдачи, а так же сессионные ключи и дата их выдачи.
Шифрование group
Шифрование channel
Шифрование workspace
Добавить логаут и логаут на всех устроиствах
?
Добавить защиту от регистрации множества аккаунтов
Добавить лимит на количество зарегистрированных аккаунтов в день (не более 5) для чего использовать подтверждение по адресу эл.почты.