
Защита QR сертификатов без сервера: Ed25519, GitHub Pages и ноль (почти) ежемесячных затрат
SurMaster 1 минуту назад Защита QR сертификатов без сервера: Ed25519, GitHub Pages и ноль (почти) ежемесячных затрат Средний 6 мин 0 Python * GitHub * PDF Криптография * Кейс Хочу рассказать про недавний кейс из своей...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: SurMaster 1 минуту назад Защита QR сертификатов без сервера: Ed25519, GitHub Pages и ноль (почти) ежемесячных затрат Средний 6 мин 0 Python * GitHub * PDF Криптография * Кейс Хочу рассказать про недавний кейс из своей практики и своих трудовых будней. Заказчик пришёл с задачей: «Хочу QR-код на сертификатах, чтобы можно было проверить подлинность». У него в голове это выглядело так: он дает мне гугл таблицу с перечнем фамилий, датой, и номером сертификата, скрипт генерирует QR единый для всех сертификатов и как бы этот вопрос закрывается по его мнению.
Но при этом должна закрываться самая главная боль - защита от подделки путем переноса QR на другой сертификат. Фактически получалась фикция. С моими возражениями заказчик согласился и я расскажу как мы пришли к криптографическому решению без бэкенда, и покажу конкретный код.
Технические детали
Что не так со схемой «QR - lookup в базе»Простой lookup проверяет только одно,что такой номер в базе есть. Но он не проверяет, что именно этот документ соответствует этому номеру. Два вектора подделки, которые он не закрывает:Пересадка QR.
Берём реальный валидный сертификат, копируем его QR на поддельный документ с другим именем. Сканируем - база говорит «валиден». Имя на бумаге и имя в базе никто не сравнил.
Можно лепить что угодно на сертификате, хоть даже что его сам Сэм Альтман выдал. Меняем «базовый курс» на «продвинутый» в PDF-редакторе, QR оставляем. Проверка проходит, потому что номер в базе есть.
Отраслевые последствия
Защита держится только если страница верификации показывает канонические данные из базы - имя, курс, дату - и человек их сверяет с бумагой. Это уже лучше, но требует живого сервера с базой, которую надо хостить, оплачивать и поддерживать. Тут я задумался: а зачем вообще сервер?
И я пошел по пути пары ключейЕсли данные сертификата подписаны закрытым ключом, то подделать подпись без ключа математически невозможно, если изменить любое поле - подпись сломается, скопировать чужой QR - страница все равно покажет данные реального владельца. Весь контент верификации - статический HTML с зашитым публичным ключом. Почему Ed25519, а не RSA или ECDSA- Компактность подписи: 64 байта против 256–512 у RSA.
Важно, потому что всё это уйдёт в QR-код. - Скорость: генерация 50 подписей - миллисекунды. - Совместимость: PyNaCl в Python и tweetnacl.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





