Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
 Авторизация без сервера  [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]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Basil A. Sidorov
Member

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

Откуда:
Сообщений: 13348
Basil A. Sidorov
Dima T
Почитал немного. Если правильно понял это Дифи-Хэллман с зашитой от "человека посредине" с помощью пароля известного двум сторонам.
Нет. Пароль (секрет) известен только одной стороне и не передаётся серверу.
Сервер располагает огрызком от секрета, но не может проверить, подходят ли предъявленные "верительные грамоты" к этому огрызку без активного участия владельца секрета.
Кроме этого сервер может удостовериться, что все ответы приходят от того же клиента, который начинал обмен.

Заинтриговал. Я не сильно разбираюсь в криптографии, просто опираюсь на здравый смысл: Алиса пишет Бобу письмо, Боб должен быть уверен что письмо от Алисы. Известный обоим секрет может подтвердить что письмо от Алисы, но "огрызок секрета" ... я не понимаю. Хотя в случае "огрызка секрета" все-равно важен факт наличия секрета известного обоим сторонам. Наверно это просто продвинутая реализация моих дилетантских идей.
26 дек 18, 20:23    [21774242]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

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

Алиса и Боб встречаются на станции метро. Обмениваются флешками где их публичные ключи.
типа.

/home/alice/.ssh/alice.pub
/home/bob/.ssh/bob.pub

Или фоткают QR-коды прям с экранов телефонов. Это безопасно. Если даже кто-то третий тоже
фоткает ключ Алисы - это ником образом не нарушает протокол. Ключ - публичный. Главное
чтоб он не был изменён на лету.

Алиса присылает Бобу сообщение + его MD5 зашифрованный секретной половинкой своего
ключа. Боб берет известный ему публичный ключ Алисы и проверяет что после дешифровки MD5
совпал. Это магия ЭЦП. Изменить текст без повреждения MD5 нельзя. И изменить сам MD5 нельзя.

В этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.
27 дек 18, 00:31    [21774410]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
В студенчестве мне был интересен PGP. Насколько я помню фреймворк
предлагал комплекс утилит для децентрализованной сети доверия.
Тоесть например:

Если мне шлёт письмо Basil A. Sidorov а я его не знаю. Но я вижу
что за него подписался Dima T а я его знаю и доверяю и следовательно
я могу делать какие-то допущения в части надёжности источника.

Как PGP обменивается уровнями доверия - это загадка. Я щас не помню.
27 дек 18, 01:48    [21774434]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
В этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.

Добавь Диффи-Хеллмена, а обмен подписывай ЭЦП и все будет идеально.
27 дек 18, 08:00    [21774475]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Как PGP обменивается уровнями доверия - это загадка. Я щас не помню.

Получатель сообщает свой открытый ключ, а ты им шифруешь. тынц
С обменом открытыми ключами там тоже не все гладко.
27 дек 18, 08:14    [21774477]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 9024
Dima T
Известный обоим секрет может подтвердить что письмо от Алисы, но "огрызок секрета" ... я не понимаю.
Насколько я всё это понимаю, предполагается, что мы принимаем результат начальной процедуры регистрации пользователя, когда сервер и получает "огрызок секрета" без каких-либо оговорок.
Т.е. не заморачиваемся личностью владельца и вмешательством третьего на этом эпапе.
Дальше всё работает по протоколу (которого лично я не понимаю)
27 дек 18, 14:02    [21774750]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Dima T
mayton
В этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.

Добавь Диффи-Хеллмена, а обмен подписывай ЭЦП и все будет идеально.

Так Диффи Хелман это не про это.

Это про то что Алиса и Боб переходят от открытого обмена документами с ЭЦП к закрытому
алгоритму шифрования (типа 3Des).

Но и в данном конкретном случае уязвимость рукопожатия остается.

В части браузеров это решается хардкодом корневых сертификатов которые подписывают другие сертификаты
DNS записей от корня к листьям.

Но и эта схема предполагает например надёжный DNS и неигнорирование пользователем сообщения об
принятии нового сертификата.
27 дек 18, 14:03    [21774754]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
А майнить кто будет? Картинка с другого сайта.

Да и инфа закрытая, ее не надо всем и каждому показывать.

О чём это ты?

Асимметричные ключи, используемые в биткоине или SSH для идентификации не майнятся, а просто генерятся. И любой пир может подтвердить личность другого по вернувшемуся правильному challenge (который почти случайный набор байт).

Открытый ключ по определению инфа открытая, а инфу, им зашифрованную, показывай хоть кому - правильно прочесть сможет только владелец закрытого ключа.
27 дек 18, 14:45    [21774822]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Но и в данном конкретном случае уязвимость рукопожатия остается.

В части браузеров это решается хардкодом корневых сертификатов которые подписывают другие сертификаты
DNS записей от корня к листьям.

Но и эта схема предполагает например надёжный DNS и неигнорирование пользователем сообщения об
принятии нового сертификата.

В смысле Алиса получит сертификат Боба сгенеренный не Бобом, а Васей?

В моем случае такого не будет, т.к. есть сервер, который в нормальном режиме (с инетом) подтвердит что Алиса это Алиса, а Боб это Боб. Вобщем обмен открытыми ключами не проблема. Этот вариант уже предлагали 21771246.

Тут придется задействовать какую-нибудь криптобиблиотеку, а я хочу решение попроще, без сторонних dll. В принципе я его уже придумал 21771725
27 дек 18, 14:47    [21774826]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6340
Dima T
Тут придется задействовать какую-нибудь криптобиблиотеку, а я хочу решение попроще, без сторонних dll

Если не брать готовую библиотеку, то криптография обязательно будет реализована с дырами )).
27 дек 18, 15:24    [21774883]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
27 дек 18, 18:43    [21775136]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
а у вас лицензия есть?
27 дек 18, 20:08    [21775223]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
а у вас лицензия есть?

ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.
27 дек 18, 20:23    [21775235]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6340
Dima T
Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.

На любую криптографию найдется лом в виде кейлоггера ))
27 дек 18, 20:45    [21775248]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Anatoly Moskovsky
Dima T
Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.

На любую криптографию найдется лом в виде кейлоггера ))

На клавиатуре вводить ничего не потребуется.

Есть оболочка с шифрованным хранилищем, там же можно хранить закрытый ключ, а сгенерить ключ можно без участия пользователя.

PS Антикейлоггер легко делается, точно не помню как, у Рихтера написано как.
27 дек 18, 20:53    [21775250]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
kealon(Ruslan)
пропущено...
а у вас лицензия есть?

ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.

Боюсь что нет если на продажу, тынц
28 дек 18, 00:20    [21775341]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
пропущено...

ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.

Боюсь что нет если на продажу, тынц

