Сервера MTProto → Генерация секрета MTProto: команды и формат

Генерация секрета MTProto: команды и формат

Секрет — 16 случайных байт, записанных как 32 шестнадцатеричных символа. Всё остальное — префикс и домен — добавляется поверх. Генерировать его нужно криптографически случайно, а не «набрать с клавиатуры». Серверы в таблице выше используют секрет, сгенерированный именно так.

Подключить srv1Подключить srv2Подключить srv3Все сервера

Ниже — команды для 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-секреты для пользователей генерируйте скриптом из ключа и домена, а не копируйте руками: так исключаются опечатки и лишние пробелы.

Если ключ утёк — например, попал в публичный репозиторий, — сгенерируйте новый и перевыпустите ссылки. Старые перестанут работать сразу; это единственный случай, когда смена ключа оправдана. Для отзыва доступа отдельным людям используйте раздельные секреты на реализациях, которые их поддерживают.

  1. Сгенерируйте ключ. openssl rand -hex 16 — 32 hex-символа.
  2. Переведите домен в hex. printf 'домен' | xxd -p.
  3. Соберите секрет. ee + ключ + hex домена, без пробелов.
  4. Проверьте длину. 34 + 2 × длина домена.

Вопросы и ответы

Можно ли использовать чужой секрет с сайта на своём сервере?

Нет, секрет должен быть уникален для вашего сервера; сгенерируйте свой.

Секрет — это пароль пользователя?

Нет, это общий ключ обфускации для всех клиентов сервера.

Как часто менять секрет?

Не нужно; меняют только при компрометации, и это ломает все ссылки.

Читайте также

← Сервера MTProto