Kami dulu menganggap Telegram sebagai media transmisi yang andal dan aman untuk pesan apa pun. Tetapi di bawah tenda, itu memiliki kombinasi yang agak umum dari enkripsi a- dan simetris. Di mana kesenangan itu? Lagi pula, mengapa ada orang yang mempercayai pesan mereka kepada pihak ketiga?

TL; DR - menciptakan saluran rahasia pribadi di atas pengguna yang saling memblokir.
Saluran rahasia
Ada banyak solusi untuk mengirimkan data antara dua pengguna yang menghindari kontak langsung. Anda dapat menggunakan perantara, metode kripto dan steganografi, jaringan relai penyiaran, dan ekstensi lain dari protokol yang ada. Tetapi kadang-kadang berguna untuk membuat kontak aman hanya menggunakan fitur yang didokumentasikan secara resmi. Atau seperti yang seharusnya dikatakan, atur saluran rahasia .
Kita dapat melihat contohnya di film mata-mata Soviet "Seventeen Moments of Spring" (yang ini, seperti, sangat bagus, coba tonton). Di dalamnya, bunga di jendela rumah persembunyian itu digunakan untuk memberi sinyal jika mata-mata itu gagal misinya atau tidak. Bunga itu sendiri tidak berarti apa-apa: itu bisa ada di sana dan bisa juga tidak, simbiosis semacam itu adalah hal yang umum dan hanya memberi tahu kita tentang cinta pemilik terhadap bunga. Hanya interpretasi yang telah ditentukan membedakan informasi yang diterima oleh seorang mata-mata dari yang diterima oleh pejalan kaki acak.