под это
2. Разработка защищенных с использованием шифровальных (криптографических) средств информационных систем.

подпадает обращение к WebAPI по HTTPS или использование ODBC-драйвера, который при коннекте к серверу БД шифрует пароль.

Потом любое шифрование под это подходит, т.е. не только RSA, а даже просто XOR с константой - это же тоже шифрование.

Каждому разработчику предлагаешь лицензию выдать?

Если я не буду заявлять что мой софт использует шифрование, то кто должен доказать обратное?

Мутный этот закон, любую прогу можно под него подвести.
В реальности он работает только там где юридически-значимая ЭЦП используется.
И даже там не везде, а только для разработки непосредственно софта для ЭЦП.
Я консультировался на предмет: могу ли я в свою прогу встроить готовую библиотеку для подписи ЭЦП - оказывается могу и лицензии не надо.
28 дек 18, 09:33    [21775448]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T,
да, наши законы такие...
если специально кто-то возьмётся, то можно вдовесок и по ярой подкинуть конечно
28 дек 18, 10:27    [21775491]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Anatoly Moskovsky
Dima T
Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.

На любую криптографию найдется лом в виде кейлоггера ))

Криптография как часть информационной безопасности изучает взаимодействие субъектов
типа Алисы и Боба в определённом enviromnent где нет вирусов троянов и кейлоггеров.

Кейлоггеры можно просто рассмотреть отдельной темой. И я думаю что протокол Димы
скорее всего предполагает априори приложение установленное на каноническую
операционку без шпионского софта.

Если этих начальных условий нет - то мы дальше просто никуда не сдвинемся.
28 дек 18, 10:29    [21775493]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
В моем случае такого не будет, т.к. есть сервер, который в нормальном режиме (с инетом) подтвердит что Алиса это Алиса

Осталось только понять как сервер определит, что Алиса это Алиса. Или у тебя как обычно: Алисой считается тот, кто первый ею назовётся?..
28 дек 18, 14:57    [21775813]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov
Dima T
В моем случае такого не будет, т.к. есть сервер, который в нормальном режиме (с инетом) подтвердит что Алиса это Алиса

Осталось только понять как сервер определит, что Алиса это Алиса. Или у тебя как обычно: Алисой считается тот, кто первый ею назовётся?..

Элементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".
Ну и пароль у Алисы есть, криптостойкий, хранится в шифрованном хранилище, никуда не передается открытым текстом.
28 дек 18, 15:08    [21775830]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dima T
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Строк мало, а в 32 бита вписаться проблематично :( Есть проблемы с генерацией ключей.
28 дек 18, 21:10    [21776060]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6340
mayton
Кейлоггеры можно просто рассмотреть отдельной темой. И я думаю что протокол Димы
скорее всего предполагает априори приложение установленное на каноническую
операционку без шпионского софта.

Если этих начальных условий нет - то мы дальше просто никуда не сдвинемся.

Вообще, я будучи студентом, не сильно напрягаясь написал кейлоггер и методом т.н. социальной инженерии установил его на комп админа сети на кафедре чтобы узнать его пароль и сделать себе права на запись в нужный раздел на сервере, чтобы не таскать дискетки.
Так что это вопрос вполне практический и его тоже надо рассматривать при защите от студентов, а не рассчитывать на их некомпетентность.
28 дек 18, 23:39    [21776113]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Я не буду возражать. Но обсуждение кейлоггера в данном топике - неконструктивно. Оно - не поможет Диме.
28 дек 18, 23:42    [21776115]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
Dima T
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Строк мало, а в 32 бита вписаться проблематично :( Есть проблемы с генерацией ключей.
какие проблемы то? гдет тема была с генерацией простых чисел

фигня только выйдет, взламывается на ура тупым перебором
29 дек 18, 00:15    [21776126]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Победил разрядность, черновик без тюнинга производительности
	// Создание ключей
	rand_init(); // Инициализация ГСЧ
	uint32_t p, q, n, y, e, d;
	while (true) { // для возврата при переполнении
		cout << "Please wait... Key generation procces." << endl;
		// 1. Выбираются два различных случайных простых числа p и q заданного размера.
		do {
			p = rand32_prime(1024, 65535); // случайное простое в диапазоне от ... до ...
			q = rand32_prime(1024, 65535);
			// 2. Вычисляется их произведение n = p * q, которое называется модулем.
			n = p * q;
		} while(n < 0xFFFFF || n > 0xFFFFFF); // для шифрования двухбайтовых значений 
		// 3. Вычисляется значение функции Эйлера от числа n: y = (p - 1) * (q - 1)
		y = (p - 1)*(q - 1);
		// 4. Выбирается целое число e ( 1 < e < y) взаимно простое со значением y
		do {
			//e = rand32(5, y - 1); // rand32() случайное в диапазоне от ... до ...
			e = rand32(32, 255); // при больших e не хватает разрядности при подборе d
		} while (gcd(e, y) != 1);
		// 5. Вычисляется число d, удовлетворяющее сравнению (e*d) % y = 1
		uint32_t d_max = 4294967295 / e - 1; // наибольшее d 32 бита
		d = rand32(y / e, d_max);
		while (d < d_max && e*d % y != 1) {
			d++;
		}
		if (d < d_max) break;
	}
	// Готово: {e,n} - открытый ключ, {d,n} - закрытый ключ

Далее шифрование
uint32_t crypt = pow_mod(data, e, n);

и расшифровка
uint32_t decrypt = pow_mod(crypt, d, n);

где
pow_mod(base, exp, n) { 
   return (base ^ exp) % n; // Формула из учебников, чтобы понятно было
}

Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
Планирую двухбайтными блоками шифровать, плюс флаг для указания что один байт зашифрован, т.е. шифруемые значения 0 <= x <= 0x100FF. Поэтому ограничил 0x100000 <= n <= 0xFFFFFF. Т.е. минимальный n почти в 16 раз больше максимального шифруемого.
Тесты погоняю, но ключей множество, все комбинации не проверить. Хотелось бы найти какое-то мат.доказательство.
29 дек 18, 09:25    [21776202]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты
29 дек 18, 09:33    [21776209]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты

В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?
29 дек 18, 09:38    [21776213]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
// 5. Вычисляется число d, удовлетворяющее сравнению (e*d) % y = 1
		uint32_t d_max = 4294967295 / e - 1; // наибольшее d 32 бита
		d = rand32(y / e, d_max);
		while (d < d_max && e*d % y != 1) {
			d++;
		}
		if (d < d_max) break;

вот это нехорошо, гугли расширенный алгоритм Евклида
29 дек 18, 09:40    [21776215]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
kealon(Ruslan)
пропущено...
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты

В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?
не к експоненте, а к p и q
29 дек 18, 09:46    [21776216]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
пропущено...

В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?
не к експоненте, а к p и q

Добавил тупой перебор
	for (uint32_t i = 0; i != 65792; i++) {
		uint32_t crypt = pow_mod(i, e, n);
		uint32_t decrypt = pow_mod(crypt, d, n);
		if (i != decrypt) {
			cout << "!!! ERROR: crypt " << i << " decrypt " << decrypt << endl;
			break;
		}
	}

Не срабатывает, хотя вот например значения
{6449,1823} - {p, q}
{253,11756527} - {e,n}
{15138069,11756527} - {d,n}

Как понимаю должно сглючить на каждом кратном 1823, т.е. 3646, 5469, 7292, 9115 и т.д. но работает.

Оставим этот вопрос открытым, пока просто добавлю эту проверку в генерацию ключей.

kealon(Ruslan)
вот это нехорошо, гугли расширенный алгоритм Евклида

Евклида загуглил, спасибо за подсказку, а то хотел свой велосипед изобретать.

kealon(Ruslan)
фигня только выйдет, взламывается на ура тупым перебором

Думаю прежде чем тюнинг устраивать надо перебор запустить: генерить ключи и писать в какой-нибудь std::map, посмотреть как быстро будет увеличиваться количество уникальных комбинаций, как часто повторы случаются.
Если их относительно немного получится, например миллиард, то можно сложить их в табличку и по открытому ключу получать закрытый.

Написал, посмотрел код:
0x100000 <= n <= 0xFFFFFF
32 <= e <= 255
т.е. n максимум 2^24, e - 2^8 итого максимум 2^32 комбинаций или 4 лярда, которые уже в табличку влазят. Причем не все комбинации допустимы, т.е. допустимых комбинаций будет намного меньше. Печалька (((

Для начала разрядность n и e надо повысить.
29 дек 18, 10:32    [21776241]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

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

Написал, посмотрел код:
0x100000 <= n <= 0xFFFFFF
32 <= e <= 255
т.е. n максимум 2^24, e - 2^8 итого максимум 2^32 комбинаций или 4 лярда, которые уже в табличку влазят. Причем не все комбинации допустимы, т.е. допустимых комбинаций будет намного меньше. Печалька (((

Для начала разрядность n и e надо повысить.
Зачем???
просто n разложить на множители и дальше расчёт ключей тривиален - вот и весь "взлом"
29 дек 18, 11:46    [21776286]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
просто n разложить на множители и дальше расчёт ключей тривиален - вот и весь "взлом"

Точно. На перебор всех простых от 2 до sqrt(n) надо меньше секунды. Потом немного перебора с подбором d.

Все равно допилю, без исходников сложно понять что это за алгоритм. А в случае необходимости всегда можно перейти на полноценный RSA.
29 дек 18, 14:04    [21776411]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
// 5. Вычисляется число d, удовлетворяющее сравнению (e*d) % y = 1
		uint32_t d_max = 4294967295 / e - 1; // наибольшее d 32 бита
		d = rand32(y / e, d_max);
		while (d < d_max && e*d % y != 1) {
			d++;
		}
		if (d < d_max) break;

вот это нехорошо, гугли расширенный алгоритм Евклида

Алгоритм нагуглил, только как его тут применить не понимаю.
Алгоритм Евклида можно расширить так, что он не только даст НОД(a,b)=d, но и найдет целые числа x и y, такие что ax + by = d.
29 дек 18, 14:11    [21776415]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Вроде нашел как
https://foxford.ru/wiki/informatika/rasshirennyy-algoritm-evklida
Одним из применений расширенного алгоритма Евклида является нахождение обратного элемента в кольце вычетов по модулю....
29 дек 18, 14:18    [21776424]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Элементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".

Вопрос не во входе, вопрос в регистрации нового пользователя. В системе ещё нет Алисы. Как Алиса докажет, что это она Алиса, а не Хрен-с-горы, который ею представился час назад?
29 дек 18, 14:39    [21776443]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
Вроде нашел как
https://foxford.ru/wiki/informatika/rasshirennyy-algoritm-evklida
Одним из применений расширенного алгоритма Евклида является нахождение обратного элемента в кольце вычетов по модулю....

не помню откуда брал, нерекурсивный вариант:
// ax + by = gcd(a,b)
procedure gcdMain(a, b: TInt; out x, y, d: TInt);
var
  q, r, x1, x2, y1, y2: TInt;
begin
  if (b = 0) then
  begin
    d := a;
    x := 1;
    y := 0;
    Exit;
  end;

  x2 := 1;
  x1 := 0;
  y2 := 0;
  y1 := 1;
  while (b > 0)do
  begin
    q := a div b;
    r := a - q * b;
    x := x2 - q * x1;
    y := y2 - q * y1;

    a := b;
    b := r;
    x2 := x1;
    x1 := x;
    y2 := y1;
    y1 := y;
  end;
  d := a;
  x := x2;
  y := y2;
end;
29 дек 18, 15:22    [21776475]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov
Dima T
Элементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".

Вопрос не во входе, вопрос в регистрации нового пользователя. В системе ещё нет Алисы. Как Алиса докажет, что это она Алиса, а не Хрен-с-горы, который ею представился час назад?

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

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

Например резервное копирование: есть получатель "backup", ему сообщил что слать файлы могут "proga1", "proga2" и "proga3". От этих учеток принимает, остальным пишет "Извините, а вы кто?"
29 дек 18, 15:33    [21776483]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
не помню откуда брал, нерекурсивный вариант:

Спасибо. А то в инете только с рекурсией.
29 дек 18, 15:36    [21776485]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
Dima T
kealon(Ruslan)
не помню откуда брал, нерекурсивный вариант:

Спасибо. А то в инете только с рекурсией.
та нет, мусорка просто та ещё

тынц
29 дек 18, 15:37    [21776487]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
kealon(Ruslan)
Dima T
пропущено...

Спасибо. А то в инете только с рекурсией.
та нет, мусорка просто та ещё

тынц

+ Я уже твой переписал
// Расширенный алгоритм Евклида. ax + by = gcd(a,b)
uint32_t gcdext(uint32_t a, uint32_t b, int32_t & x, int32_t & y) {
	if (b == 0) {
		x = 1; y = 0;
		return b;
	}

	uint32_t q, r;
	int32_t x1, x2, y1, y2;

	x2 = 1;
	x1 = 0;
	y2 = 0;
	y1 = 1;
	while (b > 0) {
		q = a / b;
		r = a - q * b;
		x = x2 - q * x1;
		y = y2 - q * y1;

		a = b;
		b = r;
		x2 = x1;
		x1 = x;
		y2 = y1;
		y1 = y;
	}
	x = x2;
	y = y2;
	return a;
}

Вроде работает
29 дек 18, 16:05    [21776509]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Затестил перебор. За полчаса нагенерил 7 млн. пар ключей, количество уникальных остановилось на 3`607`581 и даже по одному не добавляется. Можно ломать таблицей ключей )))

Понаблюдаю еще пару часов.
29 дек 18, 17:53    [21776558]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
kealon(Ruslan)
Dima T
пропущено...

Строк мало, а в 32 бита вписаться проблематично :( Есть проблемы с генерацией ключей.
какие проблемы то? гдет тема была с генерацией простых чисел

фигня только выйдет, взламывается на ура тупым перебором

Тест Миллера-рабина применяется. Для чисел которые во много раз больше чем мы генерили несколько лет назад.
29 дек 18, 18:04    [21776563]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
mayton
Тест Миллера-рабина применяется. Для чисел которые во много раз больше чем мы генерили несколько лет назад.
этот тест для проверки простоты числа используется, когда ищут пару для ключа.
29 дек 18, 18:34    [21776570]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dima T
Затестил перебор. За полчаса нагенерил 7 млн. пар ключей, количество уникальных остановилось на 3`607`581 и даже по одному не добавляется. Можно ломать таблицей ключей )))

Понаблюдаю еще пару часов.

Полтора часа прошло, 27 млн. обработано, а уникальных те же 3`607`581. Все понятно, вырубаю.
29 дек 18, 19:28    [21776586]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Оказывается Тест Миллера — Рабина иногда имеет ложноположительные срабатывания
Однако, с его помощью нельзя строго доказать простоту числа. Тем не менее тест Миллера — Рабина часто используется в криптографии для получения больших случайных простых чисел.

Наткнулся на is_prime(233 * 1103) дает true, я на его основе делаю пару ключей, естественно они не рабочие.

Как с этим бороться?
30 дек 18, 10:35    [21776823]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Да. Это нормально.
30 дек 18, 11:26    [21776831]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1391
А все-таки, ключ - это одно число, или система чисел?
30 дек 18, 13:48    [21776870]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
С точки зрения криптографии ключ - это просто массив битов.

Но для нашего (человеческого восприятия) мы можем его представлять в виде
- Целого десятичного числа: 12345678
- Двоично десятичного (binhex) Например: 00 FF AB C1
- Base64 - кодированного представления (система счисления с основанием 64)

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

Для симметричной криптографии (например шифр DES) например ключ это просто массив из 56 битов.
Для тройного ДЕС-а - соотвествтенно бутерброд из трех ключей 3*56. И формулы там - другие.
Но в большинстве случаев это просто очень хороший случайный поток битов. Без повторов и авто-корреляций.

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

Выше Дима привёл замечание к методу Раввина-Миллера. Од даёт ложные сообщения о том что число простое.
Но это допустимо. Во первых у него - ошеломительная скорость по сравнению с традиционными методами.
Во вторых он параметризируется числом раундов. (Здесь я точно не помню надо почиать). Ну вобщем
в беря во внимание длинну целых чисел с коротыми он работает - его предсказание простоты вполне
себе подходит для практических задач.
30 дек 18, 14:02    [21776880]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1391
Поскольку ищется число, скажем так, оригинальное, то почему оно не может быть в виде массива сочетаний из 0 и 1 (естественно в битах)? Длина массива сочетаний - любая.
30 дек 18, 14:11    [21776889]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Я не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.

Хотя если брать математическое описание алгоритма - то его можно адаптировать под любые разрядности.
Главное чтоб наши комьютеры не захлебнулись.
30 дек 18, 14:24    [21776895]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
mayton
Я не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.

Хотя если брать математическое описание алгоритма - то его можно адаптировать под любые разрядности.
Главное чтоб наши комьютеры не захлебнулись.

RSA как по учебнику. Алгоритм с википедии, он же в каментах кода 21776202

Единственное ограничение - вписаться в 32 бита, чтобы использовать стандартные целые типы.
30 дек 18, 14:36    [21776897]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Вобщем от 1024 бит и выше.

$ ssh-keygen -t rsa -b 1000
Invalid RSA key length: minimum is 1024 bits
30 дек 18, 14:36    [21776898]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
До 16 килобайт.

$ ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384


Предыдущий запуск с 16к отработал но занял где-то 2 минуты.
30 дек 18, 14:42    [21776901]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Это-то тут при чем?

Это тут при том, что авторизация не зависит от того кем она проводится. Если сервер верит Алисе на слово, а Боб доверяет серверу, то Боб может спокойно верить Алисе на слово и степень безопасности от этого не изменится. Получит ли Боб ключ Алисы от сервера или от Алисы непосредственно - совершенно всё равно.

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

Если Боб один раз получил ключ Алисы от сервера, то уже никто кроме самой Алисы не сможет ему написать с этой учётки даже при моментальном отсутствии сервера. Это тривиально и на "проблему" не тянет.

PS: Эх, а я-то считал себя безалаберным используя для идентификации 381-битные ключи...
30 дек 18, 15:02    [21776909]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Наткнулся на is_prime(233 * 1103) дает true, я на его основе делаю пару ключей, естественно они не рабочие.

Как с этим бороться?

Именно так и бороться: проверять сгенерированную пару ключей на "рабочесть". Если проверка не прошла - генерировать новую пару. Все так делают.
30 дек 18, 15:05    [21776911]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
mayton
RSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.

Как алгоритм он никаких ограничений не имеет. SSH/SSL имеет ограничения по используемым (генерируемым) ключам, но они связаны исключительно с соображениями безопасности снизу и используемым протоколом сверху.
30 дек 18, 15:10    [21776913]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Мне кажется надо еще раз проговорить архитектуру Димы.

Как я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?
30 дек 18, 15:33    [21776918]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1391
mayton
Я не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные разрядности алгоритмов и ключей.
Хотя если брать математическое описание алгоритма - то его можно адаптировать под любые разрядности.
Главное чтоб наши комьютеры не захлебнулись.
А если адаптировать алгоритмы под ключи?
30 дек 18, 16:03    [21776928]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov
Dima T
Это-то тут при чем?

Это тут при том, что авторизация не зависит от того кем она проводится. Если сервер верит Алисе на слово, а Боб доверяет серверу, то Боб может спокойно верить Алисе на слово и степень безопасности от этого не изменится. Получит ли Боб ключ Алисы от сервера или от Алисы непосредственно - совершенно всё равно.

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

Если Боб один раз получил ключ Алисы от сервера, то уже никто кроме самой Алисы не сможет ему написать с этой учётки даже при моментальном отсутствии сервера. Это тривиально и на "проблему" не тянет.

PS: Эх, а я-то считал себя безалаберным используя для идентификации 381-битные ключи...

Еще раз - давай оставим в стороне тему создания новых учеток. Я ее не поднимал. Тема сильно зависит от области применения.

Обычно эта задача решается так что с улицы никого не пускают, а пускают из другой системы, где пользователь уже присутствует.
Если ты банк, то сначала пакет документов в ответ учетка. Если мессенджер, то давай номер телефона и получи код в смс-ке и т.д. и т.п.
У меня эта тема уже порешана, учетки заводятся не без участия администраторов. Проблем с нездоровой активностью фантомных учеток у меня нет и не было.
mayton
Как я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?

Верно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.
30 дек 18, 16:41    [21776947]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Dima T
mayton
Как я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?

Верно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.

Ок. Тогда следующий вопрос-предложение. Или мысль. Или statement.
Если я буду неправ - сообщи.

1) При установке софта в каждое приложение прошивается сертификат (публичный ключ + реквизиты) сервера.
2) Все клиенты обмениваются сообщениями по принципу все-со всеми. Протокол и формат сейчас не имеет значения. TCP/UDP, Jabber, JMS.
3) Имеет значение аутентичноть. Тоесть все сообщения от всех имеют отправителя. Например.
From mayton: Привед! Чо как?

