obfuscated2
MTProto транспортын бүркемелеу (обфускация)
Ағын кездейсоқ байттарға ұқсайтын, бірақ қосылымның басы мен пакеттер ырғағы танылатын күйінде қалатын режим.
Не үшін керек
Обфускациясыз MTProto қосылымы қысқа тақырыппен басталады, оған қарап оны оңай тануға болады. Обфускация транспорттың үстінен бүкіл ағынды шифрлайды, сонда протоколдың ашық белгілері қалмайды. Telegram құжаттамасында бұл механизм «transport obfuscation» деп аталады, ал прокси туралы әңгімеде оны әдетте obfuscated2 дейді. Сол құжаттама бойынша, ол WebSocket транспорты үшін міндетті және провайдерлердің бұғаттауын айналып өту үшін қолданылады.
Бастапқы пакет қалай құрылған
Клиент кездейсоқ 64 байт жібереді. Оларға шектеулер бар, сонда олар басқа протоколдардың тақырыптарымен сәйкес келмейді: бірінші байт 0xef бола алмайды, алғашқы төрт байт 0xdddddddd, 0xeeeeeeee немесе HTTP сұрауының басы (POST, GET, HEAD) бола алмайды. 56-ығысуда транспорт идентификаторы жатыр, ал проксиде 60-ығысуда — дата-орталықтың нөмірі.
Шифрлау кілттері осы 64 байттан шығарылады: 8–40 байттар — кілт, 40–56 байттар — инициализация векторы, ал кері бағыт үшін аударылған пакеттің дәл сол өрістерін алады. Одан әрі ағын AES-256 алгоритмімен CTR режимінде шифрланады; шифрдың күйі қосылымның бүкіл уақытында сақталады.
Құпиясөздің рөлі
Прокси үшін әр кілт құпиясөзбен бірге қосымша хэштеледі: SHA256(кілт + құпиясөз). Сондықтан прокси тек құпиясөзді білетіндерді қабылдайды, ал құпиясөздің өзі желі арқылы берілмейді.
Нені жасырады, нені жасырмайды
Обфускация ағынның мазмұнын және алғашқы байттардағы протокол белгілерін жабады. Қалғаны көрінетін күйінде қалады:
- прокси серверінің IP-мекенжайы мен порты;
- трафиктің көлемі, пакеттердің өлшемі мен ырғағы;
- осы мекенжайға ұзақ қосылым орнатылғанының өзі.
Басқа режимдердің қасында
Үш режим танудың әртүрлі тәсіліне жауап береді және бір-бірін толықтырады:
- obfuscated2 — бүкіл ағынды шифрлайды, протоколды алғашқы байттарда жасырады;
- dd (padding) — пакеттерге 0-ден 15-ке дейін кездейсоқ байт қосады, сонда өлшемдер проксиді ашпайды;
- ee (FakeTLS) — қосылымды нағыз сайтпен TLS алмасуы ретінде бастайды.
Әлсіз тұсы
Обфускация мазмұнды жасырады, бірақ қосылымның пішінін жасырмайды. Қосылымның басы әрқашан 64 «кездейсоқ» байт, ал пакеттердің өлшемдері мен ырғағы бұрынғыша қалады. Сондықтан DPI жүйелері мұндай трафикті статистика бойынша ажырата алады, сол себепті прокси әзірлеуде padding (dd) және FakeTLS (ee) пайда болды.