Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Продолжаю проектировать свой транспорт сообщений по UDP.

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

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

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

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

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

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.
22 дек 18, 17:26    [21771111]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
OoCc
Member

Откуда: с Кавказа
Сообщений: 1707
Dima T
Продолжаю проектировать свой транспорт сообщений по UDP.

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

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

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

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

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

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.

Я бы кэшировал последнюю аутентикацию (nonce and hash) юзера на получателе. Ну.... зависит от протокола сервера аутентикации.
Вся идея сервера аутентикации - не хранить пароли на получателях.
22 дек 18, 18:23    [21771121]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Dima T, а кто такой "получатель"?
22 дек 18, 18:56    [21771131]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 630
Dima T
Продолжаю проектировать свой транспорт сообщений по UDP.

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

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

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

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

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

PS Исходники и описаловку хочу выложить как опенсорц, поэтому запрятать алгоритмы не подходит.

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

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

Позднее, когда клиенты А и Б желают общаться между собой без сервера, они формируют общий ключ шифрования на основе алгоритма Диффи-Хеллмана, но не в классической форме, а подписывая своим секретным ключом Кф отсылаемую корреспонденту свою часть ключа. Корреспондент проверяет подпись с помощью открытого ключа Кп, и, если все ОК, принимает решение, что корреспондент именно тот, кто себя выдает. То есть, чтобы избежать дырки в алгоритме Д-Х "противник посередине". Далее используем сформированный с помощью Д-Х ключ для обычного быстрого симметричного шифрования.
23 дек 18, 01:16    [21771246]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Это в продолжение этой темы?

Как выжать весь гигабит по UDP?
23 дек 18, 01:20    [21771250]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Dima T, а кто такой "получатель"?

Речь про передачу сообщения. Одна прога отправляет, вторая получает. У каждой есть свой логин, который ее идентифицирует.

В некоторых случаях эти проги могут оказаться в локалке без инета. Найти друг-друга не проблема, проблема проверить что нашел того, кого искал.
23 дек 18, 11:53    [21771321]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Это в продолжение этой темы?

Как выжать весь гигабит по UDP?

Версия 2.0 ))
23 дек 18, 11:55    [21771322]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Фэйтл Эра, это классика, хочется что-то попроще. Сертификаты потребуют использовать криптобиблиотеку какую-нибудь.

И в итоге это вырождается в то что я придумал: "ключ-пароль" храним на клиенте.
23 дек 18, 12:08    [21771326]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 630
Dima T,
было бы можно проще - про такую возможность все бы уже знали.
"Проще" либо нельзя, либо это секрнтный способ.
23 дек 18, 13:02    [21771352]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
alex55555
Member

Откуда:
Сообщений: 1711
Dima T
хочется что-то попроще

Проще всего наконец всё-таки поднять сервер. Либо выкинуть его к чертям и сделать пир-ту-пир сеть.
23 дек 18, 14:26    [21771407]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Найти друг-друга не проблема, проблема проверить что нашел того, кого искал.

Если этот "кто-то" прислал тебе challenge, зашифрованное приватным ключом, соответствующим имеющемуся у тебя открытому ключу того кого ты искал - он именно тот, кого ты искал.
23 дек 18, 14:54    [21771416]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Фэйтл Эра
Dima T,
было бы можно проще - про такую возможность все бы уже знали.
"Проще" либо нельзя, либо это секрнтный способ.

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

В случае когда инет есть у отправителя и получателя (подавляющее большинство случаев) их сведет сервер, предварительно проверив пароль, а если нет инета у одного или обоих, то тут им все-равно надо общаться и как-то авторизовывать друг-друга.
23 дек 18, 18:19    [21771505]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Если поможет - можно вводить сеансовые ключи которые живут сутки или другое время (как записи в DNS).
И за это время Алиса и Боб могут спокойно продолжать работу а на следующий день им придется
как-то искать арбитра или вручную синхронизироваться по надежному каналу.
23 дек 18, 18:59    [21771521]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Подведу итоги.
По сути возможны 3 состояния:
1. Отправитель и Получатель имеют выход в инет. Большинство случаев.
2. Один из них имеет выход в инет. Некоторым компам м.б. ограничен выход в инет.
3. Инет у обоих отсутствует. Инет сломался.

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

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

Как вариант, при отсутствии инета, транспорт может информировать получателя что отправитель не проверен, а там уже ему решать игнорировать сообщение или нет в зависимости от важности данных.
24 дек 18, 08:26    [21771725]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
White Owl
Member

Откуда:
Сообщений: 12349
Dima T,

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

