Torfon - aplikasi mobile untuk telepon anonim

gambar


Hari ini saya ingin berbicara tentang hasil penelitian tujuh tahun saya di bidang transmisi suara melalui jaringan Tor. Secara umum diterima bahwa komunikasi suara melalui Tor hampir tidak mungkin:

  • protokol transport yang ada untuk pekerjaan telepon di atas UDP, dan Tor hanya menyediakan koneksi TCP;
  • Tor merutekan paket melalui beberapa node, mengenkripsi data, yang menyebabkan latensi yang signifikan dan membuat telepon dupleks mustahil atau sangat tidak nyaman.

Tapi benarkah begitu?

Kembali pada tahun 2012, saya pertama kali berpikir tentang kemungkinan mendasar untuk menerapkan komunikasi telepon anonim menggunakan anonimizers Tor dan i2p. Reaksi komunitas itu jelas negatif, termasuk Phil Zimmermann sendiri, penulis PGPFone yang terkenal, atas dasar yang digunakan Torfon pertama. Tetapi saya keras kepala, menguji ide-ide baru, menguji dan meningkatkan trik yang ditemukan, terutama bertujuan mengurangi latensi ke tingkat yang dapat diterima. Peneliti lain juga bekerja ke arah ini, dan publikasi mereka memberi saya ide-ide baru dan dasar untuk pekerjaan lebih lanjut. Aspek positifnya adalah akselerasi signifikan dari jaringan Internet global dan khususnya jaringan Tor, serta penyapihan bertahap pengguna dari PSTN yang mendukung komunikasi GSM dengan latensi signifikan yang melekat. Akhirnya, konsep yang cocok dikembangkan, dan giliran untuk mengimplementasikan rencana.
Pada 2013, Roger Dingledine dalam korespondensi pribadi sangat mengkritik proyek karena kurangnya lintas-platformness (pada saat itu PGPFone digunakan sebagai basis pada platform Windows) dan untuk arsitektur non-modular. Terhadap latar belakang kritik ini, fondasi diletakkan untuk implementasi Torfon modern, dengan mempertimbangkan banyak trial and error, serta tren modern dalam kriptografi.

Saat ini, Torfon terdiri dari empat modul perangkat lunak yang berinteraksi satu sama lain menggunakan paket 36-byte dengan bidang yang benar-benar diperbaiki. Ini adalah modul transportasi yang menyediakan pekerjaan dengan soket, modul kriptografi dan suara, modul penyimpanan (melakukan operasi dengan kunci pribadi dan berisi buku alamat terenkripsi), dan modul antarmuka pengguna. Mereka dapat dijalankan pada platform perangkat keras yang sama (dalam satu atau dalam aliran berbeda) atau pada beberapa platform terisolasi menggunakan protokol serial standar (perangkat keras UART, USB CSD atau Bluetooth SPP) sebagai antarmuka. Arsitektur ini memungkinkan pengembang untuk menentukan kompromi antara keamanan dan kemudahan implementasi. Opsi tersedia dari aplikasi Windows yang berdiri sendiri ke implementasi perangkat keras dalam bentuk papan tunggal dengan Linux untuk Tor dan modul transportasi bersama dengan mikrokontroler Cortex M4 terisolasi yang mengenkripsi, sepenuhnya memproses dan memutar audio, menyimpan kunci pribadi dan kontak, dan antarmuka pengguna grafis diimplementasikan.

Kode sumber modul ditulis dalam C dan sepenuhnya lintas-platform, dengan pengecualian pekerjaan tingkat rendah dengan audio, dibuat dalam file terpisah khusus untuk Windows (Wave), Linux (Alsa), Android (OpenSL) dan bare metal (ADC / DAC + DMA untuk mikrokontroler )
Ketika memilih codec audio dan antrian, fitur jaringan Tor dipertimbangkan: penundaan berkala yang sering terjadi, sedikit penurunan latensi untuk paket dalam rentang panjang tertentu, kemampuan untuk membuat rantai rangkap dengan jalur rute yang berbeda selama panggilan, dll. Proyek perantara OnionPhone termasuk 17 dari codec audio bitrate rendah yang paling umum. Setelah pengujian yang cermat, opsi yang paling cocok dipilih: AMR dengan bitrate minimum 4750 bps dan VAD kecepatan tinggi. Dengan demikian, dengan mempertimbangkan jeda alami antara kata-kata dan sifat komunikasi dupleks, total bit rate rata-rata di setiap arah adalah sekitar 2000-3000 bps., Yang memungkinkan untuk menggunakan GPRS bahkan dalam kondisi jangkauan GSM yang buruk dan hilangnya paket GSM yang sangat besar.

