powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Авторизация без сервера
25 сообщений из 117, страница 1 из 5
Авторизация без сервера
    #39751684
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжаю проектировать свой транспорт сообщений по UDP.

В прошлой попытке сделал его централизованным: сначала авторизуйся на сервере, а затем сервер тебя сведет с получателем. С сервером все прекрасно: он авторизует обоих и подтвердит что они те, за кого себя выдают.

Но тут получилась фундаментальная ошибка проектирования. Сервер может быть недоступен, а отправитель и получатель в локалке и им надо общаться.

Не знаю как поступить при отсутствии сервера. Отправитель и получатель в локалке найдут друг-друга, но встает вопрос безопасности, как убедиться что тот кого ты нашел является тем за кого себя выдает.

Напрашивается тупое решение: всем заинтересованным хранить пароль для обмена без сервера авторизации, далее этот пароль используем как ключ шифрования.

Может у кого есть другие идеи?

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751691
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПродолжаю проектировать свой транспорт сообщений по UDP.

В прошлой попытке сделал его централизованным: сначала авторизуйся на сервере, а затем сервер тебя сведет с получателем. С сервером все прекрасно: он авторизует обоих и подтвердит что они те, за кого себя выдают.

Но тут получилась фундаментальная ошибка проектирования. Сервер может быть недоступен, а отправитель и получатель в локалке и им надо общаться.

Не знаю как поступить при отсутствии сервера. Отправитель и получатель в локалке найдут друг-друга, но встает вопрос безопасности, как убедиться что тот кого ты нашел является тем за кого себя выдает.

Напрашивается тупое решение: всем заинтересованным хранить пароль для обмена без сервера авторизации, далее этот пароль используем как ключ шифрования.

Может у кого есть другие идеи?

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.
Я бы кэшировал последнюю аутентикацию (nonce and hash) юзера на получателе. Ну.... зависит от протокола сервера аутентикации.
Вся идея сервера аутентикации - не хранить пароли на получателях.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751695
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, а кто такой "получатель"?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751772
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПродолжаю проектировать свой транспорт сообщений по UDP.

В прошлой попытке сделал его централизованным: сначала авторизуйся на сервере, а затем сервер тебя сведет с получателем. С сервером все прекрасно: он авторизует обоих и подтвердит что они те, за кого себя выдают.

Но тут получилась фундаментальная ошибка проектирования. Сервер может быть недоступен, а отправитель и получатель в локалке и им надо общаться.

Не знаю как поступить при отсутствии сервера. Отправитель и получатель в локалке найдут друг-друга, но встает вопрос безопасности, как убедиться что тот кого ты нашел является тем за кого себя выдает.

Напрашивается тупое решение: всем заинтересованным хранить пароль для обмена без сервера авторизации, далее этот пароль используем как ключ шифрования.

Может у кого есть другие идеи?

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.
Я не знаю предыстории, но предполагаю, что сервер может как-то идентифицировать клиентов и далее работать с ними по закрытому каналу связи. Тогда для идентификации используем сервер как первоначальный источник сертификатов, удостоверяющих клиентов. В дальнейшем эти "сертификаты" используются для аутентификации клиентов без участия сервера.

То есть, во время сеанса работы клиентов А и Б с сервером, после того, как сервер убедился в истинности тех, кто себя за них выдает за клиентов, сервер по каждому клиенту генерирует пары ключей: секретный Кф - для формирования электронной подписи и несекретный Кп - для проверки электронной подписи. И отсылает эти ключи клиентам.
Клиент А получает секретный ключ КАф для формирования подписи, клиент Б (и, в общем, все остальные клиенты тоже) получает несекретный ключ КАп для проверки подписи, сформированной клиентом А. И наоборот, клиент Б получает секретный ключ КБф для формирования подписи, клиент А (и все остальные клиенты) получает несекретный ключ КБп для проверки подписи, сформированной клиентом Б.

Позднее, когда клиенты А и Б желают общаться между собой без сервера, они формируют общий ключ шифрования на основе алгоритма Диффи-Хеллмана, но не в классической форме, а подписывая своим секретным ключом Кф отсылаемую корреспонденту свою часть ключа. Корреспондент проверяет подпись с помощью открытого ключа Кп, и, если все ОК, принимает решение, что корреспондент именно тот, кто себя выдает. То есть, чтобы избежать дырки в алгоритме Д-Х "противник посередине". Далее используем сформированный с помощью Д-Х ключ для обычного быстрого симметричного шифрования.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751773
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это в продолжение этой темы?

