Негіздер

dd және ee құпиясөздері: прокси сілтемесін қалай оқуға болады

Сервер, порт және құпиясөз: dd және ee префикстері нені білдіреді және қосылғанға дейін нені тексеруге болады.

Мазмұны 18 бөлім

Прокси сілтемесін әдетте оқымай-ақ басады. Бірақ ондағы үш параметр — қосылғанға дейін тексеруге болатын жалғыз нәрсе, ал құпиясөз жұмыс режимін, әрі жиі проксидің неге қосылмайтынын да көрсетеді. Сілтемені бөлшектеп талдайық.

Сілтеме параметрлері бойынша

Сілтеменің пішімін Telegram құжаттамасы белгілейді. Тең екі жазылуы бар: tg://proxy қолданбада тікелей ашылады, ал t.me/proxy — браузерде. t.me хостын telegram.me немесе telegram.dog деп те жазуға болады, ал # белгісінен кейінгі бөлік ескерілмейді.

tg://proxy?server=proxy.example.com&port=443&secret=ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d
ПараметрМіндеттіБұл не
serverиәсервердің мекенжайы немесе IP-мекенжайы
portиәсервердің порты
secretиәпроксидің құпиясөзі

Параметрлер & белгісімен бөлінеді. Сілтемені беттен көшірсеңіз, онымен бірге артық таңбалар көшпегеніне көз жеткізіңіз: HTML-де амперсанд & деп жазылады, ал мұндай сілтеме ашылмайды.

Сервер және порт

Сервер — домендік атау немесе IP-мекенжай. Домен ыңғайлырақ: сервер мекенжайын сілтемені қайта шығармай ауыстыруға болады. Порт көбіне 443 — HTTPS арқылы қарапайым сайттардағыдай: онда трафик табиғирақ көрінеді, ал стандартты емес порттарда қосылымдар сүзгіге жиірек түседі.[1]

[1] ee режимі үшін бұл әсіресе маңызды: ол HTTPS-ті еліктейді, ал HTTPS 443 портында тұрады.

Сервер мен порт туралы басқа айтатын ештеңе жоқ: мекенжайдың жауап беретінін қосылу арқылы ғана тексеруге болады. Сілтемедегі басты жасырын нәрсе — құпиясөз.

Құпиясөз

— он алтылық жол. Оның негізінде әрдайым 16 кездейсоқ байт, яғни 32 таңба тұрады. Одан әрі үш нұсқа болуы мүмкін:

ТүріҰзындығыҚұрылымыРежим
Префикссіз32 таңбакілтқарапайым (obfuscated2)
dd34 таңбаdd + кілтпакеттерге кездейсоқ толықтырғыш
ee42 таңбадан бастапee + кілт + hex-тегі доменFakeTLS

Telegram құжаттамасында пішім дәл солай сипатталған: құпиясөз — 16 байт, әдетте hex түрінде; 17 байттық түрі де бар, онда бірінші байт тасымалды таңдайды, көбіне бұл 0xdd — padded intermediate.

dd нені білдіреді

Ресми MTProxy README-інде кейбір провайдерлер MTProxy-ді пакет өлшемдері бойынша анықтайтыны айтылған, сондықтан мұндай режимге кездейсоқ толықтырғыш қосылған. Оны клиент жағынан құпиясөздегі dd префиксімен қосады (cafe…babe ddcafe…babe болады), ал толықтырғыш оны сұраған клиенттерге ғана қолданылады.

Протокол деңгейінде бұл padded intermediate тасымалы: пакеттің алдында 4 байттық ұзындық жүреді, ал жалпы ұзындыққа 0-ден 15-ке дейін кездейсоқ байт кіреді. Өлшемдер тұрақты болудан қалады, бірақ қосылымның басы бұрынғыдай қалады.

ee нені білдіреді

ee префиксі FakeTLS режимін қосады. dd-дан айырмашылығы, құпиясөзде кілттен кейін домен де тұрады — клиент өрісінде атайтын дәл сол байттар. Сондықтан ee құпиясөзі әрдайым ұзынырақ. Домен hex-тен оқылады:

echo 676f6f676c652e636f6d | xxd -r -p

Бұл доменге проксидің өмірі неге байланысты екені — «FakeTLS: прокси сайт болып қалай көрінеді» мақаласында.

mtg үшін құпиясөз base64 пішімінде де, ee префиксі бар hex пішімінде де болады: mtg generate-secret --hex google.com командасы екінші түрін береді, ал --hex кілтінсіз — біріншісін. Сізде base64 болса, оны қолмен қимаңыз және қайта құрастырмаңыз, дайын сілтемені mtg access командасымен алыңыз.

Практикум: құпиясөзді таңбалап талдаймыз

mtg құжаттамасындағы мысалды алайық — google.com үшін құпиясөз. Онда 54 таңба бар, оларды кесте бойынша санаған ыңғайлы:

ТаңбаларҰзындығыБұл не
1–22ee — FakeTLS режимі
3–3432кілт — 16 кездейсоқ байт
35–5420676f6f676c652e636f6d — google.com сөзі байттармен жазылған: әр әріпке екі таңба

