Hari ini kami ada di Product Hunt! Tulis komentar
Authenticator 1.16.0 sudah tersedia. Lihat yang baru
Tinjauan teknis untuk peninjau keamanan. Semua di sini dapat dicocokkan dengan kode sumber — termasuk bagian yang kurang menguntungkan kami, yang kami sebutkan alih-alih kami hilangkan.
Ekstensi ini adalah ekstensi Chrome Manifest V3 yang membuat kode TOTP secara lokal dengan OTPAuth. Pembuatan kode, penyimpanan akun, dan enkripsinya tidak melibatkan backend apa pun, dan tidak ada akun pengguna. Kami menjalankan satu server, api.authenticator.sh, untuk paket gratis dan Pro — dijelaskan di bawah — dan server itu tidak pernah menerima rahasia, nama akun, penerbit, atau kode.
Server itu tidak menyimpan material kunci untuk akun siapa pun: tidak ada penitipan kunci dan tidak ada jalur pemulihan yang kami kendalikan. Jika pengguna lupa kata sandi dan kehilangan kode pemulihannya, kami tidak bisa membantu — memang dirancang begitu.
Perlindungan kata sandi bersifat opsional dan mati secara bawaan. Saat dinyalakan:
Data tidak pernah dienkripsi langsung dengan kunci turunan kata sandi. Catatan dienkripsi oleh kunci utama acak; keluaran PBKDF2 hanya membungkus kunci utama itu. Ada dua akibatnya, dan keduanya penting:
Dengan perlindungan kata sandi aktif, seluruh catatan akun dienkripsi kecuali pengenal dan sidik jarinya — termasuk nama layanannya, sehingga profil yang dicuri tidak membocorkan di layanan mana saja pengguna punya akun. Saat diaktifkan, ekstensi mengenkripsi catatan, memverifikasinya dengan mendekripsi dan membandingkan, lalu barulah menghapus semua salinan teks biasa: penyimpanan lokal peramban, sinkronisasi, dan ketujuh snapshot cadangan bergilir.
Kami sebutkan terus terang, karena ini memengaruhi penilaian Anda:
Singkatnya: ini melindungi data saat tersimpan. Ia tidak, dan tidak bisa, menjaga perangkat yang saat dipakai sudah berada dalam kendali penyerang.
Manifes mendeklarasikan lima izin dan tidak ada izin host:
Tidak ada Tidak ada content script, tidak ada izin tabs, cookies, atau webRequest, dan tidak ada web-accessible resources. Tidak ada milik kami yang berada di sebuah halaman sampai Anda meminta kode di sana; yang berjalan saat itu disuntikkan untuk satu tab dan satu pemanggilan itu saja, di bawah izin yang diberikan klik Anda sendiri, dan tidak meninggalkan apa pun.
Pemindaian QR dengan kamera berjalan di halaman ekstensi yang dibuka dalam tab, bukan di popup — popup dimusnahkan begitu kehilangan fokus, dan permintaan izin melakukan persis itu. Untuk ini tidak perlu izin apa pun di manifes: yang dipakai adalah permintaan kamera bawaan peramban, diberikan per origin ekstensi dan bisa dicabut di setelan situs, dan tidak pernah muncul sebelum pengguna membuka pemindai. Video didekode secara lokal dan tidak pernah dikirim atau disimpan.
Sejak 1.14.0 ekstensi menghubungi api.authenticator.sh sekali sehari — saat peramban dimulai, atau setelah popup selesai ditampilkan, dan tidak pernah menjadi bagian dari proses menampilkan kode. Permintaannya berupa daftar field yang tertutup, disusun dalam satu fungsi di src/billing/sync.ts dan dijaga tetap pada daftar itu oleh sebuah pengujian:
Tidak pernah dikirim: rahasia, nama akun, penerbit, kode, atau situs tempat semua itu dipakai. Server mengambil negara dari permintaan di edge-nya dan tidak menyimpan alamat IP. Halaman pencopotan menerima ID instalasi yang sama sebagai ?i=: halaman itu memberi tahu server bahwa instalasi telah dicopot, dan mengaitkan jawaban survei yang opsional dengan instalasinya.
Yang disimpan di chrome.storage.local untuk keperluan ini: ID instalasi, kebijakan dan lisensi bertanda tangan terakhir, kunci lisensi yang dipegang instalasi ini (diketik, atau diterima setelah membeli di instalasi ini), jumlah pembukaan per hari sampai server menerimanya, serta peristiwa yang mengantre — tanpa data akun. Selama sinkronisasi aktif, keterangan apakah instalasi sudah ada sebelum penagihan dan kunci lisensi itu juga masuk ke Chrome Sync, sehingga profil Chrome pengguna yang lain ikut mendapatkannya dan menyalakan Pro sendiri; mematikan sinkronisasi menghapus keduanya dari Chrome Sync, dan menyalakannya lagi mengembalikannya.
Apa yang dikembalikan, dan bagaimana ekstensi memperlakukannya:
Batas ini bukan DRM: kodenya sumber terbuka, dan sebuah fork bisa menghapusnya. Yang tidak boleh pernah mungkin adalah seseorang memperoleh atau memakai lisensi milik orang lain, atau membuat instalasi orang lain menjadi terbatas — itu kerentanan, dan termasuk dalam cakupan kebijakan keamanan kami.
Dua jenis permintaan dibuat ekstensi atas inisiatifnya sendiri: pemeriksaan jam dan check-in penagihan harian. Sisanya di bawah ini terjadi karena pengguna mengeklik sesuatu. Manifest V3 melarang kode jarak jauh, dan tak satu pun di sini membawa akun, kunci rahasia, atau kode yang dihasilkan. Daftar lengkapnya:
| Host | Kapan | Membawa data pengguna? |
|---|---|---|
| time.akamai.com timeapi.io cloudflare.com | Pemeriksaan selisih jam, di-cache; kalau tidak ada sumber yang bisa dihubungi, Pengaturan menyebutkannya. TOTP rusak kalau jam melenceng. | Tidak |
| authenticator.sh | Halaman sambutan saat pemasangan; halaman masukan saat pencopotan, dengan ID instalasi di alamatnya; halaman bantuan dan dukungan bila dibuka dari popup. | ID instalasi, hanya di halaman pencopotan; selain itu tidak (log server web biasa) |
| api.authenticator.sh | Check-in penagihan sekali sehari; panggilan checkout, lisensi, dan portal saat pengguna membeli Pro, memasukkan kunci, memulihkan pembelian, atau mengelola langganan. | Field yang tercantum di atas — tidak pernah data akun. Kunci lisensi atau alamat email hanya bila pengguna mengetiknya sendiri |
| checkout.stripe.com billing.stripe.com | Stripe Checkout dan portal pelanggan, dibuka di tab saat pengguna membeli Pro atau mengelola langganan. | Apa yang dimasukkan pembeli di sana. Berlaku ketentuan Stripe dan Link sendiri |
| chromewebstore.google.com | Halaman toko, dibuka di tab baru hanya saat diklik: formulir ulasan dari ajakan memberi nilai. | Tidak (bagi Google ini kunjungan ke halaman toko seperti yang lain) |
Tidak ada font, skrip, gaya, atau gambar yang dimuat dari host pihak ketiga. Semua yang dibutuhkan untuk menggambar antarmuka sudah ada di dalam paket.
Anda tidak perlu memercayai satu pun hal di atas begitu saja. Ekstensi ini sumber terbuka, dan setiap rilis dapat direproduksi:
.crx yang dipublikasikan dari Chrome Web Store lalu ekstraknpm ci && npm run build di Node 20 LTSdist/ yang dihasilkan dengan paket yang diekstrakSHA-256 untuk setiap berkas di dalam dist/ hasil build dipublikasikan pada setiap rilis GitHub sebagai SHA256SUMS-v<version>.txt, dalam format sha256sum, sehingga langkah 4 cukup satu kali menjalankan sha256sum -c. Perbedaan seharusnya terbatas pada urutan berkas di dalam arsip dan spasi pada keluaran terminifikasi antarversi patch Node.
Dependensi runtime sengaja sedikit — OTPAuth, React, jsQR, Zustand, Framer Motion, dan Lucide — dikunci oleh lockfile yang ikut di-commit. SBOM CycloneDX tersedia atas permintaan.
Baca kode sumbernyaKami vendor kecil dan independen. Jika salah satu hal berikut adalah syarat mutlak dalam proses Anda, lebih baik tahu sekarang daripada tiga minggu setelah evaluasi berjalan:
Sebagai gantinya kami menawarkan keterbukaan penuh kode sumber, build yang dapat diverifikasi, permukaan izin yang minimal, dan server yang sejak awal memang tidak pernah dikirimi rahasia, nama akun, atau kode Anda.
Laporan kerentanan dan pertanyaan keamanan: security@authenticator.sh. Kebijakan pengungkapan, cakupan, waktu tanggap, dan ketentuan safe harbour ada di halaman kebijakan keamanan; apa yang disimpan dan apa yang keluar dari perangkat dijelaskan di kebijakan privasi.
Dengan senang hati kami mengisi kuesioner penilaian vendor tertulis atau menelusuri kode bersama tim keamanan Anda.
Untuk hal apa pun yang bukan soal keamanan — pemasangan, pemulihan akun, pertanyaan penagihan dari sebuah penerapan — lihat dukungan. Mohon jangan mengirim laporan kerentanan ke sana; kotak masuk itu tidak diperlakukan sebagai rahasia.