Enkripsi, tanda tangan digital, perlindungan data adalah istilah yang cukup umum di kalangan profesional TI.
Sudah banyak publikasi, artikel, dan buku menarik tentang topik ini. Setelah membaca salah satunya, saya memutuskan untuk mencoba tangan saya di tempat latihan. Maka lahirlah proyek, yang akan dibahas di bawah ini.
Aplikasi Singkat
Aplikasi SecureDialogues menambahkan tingkat enkripsi ke pesan yang dikirim melalui layanan seperti Gmail . Aplikasi itu sendiri melakukan otorisasi untuk layanan yang dikonfigurasi menggunakan protokol OAuth2 , menerima dan mengirim pesan. Pada intinya, itu adalah messenger biasa yang menyediakan perlindungan kriptografi untuk pesan, kecuali salah satu dari beberapa layanan pihak ketiga dapat digunakan untuk transfer.
Data pada hard disk dienkripsi menggunakan algoritma AES dengan kunci 256- bit, yang diekstrak dari kata sandi yang dimasukkan saat startup, RSA digunakan untuk tanda tangan digital. Pesan pengguna dikodekan dengan kunci sesi AES 256- bit.
Kode sumber tersedia di tautan , proyek wiki .
Peluncuran aplikasi dalam wadah buruh pelabuhan tersedia, lebih lanjut di tautan .
Tujuan penciptaan
Aplikasi ini dibuat untuk tujuan yang sangat spesifik - menarik bagi saya untuk bekerja dengan kriptografi pada proyek praktis. Dan tidak dalam beberapa yang sederhana, seperti "memasukkan teks di sini, tetapi di sini mengambil pesan yang disandikan", tetapi sedemikian rupa sehingga ada tanda tangan digital , dan enkripsi asimetris , dan kunci sesi dan hal-hal menarik lainnya. Karena itu, proyek utusan dipilih.
Dengan tidak adanya semua infrastruktur yang diperlukan untuk mengirim pesan, fungsi ini didelegasikan ke layanan yang ada seperti Gmail atau VKontakte .
Deskripsi Antarmuka
Ketika Anda pertama kali memulai aplikasi akan meminta Anda untuk memasukkan kata sandi:

Kata sandi ini digunakan untuk mengenkripsi data yang tersimpan di hard drive, seperti: kunci RSA , token otorisasi untuk OAuth2 , data layanan dan kontak.
Pesan dan informasi tentang dialog tidak disimpan , yaitu, di akhir aplikasi, data tentang pesan yang diterima dan dialog terbuka hilang.
Pada peluncuran berikutnya, aplikasi juga meminta kata sandi untuk mendekripsi dan mengunduh data yang disimpan sebelumnya.
Tampilan jendela aplikasi utama:

Sebelum Anda dapat mengirim pesan pertama, Anda harus menyelesaikan dua langkah:
Yang paling penting, karena kontak ditambahkan sebelum dimulainya pertukaran, adalah kunci publik . Setiap pesan yang dikirim antar pengguna harus ditandatangani oleh pengirim. Jika penerima tidak dapat memverifikasi tanda tangan digital menggunakan kunci publik, maka pesan seperti itu akan dibuang.
Juga, kunci publik digunakan untuk mengenkripsi kunci sesi.
Setelah semua langkah awal selesai, Anda dapat memulai dialog. Untuk melakukan ini, ada tombol yang sesuai di jendela aplikasi utama ( lebih lanjut tentang wiki ). Saat membuat percakapan, kunci sesi dihasilkan yang akan mengenkripsi semua pesan dalam percakapan ini.
Semua dialog ditampilkan di jendela utama di sebelah kiri. Setelah teman bicara Anda mengonfirmasi pembuatan dialog, Anda dapat mengirim dan menerima pesan di dalamnya:

Untuk mengirim atau membaca pesan dalam dialog yang diinginkan, Anda harus memilihnya dengan mengklik tombol kiri mouse.
Pesan dari pengguna jarak jauh ditampilkan di sebelah kiri, dan milik Anda di sebelah kanan. Jika pesan belum terkirim, pesan itu ditampilkan dalam warna abu-abu:

Aplikasi mengurutkan daftar dialog dalam urutan berikut - di bagian paling atas akan ada dialog aktif yang memungkinkan pengiriman pesan, dan di bagian paling bawah akan ada yang tertutup. Juga, urutan dipengaruhi oleh waktu dialog berubah. Dialog aktif yang pesan terakhir diterima akan di atas segalanya, dan yang ditutup pertama akan di bagian bawah. Untuk setiap dialog, indikator jumlah pesan yang belum dibaca ditampilkan, jika ada:

Status dialog disorot dalam warna:
- dialog tertutup berwarna merah
- dialog aktif ditampilkan dalam warna hijau , dimungkinkan bagi mereka untuk mengirim pesan
- dialog abu-abu sedang dibuat.
Berikut adalah contoh dari apa yang tampak seperti pesan sederhana dengan teks dunia hellow! :

Pertukaran sinyal
Pertukaran pesan antara lawan bicara A dan B terdiri dari langkah-langkah berikut:
- party A menghasilkan perintah untuk membuat dialog (
CREATE_DIALOG
) dan menandatanganinya dengan kunci privatnya; - pihak B meminta persetujuan pengguna untuk membuat dialog, dan jika pengguna setuju, kunci sesi T dan string acak R dihasilkan, yang dienkripsi secara individual dengan kunci publik A dan ditempatkan di badan pesan (
VERIFY_KEY
). Seluruh pesan ditandatangani dengan kunci pribadi B. - side A mendekripsi kunci sesi dan string acak, mengenkripsi string acak dengan kunci sesi, menambahkan hasilnya ke
KEY_VERIFICATION
pesan KEY_VERIFICATION
. Menandatangani seluruh pesan dengan kunci pribadinya. - sisi B mendekripsi string acak, periksa apakah hasilnya cocok dengan string R , jika semuanya benar, maka pesan yang ditandatangani
ACCEPT_DIALOG
, yang berarti dialog dibuat dan pertukaran pesan lebih lanjut dimungkinkan.
Pembentukan dialog yang sukses dan pertukaran sinyal ditunjukkan pada gambar:

Pengembangan lebih lanjut dari proyek
Saat ini, aplikasi sudah menyediakan kemampuan dasar untuk enkripsi dan otentikasi pesan melalui tanda tangan digital. Tetapi daftar layanan yang didukung sangat kecil.
Di masa depan, direncanakan untuk meningkatkannya. Pekerjaan sedang berlangsung untuk memasukkan VKontakte ke dalamnya.
Juga dalam proyek ini adalah peningkatan konten informasi dari antarmuka pengguna, seperti menambahkan status untuk menghubungkan ke layanan (aktif, kesalahan koneksi, dll.).
Algoritma untuk memeriksa pesan duplikat tidak berfungsi dengan cara terbaik, direncanakan selesai.