В данном случае в сети может существовать только 1 mayton.
4) Сообщения от лже-mayton должны
- игнорироваться?
- помечаться как непроверенные? Ненадёжные? Non-confident.
5) Любой контрагент может войти в сеть без сервера и (теоретически) начать писать другим
сообщения. Данный пункт является архитектурной проблемой и его надо как-то разрешить.
30 дек 18, 16:53    [21776955]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

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

Тогда повторяю медленно: авторизационные токены всех участников рассылаются всем остальным участникам с сервера чем быстрее тем лучше. Если сообщение пытается отправить кто-то, чьего токена у получателя ещё нет - он получает отлуп. Всё.

Если последний пункт тебя не устраивает, то ты можешь завести "временное доверие", при котором принятое сообщение помещается в карантин и ждёт до тех пор когда сервер вернётся и подтвердит подлинность отправителя.

Если ждать возвращения сервера невтерпёж, то подтверждение токена может быть запрошено у других участников сети и доверие к отправителю можно оценить по кворуму.
30 дек 18, 18:01    [21776972]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

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

Верно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.

Ок. Тогда следующий вопрос-предложение. Или мысль. Или statement.
Если я буду неправ - сообщи.

1) При установке софта в каждое приложение прошивается сертификат (публичный ключ + реквизиты) сервера.
2) Все клиенты обмениваются сообщениями по принципу все-со всеми. Протокол и формат сейчас не имеет значения. TCP/UDP, Jabber, JMS.
3) Имеет значение аутентичноть. Тоесть все сообщения от всех имеют отправителя. Например.
From mayton: Привед! Чо как?

