X:/Chat adalah aplikasi web yang menggunakan HTML, CSS, dan JavaScript di front-end, dan node.js di back-end. Ini memungkinkan pengguna untuk berkomunikasi satu sama lain dengan cara yang aman (walaupun saya baru mengenal Node.js, dan tidak dapat menjamin keamanan tersebut).
JavaScript dan penyimpanan lokal benar -benar wajib bagi aplikasi web untuk berfungsi. Penyimpanan lokal digunakan untuk menyimpan kunci publik, kunci pribadi, pengaturan, dan banyak lagi.
Jika Anda menggunakan fitur "Obrolan Anonim", sama sekali tidak ada yang disimpan oleh server. Saya ingin membuat bentuk komunikasi paling aman yang dapat saya pikirkan, dan akhirnya saya memilih untuk tidak menyimpan log percakapan melalui obrolan anonim. Saat Anda mengklik tombol "Obrolan Anonim", Anda dialihkan ke "/Anonymous", di mana ID dihasilkan untuk Anda, bersama dengan kunci publik dan kunci pribadi. Ini semata -mata disimpan di browser Anda (di penyimpanan lokal). Server tidak menyimpan informasi ini. Satu -satunya hal yang disimpan server adalah ID percakapan, dan waktu penciptaan. Ini dilakukan agar percakapan dapat diatur untuk kedaluwarsa setelah satu jam. Setelah pemuatan selesai, Anda dapat mengirim URL Anda ke siapa pun yang Anda inginkan, dan minta mereka terhubung ke Anda. Begitu mereka melakukannya, mereka juga mendapatkan pasangan kunci publik/pribadi yang dihasilkan untuk mereka, serta ID. Anda kemudian diberikan kunci publik dan ID mereka. Ketika Anda mengirim pesan, Anda mengenkripsi menggunakan kunci publik RSA-2048 mereka, yang kemudian mereka dekripsi di pihak mereka (secara lokal) menggunakan kunci pribadi mereka. Karena pesan dienkripsi di sisi klien, server tidak pernah tahu apa yang dikatakan. Menyegarkan halaman menghapus pesan untuk siapa pun yang menyegarkan, karena pesan tidak disimpan di mana pun . Karena fakta bahwa tidak ada yang disimpan di server, itu berarti pengguna dapat dengan mudah mengubah ID mereka dan semacamnya, itulah sebabnya proyek ini dibuat untuk digunakan oleh kelompok -kelompok kecil, daripada masyarakat umum. Memiliki server menyimpan percakapan anonim akan memberikan manfaat dari percakapan yang tidak dapat diubah oleh pengguna, tetapi itu berarti bahwa server dapat memodifikasinya, dan bahwa log akan ada. Jadi, apakah Anda lebih suka mempercayai teman Anda, atau server acak?
Obrolan normal lebih seperti aplikasi obrolan generik Anda. Pesan masih dienkripsi di sisi klien dengan RSA-2048, dan kunci pribadi pengguna dienkripsi dengan AES-256-CTR, yang menggunakan hash SHA512 dari kata sandi pengguna sebagai kunci dekripsi. Kata sandi pengguna disimpan menggunakan BCRYPT dengan 10 putaran garam. Singkatnya, kecuali kode server dimodifikasi atau sesuatu untuk menangkap kunci pribadi pengguna, sama sekali tidak ada cara untuk mendapatkan konten percakapan. Pengaturan, kontak, dan data pengguna lainnya disimpan dalam format JSON dalam file teks untuk akses mudah. Ini disimpan dalam plaintext, tetapi akan mudah untuk mengenkripsi mereka dengan kata sandi dan AES pengguna. Jika Anda ingin mewujudkannya, ingatlah, sudah ada fungsi yang ditulis untuk membuatnya lebih mudah. Anda dapat menggunakan "AES_ENCRYPT (Plaintext, Password)" dan "AES_DECRYPT (terenkripsi, kata sandi)" Fungsi yang saya tulis untuk dengan mudah mengenkripsi/mendekripsi apa pun yang Anda inginkan.
Mungkin ada beberapa bug atau perilaku yang tidak terduga, tetapi ini diharapkan, ini adalah, bagaimanapun, proyek Node.js pertama saya. Jika Anda mencoba memecahkan aplikasi, Anda kemungkinan besar akan berhasil. Tidak ada banyak cek validasi dan seperti yang saya inginkan, tetapi ada cukup untuk melindungi akun dan percakapan pengguna. Saya mohon maaf sebelumnya jika ada yang salah.