Lebih Banyak Telegram Rahasia

Semua orang terbiasa menganggap telegram sebagai media yang andal dan aman untuk mengirim pesan dalam bentuk apa pun. Namun, di bawah tenda, ia memiliki kombinasi enkripsi a- dan simetrik yang benar-benar biasa, yang sama sekali tidak menarik. Dan pada akhirnya, mengapa Anda harus secara eksplisit mempercayai pesan Anda kepada pihak ketiga?
CAPA oleh Antonio Prohías
TL; DR - buat saluran tersembunyi pribadi melalui pengguna yang saling memblokir.


Saluran tersembunyi


Ada banyak solusi untuk mentransfer data antara dua pengguna, menghindari kontak eksplisit. Anda dapat menggunakan perantara, crypto dan steganografi, jaringan relay siaran dan add-on lainnya melalui protokol yang ada. Tetapi kadang-kadang berguna untuk dapat melakukan kontak hanya menggunakan kemampuan yang dinyatakan resmi. Artinya, mengatur saluran rahasia .


Contoh sederhana dan mudah dipahami dari saluran tersembunyi untuk pembaca berbahasa Rusia adalah bunga di jendela penampilan tujuh belas momen musim semi. Dengan sendirinya, ia dapat berdiri atau tidak berdiri di jendela - simbiosis seperti itu benar-benar normal dan hanya berbicara tentang cinta pemilik apartemen terhadap bunga. Hanya interpretasi yang telah ditentukan yang membedakan informasi yang dikirimkan oleh pengintai dari yang diperoleh oleh orang yang lewat secara acak.


Bunga di jendela


Saluran jendela bunga telegram


Untuk mengatur saluran tersembunyi Anda sesuai dengan contoh seperti itu, hanya dua hal yang secara konseptual diperlukan: jendela dan bunga. Jendela menggambarkan objek yang tersedia untuk mengubah dan menentukan keadaan, dan bunga menggambarkan nilai yang mungkin dan metode untuk mengubahnya.


Apa yang bisa diubah oleh Alice dalam sebuah telegram, yang tersedia untuk dilihat oleh Bob tertentu? Ya, banyak hal: avatar, nama pengguna, waktu kunjungan terakhir dan banyak lagi. Namun, mereka biasanya tersedia untuk semua orang segera, yang membatasi privasi dari kemungkinan dialog - siapa pun yang mengetahui metode transmisi akan dapat mendengarkan pesan yang dikirim. Anehnya, pembatasan ini dapat dielakkan tanpa menggunakan kriptografi.


Daftar Hitam


Setiap pengguna memiliki daftar hitamnya sendiri yang unik, dan jika pembaca telah melakukannya paling tidak satu kali, ia seharusnya memperhatikan bahwa tanggal kunjungan terakhir si pelaku berubah menjadi "terakhir kali terlihat" bersama dengan avatar kosong. Sebenarnya, pengguna bisa online setidaknya satu detik yang lalu dan mengubah seratus segel di profilnya, tetapi API Telegram tidak mengembalikan data ini ke aplikasi. Dengan demikian, ini melindungi kehidupan pribadi Anda dari orang yang tidak diinginkan, sebagai gantinya membuat mereka mengerti bahwa mereka diblokir.


Jadi apa hasil dari kesamaan antara bunga di jendela dan berada di daftar blokir? Baik itu, dan yang lain dapat diperiksa pada saat tertentu, setelah menerima sedikit informasi tergantung pada apakah Anda berada dalam daftar hitam atau tidak. Bonus tambahan adalah fakta bahwa telegram kemungkinan besar tidak menyimpan dalam log mereka (dan jika mereka melakukannya, itu tidak berlangsung lama hanya untuk tujuan logging) sejarah memblokir masing-masing pengguna.


Atur ketukannya


Kemampuan untuk mengirim dan menerima bit tentu saja bagus, tetapi Anda masih perlu menggambarkan mekanisme lengkap untuk operasinya. Telegram tidak mengirimkan pemberitahuan kepada pengguna ketika ditambahkan ke daftar hitam, sehingga penerimaan setiap bit harus dimulai oleh penerima (Bob) dan tidak bergantung pada pengirim (Alice). Hal ini juga mengikuti bahwa Alice dan Bob harus memenuhi permintaan dengan frekuensi yang sama, sehingga setiap siklus jam pengirim sesuai dengan satu siklus jam penerima.


