MTProto

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 

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:

 C mijoz, S serverga tasodifiy bitlar ketma-ketligidan iborat boʻlgan (128 bit) satr koʻrinishidagi soʻrovni yuboradi.
 S javob tariqasida boshqa bitlar ketma-ketligini, yaʼni 64 bitli n son hamda RSA ning ochiq kalitini joʻnatadi.
 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.
 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.
 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.
 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 
+Shifrlash paketining tarkibiLengthHeaderRandom bitsLayerseq_inseq_outHeaderRandom idTTLMessageHeaderPadding32 bit32 bit128 bit32 bit32 bit32 bit32 bit64 bit32 bitTasodifiy uzunlik32 bit0-96 bit1-blok2-blok3-blok4-blokBloklarN-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 sxemasi 
 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.

 Xabarlarni deshifrlash 
+Shifrlangan xabar strukturasiauth_key_idmsg keyEncrypted Data64 bit128 bitN * 128 bit
 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.
 key derivation function yordamida AES key va IV shakllantiriladi.
 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.
 Deshifrlangan paketdagi SHA1-heshning 128-bitini msg_key bilan taqqoslanadi. Va xabar toʻliq deshifrlanadi.

 Dasturlash tillari uchun kutubxonalar 
NomiDasturlash til(lar)iManba kodiTavsifi@mtproto/coreJavaScripthttps://github.com/alik0211/mtproto-coreTelegram API (MTProto) client library for browserMadelineProtoPHPhttps://github.com/danog/MadelineProtoAsync PHP client/server API for the telegram MTProto protocolTelethonPythonhttps://github.com/LonamiWebs/TelethonPure Python 3 MTProto API Telegram client library, for bots too!pyrogramPythonhttps://github.com/pyrogram/pyrogramTelegram MTProto API Client Library and Framework for PythongrammersRusthttps://github.com/Lonami/grammersA set of Rust libraries to interact with Telegram’s APITLSharpC#https://github.com/sochix/TLSharpTelegram client library implemented in C#TDLibPython, JavaScript, Go, Java, Kotlin, C#, C++, Swift, Objective-C, Dart, Rust, Erlang, PHP, Lua, Ruby, Clojure, Emacs Lisp, D, Elixir, 1S, Chttps://github.com/tdlib/tdCross-platform library for building Telegram clients. It can be easily used from almost any programming language

 Yana qarang 
 RSA shifrlash algoritmi
 AES shifrlash standarti
 Hesh-funksiyalar

 Manbalar 

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

 Havolalar 
 https://core.telegram.org/mtproto
 https://web.archive.org/web/20161129083141/https://unhandledexpression.com/2013/12/17/telegram-stand-back-we-know-maths/
 https://www.incibe.es/extfrontinteco/img/File/intecocert/EstudiosInformes/INT_Telegram_EN.pdf