Obrolan web terenkripsi sederhana. Didukung oleh Socket.io, Web Cryptography API. Proyek ini adalah contoh bagaimana enkripsi sisi klien bekerja dan bagaimana Anda dapat mengintegrasikannya sebagai layanan obrolan.
Darkwire Server adalah aplikasi Node.js.
Klien Web Darkwire.io ditulis dalam JavaScript dengan React JS dan Redux.
Salin file .env.dist di server/ dan client/ direktori tanpa ekstensi .dist dan menyesuaikannya dengan kebutuhan Anda.
Anda harus memiliki koneksi HTTPS untuk Darkwire untuk bekerja karena menggunakan Crypto Browser API yang hanya dapat diakses di LocalHost dan di belakang koneksi HTTPS.
Anda dapat menggunakan NVM untuk menginstal versi node yang tepat menggunakan perintah ini:
nvm install # If the right node version is not already installed
nvm use
npm install yarn -g # To install yarn
Instal dependensi
$ yarn
Mulai Server dan Klien
$ yarn setup
$ yarn dev
Jalankan saja berikut ini:
$ docker-compose up
Ini akan secara otomatis membuat file .env default untuk Anda.
Buat server dan produksi klien membangun
$ yarn build
Mulai server
$ yarn start
Membangunnya.
$ docker build --tag darkwire.io:latest .
Lalu jalankan. Contoh:
$ docker run --init --name darkwire.io --rm -p 3001:3001 darkwire.io
Anda dapat menggunakan salah satu variabel lingkungan yang tersedia di server/.env.dist dan client/.env.dist . Default tersedia di Dockerfile
Harap laporkan masalah keamanan apa pun ke [email protected] .
Darkwire menggunakan kombinasi enkripsi asimetris (RSA-OAEP), tombol sesi simetris (AES-CBC) dan kunci penandatanganan (HMAC) untuk keamanan.
Berikut gambaran obrolan antara Alice dan Bob (juga berlaku untuk obrolan grup):
Obrolan grup bekerja dengan cara yang sama karena pada langkah 5 kami mengenkripsi kunci dengan kunci publik semua orang. Ketika sebuah pesan dikirim, itu termasuk kunci terenkripsi untuk semua orang di ruangan itu, dan penerima kemudian memilih yang untuk mereka berdasarkan ID pengguna mereka.
Darkwire tidak memberikan jaminan bahwa orang yang Anda komunikasikan adalah siapa yang Anda pikirkan. Fungsionalitas otentikasi dapat dimasukkan dalam versi mendatang.
Darkwire mengkodekan dokumen ke base64 menggunakan btoa dan dienkripsi dengan cara yang sama dengan pesan obrolan.
Batas ukuran file yang dapat ditransfer default adalah 4MB, tetapi dapat diubah dalam file .env dengan variabel REACT_APP_MAX_FILE_SIZE .
Darkwire menggunakan socket.io untuk mengirimkan informasi terenkripsi menggunakan Secure Websockets (WSS).
Kamar disimpan dalam memori di server sampai semua peserta telah pergi, pada titik mana ruangan dihancurkan. Hanya kunci publik yang disimpan dalam memori server selama durasi kehidupan ruangan.
Riwayat obrolan disimpan di browser masing -masing peserta, sehingga secara efektif dihapus (untuk pengguna itu) ketika jendela mereka ditutup.