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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А зачем у тебя вообще пароль? Учись у биткоина, там клиент идентифицируется и удостоверяется ключом. Открытые ключи всех клиентов можно безопасно заливать на каждого, что биткоин и делает.
Откуда он генерируется? Рискну предположить что это просто случайное число типа GUID.
Пока особо не заморачивался на эту тему. Можно гуид или хэш какой-нибудь. Без разницы. Он нужен не всегда, а только в редкие случаи отсутствия инета. Поэтому когда инет есть необходимо как-то придумать случайное число и согласовать с другими, а при отключении инета воспользоваться им. Тут надо будет поизобретать алгоритм согласования.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753587
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПочитал немного. Если правильно понял это Дифи-Хэллман с зашитой от "человека посредине" с помощью пароля известного двум сторонам.Нет. Пароль (секрет) известен только одной стороне и не передаётся серверу.
Сервер располагает огрызком от секрета, но не может проверить, подходят ли предъявленные "верительные грамоты" к этому огрызку без активного участия владельца секрета.
Кроме этого сервер может удостовериться, что все ответы приходят от того же клиента, который начинал обмен.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovDima TПочитал немного. Если правильно понял это Дифи-Хэллман с зашитой от "человека посредине" с помощью пароля известного двум сторонам.Нет. Пароль (секрет) известен только одной стороне и не передаётся серверу.
Сервер располагает огрызком от секрета, но не может проверить, подходят ли предъявленные "верительные грамоты" к этому огрызку без активного участия владельца секрета.
Кроме этого сервер может удостовериться, что все ответы приходят от того же клиента, который начинал обмен.
Заинтриговал. Я не сильно разбираюсь в криптографии, просто опираюсь на здравый смысл: Алиса пишет Бобу письмо, Боб должен быть уверен что письмо от Алисы. Известный обоим секрет может подтвердить что письмо от Алисы, но "огрызок секрета" ... я не понимаю. Хотя в случае "огрызка секрета" все-равно важен факт наличия секрета известного обоим сторонам. Наверно это просто продвинутая реализация моих дилетантских идей.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753716
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

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

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

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

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

В этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753724
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В студенчестве мне был интересен PGP. Насколько я помню фреймворк
предлагал комплекс утилит для децентрализованной сети доверия.
Тоесть например:

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

Как PGP обменивается уровнями доверия - это загадка. Я щас не помню.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753746
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВ этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.
Добавь Диффи-Хеллмена , а обмен подписывай ЭЦП и все будет идеально.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753747
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак PGP обменивается уровнями доверия - это загадка. Я щас не помню.
Получатель сообщает свой открытый ключ, а ты им шифруешь. тынц
С обменом открытыми ключами там тоже не все гладко .
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753906
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзвестный обоим секрет может подтвердить что письмо от Алисы, но "огрызок секрета" ... я не понимаю.Насколько я всё это понимаю, предполагается, что мы принимаем результат начальной процедуры регистрации пользователя, когда сервер и получает "огрызок секрета" без каких-либо оговорок.
Т.е. не заморачиваемся личностью владельца и вмешательством третьего на этом эпапе.
Дальше всё работает по протоколу (которого лично я не понимаю)
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753907
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonВ этой схеме всё идеально кроме процедуры рукопожатия и обмена ключами. Ее не всегда
можно осуществить в реале. Есть еще вариант что Алиса посылает секретный конверт с печатями...
но ... дальше похоже на сценарий конспирологического фильма про разведку. Фигня короче.
Добавь Диффи-Хеллмена , а обмен подписывай ЭЦП и все будет идеально.
Так Диффи Хелман это не про это.

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

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

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

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


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

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

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

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

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

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

Тут придется задействовать какую-нибудь криптобиблиотеку, а я хочу решение попроще, без сторонних dll. В принципе я его уже придумал 21771725
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39753976
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТут придется задействовать какую-нибудь криптобиблиотеку, а я хочу решение попроще, без сторонних dll
Если не брать готовую библиотеку, то криптография обязательно будет реализована с дырами )).
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754134
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754186
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПогуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.а у вас лицензия есть?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754196
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima TПогуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.

Криптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.а у вас лицензия есть?
ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754206
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TКриптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
На любую криптографию найдется лом в виде кейлоггера ))
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754207
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDima TКриптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
На любую криптографию найдется лом в виде кейлоггера ))
На клавиатуре вводить ничего не потребуется.

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

PS Антикейлоггер легко делается, точно не помню как, у Рихтера написано как.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754262
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)пропущено...
а у вас лицензия есть?
ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.
Боюсь что нет если на продажу, тынц
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754346
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima Tпропущено...

ИМХО это не лицензируется. Лицензии требует софт полноценной ЭЦП, но только если продаешь его на сторону. Я не заявляю что у меня используется полноценная ЭЦП. Это просто защита от взлома студентом и не более того.
Боюсь что нет если на продажу, тынц
под это
2. Разработка защищенных с использованием шифровальных (криптографических) средств информационных систем.
подпадает обращение к WebAPI по HTTPS или использование ODBC-драйвера, который при коннекте к серверу БД шифрует пароль.

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

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

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

Мутный этот закон, любую прогу можно под него подвести.
В реальности он работает только там где юридически-значимая ЭЦП используется.
И даже там не везде, а только для разработки непосредственно софта для ЭЦП.
Я консультировался на предмет: могу ли я в свою прогу встроить готовую библиотеку для подписи ЭЦП - оказывается могу и лицензии не надо.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754375
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
да, наши законы такие...
если специально кто-то возьмётся, то можно вдовесок и по ярой подкинуть конечно
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754376
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDima TКриптостойкость мизерная, ломается в течении суток, но в моем случае сойдет.
На любую криптографию найдется лом в виде кейлоггера ))
Криптография как часть информационной безопасности изучает взаимодействие субъектов
типа Алисы и Боба в определённом enviromnent где нет вирусов троянов и кейлоггеров.

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

Если этих начальных условий нет - то мы дальше просто никуда не сдвинемся.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754585
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ моем случае такого не будет, т.к. есть сервер, который в нормальном режиме (с инетом) подтвердит что Алиса это Алиса
Осталось только понять как сервер определит, что Алиса это Алиса. Или у тебя как обычно: Алисой считается тот, кто первый ею назовётся?..
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754597
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TВ моем случае такого не будет, т.к. есть сервер, который в нормальном режиме (с инетом) подтвердит что Алиса это Алиса
Осталось только понять как сервер определит, что Алиса это Алиса. Или у тебя как обычно: Алисой считается тот, кто первый ею назовётся?..
Элементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".
Ну и пароль у Алисы есть, криптостойкий, хранится в шифрованном хранилище, никуда не передается открытым текстом.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754715
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПогуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.
Строк мало, а в 32 бита вписаться проблематично :( Есть проблемы с генерацией ключей.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754750
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКейлоггеры можно просто рассмотреть отдельной темой. И я думаю что протокол Димы
скорее всего предполагает априори приложение установленное на каноническую
операционку без шпионского софта.

Если этих начальных условий нет - то мы дальше просто никуда не сдвинемся.
Вообще, я будучи студентом, не сильно напрягаясь написал кейлоггер и методом т.н. социальной инженерии установил его на комп админа сети на кафедре чтобы узнать его пароль и сделать себе права на запись в нужный раздел на сервере, чтобы не таскать дискетки.
Так что это вопрос вполне практический и его тоже надо рассматривать при защите от студентов, а не рассчитывать на их некомпетентность.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754752
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не буду возражать. Но обсуждение кейлоггера в данном топике - неконструктивно. Оно - не поможет Диме.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754759
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TDima TПогуглил немного: оказывается RSA c 32-битным ключом это пара десятков строк кода ))) Пошел писать.
Строк мало, а в 32 бита вписаться проблематично :( Есть проблемы с генерацией ключей.какие проблемы то? гдет тема была с генерацией простых чисел

фигня только выйдет, взламывается на ура тупым перебором
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754799
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Победил разрядность, черновик без тюнинга производительности
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
	// Создание ключей
	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} - закрытый ключ


Далее шифрование
Код: plaintext
1.
uint32_t crypt = pow_mod(data, e, n);