Algoritme NPP7 yang efektif dikembangkan sebagai penekan derau, yang dikembangkan untuk memerangi derau audio yang intens dan merupakan bagian dari codec MELPe, standar komunikasi militer terkini STANAG-4591. Algoritma pembatalan gema dipilih dari proyek WebRTC sebagai solusi terbuka paling efektif yang tersedia.

Fungsi umum Torfon dikembangkan dengan mempertimbangkan kemungkinan kasus penggunaan dan model ancaman yang sudah ada yang digunakan terhadap pesan instan populer.

Mode operasi dasar:

  1. Panggilan suara anonim ke layanan tersembunyi Tor (di alamat bawang). Panggilan ini dilindungi sebanyak mungkin, tetapi ada beberapa penundaan, yang dapat menyebabkan beberapa ketidaknyamanan bagi pengguna yang tidak terbiasa.
  2. Beralih ke koneksi UDP langsung (dengan NAT pass) setelah mengatur koneksi Tor. Kunci enkripsi sesi dinegosiasikan dalam Tor memberikan privasi yang kuat, tetapi anonimitas hilang (pengguna mengungkapkan alamat IP mereka satu sama lain).
  3. Panggilan langsung ke alamat IP yang ditentukan (atau nama domain) dan nomor port TCP. Untuk menerima panggilan seperti itu, Anda memerlukan alamat IP "putih" (dapat dirutekan) pada perangkat (banyak operator seluler menawarkan ini sebagai layanan berbayar) atau penerusan port TCP yang digunakan pada router lokal (misalnya, dalam jaringan WiFi rumah). Panggilan langsung dapat dilakukan di jaringan area lokal yang terisolasi (misalnya, jaringan WiFi lokal dibuat menggunakan titik akses yang kuat yang dipasang di pusat area layanan). Dalam hal ini, Torfon tidak memerlukan interaksi dengan Internet: proyek tidak memiliki server sendiri, yang merupakan titik kegagalan potensial, serangan dan pengumpulan metadata. Dengan demikian, Torfon dapat berhasil bekerja bahkan dengan isolasi lengkap dari segmen jaringan atau seluruh Runet di tingkat negara.

Saat ini, cukup sering pertanyaan kepercayaan pada Tor diajukan baik dalam hal mempertahankan anonimitas dan dalam hal kerahasiaan data yang dikirimkan. TorChat messenger terkenal tidak menggunakan enkripsi dan otentikasi, sepenuhnya bergantung pada layanan yang disediakan oleh Tor. Secara pribadi, saya percaya Tor, setidaknya dalam hal privasi dan kerahasiaan mundur sempurna. Tetapi, sayangnya, posisi ini dibayangi oleh penemuan kerentanan global SPECTER / MELTDOWN, serta massa kerentanan zero-day untuk semua sistem operasi yang dikenal yang praktis digunakan sebagai alat kerja di gudang layanan khusus apa pun. Oleh karena itu, saya tidak dapat mengikuti jalur TorChat dan menambahkan lapisan enkripsi dan otentikasi saya sendiri ke Torfon, menggunakan protokol paling modern dan primitif kriptografi yang terbukti kuat.

Konsep ini didasarkan pada kemampuan untuk melakukan panggilan antara pelanggan yang tidak dikenal, dan kemudian secara otomatis bertukar kunci publik mereka untuk otentikasi bersama dalam sesi komunikasi berikutnya. Pendekatan ini memberikan penolakan tertentu dalam hal keberadaan kunci yang berkompromi dalam daftar kontak Anda: pelanggan mana pun, mengetahui alamat bawang Anda, dapat membuat panggilan anonim dan segera meneruskan Anda kontak dari buku alamatnya. Kontak ini akan secara otomatis ditambahkan ke buku alamat Anda. Namun, fitur ini dapat dinonaktifkan di pengaturan, tetapi siapa yang tahu jika Anda telah dihidupkan sebelumnya?

