Я человек ленивый, я попросил гугл (Gemini) проанализировать указанную репу.
Вот ответ гугла:
"Судя по описанию, изобрел классический велосипед с квадратными колесами. Его идея «двери с рисунком» — это обычный Challenge-Response протокол (запрос-ответ) на базе графического ключа, причем сильно уязвимый.Судя по его репозиторию, «прототип» написан на FastAPI и Redis, а логику ему генерировал ChatGPT. То есть человек без профильного образования в криптографии просто завернул старую концепцию в обертку современного веб-фреймворка.
Его «уникальная» концепция — это S/KEY (алгоритм ОPIE) и одноразовые пароли (OTP), разработанные Беллом Лампортом еще в 1981 году, смешанные с концепцией графического пароля (Graphical Passwords / Pattern-based authentication) из начала 2000-х.
Как это работает у него: Сервер дает картинку (grid_size, steps), пользователь по «секретному правилу» в голове строит маршрут (response) и отправляет его обратно. Сервер проверяет и удаляет этот challenge.
В чем «новизна»? Ни в чем. Протоколы Challenge-Response используются в каждом первом токене аутентификации (например, в банковских приложениях или Blizzard Authenticator), только там вместо рисунка — время (TOTP) или счетчик (HOTP)."
Гугл порекомендовал задать несколько вопросов :)
Вопрос А: «Как ты защищаешься от атак по сторонним каналам (Side-Channel) и плечевого серфинга?
»Если пользователь сидит в кафе, в метро или записывает экран, а камера над его плечом снимает, как он «молча смотрит на рисунок» и вводит ключ на экране — алгоритм полностью скомпрометирован. Хакеру даже не нужно брутфорсить. Он просто запишет видео ввода. В этом главная беда всех графических ключей, из-за чего от них отказываются в пользу биометрии.
Вопрос Б: «Что происходит при атаке Man-in-the-Middle (Человек посередине)?
»Он пишет: «Ты кидаешь ключ хакерам... Ключ больше не подходит».А если хакер перехватил трафик в момент отправки? Настоящая криптография (например, SRP — Secure Remote Password protocol) защищает от перехвата самого ответа в процессе. Если в системе хакер встанет между пользователем и сервером (MitM), он просто перехватит response до того, как тот долетит до сервера, подменит пакет и зайдет под видом пользователя, а пользователю вернет ошибку тайм-аута.
Вопрос В: «Каков размер энтропии твоего правила?
»Он заявляет про «60 триллионов дверей». Но человек — существо ленивое.Спросите его: если сетка (grid_size) имеет размер, например, 5х5 или 8х8, какова длина пути (steps)? Люди физически не способны запоминать сложные алгоритмы генерации путей в уме для каждой новой картинки. Они будут использовать простые правила: «проведи линию от верхнего левого котика к правому нижнему». Энтропия (хаотичность) человеческого выбора ничтожно мала. Компьютер подберет это «правило» по словарю за секунды.
И последнее (это тоже текст гугла, но я в кои-то веки с ним согласен):
То, что ChatGPT написал рабочий код на Python с интеграционными тестами и Docker-контуром, говорит лишь о том, что ChatGPT умеет настраивать Redis и FastAPI. Нейросеть не проверяла математическую стойкость алгоритма. ChatGPT просто реализовал логику: «прими данные — сверь с базой — удали из базы».
Криптографическая стойкость кода от ChatGPT равна нулю, потому что языковые модели не умеют симулировать криптоанализ.