Algoritma pertukaran itu sendiri pada setiap ukuran terlihat seperti ini:


  • A memeriksa bit yang dikirim dan, jika perlu mengirim sinyal, maka, tergantung nilainya:
    • A -> T: blok B;
    • A -> T: membuka kunci B.
  • B mendapat sedikit:
    • B -> T: permintaan pengguna A;
    • T -> B: informasi yang tersedia tentang A;
    • B: memeriksa apakah informasi yang diterima memiliki status:
      • B: jika ada -> itu tidak diblokir dan diterima 0
      • B: jika tidak -> itu diblokir dan diterima 1

Sebagian besar prosesor pengguna modern memiliki generator frekuensi built-in yang baik (setidaknya jam sistem), sehingga jam dapat disinkronkan dengan mereka tanpa menggunakan saluran data itu sendiri. Perlu dicatat bahwa permintaan ke API telegram adalah jaringan dan tidak terburu-buru untuk bekerja dengan cepat, yang tidak membantu fakta pemblokirannya di Federasi Rusia dan kebutuhan untuk menggunakan proxy. Tetapi panjang siklus harus rata-rata melebihi waktu yang dibutuhkan untuk menyelesaikan permintaan ini, sehingga frekuensi dan kecepatan transfer data sangat kecil.


Kami menyandikan pesan


Teks dalam bahasa alami memiliki redundansi yang cukup tinggi, sehingga pesan yang diterima dengan kesalahan masih sering dipahami oleh manusia. Dan karena telegram masih merupakan messenger, meskipun ada upaya untuk melampirkan segala macam gadget grafis-audio-video ke dalamnya, koreksi kesalahan dapat diabaikan, membatasi data yang dikirim ke pesan teks.


Karena throughput rendah dari saluran rahasia, Anda perlu menggunakan pengkodean yang paling efisien untuk pesan yang mungkin. Untungnya, nama pembawa pesan itu mengingatkan kita pada saat-saat ketika masalah seperti itu biasa terjadi.


Oleh karena itu, ketika di abad ke-21, kami akan menyandikan teks dengan salah satu metode paling efektif yang tersedia untuk telegrafis seabad yang lalu - kode Bodo . Lebih tepatnya, variasi terbarunya dari ITA-2 ditulis oleh Murray untuk membuat lebih sedikit panggilan API pada karakter yang biasa ditemui. Anda dapat mengeluh tentang kurangnya bahasa Rusia, tetapi menurut saya transliterasi adalah cara yang lebih sederhana daripada pengorbanan karakter tambahan untuk Yu dan Sch .


Tetap hanya untuk menentukan awal dan akhir dari setiap sesi transfer data, sehingga sisi penerima di antara aliran besar dapat menyoroti pesan yang dikirim ke sana. Sebelum transfer dimulai, Bob masuk daftar hitam atau di luar. Kemudian Alice memberi isyarat awal transfer, mengubah status ini dengan satu ketukan ke arah sebaliknya. Di akhir program, dia membuka kunci Bob. Ini terus menerima karakter nol hingga cukup terakumulasi untuk menyatakan akhir transmisi secara andal.


Di timeline


Kerugian dari pendekatan ini adalah ketidakmungkinan praktis menghubungkan (lebih tepatnya, Anda dapat terhubung, tetapi Anda harus mengotak-atik koreksi kesalahan manual) untuk siaran yang sedang berlangsung dan pemisahan nol karakter yang diterima secara keliru dari yang sebenarnya ditransmisikan. Namun, ini sudah merupakan masalah implementasi.


Teknologi tinggi


Setelah beberapa jam mencoba menggunakan perpustakaan resmi untuk berinteraksi dengan API, saya meludah dan menulis semua yang saya butuhkan dengan python menggunakan Telethon yang lebih manusiawi. Penulis bahkan menyajikan API dalam gaya sinkron, yang karena alasan tertentu telah menjadi langka. Saya harus menulis sendiri penyandian pesan menggunakan ITA-2 di lutut saya, karena saya tidak benar-benar menemukan sesuatu yang siap.