Perhatian khusus diberikan pada perlindungan pengidentifikasi pelanggan. Jadi, penelepon tahu siapa yang dia panggil dan harus memberi tahu ID (kunci) nya. Tapi hanya dia dan tidak ada orang lain! Selain itu, jika koneksi dicegat, termasuk oleh penyerang aktif, dan kemudian semua kunci pribadi peserta diungkapkan, tidak ada cara untuk menetapkan (atau memilih dari daftar yang diketahui) pengidentifikasi peserta dalam setiap sampel atau sesi dicegat di masa lalu. Dengan kata lain, perlindungan ID panggilan dan memanggil pelanggan dengan kerahasiaan sempurna sempurna (PFS). Ini dicapai dengan memodifikasi protokol Triple-DH (Diffie-Hellman triple, yang juga digunakan dalam Signal) dengan menambahkan protokol SPEKE paralel, yang memberikan nol pengungkapan sehubungan dengan autentikator eksplisit yang dipertukarkan antara para pihak selama pertukaran kunci awal.

Protokol yang digunakan di Torfon memiliki properti Deniability, ketika setelah sesi komunikasi selesai pihak jahat tidak dapat meyakinkan hakim bahwa kontak tersebut benar-benar terjadi. Penyangkalan ke depan juga diberikan ketika pihak jahat setuju sebelumnya dengan hakim bahwa ia akan melakukan sesi dan, setelah sesi selesai, mencoba membuktikan bahwa itu terjadi. Deniability penuh (Deniability penuh, ketika pihak jahat melakukan kontak dengan hakim selama sesi komunikasi), bersaing dengan properti penting seperti KCI - stabilitas (ketidakmampuan untuk memperkenalkan diri kepada pelanggan lain yang kunci privasinya diketahui). Berdasarkan kenyataan praktis, preferensi itu mendukung stabilitas KCI, sebagai properti yang lebih praktis, terutama dalam kondisi hubungan non-hukum.

Dari kemampuan tambahan untuk saling mengotentikasi pada kontak pertama (untuk menjamin keaslian pertukaran kunci), dua protokol diimplementasikan:

  • Perbandingan sidik jari pendek dari rahasia bersama (SAS, mirip dengan protokol ZRTP). Untuk memblokir serangan sidik jari singkat selama proses MitM, komit dalam prosedur Diffie-Hellman digunakan. Selain itu, sidik jari rahasia bersama secara otomatis termasuk dalam nama kontak yang diterima dalam sesi ini. Dengan demikian, ketika bertukar kontak selama satu sesi, awal nama kontak baru harus sama untuk kedua peserta, yang dapat diperiksa kemudian, misalnya, secara langsung. Dan omong-omong, kontak yang diterima harus diganti namanya agar Torfon dapat mewakili dirinya sendiri (ID-nya) untuk kontak ini.
  • Perbandingan rahasia yang sebelumnya disepakati (kata-kata, frasa). Dalam OTR, protokol Sosialis-Jutawan melakukan fungsi yang sama. Gambut menggunakan protokol SPEKE yang sama dalam hal properti (tanpa pengungkapan nol).

Dalam hal kedua peserta sesi memiliki kontak (kunci publik) satu sama lain, jika otentikasi berhasil dan Tor (panggilan ke alamat bawang) digunakan, pihak penerima membuat panggilan balik menggunakan alamat bawang dari pihak yang menelepon dari buku alamatnya. Setelah koneksi dibuat, otentikasi timbal balik dilakukan pada saluran kedua, mengkonfirmasi alamat bawang si penelepon. Prosedur serupa digunakan oleh TorChat untuk mengotentikasi obrolan, menggunakan alamat bawang dari kontak sebagai ID.

Sambungan Parallel Tor terdiri dari rantai lain, yang secara menguntungkan digunakan untuk mengkompensasi keterlambatan spontan: paket suara dikirim ke kedua saluran sekaligus, paket yang diterima sebelumnya digunakan. Selain itu, statistik tentang penundaan di kedua saluran disimpan, dan jika salah satu saluran jauh lebih lambat, secara berkala terhubung kembali selama percakapan. Ini mengurangi latensi keseluruhan panggilan terotentikasi dibandingkan dengan panggilan dari pelanggan yang tidak dikenal.

