Генерация секрета MTProto: команды и формат
Секрет — 16 случайных байт, записанных как 32 шестнадцатеричных символа. Всё остальное — префикс и домен — добавляется поверх. Генерировать его нужно криптографически случайно, а не «набрать с клавиатуры». Серверы в таблице выше используют секрет, сгенерированный именно так.
Ниже — команды для Linux и Python, сборка полного ee-секрета и ошибки, которые видно только после запуска.
Команда для ключа
В Linux: head -c 16 /dev/urandom | xxd -p — выдаст 32 hex-символа. Альтернатива: openssl rand -hex 16. В Python: secrets.token_hex(16). Все три дают одинаковый по свойствам результат — случайность из системного источника.
Не используйте md5 от слова, дату или «красивые» последовательности: ключ должен быть непредсказуем.
Сборка полного секрета
Для FakeTLS: ee + ключ + hex(домен). Домен в hex: printf 'xapi.ozon.ru' | xxd -p — или в Python domain.encode().hex(). Итоговый секрет для клиентов — одна строка без пробелов и переносов. Для dd-режима — dd + ключ, без домена.
На сервере обычно указываются ключ и домен отдельно; полный ee-секрет нужен только клиентам.
Проверка длины и символов
Ключ — ровно 32 символа из 0–9 и a–f. ee-секрет — 34 плюс удвоенная длина домена: для 12-символьного домена — 58 символов. Если получилось иначе — где-то потерян символ или добавлен пробел.
Регистр не важен, но держите строчные буквы — так делают все клиенты.
Ошибки после запуска
«Неверный секрет» в Telegram при правильной длине — старый клиент или сервер, ждущий другой режим. Пинг есть, чаты не грузятся — домен легенды в секрете не совпадает с настройкой сервера. Работает по Wi-Fi, не работает по мобильному — фильтр, не секрет.
Один ключ можно использовать в нескольких режимах одновременно, если сервер это поддерживает.
Хранение и выдача
Ключ живёт в конфигурации сервера и в резервной копии в зашифрованном хранилище — не в чате и не в заметках. Полные ee-секреты для пользователей генерируйте скриптом из ключа и домена, а не копируйте руками: так исключаются опечатки и лишние пробелы.
Если ключ утёк — например, попал в публичный репозиторий, — сгенерируйте новый и перевыпустите ссылки. Старые перестанут работать сразу; это единственный случай, когда смена ключа оправдана. Для отзыва доступа отдельным людям используйте раздельные секреты на реализациях, которые их поддерживают.
- Сгенерируйте ключ. openssl rand -hex 16 — 32 hex-символа.
- Переведите домен в hex. printf 'домен' | xxd -p.
- Соберите секрет. ee + ключ + hex домена, без пробелов.
- Проверьте длину. 34 + 2 × длина домена.
Вопросы и ответы
Можно ли использовать чужой секрет с сайта на своём сервере?
Нет, секрет должен быть уникален для вашего сервера; сгенерируйте свой.
Секрет — это пароль пользователя?
Нет, это общий ключ обфускации для всех клиентов сервера.
Как часто менять секрет?
Не нужно; меняют только при компрометации, и это ломает все ссылки.