Как выжать весь гигабит по UDP?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751819
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDima T, а кто такой "получатель"?
Речь про передачу сообщения. Одна прога отправляет, вторая получает. У каждой есть свой логин, который ее идентифицирует.

В некоторых случаях эти проги могут оказаться в локалке без инета. Найти друг-друга не проблема, проблема проверить что нашел того, кого искал.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751820
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто в продолжение этой темы?

Как выжать весь гигабит по UDP?
Версия 2.0 ))
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751822
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эра, это классика, хочется что-то попроще. Сертификаты потребуют использовать криптобиблиотеку какую-нибудь.

И в итоге это вырождается в то что я придумал: "ключ-пароль" храним на клиенте.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751834
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
было бы можно проще - про такую возможность все бы уже знали.
"Проще" либо нельзя, либо это секрнтный способ.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751863
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tхочется что-то попроще
Проще всего наконец всё-таки поднять сервер. Либо выкинуть его к чертям и сделать пир-ту-пир сеть.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751870
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНайти друг-друга не проблема, проблема проверить что нашел того, кого искал.
Если этот "кто-то" прислал тебе challenge, зашифрованное приватным ключом, соответствующим имеющемуся у тебя открытому ключу того кого ты искал - он именно тот, кого ты искал.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751907
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраDima T,
было бы можно проще - про такую возможность все бы уже знали.
"Проще" либо нельзя, либо это секрнтный способ.
Знаю, но все-таки немного уточню постановку задачи: можно решить не идеально, достаточно защититься от условного "студента". На одном компе может оказаться мой софт и софт тех кому интересно вытащить у меня инфу. Я бы не хотел чтобы они проникли в мою транспортную систему.
Инфа не стоит миллиарды, поэтому профи тут вряд ли будет ковыряться, а "студент" вполне возможно.

В случае когда инет есть у отправителя и получателя (подавляющее большинство случаев) их сведет сервер, предварительно проверив пароль, а если нет инета у одного или обоих, то тут им все-равно надо общаться и как-то авторизовывать друг-друга.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39751914
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если поможет - можно вводить сеансовые ключи которые живут сутки или другое время (как записи в DNS).
И за это время Алиса и Боб могут спокойно продолжать работу а на следующий день им придется
как-то искать арбитра или вручную синхронизироваться по надежному каналу.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39752019
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подведу итоги.
По сути возможны 3 состояния:
1. Отправитель и Получатель имеют выход в инет. Большинство случаев.
2. Один из них имеет выход в инет. Некоторым компам м.б. ограничен выход в инет.
3. Инет у обоих отсутствует. Инет сломался.

В первом все просто - сервер проверяет обоих. Во втором тот кто с инетом должен предоставить выход в инет второму, т.е. предоставляет своего рода прокси, далее как в п.1.
Предоставление прокси - это ключевое отличие, изначально я думал обмениваться по безсерверной схеме.

Остается проблемный п.3, но т.к. это редкая ситуация (инет сломался) и программно ее никак не сделать средствами другого софта, то можно сильно не заморачиваться на взлом в этот момент.

Как вариант, при отсутствии инета, транспорт может информировать получателя что отправитель не проверен, а там уже ему решать игнорировать сообщение или нет в зависимости от важности данных.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39752470
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

А почему бы не сделать вторичные сервера?
Если у тебя есть сегменты сети которые могут отвалится от других сегментов - поставь в каждый сегмент по собственному серверу (или микро-серверу который будет ожидать только клиентов из своего сегмента). И пусть твои юзера авторизуются в первую очередь на локальном сервере, а уже эти "вторичные" сервера при наличии связи будут синхронизироваться между собой.

Эти локальные сервера могут быть как специально выделенными и ставиться на гейт в большой интернет, так и динамическими.
Клиент сначала кидает в свою локалку броадкаст "кто локальный сервер?" Не получив ответа, пытается связаться напрямую с центральным, выкачивает оттуда свежайший список юзеров и принимает на себя обязанности локального сервера.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39752498
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl, это попытка слегка упорядочить хаос. Сейчас в локалке разворачивается сетевая версия, т.е. нужен сервер, на нем расшарить, дать права.
Но зачастую даже это сделать некому, т.к. все экономят на админах. Если вместо одного расшаренного экземпляра моей проги будет несколько локальных копий, но эти несколько будут реплицироваться онлайн даже при отсутствии инета, то я смогу дать клиенту то, в чем сегодня отказываю из-за отсутствия у них админа.