и расшифровка
Код: plaintext
1.
uint32_t decrypt = pow_mod(crypt, d, n);


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


Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
Планирую двухбайтными блоками шифровать, плюс флаг для указания что один байт зашифрован, т.е. шифруемые значения 0 <= x <= 0x100FF. Поэтому ограничил 0x100000 <= n <= 0xFFFFFF. Т.е. минимальный n почти в 16 раз больше максимального шифруемого.
Тесты погоняю, но ключей множество, все комбинации не проверить. Хотелось бы найти какое-то мат.доказательство.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754802
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754804
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T Тут еще один вопрос: я не совсем понимаю про допустимую разрядность шифруемого. Т.к. в итоге происходит "% n", то могу ли я ожидать что все значения до n (0 <= x < n) будут корректно зашифрованы и расшифрованы?
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты
В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754805
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// 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;


вот это нехорошо, гугли расширенный алгоритм Евклида
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754806
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)пропущено...
не все, ограничение из теоремы Эйлера
m, p1, p2 - должны быть взаимнопросты
В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?не к експоненте, а к p и q
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754820
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima Tпропущено...

В смысле для pow_mod(base, exp, n) взаимнопросты exp и n, т.к. специально генерятся, а base тоже должно быть взимнопростое к exp и n?не к експоненте, а к p и q
Добавил тупой перебор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
	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;
		}
	}


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

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

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

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

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

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

Для начала разрядность n и e надо повысить.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754848
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДумаю прежде чем тюнинг устраивать надо перебор запустить: генерить ключи и писать в какой-нибудь std::map, посмотреть как быстро будет увеличиваться количество уникальных комбинаций, как часто повторы случаются.
Если их относительно немного получится, например миллиард, то можно сложить их в табличку и по открытому ключу получать закрытый.

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

Для начала разрядность n и e надо повысить.Зачем???
просто n разложить на множители и дальше расчёт ключей тривиален - вот и весь "взлом"
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754937
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)просто n разложить на множители и дальше расчёт ключей тривиален - вот и весь "взлом"
Точно. На перебор всех простых от 2 до sqrt(n) надо меньше секунды. Потом немного перебора с подбором d.

Все равно допилю, без исходников сложно понять что это за алгоритм. А в случае необходимости всегда можно перейти на полноценный RSA.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754940
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima T
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// 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.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754948
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде нашел как
https://foxford.ru/wiki/informatika/rasshirennyy-algoritm-evklida Одним из применений расширенного алгоритма Евклида является нахождение обратного элемента в кольце вычетов по модулю....
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754956
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭлементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".
Вопрос не во входе, вопрос в регистрации нового пользователя. В системе ещё нет Алисы. Как Алиса докажет, что это она Алиса, а не Хрен-с-горы, который ею представился час назад?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754978
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВроде нашел как
https://foxford.ru/wiki/informatika/rasshirennyy-algoritm-evklida Одним из применений расширенного алгоритма Евклида является нахождение обратного элемента в кольце вычетов по модулю....
не помню откуда брал, нерекурсивный вариант:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// 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;
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754981
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TЭлементарно: если кто-то назовется Алисой, то при этом реальная Алиса зайти не сможет, поэтому она позвонит и скажет: "ваша корявая прога не работает".
Вопрос не во входе, вопрос в регистрации нового пользователя. В системе ещё нет Алисы. Как Алиса докажет, что это она Алиса, а не Хрен-с-горы, который ею представился час назад?
Это-то тут при чем? Тут каждый сам решает как при регистрации убедиться что пользователь тот за кого себя выдает.
Эта проблема не этого топика, но она мне известна, как-то ее тоже надо будет решать, как один из вариантов вводить спец.учетку(и) админа: юзер саморегается, но изначально получает права писать только админам, передает админам инфу о себе, на основании полученной инфы админ дает серверу команду подтверждения или удаления новичка. В общем это тема для отдельного топика.

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

Например резервное копирование: есть получатель "backup", ему сообщил что слать файлы могут "proga1", "proga2" и "proga3". От этих учеток принимает, остальным пишет "Извините, а вы кто?"
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754982
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)не помню откуда брал, нерекурсивный вариант:

Спасибо. А то в инете только с рекурсией.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754984
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)не помню откуда брал, нерекурсивный вариант:

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

тынц
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39754999
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima Tпропущено...

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

тынц
Я уже твой переписал
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
// Расширенный алгоритм Евклида. 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;
}


Вроде работает
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755014
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затестил перебор. За полчаса нагенерил 7 млн. пар ключей, количество уникальных остановилось на 3`607`581 и даже по одному не добавляется. Можно ломать таблицей ключей )))

Понаблюдаю еще пару часов.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima Tпропущено...

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

фигня только выйдет, взламывается на ура тупым перебором
Тест Миллера-рабина применяется. Для чисел которые во много раз больше чем мы генерили несколько лет назад.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755018
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТест Миллера-рабина применяется. Для чисел которые во много раз больше чем мы генерили несколько лет назад.этот тест для проверки простоты числа используется, когда ищут пару для ключа.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755025
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЗатестил перебор. За полчаса нагенерил 7 млн. пар ключей, количество уникальных остановилось на 3`607`581 и даже по одному не добавляется. Можно ломать таблицей ключей )))

Понаблюдаю еще пару часов.
Полтора часа прошло, 27 млн. обработано, а уникальных те же 3`607`581. Все понятно, вырубаю.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755116
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оказывается Тест Миллера — Рабина иногда имеет ложноположительные срабатывания
Однако, с его помощью нельзя строго доказать простоту числа. Тем не менее тест Миллера — Рабина часто используется в криптографии для получения больших случайных простых чисел.
Наткнулся на is_prime(233 * 1103) дает true, я на его основе делаю пару ключей, естественно они не рабочие.

Как с этим бороться?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Это нормально.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755129
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А все-таки, ключ - это одно число, или система чисел?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С точки зрения криптографии ключ - это просто массив битов.

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

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

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

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

Выше Дима привёл замечание к методу Раввина-Миллера. Од даёт ложные сообщения о том что число простое.
Но это допустимо. Во первых у него - ошеломительная скорость по сравнению с традиционными методами.
Во вторых он параметризируется числом раундов. (Здесь я точно не помню надо почиать). Ну вобщем
в беря во внимание длинну целых чисел с коротыми он работает - его предсказание простоты вполне
себе подходит для практических задач.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755134
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поскольку ищется число, скажем так, оригинальное, то почему оно не может быть в виде массива сочетаний из 0 и 1 (естественно в битах)? Длина массива сочетаний - любая.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755136
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.

Хотя если брать математическое описание алгоритма - то его можно адаптировать под любые разрядности.
Главное чтоб наши комьютеры не захлебнулись.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755138
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.

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

Единственное ограничение - вписаться в 32 бита, чтобы использовать стандартные целые типы.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755139
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем от 1024 бит и выше.

Код: sql
1.
2.
$ ssh-keygen -t rsa -b 1000
Invalid RSA key length: minimum is 1024 bits
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755141
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До 16 килобайт.

Код: sql
1.
2.
$ ssh-keygen -t rsa -b 32768
key bits exceeds maximum 16384



Предыдущий запуск с 16к отработал но занял где-то 2 минуты.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755144
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто-то тут при чем?
Это тут при том, что авторизация не зависит от того кем она проводится. Если сервер верит Алисе на слово, а Боб доверяет серверу, то Боб может спокойно верить Алисе на слово и степень безопасности от этого не изменится. Получит ли Боб ключ Алисы от сервера или от Алисы непосредственно - совершенно всё равно.

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

PS: Эх, а я-то считал себя безалаберным используя для идентификации 381-битные ключи...
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755145
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНаткнулся на is_prime(233 * 1103) дает true, я на его основе делаю пару ключей, естественно они не рабочие.

Как с этим бороться?
Именно так и бороться: проверять сгенерированную пару ключей на "рабочесть". Если проверка не прошла - генерировать новую пару. Все так делают.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755147
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonRSA стандартизирован и имеет фиксированные
разрядности алгоритмов и ключей.
Как алгоритм он никаких ограничений не имеет. SSH/SSL имеет ограничения по используемым (генерируемым) ключам, но они связаны исключительно с соображениями безопасности снизу и используемым протоколом сверху.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755150
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется надо еще раз проговорить архитектуру Димы.