В данном случае в сети может существовать только 1 mayton.
4) Сообщения от лже-mayton должны
- игнорироваться?
- помечаться как непроверенные? Ненадёжные? Non-confident.
5) Любой контрагент может войти в сеть без сервера и (теоретически) начать писать другим
сообщения. Данный пункт является архитектурной проблемой и его надо как-то разрешить.

1. Клиент как-то получает логин/пароль. Нет смысла расписывать всю схему. Клиент - это конкретный пользователь конкретной копии БД, но не только. Есть еще роботы.
2. Верно.
3. Верно.
4. лже-mayton вообще не должен попасть в систему, т.е. если один mayton онлайн в системе, то второй не может залогинится.
5. Собственно это и есть проблема о которой топик. Я придумал как ее минимизировать 21771725.

С другой стороны мне хочется понять насколько полезно неполноценное шифрование: в общем случае мой самодельный RSA32 ломается меньше чем за секунду (до написания в инете видел заявления что до суток продержится, но увы и ах, kealon(Ruslan) отрезвил), с другой стороны он нужен для редких случаев когда нет инета. Мой RSA32 может и дырявый насквозь, но если обеспечить получение открытого ключа только проверенными пользователями, то он вполне будет криптостоек, т.к. при прослушке зашифрованное не прочитать без ключей.
30 дек 18, 18:14    [21776977]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Заменил проверку на простое с Миллера-Рабина, на тупую проверку остатка от деления всех простых до sqrt(x). Стало быстрее в два раза. Наверно это особенность x32, на больших разрядностях такая проверка захлебнется.
+ bool is_prime32(uint32_t x)
// Проверка на простоту делением на простые
bool is_prime32(uint32_t x) {
	// Все 16 битные простые
	static uint16_t *prime = NULL;
	if (prime == NULL) { // Инициализация prime[]
		prime = new uint16_t[6543];
		uint16_t *cur = prime;
		*cur = 2;
		cur++;
		for (uint16_t i = 3; i != 65535; i += 2) {
			bool is_prime = true;
			for (uint16_t *c = prime; (uint32_t)i >= (uint32_t)(*c) * (*c); c++) {
				if (i % (*c) == 0) {
					is_prime = false;
					break;
				}
			}
			if (is_prime) {
				*cur = i;
				cur++;
			}
		}
		*cur = 0; // Ограничитель для чисел близких к максимуму
	}
	// Проверка x
	for (uint16_t *cur = prime; (*cur) != 0 && x >= (uint32_t)(*cur) * (*cur); cur++) {
		if (x % (*cur) == 0) return false;
	}
	return true;
}
30 дек 18, 18:54    [21776985]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

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

А если сервера нет, то как этот первый сможет залогиниться?

Dima T
Собственно это и есть проблема о которой топик. Я придумал как ее минимизировать

А я предлагаю как её устранить на корню. При этом центральный сервер вообще можно выкинуть из картины за ненадобностью. Что и сделано у биткоина и прочих блокчейнов.
30 дек 18, 19:30    [21776995]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Dima T
1. Клиент как-то получает логин/пароль. Нет смысла расписывать всю схему. Клиент - это конкретный пользователь конкретной копии БД, но не только. Есть еще роботы.
2. Верно.
3. Верно.
4. лже-mayton вообще не должен попасть в систему, т.е. если один mayton онлайн в системе, то второй не может залогинится.
5. Собственно это и есть проблема о которой топик. Я придумал как ее минимизировать 21771725.

С другой стороны мне хочется понять насколько полезно неполноценное шифрование: в общем случае мой самодельный RSA32 ломается меньше чем за секунду (до написания в инете видел заявления что до суток продержится, но увы и ах, kealon(Ruslan) отрезвил), с другой стороны он нужен для редких случаев когда нет инета. Мой RSA32 может и дырявый насквозь, но если обеспечить получение открытого ключа только проверенными пользователями, то он вполне будет криптостоек, т.к. при прослушке зашифрованное не прочитать без ключей.

