Kenapa password.es tidak mengirim kata sandimu ke mana pun

Diterbitkan oleh David Carrero

Menulis “kami tidak menyimpan kata sandimu” di sebuah halaman web memakan biaya yang persis sama dengan menulis kalimat lain apa pun: nol. Itu sebuah kalimat, bukan jaminan. Yang menulisnya bisa orang yang jujur, bisa juga yang tidak, dan dari sisi layarmu keduanya terlihat identik.

Itulah masalah mendasar dari setiap situs yang meminta kata sandimu untuk “dianalisis”. Sekalipun layanannya tanpa cela —kode rapi, niat baik, orang-orang terhormat—, kamu tidak punya cara untuk mengetahuinya. Server itu kotak tertutup. Kamu kirim data paling sensitif yang kamu punya, lalu percaya bahwa di seberang sana terjadi persis seperti yang dijanjikan.

Dan ada satu hal yang sering luput: janji untuk tidak menyimpan juga tidak melindungi dari hal-hal yang bukan urusan si pemberi janji. Server yang jujur tetap bisa punya log yang tidak pernah diperiksa siapa pun, proxy di tengah jalan, backup otomatis, karyawan baru, atau sekadar hari yang sedang sial. Kata sandinya sudah telanjur keluar dari mesinmu. Apa yang terjadi setelah itu di luar jangkauanmu, dan sering kali di luar jangkauan mereka juga.

Satu-satunya jawaban yang tidak menuntutmu percaya apa pun

Solusinya bukan berjanji dengan lebih meyakinkan. Solusinya adalah tidak membutuhkan datanya.

Kalau kata sandimu tidak pernah keluar dari peramban, pertanyaan “mereka apakan kata sandiku?” kehilangan maknanya. Tidak ada “mereka”. Tidak ada server yang menerimanya, tidak ada log tempat ia muncul, tidak ada backup yang memuatnya, tidak ada karyawan yang bisa membacanya. Kepercayaan bukan dikelola lebih baik: ia dihapus dari persoalan.

Itulah yang dilakukan password.es. Pemeriksa menganalisis apa yang kamu ketik di peramban kamu sendiri, dengan prosesor kamu sendiri. Teks yang kamu ketik tidak pergi ke mana-mana karena memang tidak ada mana-mana untuk dituju.

Dari mana keacakannya datang

Generator memakai logika yang sama. Untuk membuat kata sandi acak dibutuhkan keacakan, dan ada dua cara mendapatkannya: meminta ke server atau meminta ke peramban. Meminta ke server jelas konyol: server akan tahu kata sandinya lebih dulu daripada kamu.

Jadi kami meminta ke peramban, lewat crypto.getRandomValues(). Itu API standar platform web untuk keacakan kriptografis —yang memang ada justru untuk keperluan ini, berbeda dari Math.random(), yang cocok untuk mengocok kartu dalam permainan dan tidak cocok untuk apa pun yang harus tahan terhadap orang yang benar-benar berminat—. Yang memproduksi keacakan adalah peramban itu sendiri, di mesinmu. Kami tidak ikut campur: hasilnya muncul di layarmu dan berhenti di situ.

Cara membuktikannya tanpa perlu percaya padaku

Semua yang di atas, sejauh ini, masih berupa paragraf yang ditulis oleh orang-orang yang sama yang membuat situs ini. Artinya: persis hal yang tadi kubilang harus kamu curigai. Jadi jangan percaya padaku. Lihat sendiri.

Buka alat pengembang di peramban kamu —F12, atau Cmd+Option+I di Mac—, masuk ke tab Jaringan (Network), biarkan terbuka, lalu buka pemeriksa. Kamu akan melihat halamannya dimuat. Sekarang bersihkan daftarnya, klik kolom kata sandi, dan mulai mengetik.

Inilah yang akan kamu lihat, dan di sini lebih baik jujur apa adanya daripada jualan:

  • Saat kamu mengklik kolomnya, satu permintaan terkirim. Itu bukan kata sandimu —kamu bahkan belum mengetik apa-apa—: itu pustaka yang melakukan analisis, sebuah berkas bernama zxcvbn-id.min.js yang di dalamnya membawa daftar kata, nama, pola papan ketik, dan kata sandi yang sudah dikenal sebagai pembanding. Berkas itu diunduh dari password.es begitu kamu menyentuh kolomnya, supaya sudah sampai sementara kamu mengetik. Asalnya dari domain yang sama, ia berkas statis, dan isinya sama untuk semua orang yang membuka halaman ini —situs ini punya beberapa versi menurut bahasa, dan yang ini memuat versi Indonesia—.
  • Setelah itu, mau kamu ketik apa pun, daftarnya diam saja. Satu huruf, dua puluh huruf, hapus, ulangi dari awal, tempel teks panjang. Nol permintaan. Penghitungnya tidak bergerak. Kamusnya sudah ada di perambanmu dan pencariannya berlangsung di memori mesinmu sendiri.