Эти локальные сервера могут быть как специально выделенными и ставиться на гейт в большой интернет, так и динамическими.
Клиент сначала кидает в свою локалку броадкаст "кто локальный сервер?" Не получив ответа, пытается связаться напрямую с центральным, выкачивает оттуда свежайший список юзеров и принимает на себя обязанности локального сервера.
24 дек 18, 19:57    [21772435]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
White Owl, это попытка слегка упорядочить хаос. Сейчас в локалке разворачивается сетевая версия, т.е. нужен сервер, на нем расшарить, дать права.
Но зачастую даже это сделать некому, т.к. все экономят на админах. Если вместо одного расшаренного экземпляра моей проги будет несколько локальных копий, но эти несколько будут реплицироваться онлайн даже при отсутствии инета, то я смогу дать клиенту то, в чем сегодня отказываю из-за отсутствия у них админа.

PS Думаю понятно объяснил что вторичный сервер там не поднять.
24 дек 18, 20:39    [21772467]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6340
Dima T,

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

Вот тут можно посмотреть с чего начать в openssl.
https://stackoverflow.com/questions/21050366/testing-ssl-tls-client-authentication-with-openssl
24 дек 18, 23:05    [21772525]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
White Owl
Member

Откуда:
Сообщений: 12349
Dima T
White Owl, это попытка слегка упорядочить хаос. Сейчас в локалке разворачивается сетевая версия, т.е. нужен сервер, на нем расшарить, дать права.
Но зачастую даже это сделать некому, т.к. все экономят на админах. Если вместо одного расшаренного экземпляра моей проги будет несколько локальных копий, но эти несколько будут реплицироваться онлайн даже при отсутствии инета, то я смогу дать клиенту то, в чем сегодня отказываю из-за отсутствия у них админа.

PS Думаю понятно объяснил что вторичный сервер там не поднять.
Да почему не поднять то??? Сделай вторичный сервер как составную часть клиента. Первый клиент утром загружается - не нашел серверов в локалке - запускает свой сервер как сервис/демон/отдельную программу. Все. Теперь пока первую машину не перезагрузят вторичный сервер будет работать. Перезагрузили - сервер исчез - следующий клиент который попытается авторизоваться не найдет сервер и запустит новую копию. Клиенты к центральному серверу сами ходить вообще не будут.
А уж вторичный сервер сам будет пытаться достучаться до центрального и как получит обновления - будет их пихать всем своим локальным клиентам (при авторизации) чтобы они обновили базы для своих копий сервера.
25 дек 18, 20:24    [21773332]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
White Owl
Сделай вторичный сервер как составную часть клиента. Первый клиент утром загружается - не нашел серверов в локалке - запускает свой сервер как сервис/демон/отдельную программу. Все.

Не, это решается задача обнаружить друг-друга. Тут проблем нет.
Проблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента. Думаю не стоит заливать на каждого клиента все логины с паролями (или хэшами паролей).
26 дек 18, 07:12    [21773535]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9024
SESPAKE.
Смысл в том, что для перебора паролей требуется участие владельца этого самого пароля.
Владелец в переборе не заинтересован, а это эффективно ограничивает число попыток для потенциального взломщика.
26 дек 18, 14:06    [21773844]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Проблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
26 дек 18, 14:39    [21773876]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Dimitry Sibiryakov
Dima T
Проблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.

Откуда он генерируется? Рискну предположить что это просто случайное число типа GUID.
26 дек 18, 15:06    [21773901]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Basil A. Sidorov
SESPAKE.
Смысл в том, что для перебора паролей требуется участие владельца этого самого пароля.
Владелец в переборе не заинтересован, а это эффективно ограничивает число попыток для потенциального взломщика.

Почитал немного. Если правильно понял это Дифи-Хэллман с зашитой от "человека посредине" с помощью пароля известного двум сторонам.
Я похожий велосипед изобрел, разве что реализация попроще и менее криптостойкая.
Dima T
Напрашивается тупое решение: всем заинтересованным хранить пароль для обмена без сервера авторизации, далее этот пароль используем как ключ шифрования.
26 дек 18, 16:10    [21773976]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov
Dima T
Проблема в том что такой вторичный сервер без инета не сможет проверить пароль клиента.

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.

А майнить кто будет?

Да и инфа закрытая, ее не надо всем и каждому показывать.
26 дек 18, 16:12    [21773978]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Dimitry Sibiryakov
пропущено...

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.

Откуда он генерируется? Рискну предположить что это просто случайное число типа GUID.

Пока особо не заморачивался на эту тему. Можно гуид или хэш какой-нибудь. Без разницы. Он нужен не всегда, а только в редкие случаи отсутствия инета. Поэтому когда инет есть необходимо как-то придумать случайное число и согласовать с другими, а при отключении инета воспользоваться им. Тут надо будет поизобретать алгоритм согласования.
26 дек 18, 16:19    [21773985]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Программирование Ответить