Осыдан ереже шығады: ee құпиясөзінің ұзындығы 2 + 32 + доменнің екі еселенген таңба санына тең. Домені он таңбалы құпиясөз үшін 54, он екі таңбалы үшін 58 шығады. 42 таңбадан қысқа ee құпиясөзі болмайды: Telegram Desktop оны 21 байттан бастап қабылдайды, яғни доменге кемінде төрт байт келуі керек. Ұзындық сәйкес келмесе, құпиясөз қиылған немесе қатемен құрастырылған.

Дәл сол кілт dd режимінде dd473ce5d4958eb5f968c87680a23854a0 болып көрінер еді — доменсіз 34 таңба, ал қарапайым режимде — кілттің 32 таңбасы ғана.

Құпиясөзді өзіңіз қалай жасауға болады

Кілт — 16 кездейсоқ байт. Доменсіз режимдер үшін бір команда жеткілікті; екеуі де жобалардың құжаттамасынан алынған:

openssl rand -hex 16 head -c 16 /dev/urandom | xxd -ps

dd режимі үшін нәтижеге dd префиксін қосады. FakeTLS үшін бағдарламаға сенген оңай: mtg generate-secret --hex сіздің-домен.example префиксі мен доменімен дайын құпиясөзді бірден береді. Оны қолмен құрастыру керек болса, префиксті, кілтті және hex-тегі доменді жапсыру жеткілікті:

KEY=$(openssl rand -hex 16) DOMAIN=сіздің-домен.example printf 'ee%s%s\n' "$KEY" "$(printf '%s' "$DOMAIN" | xxd -p | tr -d '\n')"

Құпиясөздегі домен серверде бапталғанмен сәйкес болуы керек: telemt-те бұл tls_domain параметрі, mtg-де домен құпиясөздің өзінен алынады.

Клиент құпиясөзбен не істейді

Құпиясөз желі арқылы жіберілмейді: ол кілттерді шығаруға қатысады. Telegram құжаттамасы бойынша, обфускацияда ағынды шифрлау кілті бастапқы пакеттегі кілттің және құпиясөздің SHA256-сы ретінде есептеледі. Бір құпиясөзді білетін клиент пен прокси бірдей кілттер алады; бөтен клиентте кілттер басқа болады және прокси оның қосылымын қабылдамайды.

Құпиясөз 17 байттық болса (dd сияқты префиксімен), бірінші байт тасымалды анықтайды және кілттерді шығаруға қатыспайды. Артық байтты көрген клиенттер әдепкіде padded intermediate — кездейсоқ толықтырғышы бар режимді пайдаланады.

Бір құпиясөз бе, бірнеше ме

Сервер бірнеше құпиясөзді қабылдай алады: ресми MTProxy-де -S кілтін бірнеше рет көрсетуге болады. Бұл әртүрлі адамдарға әртүрлі сілтеме беріп, оларды бөлек қайтарып алу үшін керек. mtg-де құпиясөз біреу — авторлар мұны саналы шешім деп санайды; telemt-те құпиясөздер [access.users] бөлімінде пайдаланушыларға беріледі.

Сілтемелердің үш мысалы

Дәл сол «сервер және порт» жұбы әртүрлі құпиясөзбен берілуі мүмкін. Үш нұсқа былай көрінеді (мекенжай мен кілт шартты):

tg://proxy?server=proxy.example.com&port=443&secret=473ce5d4958eb5f968c87680a23854a0 tg://proxy?server=proxy.example.com&port=443&secret=dd473ce5d4958eb5f968c87680a23854a0 tg://proxy?server=proxy.example.com&port=443&secret=ee473ce5d4958eb5f968c87680a23854a0676f6f676c652e636f6d

Бірінші сілтеме қарапайым режимді, екіншісі — кездейсоқ толықтырғышы бар режимді, үшіншісі — google.com доменімен FakeTLS-ті қосады. Клиент үшін айырмашылық тек құпиясөзде: сервер мен порт бірдей. Дәл сондықтан алдымен құпиясөзді оқыған жөн.

Домен мен құпиясөз бірге өзгереді

ee құпиясөзінде домен — кілттің бөлігі, ал серверде домен бөлек берілген: telemt-те бұл tls_domain параметрі, mtg-де домен құпиясөзден алынады. Біреуін екіншісін өзгертпей ауыстырсаңыз, клиенттер қосылуды тоқтатады: telemt FAQ-ына сәйкес, доменді ауыстырғанда ескі сілтемелер «Unknown TLS SNI» қатесін береді. Сондықтан оларды жұппен өзгертіңіз және сілтемелерді қайта шығарыңыз.

Сілтемені қалай беру керек

  • сенімді адамдарға жеке хабарламамен жіберіңіз, көпшілік арналар мен чаттарда емес;
  • мүмкіндігінше әркімге бөлек құпиясөз беріңіз: мұндай құпиясөзді басқаларына тимей қайтарып алуға болады (ресми MTProxy және telemt қолдайды);
  • сілтеме тарап кетсе, оны «жоғалтар» деп үміттенбей, құпиясөзді ауыстырыңыз;
  • құпиясөзді прокси «тексеретін» бөтен сервистерге жібермеңіз: сіз құпия сөзді беріп отырсыз.