Хм. В твоей схеме шифрование-то вобщем не нужно.

В момент регистрации когад клиент как-то получает логин/пароль - сервер получает публичный ключ
клиента. Подписывает его. И сохраняет в свою базу. И с этого момента все участники чата если
обращаются на сервер могут получить образ этой базы и кешировать его так-же как браузер
хранит "печенюшки". Основываясь на TTL каждой записи. (Помним что сертификаты имеют
срок годности).

Есть еще схема когда участники между собой могут передавать образ этой базы.
Поскольку все записи заверены сервером (хардкод главного сертификата) то все
имеют возможность видеть публичные ключи всех.
30 дек 18, 19:36    [21776996]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Вот к примеру публичная часть RSA-ключа которую я сгенерил сегодня

~/.ssh$ fold < id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGSwaUaFwt8Yz7rqkLTQJw+lE2sx74EF9zQ+1GNbEE
/+OXtXhivDIDX+lLJg0KG2ZfXXrZPsvGslmDXYIK7D5jA7HY3bcB9/Z6Wg+HfJvoOvrSab8/mWFr51V9
8WuLAFv9AWj4je1A+Wrr1+IQjtRXgrBrDxmnomvYRn38/vK438WVxs7ByIMBj858u2p6xI6xtGtgt1Da
LvEjJnjKE6X9+MTZnpb/r7RVzXXvHODPnKLQDkVlm8IA47HYuKOCTAwqYETGQVEi6JXMJ481AoHTW21c
HxanOKcyiTObHpr+LiY+o2+Pzy6pyMbXyFIMIsljgiWhUDSe0PyETuaTWu91 mayton@mayton-HP-25
0-G4-Notebook-PC


В данном случае ssh-rsa - видимо сигнатура файла.
Длинная белиберда в base64 это и есть ключ.
Остальное - это пользователь-хост и протокол.

(P.S. всё побежал резать Оливье пока меня жена не убила...)
30 дек 18, 19:42    [21776997]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Поделюсь немного своим жизненным опытом: на клиенте шифрование БД было, обмен с сервером был по HTTP (не HTTPS) с открытой передачей пароля по самодельному протоколу.

Конкуренты (их прога стояла там же где моя) не стали вникать в тонкости, а пошли сначала путем подмены DNS, т.е. в hosts на мои домены прописали свои шлюзы, где пытались анализировать трафик и рубить им не угодный, хотели скомпромитировать что у меня обмен не надежен. Не получилось. Затем просто за DDOS-или мой сервер.

Если учетка связана с деньгами, например вход в инет-банк, то да, согласен, есть интерес взломать и деньги украсть, а если явных денег нет, то проще заддосить и попросить денег за остановку атаки. Я исхожу из того что заддосить меня нельзя, а в остальном я нафиг не интересен, я Неуловимый Джо.

PS Никому не навязываю свою точку зрения, т.к. всем начальство может задать вопрос "а может быть что шпиьон прочитает нашу переписку?", ответить "нет" можно дать только при применении общеизвестных и проверенных способов шифрования.
30 дек 18, 20:18    [21777007]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
exp98
Member

Откуда:
Сообщений: 1609
Dima T, ведь в цикле вместо всех нечётных достаточно 6х+-1, т.е. 1/3 всех значений вместо половины.
30 дек 18, 20:36    [21777011]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
exp98
Dima T, ведь в цикле вместо всех нечётных достаточно 6х+-1, т.е. 1/3 всех значений вместо половины.

Знаю, но для x32 это не сильно ускорит.
30 дек 18, 20:45    [21777012]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov
Dima T
лже-mayton вообще не должен попасть в систему, т.е. если один mayton онлайн в системе, то второй не может залогинится.

А если сервера нет, то как этот первый сможет залогиниться?