PS Думаю понятно объяснил что вторичный сервер там не поднять.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39752544
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Просто возьмите OpenSSL или любую из многих SSL либ, и соединяйтесь между клиентами при помощи TLS с проверкой сертификатов обеими сторонами.
А сервер пусть выдает сертификаты клиентам после проверки.
Сертификат самого сервера (самоподписанный сервером) зашит в код клиентов и используется как доверенный CA.
Никаких паролей хранить на клиентах не нужно. Только приватный ключ от своего сертификата выданного сервером, зашифрованный паролем от учетной записи юзера.

Вот тут можно посмотреть с чего начать в openssl.
https://stackoverflow.com/questions/21050366/testing-ssl-tls-client-authentication-with-openssl
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753086
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TWhite Owl, это попытка слегка упорядочить хаос. Сейчас в локалке разворачивается сетевая версия, т.е. нужен сервер, на нем расшарить, дать права.
Но зачастую даже это сделать некому, т.к. все экономят на админах. Если вместо одного расшаренного экземпляра моей проги будет несколько локальных копий, но эти несколько будут реплицироваться онлайн даже при отсутствии инета, то я смогу дать клиенту то, в чем сегодня отказываю из-за отсутствия у них админа.

PS Думаю понятно объяснил что вторичный сервер там не поднять.Да почему не поднять то??? Сделай вторичный сервер как составную часть клиента. Первый клиент утром загружается - не нашел серверов в локалке - запускает свой сервер как сервис/демон/отдельную программу. Все. Теперь пока первую машину не перезагрузят вторичный сервер будет работать. Перезагрузили - сервер исчез - следующий клиент который попытается авторизоваться не найдет сервер и запустит новую копию. Клиенты к центральному серверу сами ходить вообще не будут.
А уж вторичный сервер сам будет пытаться достучаться до центрального и как получит обновления - будет их пихать всем своим локальным клиентам (при авторизации) чтобы они обновили базы для своих копий сервера.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753202
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlСделай вторичный сервер как составную часть клиента. Первый клиент утром загружается - не нашел серверов в локалке - запускает свой сервер как сервис/демон/отдельную программу. Все.
Не, это решается задача обнаружить друг-друга. Тут проблем нет.
Проблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента. Думаю не стоит заливать на каждого клиента все логины с паролями (или хэшами паролей).
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753421
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SESPAKE .
Смысл в том, что для перебора паролей требуется участие владельца этого самого пароля.
Владелец в переборе не заинтересован, а это эффективно ограничивает число попыток для потенциального взломщика.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753447
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПроблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.
А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753455
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПроблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.
А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
Откуда он генерируется? Рискну предположить что это просто случайное число типа GUID.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753503
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov SESPAKE .
Смысл в том, что для перебора паролей требуется участие владельца этого самого пароля.
Владелец в переборе не заинтересован, а это эффективно ограничивает число попыток для потенциального взломщика.
Почитал немного. Если правильно понял это Дифи-Хэллман с зашитой от "человека посредине" с помощью пароля известного двум сторонам.
Я похожий велосипед изобрел, разве что реализация попроще и менее криптостойкая.
Dima TНапрашивается тупое решение: всем заинтересованным хранить пароль для обмена без сервера авторизации, далее этот пароль используем как ключ шифрования.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753505
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПроблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.
А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
А майнить кто будет?

Да и инфа закрытая, ее не надо всем и каждому показывать.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753510
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonDimitry Sibiryakovпропущено...

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
Откуда он генерируется? Рискну предположить что это просто случайное число типа GUID.
Пока особо не заморачивался на эту тему. Можно гуид или хэш какой-нибудь. Без разницы. Он нужен не всегда, а только в редкие случаи отсутствия инета. Поэтому когда инет есть необходимо как-то придумать случайное число и согласовать с другими, а при отключении инета воспользоваться им. Тут надо будет поизобретать алгоритм согласования.
...
Рейтинг: 0 / 0
25 сообщений из 117, страница 1 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Авторизация без сервера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]