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
[tahrir | manbasini tahrirlash]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
[tahrir | manbasini tahrirlash]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 sxemasi
[tahrir | manbasini tahrirlash]- 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 | manbasini tahrirlash]auth_key_id | msg key | Encrypted Data |
---|---|---|
64 bit | 128 bit | N * 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.[1]
Dasturlash tillari uchun kutubxonalar
[tahrir | manbasini tahrirlash]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 |
Yana qarang
[tahrir | manbasini tahrirlash]Manbalar
[tahrir | manbasini tahrirlash]Adabiyotlar
[tahrir | manbasini tahrirlash]- Jakob Bjerre Jakobsen, On the CCA (in)Security of MTProto, 2016, 978-1-4503-4564-4, Security of MTProto
Havolalar
[tahrir | manbasini tahrirlash]- 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 (Wayback Machine saytida 2021-06-23 sanasida arxivlangan)