Как я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755153
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЯ не до конца понял что разрабатывает Дима. Но RSA стандартизирован и имеет фиксированные разрядности алгоритмов и ключей.
Хотя если брать математическое описание алгоритма - то его можно адаптировать под любые разрядности.
Главное чтоб наши комьютеры не захлебнулись.А если адаптировать алгоритмы под ключи?
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755162
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TЭто-то тут при чем?
Это тут при том, что авторизация не зависит от того кем она проводится. Если сервер верит Алисе на слово, а Боб доверяет серверу, то Боб может спокойно верить Алисе на слово и степень безопасности от этого не изменится. Получит ли Боб ключ Алисы от сервера или от Алисы непосредственно - совершенно всё равно.

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

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

Обычно эта задача решается так что с улицы никого не пускают, а пускают из другой системы, где пользователь уже присутствует.
Если ты банк, то сначала пакет документов в ответ учетка. Если мессенджер, то давай номер телефона и получи код в смс-ке и т.д. и т.п.
У меня эта тема уже порешана, учетки заводятся не без участия администраторов. Проблем с нездоровой активностью фантомных учеток у меня нет и не было.
maytonКак я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?
Верно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonКак я понял сеть - централизованная. Есть сервер но он иногда недоступен. Верно?
Верно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.
Ок. Тогда следующий вопрос-предложение. Или мысль. Или statement.
Если я буду неправ - сообщи.

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


В данном случае в сети может существовать только 1 mayton.
4) Сообщения от лже-mayton должны
- игнорироваться?
- помечаться как непроверенные? Ненадёжные? Non-confident.
5) Любой контрагент может войти в сеть без сервера и (теоретически) начать писать другим
сообщения. Данный пункт является архитектурной проблемой и его надо как-то разрешить.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755181
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВерно, но при отсутствии сервера учетки могут обмениваться сообщениями, главное убедиться что тот кто пишет является тем за кого выдает. Это надо только при отсутствии сервера.
Тогда повторяю медленно: авторизационные токены всех участников рассылаются всем остальным участникам с сервера чем быстрее тем лучше. Если сообщение пытается отправить кто-то, чьего токена у получателя ещё нет - он получает отлуп. Всё.

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

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

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

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


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

С другой стороны мне хочется понять насколько полезно неполноценное шифрование: в общем случае мой самодельный RSA32 ломается меньше чем за секунду (до написания в инете видел заявления что до суток продержится, но увы и ах, kealon(Ruslan) отрезвил), с другой стороны он нужен для редких случаев когда нет инета. Мой RSA32 может и дырявый насквозь, но если обеспечить получение открытого ключа только проверенными пользователями, то он вполне будет криптостоек, т.к. при прослушке зашифрованное не прочитать без ключей.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755192
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменил проверку на простое с Миллера-Рабина, на тупую проверку остатка от деления всех простых до sqrt(x). Стало быстрее в два раза. Наверно это особенность x32, на больших разрядностях такая проверка захлебнется.
bool is_prime32(uint32_t x)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
// Проверка на простоту делением на простые
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;
}

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

Dima TСобственно это и есть проблема о которой топик. Я придумал как ее минимизировать
А я предлагаю как её устранить на корню. При этом центральный сервер вообще можно выкинуть из картины за ненадобностью. Что и сделано у биткоина и прочих блокчейнов.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T1. Клиент как-то получает логин/пароль. Нет смысла расписывать всю схему. Клиент - это конкретный пользователь конкретной копии БД, но не только. Есть еще роботы.
2. Верно.
3. Верно.
4. лже-mayton вообще не должен попасть в систему, т.е. если один mayton онлайн в системе, то второй не может залогинится.
5. Собственно это и есть проблема о которой топик. Я придумал как ее минимизировать 21771725 .

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

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

Есть еще схема когда участники между собой могут передавать образ этой базы.
Поскольку все записи заверены сервером (хардкод главного сертификата) то все
имеют возможность видеть публичные ключи всех.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот к примеру публичная часть RSA-ключа которую я сгенерил сегодня

