WebKripto
Kekhawatiran dengan kriptografi di javascript sisi-klien (peramban) dirinci di bawah ini. Semua kecuali satu dari masalah ini tidak berlaku untuk WebCrypto API , yang sekarang didukung dengan cukup baik .
Untuk aplikasi offline, Anda masih harus merancang dan menerapkan keystore yang aman.
Selain: Jika Anda menggunakan Node.js, gunakan API crypto bawaan .
Kriptografi Asli-Javascript (pra-WebKripto)
Saya kira perhatian utama adalah seseorang dengan akses fisik ke komputer membaca localStorage
untuk situs Anda, dan Anda ingin kriptografi untuk membantu mencegah akses itu.
Jika seseorang memiliki akses fisik Anda juga terbuka terhadap serangan selain dan lebih buruk daripada membaca. Ini termasuk (tetapi tidak terbatas pada): keyloggers, modifikasi skrip luring, injeksi skrip lokal, keracunan cache browser, dan pengalihan DNS. Serangan-serangan itu hanya berfungsi jika pengguna menggunakan mesin setelah kompromi. Namun demikian, akses fisik dalam skenario seperti itu berarti Anda memiliki masalah yang lebih besar.
Jadi perlu diingat bahwa skenario terbatas di mana kripto lokal bernilai adalah jika mesin dicuri.
Ada perpustakaan yang menerapkan fungsionalitas yang diinginkan, misalnya Perpustakaan Stanford Javascript Crypto . Meskipun demikian, ada kelemahan bawaan (sebagaimana dimaksud dalam tautan dari jawaban @ ircmaxell):
- Kurangnya entropi / angka nomor acak;
- Kurangnya keystore aman yaitu kunci pribadi harus dilindungi kata sandi jika disimpan secara lokal, atau disimpan di server (yang melarang akses luring);
- Kurangnya penghapusan aman;
- Kurangnya karakteristik waktu.
Masing-masing kelemahan ini sesuai dengan kategori kompromi kriptografi. Dengan kata lain, walaupun Anda mungkin memiliki nama "crypto", itu akan jauh di bawah kerasnya yang dicita-citakan dalam praktik.
Semua yang dikatakan, penilaian aktuaria tidak sepele seperti "Javascript kripto lemah, jangan gunakan itu". Ini bukan endorsemen, hanya peringatan dan mengharuskan Anda untuk sepenuhnya memahami paparan kelemahan di atas, frekuensi dan biaya vektor yang Anda hadapi, dan kapasitas Anda untuk mitigasi atau asuransi jika terjadi kegagalan: Javascript crypto, di Terlepas dari kelemahannya, dapat mengurangi eksposur Anda tetapi hanya terhadap pencuri dengan kapasitas teknis terbatas. Namun, Anda harus menganggap Javascript crypto tidak memiliki nilai terhadap penyerang yang ditentukan dan mampu yang menargetkan informasi itu. Beberapa akan menganggap itu menyesatkan untuk menyebut data "dienkripsi" ketika begitu banyak kelemahan diketahui melekat pada implementasi. Dengan kata lain, Anda sedikit dapat mengurangi eksposur teknis Anda tetapi Anda meningkatkan eksposur keuangan Anda dari pengungkapan. Setiap situasi berbeda, tentu saja - dan analisis untuk mengurangi eksposur teknis terhadap eksposur keuangan adalah non-sepele. Berikut ini adalah analogi ilustrasi:Beberapa bank memerlukan kata sandi yang lemah , terlepas dari risiko yang melekat, karena paparan mereka terhadap kata sandi yang lemah lebih kecil daripada biaya pengguna akhir untuk mendukung kata sandi yang kuat.
🔥 Jika Anda membaca paragraf terakhir dan berpikir "Seseorang di Internet bernama Brian bilang saya bisa menggunakan Javascript crypto", jangan gunakan Javascript crypto.
Untuk kasus penggunaan yang dijelaskan dalam pertanyaan, tampaknya lebih masuk akal bagi pengguna untuk mengenkripsi partisi lokal atau direktori home mereka dan menggunakan kata sandi yang kuat. Jenis keamanan itu umumnya diuji dengan baik, dipercaya luas, dan umumnya tersedia.