Қосылғанға дейін нені тексеру керек

  1. Сілтеме tg://proxy немесе t.me/proxy деп басталады және үш параметрдің бәрін қамтиды.
  2. Құпиясөз ee деп басталады — әйтпесе режим қарапайым немесе dd.
  3. Құпиясөз ұзындығы жоғарыдағы кестеге сәйкес: 32, 34 немесе 42 таңбадан кем емес.
  4. ee құпиясөзінің соңындағы домен оқылады және бұл кездейсоқ таңбалар жиыны емес, қарапайым сайт.
  5. Порт — 443 немесе HTTPS үшін әдеттегі басқа порт.
  6. Бос орындар, жол үзілімдері және & сияқты артық таңбалар жоқ.

Жиі қателер

  • Құпиясөз қиылған. Жол көшірілуінен немесе мессенджерде қысқартудан доменмен бірге құйрық жоғалады; Telegram басқа режимде қосылады немесе қосылмайды.
  • Құпиясөз SOCKS5 құпия сөз өрісіне қойылған. MTProto үшін MTProto түрін таңдап, құпиясөзді сәйкес өріске енгізу керек.
  • Сервер мен порт шатастырылған. Әсіресе қолмен енгізгенде.
  • Сілтеме қолмен өзгертілген. Құпиясөздегі бір өзгерген таңба басқа кілт береді — және прокси клиентті өткізбейді.

Мысал: құпиясөздегі қатені қалай табуға болады

Айталық, сізге сілтеме жіберді, ондағы құпиясөздің ұзындығы 48 таңба және ол ee деп басталады. 2 + 32 + доменнің екі еселенген таңба саны формуласы бойынша, домен үшін 14 таңба келеді, яғни жеті әріптен тұратын атау. Соңын xxd -r -p командасымен шешіңіз: оқылатын сайт атауы шықса, құпиясөз дұрыс. Нәтижеде мағынасыз таңбалар не күткеннен қысқа атау болса, құпиясөз жолда қиылған — сілтемені қайта сұраңыз.

Дәл сол тәсіл бөтен сілтемелерді тексеруге де жарайды: ол жарты минут алады және қосылуды қажет етпейді.

Құпиясөз — құпия сөз

Құпиясөзді білген кез келген адам проксиге қосылып, сілтемені басқаларға бере алады. mtg README-інде құпиясөз проксидің кілті және клиенттің құпия сөзі деп аталады. Сондықтан жеке сілтемені ашық чаттарда жарияламайды: ол неғұрлым кең тарасса, соғұрлым серверге жүктеме жоғары және оны бұғаттау тізімдеріне тез қосады.

Жиі қойылатын сұрақтар

Проксидің құпиясөзінің басындағы dd нені білдіреді?

dd префиксі кездейсоқ толықтырғышы (padding) бар режимді қосады: проксиді пакет өлшемдері бойынша тану қиынырақ болуы үшін пакеттерге 0-ден 15-ке дейін кездейсоқ байт қосылады. Префикстен кейінгі кілт — сол 16 байт.

ee құпиясөзін dd-ден қалай ажыратуға болады?

Алғашқы екі таңба мен ұзындық бойынша. dd құпиясөзі — dd және кілттің 32 таңбасы, барлығы 34. ee құпиясөзі ұзынырақ: кілттен кейін он алтылық жазылымдағы бүркемелеу домені келеді.

Құпиясөзді жариялауға бола ма?

Жоқ болғаны жөн. Құпиясөз құпия сөз сияқты жұмыс істейді: оны білген адам проксиге қосылады және сілтемені әрі қарай бере алады. Сілтеме неғұрлым кең тарасса, соғұрлым тез бұғаттау тізімдеріне қосылады.

ee құпиясөзіндегі доменді қалай білуге болады?

Құпиясөздің алғашқы 34 таңбасынан кейінгі бөлігін (префикстің екі таңбасы және кілттің 32 таңбасы) алып, оны он алтылық жазылымнан мәтінге түрлендіріңіз, мысалы, echo ҚҰЙРЫҚ | xxd -r -p командасымен. Нәтиже — прокси бүркенетін сайттың атауы.

t.me/proxy мен tg://proxy қалай ерекшеленеді?

Параметрлері бірдей. tg://proxy сілтемесі қолданбада тікелей ашылады, ал t.me/proxy браузерде де жұмыс істейді. Telegram құжаттамасы бойынша, t.me-ді telegram.me немесе telegram.dog деп те жазуға болады.

Дереккөздер

  1. Telegram: проксиге сілтемелер (proxy links)
  2. Telegram: MTProto transports — құпиясөз пішімі
  3. MTProxy (GitHub): README, Random padding
  4. mtg: README — құпиясөзді жасау
  5. telemt: README — classic, secure, tls режимдері
  6. Telegram Desktop: mtproto_proxy_data.cpp — құпиясөздің рұқсат етілген ұзындығы