Seperti yang ditunjukkan oleh praktik sedih, hari ini sangat penting untuk mengajarkan aplikasi untuk mempertahankan diri dari kemungkinan kunci. Untungnya, Torfon tidak memiliki server atau cloud sendiri, menggunakan Tor sebagai gantinya. Oleh karena itu, memblokir Torfon hanya dimungkinkan dengan mengunci Tor. Tapi hari ini juga merupakan kenyataan, dan dalam hal ini hanya akan ada kemungkinan melakukan panggilan langsung ke alamat IP dan port TCP. Dalam skenario yang paling pesimistis, kakak akan mencoba untuk mengajarkan sistem DPI (analisis paket mendalam) untuk mendeteksi lalu lintas antara dua Torfon dalam jaringan p2p yang dikendalikan. Oleh karena itu, langkah-langkah tambahan diambil untuk memaksimalkan penyembunyian lalu lintas tersebut. Pertama, port mendengarkan TCP dapat dipilih secara manual dan sebenarnya merupakan bagian dari alamat pelanggan. Kedua, benar-benar semua paket (termasuk audio) selama sesi komunikasi (sesi TCP) tidak memiliki fitur khusus (bidang konstan atau tambahan, panjang, dll.) Dan terlihat seperti data acak dengan panjang acak ke pengamat eksternal . Ketiga, untuk melakukan sampel aktif protokol, "Bukti Pekerjaan" diperlukan sebagai perlindungan terhadap pemindaian besar-besaran alamat dan port untuk mendeteksi Gambut.

Bahkan, koneksi dibuat oleh dua koneksi TCP berturut-turut. Selama koneksi pertama, para pihak bertukar kunci sesi utama dalam bentuk titik pada kurva elips X25519, melakukan protokol Diffie-Hellman biasa. Karena format Montgomery dari representasi titik bukan angka acak, representasi Elligator2, ditambah dengan byte acak, digunakan. Setelah menghapus rahasia bersama, sesi pertama rusak, dan setelah periode waktu acak (beberapa detik), sesi kedua dibuat, semua data yang dienkripsi dengan kunci yang berasal dari rahasia bersama. Kunci sesi baru dihasilkan, dan protokol Diffie-Hellman dieksekusi lagi, sekarang dengan komentar. Kunci simetris untuk enkripsi dan dekripsi berasal dari rahasia yang diperoleh. Protokol triple Diffie-Hellman kemudian dijalankan secara paralel dengan protokol SPEKE untuk melindungi ID penelepon dan otentikasi. Dengan tidak adanya kunci dalam buku alamat (kontak yang tidak diketahui) atau perbedaan apa pun, semua pesan diganti dengan byte acak., Yaitu. protokol tidak terputus untuk mencegah kebocoran informasi identitas peserta.

Untuk implementasi protokol-protokol ini, kode C primitif kriptografi yang diverifikasi dengan hati-hati digunakan, diambil dari perpustakaan kriptografi yang terkenal. Untuk verifikasi pada tahap pengembangan, vektor uji yang terkenal digunakan, dan setelah setiap peluncuran aplikasi, verifikasi tambahan untuk implementasi spesifik dari kode yang dapat dieksekusi (hasil kompilasi) dilakukan.

Untuk lapisan kebingungan, algoritma Serpent-128 simetris dipilih, beroperasi dalam mode enkripsi OCB terotentikasi. Untuk lapisan dasar enkripsi simetris, transformasi Keccak-800 sebagai fungsi Shake-128 dan penghitung paket CTR searah digunakan. Primitif yang sama digunakan sebagai Hash, MAC dan PKDF. Algoritma ChaCha20 digunakan untuk mengenkripsi buku alamat dan generator nomor acak semu. Generator adalah penduduk pada awal setiap sesi, untuk akumulasi entropi dalam sistem operasi multitask, algoritma Hasge digunakan, dan dalam mikrokontroler, bit paling tidak signifikan dari hasil ADC, yang mengukur kebisingan pembagi resistif. Entropi diakumulasikan ke jumlah yang diperlukan, diperkirakan dengan menggunakan uji frekuensi kelompok.

Primitif kriptografi utama (matematika dasar untuk X25519, Keccak800, ChaCha20) menggunakan implementasi assembler yang dioptimalkan oleh kompiler untuk platform mikrokontroler (Cortex M1 dan M4), dengan hati-hati diuji untuk waktu eksekusi yang konstan dan dengan kebocoran minimal melalui saluran samping radiasi elektromagnetik dan fluktuasi konsumsi saat ini. Saya harus mengatakan segera - kode assembler ini diterima dari para profesional terkenal di dunia, saya baru saja memindahkannya dari GNU ASM ke lingkungan Keil, yang lebih akrab untuk membangun proyek-proyek tertanam.