Perbedaan itulah intinya. Bukan soal kamu percaya bahwa permintaannya tidak membawa kata sandimu: memang tidak ada permintaan. Tidak perlu menafsirkan apa pun atau memahami kodenya; cukup memandangi penghitung yang tidak naik.

Inventaris lengkapnya, berikut cacatnya

Karena argumennya adalah “buktikan sendiri”, akan aneh kalau kami menyembunyikan apa yang bakal kamu temukan saat membuktikannya. Inventaris jujur password.es:

Tidak ada analitik. Tidak ada Google Analytics, tidak ada alternatif yang kalem, tidak ada piksel. Dulu ada satu dan sudah dicabut dari semua halaman. Tidak ada cookie. Situs ini tidak menulis satu pun. Memang ada satu hal yang disimpan di perambanmu: kalau kamu lebih suka tema terang atau gelap, itu tersimpan di penyimpanan lokal peralatanmu sendiri. Tidak pernah dikirim ke mana pun dan bisa kamu hapus dari inspektor yang sama. Tidak ada pendaftaran, akun, maupun formulir: tidak ada tempat untuk meninggalkan data sekalipun kamu ingin meninggalkannya.

Dan cacatnya, karena memang ada: halaman ini meminta dua tipografi ke server Google saat dimuat. Artinya Google melihat bahwa seseorang dengan IP-mu memuat sebuah halaman dari domain ini, sama seperti di begitu banyak situs lain. Google tidak melihat apa yang kamu ketik —permintaan itu terjadi sebelumnya dan tidak diulang lagi—, tapi tetap saja itu permintaan ke pihak ketiga, kamu akan melihatnya di tab Jaringan yang sama, dan tidak masuk akal menyuruhmu membuka inspektor sambil tidak menyebutkannya. Itu ada di daftar hal yang perlu diperbaiki.

Kenapa kami menceritakan ini

Kami bisa saja menulis “nol permintaan, privasi total” lalu duduk manis. Itu akan terdengar lebih bagus dan akan salah di bagian detailnya: ada satu permintaan kamus dan ada beberapa tipografi. Argumen yang runtuh begitu ada orang membuktikannya bukan argumen: itu iklan.

Versi yang akurat memang kurang mulus, tapi tahan diperiksa: apa yang kamu ketik tidak keluar dari perambanmu, dan itu terlihat dalam tiga puluh detik dengan alat yang sudah terpasang di komputermu.

Dan perhatikan, karena ini kembali ke tanganmu sebagai kriteria umum. Lain kali saat ada situs yang meminta kata sandimu untuk keperluan apa pun, buka tab itu dan lihat apakah muncul permintaan setiap kali kamu menekan tombol. Kalau muncul, kata sandimu sudah pergi. Tidak peduli apa bunyi kebijakan privasinya, semanis apa gambar gembok di formulirnya, atau seserius apa penampilan perusahaannya. Dan kalau situs itu menampilkan kata sandimu yang sudah dianalisis setelah roda pemuatan berputar, kamu sudah tahu ia lewat mana.

Aturan yang paling jarang dibicarakan dalam keamanan sebenarnya bukan tentang kata sandi: ia tentang verifikasi. Percaya itu boleh. Membuktikannya lebih baik, dan di sini gratis.


Sumber: arsitektur password.es itu sendiri, bisa diverifikasi dengan inspektor peramban mana pun — pemeriksa mengunduh dari domainnya sendiri, saat kolomnya difokuskan, pustaka analisis berikut daftar-daftarnya (zxcvbn-id.min.js) dan tidak mengirim permintaan apa pun selama kamu mengetik · crypto.getRandomValues(), API standar dari Web Crypto API untuk keacakan kriptografis · kode situs ini tidak memuat analitik, piksel, maupun cookie; satu-satunya data yang tersimpan secara lokal adalah preferensi tema · tipografi disajikan dari Google Fonts.

← Kembali ke blog