Saluran berbasis In-Window Flower di Telegram
Untuk mengatur saluran rahasia Anda sendiri dengan prinsip yang sama, Anda hanya perlu dua hal: jendela dan bunga. Jendela tersebut merepresentasikan objek yang dapat Anda ubah keadaan dilihat oleh orang lain dan keadaan kemungkinan bunga dan cara mengubahnya.
Jadi, apa yang bisa diubah Alice di Telegram yang bisa dilihat Bob? Banyak hal, sebenarnya: avatar, nama pengguna, waktu kunjungan terakhir dan banyak lagi. Tetapi biasanya, hal-hal ini tersedia untuk semua orang pada saat yang sama, membatasi privasi dialog - jika seseorang memiliki metode transisi, ia dapat membaca apa pun yang dikirimkan Alice. Yang mengejutkan, adalah mungkin untuk mengatasi batasan ini tanpa melibatkan jenis enkripsi apa pun.
Aku memblokirmu, haha
Setiap pengguna memiliki daftar hitamnya sendiri, dan jika pembaca itu cukup menjengkelkan, ia seharusnya memperhatikan setelah diblokir bahwa statusnya yang 'terakhir dikunjungi' belum berubah menjadi 'terakhir dilihat sejak lama'. Yang benar adalah, dia bisa online beberapa detik yang lalu atau bahkan sekarang, tetapi API Telegram tidak akan mengirim informasi ini ke aplikasi Anda lagi. Dengan begitu, ia melindungi privasi pengguna lain dari yang tidak diinginkan. Sebagai gantinya, mereka dapat melihat apakah mereka masuk daftar hitam atau tidak.
Jadi, apa yang sama dengan bunga dan terhalang? Keduanya dapat diperiksa pada saat tertentu, memungkinkan untuk menerima sedikit informasi tergantung pada apakah Anda diblokir atau tidak. Keuntungan lain adalah fakta bahwa Telegram mungkin tidak menyimpan log pengguna yang saling menghalangi (paling banyak untuk jangka waktu pendek dalam tujuan penjurnalan).
Pengorganisasian bit
Kemungkinan untuk mengirim dan menerima bit itu menyenangkan dan semuanya, tetapi kita masih perlu menjelaskan mekanisme eksploitasinya. Telegram menolak untuk memperhatikan Anda ketika diblokir, sehingga setiap tindakan 'terima bit' harus diinisialisasi oleh penerima (sebut saja dia Bob) dan tidak bergantung pada pengirim (dan dia akan menjadi Alice), yaitu dengan independen. Ini juga mengikuti bahwa Alice dan Bob harus melakukan permintaan pada frekuensi yang sama.
Algoritma pertukaran bit pada setiap jam terlihat seperti ini:
- Cek yang mengirimkan sedikit dan jika berbeda dari nilai sebelumnya mengubahnya tergantung pada nilai:
- A -> T: blok B jika bit adalah 1;
- A -> T: buka blokir B jika bit adalah 0.
- B menerima sedikit:
- B -> T: menyelesaikan A;
- T -> B: tersedia untuk informasi B tentang A;
- B: memeriksa apakah informasi yang diterima memiliki status:
- B: jika -> dia tidak diblokir dan bitnya 0
- B: jika tidak -> dia diblokir dan bitnya 1
Sebagian besar PC modern memiliki generator frekuensi yang baik (jam sistem, misalnya) sehingga kami dapat menyinkronkan jam kami dengan mereka tanpa menggunakan saluran untuk mengirimkan apa pun kecuali bit pesan. Yang patut diperhatikan adalah permintaan API Telegram, baik pemblokiran (tidak) dan penyelesaian status pengguna, adalah panggilan jaringan dan cenderung tidak berfungsi dengan cepat, terutama jika Anda menggunakan proxy atau VPN. Ini menghasilkan batasan: panjang jam harus lebih lama, daripada waktu respons rata-rata (karena kita perlu menyesuaikan satu dengan yang lain) dan itulah mengapa kecepatan transmisi data kita akan terbatas.
Menyandikan pesan
Teks dalam bahasa alami memiliki redundansi yang cukup tinggi, dan pesan yang diterima dengan kesalahan sebagian besar masih dapat dibaca oleh manusia. Dan karena Telegram adalah pembawa pesan (mengabaikan beberapa hal gila ), kita dapat mengabaikan koreksi kesalahan yang membatasi kemungkinan pengiriman data ke pesan teks sederhana.
Saluran kami memiliki bandwidth yang sangat rendah, jadi mengapa kami perlu menggunakan pengkodean pesan paling efektif yang tersedia untuk pesan yang mungkin. Beruntung kami, nama utusan itu mengingatkan tentang kali masalah seperti itu biasa terjadi.
Itu sebabnya kita, yang hidup di abad ke-21, akan menyandikan teks kita dengan salah satu penyandian paling efisien yang tersedia untuk penyandian seratus tahun yang lalu - kode Baudot . Lebih tepatnya, variasi terakhir ITA-2 yang dibuat oleh Donald Murray untuk melakukan lebih sedikit panggilan API pada simbol bahasa yang paling sering.
Satu-satunya yang tersisa untuk berhasil mengirimkan pesan adalah menemukan batas-batas sesi transmisi sehingga penerima dapat menemukan yang terkirim di antara aliran bit kontinu. Sebelum transmisi dimulai, Bob diblokir atau tidak, dan kondisinya tidak berubah dengan sendirinya dalam waktu dekat. Itu sebabnya Alice dapat memberi sinyal tentang awal sesi dengan menukarnya dengan berlawanan hanya untuk satu jam. Di akhir sesi yang sukses, dia akan membuka blokirnya dan pergi dengan damai. Dia, di sisi lain, akan terus menerima nol bit sampai memutuskan mereka bukan bagian dari pesan - kode Baudot tidak memiliki simbol 00000
.

