Egor
А что ты делаешь? В ту ММО с корабликами добавили "радио"?
оно было всегда. просто только сейчас задумался
Snusmumriken
Egor
как открывать дверь только для себя через радио
Mark ☢️
Egor
а эфир обезличен, может любой поймать в определенном радиусе
Snusmumriken
просекут
Не а. Да и плевать, это игрушка. Зато пишется на коленке.
Mark ☢️
в конце концов, атака повторения илиминтарная
Mark ☢️
секукарекурити
Egor
в конце концов, атака повторения илиминтарная
@Snusmumriken в игре можно получать время, вплоть до миллисекунд, но тики могут быть разные, что для меня или получателя
Egor
т.е для меня 11.999 сек а у получаетля уже 12.050
Egor
ну, грубо говоря
Mark ☢️
да жованный конь. диффи хелман — вот вам канал. дальше аутентификауия по паблик ключам, потом обмен симметричными и AES
Mark ☢️
готово
Mark ☢️
переизобрели DTLS
Mark ☢️
кстати вот да. DTLS
Egor
да жованный конь. диффи хелман — вот вам канал. дальше аутентификауия по паблик ключам, потом обмен симметричными и AES
а там есть какие ограничения, я не видел сам, но другие говорили, типа слишком сложные операции и игра начинает орать на цпу оверлоад.
Snusmumriken
1. Запомни ключ на отправителе и приёмнике, будет "закрытым ключом", в идеале — добавляй в начало передаваемого сообщения какую-нибудь рандомную соль, шоб не палевно; 2. Если вопрос-ответ — то можно сделать схему а ля: > дай ключ заксоренный нашим общим секретом < держи ключ (сгенерённый) > заксоренное новым ключом сообщение < заксоренный новым ключом ответ Ну типо публик/привейт с ксором ))
Egor
и хз как полноценная эмуляция чего-то сложного будет работать
Egor
типа в эфир крикнул и может быть, если есть кто в радиусе, может и услышит
Mark ☢️
ну кароче вам надо защищаться от атаки повторения
Mark ☢️
там такие простые схемы не канают
Snusmumriken
От атаки повторения защищён публик-прувейт.
Mark ☢️
От атаки повторения защищён публик-прувейт.
если одна и та же команда одинаково в шифрованном виде выглядит то пяка
Mark ☢️
если по разному, (с солью)
Mark ☢️
то один хуй её можно заново тот же пакет послать
Snusmumriken
Нет, базовая команда чиста и выглядит как HELLO, ответом на неё рандомные — цифры. И ты этими цифрами должен ксорить исходящее и расксоривать входящее.
Mark ☢️
если ты заранее знал что это команда открытия двери
Mark ☢️
дохуя делов
Snusmumriken
Плюс общий секрет, да.
Mark ☢️
ну кароче началося
Mark ☢️
велосипед
Snusmumriken
В это дело ты не впихнёшь никаких нормальных протоколов. Тут никак иначе кроме как велосипедить. Поэтому уймись.
Mark ☢️
DTLS же
Egor
велосипед
готового ничего не воткнешь ) точнее если только мелкое вместе с логикой шифрования.
Snusmumriken
DTLS же
Найди мне эту либу на pure lua.
Snusmumriken
Её нет. А в игрушке только pure lua, никаких биндингов.
Mark ☢️
можно ещё вот так: приватным ключом шифровать месадж magic|timestamp|data
Mark ☢️
Я думаю timestamp|message подошло бы
а как ты проссышь после расшифровки — успех или нет
Snusmumriken
можно ещё вот так: приватным ключом шифровать месадж magic|timestamp|data
Да пофигу, запихнуть сообщение разбитое на кусчочки в тело рандомных символов, сделав маркеры начала-конца кусочка сообщения (можно несколько вариантов маркеров), и выдирать его регуляркой. И всё, уже никто не поймёт что это.
Egor
так как время каждый раз разное то и хэш разный + можно по таймстампу узнать когда отправлено
Mark ☢️
ой всё
Egor
ладно, а чем шифровать? каким алгоритмом? дайте хотяб название
Snusmumriken
Ну в общем, альтернатив масса, развлекайся. timestamp|message тоже неплохой вариант (если проверять его на небольшое расхождение с внутренним временем в пределах пары секунд, на стороне приёмника).
Snusmumriken
О, кстати, только что вспомнил про врЕменные токены во всяких гуглах и прочих стимах. Типа "раз в десять секунд генерируем ключ". Соответственно, твоя задача — округлить текущее время до десяти секунд и сгенерировать ключ тем же алгоритмом, каким он генерируется на приёмнике (любой хеш округлённого таймстампа) и выслать его. Для обеспечения непрерывности — можно на стороне приёмника сгенерировать три ключа: для прошлых десяти секунд, текущих, и будущих, и сравнивать пришедшее с ними: если с одним совпало, значит норм.
Egor
хмм.. кстати да, спасибо за идею, я его для работы юзал, реализовывал..а чет про игру забыл )
Lucky
вот уж не проблема - сгенерил ключ, зашифровал им сообщение, приклеил к ключу сообщение, отправил.
Pavel
так работают микросервисы-)
Pavel
не смог удержаться-)
Mark ☢️
Вот так они работают
Mark ☢️
Mark ☢️
Или так
Mark ☢️
Есть одна картинка, но с нее меня забанят сразу
Mark ☢️
Гифник
Mark ☢️
Прям точно про микросервисы
Mark ☢️
Желающим могу отправить в личку
Lämppi
Давай
Mark ☢️
Давай
Готово
Pavel
Это больше про распил монолита
Mark ☢️
Mark ☢️
Нет, не та
Mark ☢️
Но из той же серии
Mark ☢️
Там где последовательная передача между 5 микросервисами
Tom
вот: https://github.com/alphallc/crappycms а вот это - подобие поинта (только мне было лень запиливать связь с базой) https://github.com/msva/xIOn
Как бы тебе так помягче сказать, чтоб не шокировать... Первая репа как бы пустая. Полностью
Snusmumriken
Отчёт об исследованиях луёво-сишной апишки: 1. Full userdata это типа размеченный блок памяти, имеет метаметоды; 2. Light userdata — это просто указатель на какие-то сишные данные, метаметодов не имеет, даже __gc, соответственно необходимо управлять сборкой с сишной стороны. Но в full userdata можно впилить указатель на указатель, и получить типа light userdata с метаметодами.
Dmitry
👎
Egor
Там где последовательная передача между 5 микросервисами
аа.. если это оно, то да, супер фильмец же )
Igor
Отчёт об исследованиях луёво-сишной апишки: 1. Full userdata это типа размеченный блок памяти, имеет метаметоды; 2. Light userdata — это просто указатель на какие-то сишные данные, метаметодов не имеет, даже __gc, соответственно необходимо управлять сборкой с сишной стороны. Но в full userdata можно впилить указатель на указатель, и получить типа light userdata с метаметодами.
Я себе для таких дел пару функций накидал. Получилось удобно, но не очень красиво. (Функция setup нужна, чтобы при создании юзердаты можно было в регистровую таблицу cs_data внести необходимые данные, например, сишные структуры-вектора, чтобы потом их можно было менять, при обращении к этой юзердате по средствам геттеров и сеттеров)
Igor
Первый в gettable попится, как я понял
Igor
Или же он просто в стеке далеко, пока просто так сделал, потом посмотрю в стек и поставлю pushvalue, если не попится
Igor
Просто в момент написания было слишком лень