MTProto

Vikipediya, ochiq ensiklopediya
Jump to navigation Jump to search

MTProto (Mobile Transport Protocol) — Telegram ijtimoiy tarmogʻida foydalanuvchilar yozishmalarini shifrlash uchun ishlatiladigan kriptografik protokol. Ushbu protokol Nikolay Durov va boshqa dasturchilar bilan birgalikda yaratilgan.

Protokol, simmetrik shifrlash algoritmi AES (IGE rejimida) hamda ikki qurilma oʻrtasida 2048-bitli RSA kalitlarni almashish uchun moʻljallangan Diffi-Xelman protokolining kombinatsiyasi va bir qator hesh-funksiyalar asosida hosil qilingan. Protokol end-to-end usulida shifrlashni ham qoʻllab-quvvatlaydi.

Shuningdek, ushbu protokol asosida MTProxy protokoli yaratilgan.

Qurilmani roʻyxatdan oʻtkazish[tahrir]

Telegram ilovasini birinchi marta ishga tushirilganda, foydalanuvchi oʻzining telefon raqamini kiritadi. Ushbu telefon raqamga besh xonali tasdiqlash kodi joʻnatiladi.

Tasdiqlash kodi kiritilgandan soʻng avtorizatsiya protokoli ishga tushadi:

  1. C mijoz, S serverga tasodifiy bitlar ketma-ketligidan iborat boʻlgan (128 bit) satr koʻrinishidagi soʻrovni yuboradi.
  2. S javob tariqasida boshqa bitlar ketma-ketligini, yaʼni 64 bitli n son hamda RSA ning ochiq kalitini joʻnatadi.
  3. C mijoz, n sonni ikkita p va q tub sonlarga ajratadi. Mijozda serverning ochiq kalitlari toʻplami mavjud boʻlib, u qurilma xotirasida saqlanadi. Mijoz ularning ichidan S serverdan kelgan shifrga mos keladigan kalitni tanlaydi.
  4. Shundan soʻng C boshqa bir 256 bitli tasodifiy satrni tanlaydi, ushbu satr avvalgisidan farq qilishi kerak. Mijoz bu satrdan n, p va q sonlarni tanlaydi hamda RSA algoritmi asosida kaliti bilan shifrlab, serverga joʻnatadi.
  5. S server esa Diffi-Xelman protokoli asosidagi g, p, va ga parametrlari bilan javob qaytaradi. Bu parametrlar AES-256 bilan shifrlangan. Buning uchun mijoz va serverdan olingan vaqtinchalik kalit va Saltdan foydalanilgan.
  6. C mijoz, yopiq kalit b ni tanlaydi, uning asosida ochiq kalitni hamda umumiy ochiq kalit ni hisoblaydi. Shundan soʻng, shifrlangan holda Sga yuboriladi.

Xabarlarni shifrlash[tahrir]

Shifrlash paketining tarkibi
Length Header Random bits Layer seq_in seq_out Header Random id TTL Message Header Padding
32 bit 32 bit 128 bit 32 bit 32 bit 32 bit 32 bit 64 bit 32 bit Tasodifiy uzunlik 32 bit 0-96 bit
1-blok 2-blok 3-blok 4-blok Bloklar N-blok
  • Length — paket uzunligi, bunda padding hisobga olinmaydi.
  • Header — har bir paket, protokol versiyasi, joʻnatilayotgan mediafayllar turi haqidagi maʼlumotlarni saqlaydigan uchta sarlavhadan tashkil topgan.
  • Random bits — mijoz tomonidan hosil qilingan 120 bit hamda maydon uzunligini aniqlovchi 8 bitdan tashkil topgan. Shifrlash uchun Salt sifatida ishlatiladi.
  • Layer — protokol versiyasini bildiradi.
  • seq_in — chat yaratuvchisiga yuborilgan xabarlar soni.
  • seq_out — chat yaratuvchisi tomonidan yuborilgan xabarlar soni.
  • Random id — xabar yuborayotgan mijoz tomonidan hosil qilingan tasodifiy son. Matn koʻrinishida yuboriladi.
  • TTL — xabarni olgan foydalanuvchi, ushbu xabarni oʻchirilib tashlanishidan oldin koʻrib turishi mumkin boʻlgan vaqt, sekundlarda oʻlchanadi.
  • Message — foydalanuvchi tomonidan kiritilgan xabar (ixtiyoriy uzunlikda).
  • Padding — Shifrlash oldidan qoʻshiladi.