Kerugian dari metode ini adalah ketidakmungkinan praktis untuk terhubung (Anda bisa, tetapi kemungkinan akan membutuhkan koreksi kesalahan manual karena pergeseran bit) untuk terjemahan yang sedang berlangsung dan kebutuhan untuk memisahkan simbol nol yang diterima dengan kesalahan dari yang telah dikirim. Namun ada semua masalah implementasi.
Teknologi tinggi
Setelah menghabiskan beberapa jam mencoba menggunakan perpustakaan resmi untuk menggunakan API, saya lelah dan menulis semuanya dengan Python menggunakan perpustakaan Telethon yang lebih ramah manusia. Ia bahkan memiliki API gaya sinkron untuk beberapa alasan aneh yang jarang terjadi saat ini. Pengkodean pesan dengan ITA-2 yang saya tulis sendiri karena tidak menemukan sesuatu yang berguna di Internet.
Sinkronisasi jam dibuat dengan jam sistem (dan ya, itu sleep () s! Di antara) karena itu cukup tepat mengingat waktu yang dibutuhkan pada setiap panggilan jaringan API lebih dari sepersepuluh detik dalam kebanyakan kasus. Pengguna dapat mengatur kecepatan transmisi sesuai keinginannya, tetapi saya sarankan untuk mengikuti aturan 'tidak lebih dari permintaan per detik' jika Anda tidak ingin keduanya melihat kesalahan di sisi lain dan menemukan diri Anda dilarang oleh sistem pencegahan banjir. Telegram ternyata sangat pilih-pilih tentang penggunaan API, membekukan akses saya selama sehari bahkan dari beberapa upaya otorisasi sederhana (berhasil!) Berturut-turut dan hanya memblokir secara acak untuk banjir selama transmisi untuk alasan yang tidak diketahui. Anda harus selalu menyatakan batas penggunaan API Anda, kawan.
Jika pengguna memutuskan untuk menggunakan saluran aneh untuk bertukar pesan, ia tidak perlu peduli dengan fitur antarmuka pengguna grafis. Dan tidak semua sistem memilikinya, itu sebabnya saya menulis aplikasi saya dalam bentuk alat terminal. Hal ini memungkinkan untuk mengirim dan menerima pesan melalui saluran dengan id pengguna argumen-baris perintah yang diberikan, tetapi hanya satu operasi per peluncuran. Tentu saja, tidak ada yang akan membatasi Anda untuk hanya menjalankan satu salinan program sekaligus dan menggunakan beberapa saluran secara bersamaan dalam kedua cara, Anda hanya perlu menjalankan beberapa salinan skrip yang sama dengan parameter yang berbeda.
Menggunakan barang-barang
Anda dapat membaca lebih lanjut tentang menggunakan hal ini sebagai utilitas baris perintah dan pustaka python3 melalui API di GitHub (repositori yang ditautkan di akhir). Satu-satunya masalah adalah untuk memperoleh kredensial API Anda sendiri ( manual sederhana cukup membantu) karena Telegram tidak mengizinkan untuk mengungkapkan tambang dan mengatur sesuai dengan nilai-nilai dalam salinan skrip lokal Anda. Semuanya melewati argumen baris perintah kecuali untuk bagian otorisasi yang secara default dibuat melalui stdio) dan terlihat seperti ini:
For Alice: For Bob: 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!..
Pesan yang diterima diterjemahkan secara otomatis, tetapi jika Anda ingin memperbaiki beberapa kesalahan secara manual atau melacak kemajuan dapat melakukannya dengan melihat output baris perintah.
Di luar telegram
Patut diperhatikan bahwa saluran tersebut dapat diimplementasikan melalui messenger dan / atau jejaring sosial tempat seseorang dapat mendeteksi apakah diblokir atau tidak oleh pengguna lain. Antarmuka yang serupa dapat dengan mudah diganti dalam kode yang ada, jadi jika Anda ingin melakukannya, cukup gunakan pekerjaan dasar saya. Kinerja python yang rendah (dibandingkan dengan yang biasa untuk hal-hal seperti C / ++) tidak akan menjadi faktor pembatas karena kecepatan transmisi yang rendah dan API memanggil waktu respons.
Terima kasih khusus untuk cinta saya yang menggelora karena menghalangi saya