Sinkronisasi frekuensi terjadi pada jam sistem (dan ya, program tidur! Dalam interval), yang cukup akurat jika Anda memperhitungkan waktu yang diperlukan untuk menyelesaikan permintaan API, yang stabil selama lebih dari sepersepuluh detik. Pengguna dapat mengatur kecepatan transmisi sesuka mereka, tetapi saya menggunakan prinsip "tidak ada lagi permintaan per detik" untuk menghindari kesalahan dan pembekuan untuk spam dengan jenis permintaan yang sama. Telegram, secara umum, ternyata sangat pilih-pilih menggunakan API-nya, membekukan akses ke akun melalui itu selama sehari bahkan dengan hanya tiga otorisasi (apalagi, berhasil) berturut-turut, serta kunci jangka pendek acak untuk alasan yang tidak diketahui.


Jika pengguna bertukar telegram melalui saluran tersembunyi, maka mereka tidak benar-benar membutuhkan antarmuka grafis. Ya dan tidak di mana-mana dia berada, oleh karena itu, dia menulis utilitas konsol yang biasa. Ini memungkinkan Anda untuk menunggu dan menerima pesan pada ID pengguna yang ditentukan dalam sekali jalan, atau mengirimnya dengan membaca dari argumen baris perintah. Tidak seorang pun, tentu saja, melarang penggunaan beberapa saluran sekaligus, dan juga menerima dan mengirimkan pesan secara paralel, Anda hanya perlu menjalankan beberapa instance secara paralel.


Contoh penggunaan


Untuk menggunakan, Anda perlu mendapatkan api_id dan api_hash Anda dari telegram sesuai dengan instruksi ini dan mengatur nilai yang diterima dalam file 'covertele.py'. Argumen baris perintah menunjukkan tindakan yang diinginkan, pengidentifikasi, penerima penerima, serta pesan yang akan dikirim jika pengirim. Itu semua terlihat seperti ini:


 :  : Enter your phone number: XXX | Enter your phone number: XXX Enter auth code: YYY | Enter auth code: YYY Started message transmission... | Listening for the message... ---++ ('O', '9') | ---++ ('O', '9') --+-+ ('H', '#') | --+-+ ('H', '#') +++++ (1, 1) | +++++ (1, 1) --++- ('N', ',') | --++- ('N', ',') --+-- (' ', ' ') | --+-- (' ', ' ') ++-++ (0, 0) | ++-++ (0, 0) --+-+ ('H', '#') | --+-+ ('H', '#') -++-- ('I', '8') | -++-- ('I', '8') --+-- (' ', ' ') | --+-- (' ', ' ') --+++ ('M', '.') | --+++ ('M', '.') ++--- ('A', '-') | ++--- ('A', '-') -+-+- ('R', "'") | -+-+- ('R', "'") ++++- ('K', '(') | ++++- ('K', '(') +++++ (1, 1) | +++++ (1, 1) +-++- ('F', '!') | +-++- ('F', '!') --+++ ('M', '.') | --+++ ('M', '.') --+++ ('M', '.') | --+++ ('M', '.') Done, exiting... | ----- ('', '') | ----- ('', '') | Automatically decoded: OH, HI MARK!.. 

Teks diterjemahkan secara otomatis, tetapi penggemar yang mencari kesalahan dengan tangan, membaca saat bepergian dan melacak kemajuan dapat melakukan ini semua dengan menggunakan output dari kode yang dikirim dan diterima.


Jika ada yang mau, Anda juga dapat menggunakan API sederhana yang disediakan:


 from covertele import TelegramBlockingAPI from cochannel import CovertChannel friend = input("     :") #           #  ,     -,      id = input("  :") api = TelegramBlockingAPI(id) #        friend = input("Enter your friend's id:") channel = CovertChannel(api, friend) #    channel.receive()  channel.send()     channel.send("Bork, bork!") print(channel.receive) #       ,       _raw codes = channel.receive_raw() for code in codes: check(code) channel.send_raw([19, 24, 24, 13]) 

Di luar Telegram


Jelas bahwa saluran semacam itu dapat diatur di atas messenger mana pun di mana ada metode untuk menentukan apakah pengguna lain memblokir diri mereka sendiri. Pada saat yang sama, antarmuka yang sama mudah diimplementasikan dan diganti dengan cara yang sama ke dalam kode. Jadi jika ada keinginan - Anda dapat menggunakan pengkodean yang sudah jadi, dan tidak menulis, dll. Dari awal. Untungnya, python lambat tidak mungkin mengganggu transmisi bit-wise dengan kecepatan seperti itu.


Terima kasih khusus PS atas hasrat saya untuk cinta melemparkan saya dalam keadaan darurat.


Source: https://habr.com/ru/post/id451954/


All Articles