Shifrlash algoritmining sxemasi

Shifrlash sxemasi[tahrir]

  • auth_key — chat hosil qilinish paytida olingan ochiq shifrlash kaliti.
  • Payload — shifrlash paketi.
  • msg_key — SHA1-heshning dastlabki 128 biti. Rasshifrovkaning toʻgʻri amalga oshirilganini tekshirish uchun foydalaniladi.
  • Padding — shifrlash paytida blokning oʻlchami 128 bitga teng boʻlishi uchun qoʻshilgan tasodifiy sonlardan iborat 0—96 bit.
  • AES keyva IV — IGE rejimida AES algoritmi orqali shifrlash parametrlari. KDF yordmida hosil qilinadi.
  • KDF (key derivation function) — AES key va IV ni msg_key hamda auth_key asosida shakllantirish funksiyasi
  • auth_key_id — SHA1-heshK ochiq kalitining dsatlabki 64-biti. Kolliziya roʻy berganda kalit qaytadan generatsiya qilinadi.[1]


Xabarlarni deshifrlash[tahrir]

Shifrlangan xabar strukturasi
auth_key_id msg key Encrypted Data
64 bit 128 bit N * 128 bit
  1. Mijoz shifrlangan xabarni oladi, auth_key_id ning ishonchliligni tekshiradi, yaʼni SHA1-hesh ochiq kaliti Kning dastlabki 64-bitini hisoblaydi. Qiymatlar mos kelsa, xabarni deshifrlash qilish davom ettiriladi.
  2. key derivation function yordamida AES key va IV shakllantiriladi.
  3. Shundan soʻng maʼlumotlarni AES-IGE algoritmi asosida deshifrlash davom ettiriladi. Oxiri joʻnatuvchidagi paketga mos kelgan paket qabul qiluvchida ham hosil boʻladi.
  4. Deshifrlangan paketdagi SHA1-heshning 128-bitini msg_key bilan taqqoslanadi. Va xabar toʻliq deshifrlanadi.[1]

Dasturlash tillari uchun kutubxonalar[tahrir]

Nomi Dasturlash til(lar)i Manba kodi Tavsifi
@mtproto/core JavaScript https://github.com/alik0211/mtproto-core Telegram API (MTProto) client library for browser
MadelineProto PHP https://github.com/danog/MadelineProto Async PHP client/server API for the telegram MTProto protocol
Telethon Python https://github.com/LonamiWebs/Telethon Pure Python 3 MTProto API Telegram client library, for bots too!
pyrogram Python https://github.com/pyrogram/pyrogram Telegram MTProto API Client Library and Framework for Python
grammers Rust https://github.com/Lonami/grammers A set of Rust libraries to interact with Telegram’s API
TLSharp C# https://github.com/sochix/TLSharp Telegram client library implemented in C#
TDLib Python, JavaScript, Go, Java, Kotlin, C#, C++, Swift, Objective-C, Dart, Rust, Erlang, PHP, Lua, Ruby, Clojure, Emacs Lisp, D, Elixir, 1S, C https://github.com/tdlib/td Cross-platform library for building Telegram clients. It can be easily used from almost any programming language

Shuningdek qarang[tahrir]

Manbalar[tahrir]

Adabiyotlar[tahrir]

  • Jakob Bjerre Jakobsen, On the CCA (in)Security of MTProto, 2016, 978-1-4503-4564-4, Security of MTProto

Havolalar[tahrir]