Код: sql
1.
2.
3.
4.
5.
6.
7.
~/.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. всё побежал резать Оливье пока меня жена не убила...)
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755211
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поделюсь немного своим жизненным опытом: на клиенте шифрование БД было, обмен с сервером был по HTTP (не HTTPS) с открытой передачей пароля по самодельному протоколу.

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

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

PS Никому не навязываю свою точку зрения, т.к. всем начальство может задать вопрос "а может быть что шпиьон прочитает нашу переписку?", ответить "нет" можно дать только при применении общеизвестных и проверенных способов шифрования.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755214
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, ведь в цикле вместо всех нечётных достаточно 6х+-1, т.е. 1/3 всех значений вместо половины.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755215
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Dima T, ведь в цикле вместо всех нечётных достаточно 6х+-1, т.е. 1/3 всех значений вместо половины.
Знаю, но для x32 это не сильно ускорит.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755218
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima Tлже-mayton вообще не должен попасть в систему, т.е. если один mayton онлайн в системе, то второй не может залогинится.
А если сервера нет, то как этот первый сможет залогиниться?
Никак. Но есть локалка, где 2-3 юзера заинтересованных в обмене друг с другом. Найти друг-друга элементарно через mailslot`ы. Дальше надо убедиться что они те за кого себя выдают, что и есть тема топика.

Dimitry SibiryakovDima TСобственно это и есть проблема о которой топик. Я придумал как ее минимизировать
А я предлагаю как её устранить на корню. При этом центральный сервер вообще можно выкинуть из картины за ненадобностью. Что и сделано у биткоина и прочих блокчейнов.
Не стоит исключение превращать в правило. Серверов я могу пачку поднять и наладить между ними репликацию и оповещение клиентов какие сервера доступны. Это неубиваемо и гораздо эффективней блокчейнов
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755221
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, самое главное что по UDP не будет работать без сервера. Наты и брандмауры не пропустят.
Алиса спрашивает у сервера адрес Боба.
Сервер пишет Алисе адрес Боба и Бобу адрес Алисы .
Алиса и Боб начинают писать друг-другу и пробивают все наты и брандмауры.
Ключевое слово "друг-другу", без этого никак.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755226
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то.... сумбурно все. Есть и DDOS. И локальная сеть. Вещи вобщем-то несовместимые.
Вобщем как для меня то надо отделить мух от котлет и понять что за проблема решается.
Какие есть бизнес-кейсы. Как это будет использоваться.

Вобщем сумбурно.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755236
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНе стоит исключение превращать в правило. Серверов я могу пачку поднять и наладить между ними репликацию и оповещение клиентов какие сервера доступны. Это неубиваемо и гораздо эффективней блокчейнов
Это неубиваемо только пока ты жив и твои сервера не блокируются целенаправленно. Но распределённая пировая сеть всё равно надёжнее. Хотя, конечно, с вендор-лок и зависимостью от тебя в этом случае будет облом, а значит монетизация может не заработает.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755241
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм. В твоей схеме шифрование-то вобщем не нужно.

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

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

Клиент1 генерит открытый и закрытый ключ для сессии

Клиент1 отправляет серверу запрос авторизации со сгенеренным паблик-ключом

Сервер например добавляет время, берёт подпись хэшсумму с этого добра, подписывает её своим закрытым ключом и отправляет подпись назад клиенту

клиент1 подцепляется к клиенту2 отправив свой открытый ключ и ответ сервера

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

но естественно ключи должны быть адекватной длины
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755261
WebSharper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://crypto.stackexchange.com/questions/12479/how-to-perform-authentication-without-central-server-in-p2p там правда ссылка на проект битая.

Ещё можно использовать https://en.m.wikipedia.org/wiki/Public_key_fingerprint для идентификации.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755262
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВобщем сумбурно.
Это разные части одной большой системы, но к теме это не относится.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39755307
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)maytonХм. В твоей схеме шифрование-то вобщем не нужно.

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

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

Клиент1 генерит открытый и закрытый ключ для сессии

Клиент1 отправляет серверу запрос авторизации со сгенеренным паблик-ключом

Сервер например добавляет время, берёт подпись хэшсумму с этого добра, подписывает её своим закрытым ключом и отправляет подпись назад клиенту

клиент1 подцепляется к клиенту2 отправив свой открытый ключ и ответ сервера

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

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

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

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

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

PS Велосипед проиграл :(
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756274
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима. Ты когда нибудь с этой штукой разбирался?

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

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

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

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

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

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

Кое-что я начал писать для себя и собирать сведения.
автор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
    // 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.

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

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

Мне интересна тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756410
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonЭто настоящая магия, чувак.
Это хрень. Там ни слова про надежность. Ну не смог скачать ты сейчас кинчик который искал, ну и ладно, скачай другой. Лично меня интересует гарантированная доступность искомых данных, а тут никаких гарантий, носители куска скачиваемого недоступны - обломись. Для обмена кино-аудио сгодится, но не более того.

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

Вобщем если захочешь - продолжим отдельным топиком. Меня в этой модели интересует вариант
как быстро (после публикации) ключ станет доступен в условиях этой неопределённой доступности
хостов.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756411
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TmaytonЕсли тебе интересна тема распределенных хеш таблиц и поиска - можем поднять отдельный топик.
Неинтересна. Это понижение надежности. Распределяем данные на 2 узла, надежность получения данных снижается в два раза.

Мне интересна тема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент.
Ну... это вообще не про надёжность. Это про ... Криптономикон что-ли.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756432
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tтема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент. Опаньки!! Уж полночь близится, снова на работу скоро, а они всё о своём ...
Не смог удержаться: может это в сторону кодирования с автоматическим исправлением ошибок? хэмминг и т.п.? вспомнились раиды, где можно на лету выдёргивать не только диск из общей кучи, но и процессор ...
Но это заведомая избыточность записи, чудес не бывает.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756437
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98Dima Tтема как записать сообщение на несколько (минимум) узлов и получить гарантированную возможность получения сообщения в любой момент. Опаньки!! Уж полночь близится, снова на работу скоро, а они всё о своём ...
Не смог удержаться: может это в сторону кодирования с автоматическим исправлением ошибок? хэмминг и т.п.? вспомнились раиды, где можно на лету выдёргивать не только диск из общей кучи, но и процессор ...
Но это заведомая избыточность записи, чудес не бывает.
В блокчейн писать можно. В FreeNet или DarkNet Не помню точно где есть репликация контента по машинкам
юзеров. Можно публиковать ресурс на torrent-ах, и надеятся что кто-то пару раз скачал. AWS S3. Google Drive.
Microsoft Drive. Или просто купить любой жлобский хостинг для хомяка.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756507
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЭто понижение надежности. Распределяем данные на 2 узла, надежность получения данных снижается в два раза.
Наоборот, она повышается. Это RAID уровня 1, а не 0.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756547
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я невнимательно прочитал, понял что куски файлов по нодам рассовываются. Не важно.
Все-равно речь о протоколе P2P для хранения файлов, а это другое, не то что нужно мне.

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

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

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

От P2P мне нужна только передача данных между клиентами, где все будет быстро и без ограничений, хоть гигабайты бэкапов гоняй.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756554
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И блокчейн не особо интересен. Да, туда можно внести логины клиентов с их открытыми ключами. Но это не все функции центра.
Т.к. это UDP, то одна из задач сервера определить внешний IP:порт клиента и сообщить тому кто захочет с ним связаться. Т.к. связаться в одностороннем порядке не получится из-за NAT, из-за брэндмауэра, то кто-то третий должен сообщить клиенту что с ним хотят связаться с такого-то IP:порт. Нужен центр.
...
Рейтинг: 0 / 0
Авторизация без сервера
    #39756585
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМожет я невнимательно прочитал, понял что куски файлов по нодам рассовываются. Не важно.
Все-равно речь о протоколе P2P для хранения файлов, а это другое, не то что нужно мне.

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

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

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

От P2P мне нужна только передача данных между клиентами, где все будет быстро и без ограничений, хоть гигабайты бэкапов гоняй.
Коробочное решение - Infinispan. Посмотри. Возможно сойдет.
http://infinispan.org/
...
Рейтинг: 0 / 0
117 сообщений из 117, показаны все 5 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Авторизация без сервера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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