Nah, akhirnya apa?

Jika Anda membaca sampai tempat ini dan tidak mati karena bosan, itu berarti proyek ini benar-benar dapat bermanfaat bagi Anda. Jika demikian, maka, atas permintaan melalui surat, saya senang untuk menyediakan majelis uji (file yang dapat dieksekusi yang terhubung secara statis, tidak diperlukan instalasi), serta kode sumber untuk antarmuka grafis untuk Windows, Linux, dan Android di lingkungan pengembangan masing-masing. Inti dari proyek ini didasarkan pada perpustakaan torfone lintas-platform, tersedia pada pencarian github. Di sana Anda juga dapat menemukan tautan langsung ke versi alpha dari aplikasi Android dan panduan singkat untuk pemasangan dan penggunaannya, yang akan membantu semua orang untuk mengevaluasi latensi telepon di jaringan Tor.

Antarmuka grafis diimplementasikan secara terpisah untuk setiap platform dan bukan merupakan opsi (sejauh ini ini hanya pengujian alpha). Aplikasi uji untuk semua versi Windows (mulai dari Windows 98 kuno) dijalankan di Borland C ++ Builder 6. yang lama tapi kuat. Untuk Linux, aplikasi GUI dikembangkan menggunakan Wide Studio yang dilupakan untuk grafis X11 secara terpisah untuk arsitektur i386 dan ARM. Yang pertama harus bekerja pada desktop 32-bit dan 64-bit, yang kedua - pada komputer papan tunggal murah: RPi, Orange, Nano, dll. Untuk Android, file apk dikompilasi dalam Embarcadero RAD Studio 10.2. Ini jauh dari pilihan terbaik dan masih tidak tahu cara membuat layanan Foreground, tetapi, bagaimanapun, ia bekerja secara stabil di Background dengan optimalisasi penggunaan baterai dinonaktifkan. Selain itu, lingkungan Android mendukung pencadangan otomatis file konfigurasi, kunci, dan buku alamat (dalam bentuk terenkripsi) ke penyimpanan dan pemulihan eksternal ketika menginstal ulang Torfon atau mentransfernya ke perangkat lain. Pada saat penulisan, pekerjaan sedang berlangsung pada sebuah proyek di lingkungan Keil uVision, yang mencakup transportasi, modul enkripsi, antarmuka audio dan grafis berdasarkan Arduino - tampilan 320 * 240 TFT + Touch + yang kompatibel. NanoPi Neo dengan server Debian yang terinstal dan papan Nucleo STM32F446RE yang terhubung melalui UART fisik akan digunakan sebagai platform perangkat keras terbuka.Dalam rencana jangka panjang - porting ke iOS, meskipun saya tidak mengerti bagaimana ini dapat dikombinasikan dengan jaminan keamanan dasar.

Dan sebagai kesimpulan.

Saya sering ditanya pertanyaan yang sama: bagaimana saya bisa mengelola pengguna tanpa server pusat? Bagaimana cara membuang pembaruan, iklan? Dan, yang paling penting, mengapa saya membutuhkan semua ini jika tidak ada nilai komersial dalam hal ini?

Faktanya, dunia tidak begitu kelabu dan hancur. Dan ada banyak nilai yang tidak bisa diukur dengan uang. Tetapi jawaban untuk dua pertanyaan pertama - tidak mungkin. Nah, Anda tidak bisa menghentikan Turfon. Anda tidak bisa mendapatkan "kunci" darinya, Anda tidak bisa menggabungkan tindakan pengguna, bahkan mereka yang telah diketahui dalam terorisme atau pedofilia, Anda tidak dapat melarang orang yang tidak diinginkan. Anda tidak dapat memaksa pembaruan. Anda tidak dapat mengontrol dari luar. Tidak ada kebocoran, senyawa samping di Torfon, kecuali sebagaimana ditentukan oleh protokol. Ini dapat dengan mudah diperiksa baik dalam kode (hampir setiap baris dikomentari dan tidak ada banyak file dalam proyek), serta penganalisa jaringan. Karena itu, tidak ada yang akan dapat mengelola pengguna Torfon. Tapi ingat: Turfon hanya alat, dan semua tindakan Anda adalah hati nurani Anda, dan Anda bertanggung jawab untuk itu, bukan penulis proyek.

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


All Articles