Никак. Но есть локалка, где 2-3 юзера заинтересованных в обмене друг с другом. Найти друг-друга элементарно через mailslot`ы. Дальше надо убедиться что они те за кого себя выдают, что и есть тема топика.

Dimitry Sibiryakov
Dima T
Собственно это и есть проблема о которой топик. Я придумал как ее минимизировать

А я предлагаю как её устранить на корню. При этом центральный сервер вообще можно выкинуть из картины за ненадобностью. Что и сделано у биткоина и прочих блокчейнов.

Не стоит исключение превращать в правило. Серверов я могу пачку поднять и наладить между ними репликацию и оповещение клиентов какие сервера доступны. Это неубиваемо и гораздо эффективней блокчейнов
30 дек 18, 21:08    [21777018]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dima T
Member

Откуда:
Сообщений: 13348
Dimitry Sibiryakov, самое главное что по UDP не будет работать без сервера. Наты и брандмауры не пропустят.
Алиса спрашивает у сервера адрес Боба.
Сервер пишет Алисе адрес Боба и Бобу адрес Алисы.
Алиса и Боб начинают писать друг-другу и пробивают все наты и брандмауры.
Ключевое слово "друг-другу", без этого никак.
30 дек 18, 21:15    [21777021]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
mayton
Member

Откуда: loopback
Сообщений: 39224
Как-то.... сумбурно все. Есть и DDOS. И локальная сеть. Вещи вобщем-то несовместимые.
Вобщем как для меня то надо отделить мух от котлет и понять что за проблема решается.
Какие есть бизнес-кейсы. Как это будет использоваться.

Вобщем сумбурно.
30 дек 18, 21:42    [21777028]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47076
Dima T
Не стоит исключение превращать в правило. Серверов я могу пачку поднять и наладить между ними репликацию и оповещение клиентов какие сервера доступны. Это неубиваемо и гораздо эффективней блокчейнов

Это неубиваемо только пока ты жив и твои сервера не блокируются целенаправленно. Но распределённая пировая сеть всё равно надёжнее. Хотя, конечно, с вендор-лок и зависимостью от тебя в этом случае будет облом, а значит монетизация может не заработает.
30 дек 18, 23:00    [21777052]     Ответить | Цитировать Сообщить модератору
 Re: Авторизация без сервера  [new]
kealon(Ruslan)
Member

Откуда: Нижневартовск
Сообщений: 4242
mayton
Хм. В твоей схеме шифрование-то вобщем не нужно.

В момент регистрации когад клиент как-то получает логин/пароль - сервер получает публичный ключ
клиента. Подписывает его. И сохраняет в свою базу. И с этого момента все участники чата если
обращаются на сервер могут получить образ этой базы и кешировать его так-же как браузер
хранит "печенюшки". Основываясь на TTL каждой записи. (Помним что сертификаты имеют
срок годности).

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

  • Клиент1 генерит открытый и закрытый ключ для сессии
  • Клиент1 отправляет серверу запрос авторизации со сгенеренным паблик-ключом
  • Сервер например добавляет время, берёт подпись хэшсумму с этого добра, подписывает её своим закрытым ключом и отправляет подпись назад клиенту
  • клиент1 подцепляется к клиенту2 отправив свой открытый ключ и ответ сервера
  • клиент2 знает паблик-ключ сервера и расшифровывает исходную хэш-сумму из предполагаемого ответа сервера, считает хэш-сумму по тому же алгоритму из предоставленных данных и сравнивает. Совпадает - доверяет

    но естественно ключи должны быть адекватной длины
  • 31 дек 18, 00:36    [21777062]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    WebSharper
    Member

    Откуда:
    Сообщений: 414
    https://crypto.stackexchange.com/questions/12479/how-to-perform-authentication-without-central-server-in-p2p там правда ссылка на проект битая.

    Ещё можно использовать https://en.m.wikipedia.org/wiki/Public_key_fingerprint для идентификации.
    31 дек 18, 10:52    [21777105]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    mayton
    Вобщем сумбурно.

    Это разные части одной большой системы, но к теме это не относится.
    31 дек 18, 11:50    [21777112]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    kealon(Ruslan)
    mayton
    Хм. В твоей схеме шифрование-то вобщем не нужно.

    В момент регистрации когад клиент как-то получает логин/пароль - сервер получает публичный ключ
    клиента. Подписывает его. И сохраняет в свою базу. И с этого момента все участники чата если
    обращаются на сервер могут получить образ этой базы и кешировать его так-же как браузер
    хранит "печенюшки". Основываясь на TTL каждой записи. (Помним что сертификаты имеют
    срок годности).

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

  • Клиент1 генерит открытый и закрытый ключ для сессии
  • Клиент1 отправляет серверу запрос авторизации со сгенеренным паблик-ключом
  • Сервер например добавляет время, берёт подпись хэшсумму с этого добра, подписывает её своим закрытым ключом и отправляет подпись назад клиенту
  • клиент1 подцепляется к клиенту2 отправив свой открытый ключ и ответ сервера
  • клиент2 знает паблик-ключ сервера и расшифровывает исходную хэш-сумму из предполагаемого ответа сервера, считает хэш-сумму по тому же алгоритму из предоставленных данных и сравнивает. Совпадает - доверяет

    но естественно ключи должны быть адекватной длины

  • ИМХО Сервер выступает в роли удостоверяющего центра, просто подтверждает своей подписью валидность сертификата внутри которого указан логин и его открытый ключ.

    Дальше как угодно можно взаимодействовать. Желающий что-то послать сначала посылает рандомный секрет (ключ сессии) получателю, зашифрованный его открытым ключом, затем сообщение зашифрованное рандомным секретом.

    В общем я пришел к выводу что надо задействовать полноценное шифрование. Делаем один сервер подписывающий сертификаты (логин, открытый ключ, срок действия), т.е. УЦ, а дальше логины как угодно могут общаться, любыми каналами.

    PS Велосипед проиграл :(
    31 дек 18, 19:43    [21777216]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    Дима. Ты когда нибудь с этой штукой разбирался?

    Должна поверх UDP работать на порту 4672
    6 янв 19, 00:48    [21779021]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    mayton
    Дима. Ты когда нибудь с этой штукой разбирался?

    Должна поверх UDP работать на порту 4672

    Не разбирался. Судя по ссылке - это классический P2P. Обмен файлами. Интересно порешана проблема обхода законодательства об авторских правах )))

    Что по теме топика, то, как понял, там доступ открыт всем желающим, т.е. никому не интересно Алиса ты или Боб.
    6 янв 19, 08:26    [21779049]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    Dima T
    mayton
    Дима. Ты когда нибудь с этой штукой разбирался?

    Должна поверх UDP работать на порту 4672

    Не разбирался. Судя по ссылке - это классический P2P. Обмен файлами. Интересно порешана проблема обхода законодательства об авторских правах )))

    Что по теме топика, то, как понял, там доступ открыт всем желающим, т.е. никому не интересно Алиса ты или Боб.

    Обмен файлами это уже финал. И это не интересно. Интересно как работает DHT.

    (Параллельно меня интересовало как работает ZooKeeper, и как вообще реплицировать настройки
    в распределенной среде (интернет) где нет централизованного управления)

    Кое-что я начал писать для себя и собирать сведения.
    +
    автор
        // Port(s) 	Protocol 	Service 	 Details 	Source
        // =======================================================================
        // 1900     udp         aMule
        // 52263    udp         aMule
        // 4665     udp         aMule        eDonkey2000  eDonkey2000 Server Messaging Default Port,
        //                                   Container Client Message Service, AudioReQuest
        // 4672     udp         aMule        eMule - often used (unofficial)
        //                                   Extended eMule protocol, Queue Rating, File Reask Ping,
        //                                   Kad. Kad will be 'firewalled' if NAT (Network Address Translation)
        //                                   remaps this port number.
        // 4662     tcp         aMule        Client-to-client transfers.
        //
        // 3246 	udp 	    kademlia 	 Kademlia P2P (mlnet)
        //
        // 4661 TCP (outgoing):              Port on which a server listens for connection (defined by server).
        //
        //
        // 5351 	tcp,udp 		         NAT Port Mapping Protocol -
        //                                   client-requested configuration
        //                                   for inbound connections through
        //                                   network address translators (official)
        //
    
        // 23705
        // 51413 	tcp,udp 	p2p 	     Commonly used by Transmission BitTorrent Client.
        //
        //
    
    
        //        4711 TCP: WebServer listening port.
        //        4712 TCP: External Connection port. Used to communicate between aMule and other applications such as aMule WebServer or aMuleCMD.
        //
        //
        // $ tcpdump -i enp7s0 udp port 4665 or port 51413 -vv -X
        // $ tcpdump -i enp7s0 udp portrange 1000-65536 -vv -X
        // $ tshark -i enp7s0 -f "udp port 51413"
        // $ tshark -i enp7s0 -R "bittorrent" -any_other_options
        // $ tcpdump -Xs 0 -ni enp7s0 `cpp -P tcpdump-gre-utp.cpp`
        // ed2k://|file|eMule0.42f-Sources.zip|2407949|CC8C3B104AD58678F69858F1F9B736E9|/
        //
        public static void main(String[] args) throws Exception {
    


    Основной API этого протокола содержит всего 4 команды PING, STORE, FIND_NODE, FIND_VALUE.
    Благодаря им узлы обмениваются сведениями и ищут и что характерно находят информацию по хешу.
    Это настоящая магия, чувак.

    Здесь 21768887 один господин выкладывал полноценный Torrent клиент. Но он меня не интересовал.
    Мне была нужна только та часть клиента которая оперирует с DHT.

    Если тебе интересна тема распределенных хеш таблиц и поиска - можем поднять отдельный топик.
    6 янв 19, 12:49    [21779084]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    mayton
    Это настоящая магия, чувак.

    Это хрень. Там ни слова про надежность. Ну не смог скачать ты сейчас кинчик который искал, ну и ладно, скачай другой. Лично меня интересует гарантированная доступность искомых данных, а тут никаких гарантий, носители куска скачиваемого недоступны - обломись. Для обмена кино-аудио сгодится, но не более того.

    PS Повторю: они порешали проблему обхода авторских прав. Ни одна их нод не хранит файл целиком, т.е. не предъявить незаконное копирование. Это основная мысль той системы
    6 янв 19, 20:14    [21779221]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    mayton
    Если тебе интересна тема распределенных хеш таблиц и поиска - можем поднять отдельный топик.

    Неинтересна. Это понижение надежности. Распределяем данные на 2 узла, надежность получения данных снижается в два раза.

    Мне интересна тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.
    6 янв 19, 20:35    [21779224]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    Dima T
    mayton
    Это настоящая магия, чувак.

    Это хрень. Там ни слова про надежность. Ну не смог скачать ты сейчас кинчик который искал, ну и ладно, скачай другой. Лично меня интересует гарантированная доступность искомых данных, а тут никаких гарантий, носители куска скачиваемого недоступны - обломись. Для обмена кино-аудио сгодится, но не более того.

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

    Ну... DHT - то вообще не про файлы. Это про обмен ключей и значений в распеделённом интернете.
    Где половина хостов в любой момент времени могут быть выключены или недоступны. Где в сеть заходят
    новые машины за NAT, proxy и vpn. Где непрерывно идет репликация и появляются и исчезают новые ключи.

    Вобщем если захочешь - продолжим отдельным топиком. Меня в этой модели интересует вариант
    как быстро (после публикации) ключ станет доступен в условиях этой неопределённой доступности
    хостов.
    6 янв 19, 21:35    [21779248]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    Dima T
    mayton
    Если тебе интересна тема распределенных хеш таблиц и поиска - можем поднять отдельный топик.

    Неинтересна. Это понижение надежности. Распределяем данные на 2 узла, надежность получения данных снижается в два раза.

    Мне интересна тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.

    Ну... это вообще не про надёжность. Это про ... Криптономикон что-ли.
    6 янв 19, 21:36    [21779249]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    exp98
    Member

    Откуда:
    Сообщений: 1609
    Dima T
    тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.
    Опаньки!! Уж полночь близится, снова на работу скоро, а они всё о своём ...
    Не смог удержаться: может это в сторону кодирования с автоматическим исправлением ошибок? хэмминг и т.п.? вспомнились раиды, где можно на лету выдёргивать не только диск из общей кучи, но и процессор ...
    Но это заведомая избыточность записи, чудес не бывает.
    6 янв 19, 23:45    [21779287]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    exp98
    Dima T
    тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.
    Опаньки!! Уж полночь близится, снова на работу скоро, а они всё о своём ...
    Не смог удержаться: может это в сторону кодирования с автоматическим исправлением ошибок? хэмминг и т.п.? вспомнились раиды, где можно на лету выдёргивать не только диск из общей кучи, но и процессор ...
    Но это заведомая избыточность записи, чудес не бывает.

    В блокчейн писать можно. В FreeNet или DarkNet Не помню точно где есть репликация контента по машинкам
    юзеров. Можно публиковать ресурс на torrent-ах, и надеятся что кто-то пару раз скачал. AWS S3. Google Drive.
    Microsoft Drive. Или просто купить любой жлобский хостинг для хомяка.
    7 янв 19, 00:05    [21779293]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dimitry Sibiryakov
    Member

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

    Наоборот, она повышается. Это RAID уровня 1, а не 0.
    7 янв 19, 14:53    [21779431]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    Может я невнимательно прочитал, понял что куски файлов по нодам рассовываются. Не важно.
    Все-равно речь о протоколе P2P для хранения файлов, а это другое, не то что нужно мне.

    Меня интересует обмен сообщениями, которые никак хранить не надо. P2P в моем случае это прямая отправка между получателем и отправителем. Есть отдельная подтема оффлайн доставки при недоступности получателя, но ее можно пока не рассматривать.

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

    Неубиваемость серверной части я вижу в подъеме нескольких серверов и репликации их состояний. Т.е. каждый сервер имеет инфу о всех открытых клиентских сессиях. Каждый клиент знает все сервера, поэтому при падении одного сервера клиент может легко переключиться на другой даже не теряя сессии.

    От P2P мне нужна только передача данных между клиентами, где все будет быстро и без ограничений, хоть гигабайты бэкапов гоняй.
    7 янв 19, 19:14    [21779561]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    Dima T
    Member

    Откуда:
    Сообщений: 13348
    И блокчейн не особо интересен. Да, туда можно внести логины клиентов с их открытыми ключами. Но это не все функции центра.
    Т.к. это UDP, то одна из задач сервера определить внешний IP:порт клиента и сообщить тому кто захочет с ним связаться. Т.к. связаться в одностороннем порядке не получится из-за NAT, из-за брэндмауэра, то кто-то третий должен сообщить клиенту что с ним хотят связаться с такого-то IP:порт. Нужен центр.
    7 янв 19, 19:29    [21779570]     Ответить | Цитировать Сообщить модератору
     Re: Авторизация без сервера  [new]
    mayton
    Member

    Откуда: loopback
    Сообщений: 39224
    Dima T
    Может я невнимательно прочитал, понял что куски файлов по нодам рассовываются. Не важно.
    Все-равно речь о протоколе P2P для хранения файлов, а это другое, не то что нужно мне.

    Меня интересует обмен сообщениями, которые никак хранить не надо. P2P в моем случае это прямая отправка между получателем и отправителем. Есть отдельная подтема оффлайн доставки при недоступности получателя, но ее можно пока не рассматривать.

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

    Неубиваемость серверной части я вижу в подъеме нескольких серверов и репликации их состояний. Т.е. каждый сервер имеет инфу о всех открытых клиентских сессиях. Каждый клиент знает все сервера, поэтому при падении одного сервера клиент может легко переключиться на другой даже не теряя сессии.

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

    Коробочное решение - Infinispan. Посмотри. Возможно сойдет.
    http://infinispan.org/
    7 янв 19, 21:44    [21779628]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2 3 4 5      [все]
    Все форумы / Программирование Ответить