İçeriğe geç
Muslu Yüksektepe

exte

Chrome için iki adımlı doğrulama (2FA) eklentisi. QR okur, yedekleri şifreler; ağ izni olmadığı için anahtarlar cihazdan çıkmaz.

exte, iki adımlı doğrulama kodlarını doğrudan Chrome içinde üreten bir tarayıcı eklentisidir. Telefonu elime almadan, tek tıkla kodu kopyalayıp girişi tamamlayabilmek için yazdım. Eklentinin hiçbir ağ izni yok, bu yüzden hesaplarınıza ait gizli anahtarlar cihazınızdan dışarı çıkamaz. Kaynak kodu MIT lisansıyla açık.

Amaç

Gün içinde onlarca panele ve servise giriş yaparım ve çoğu iki adımlı doğrulama istiyor. Her seferinde telefonu açıp doğrulayıcı uygulamada doğru hesabı bulmak, altı haneyi okuyup klavyeye geçirmek vakit kaybettiriyordu. Piyasadaki tarayıcı doğrulayıcılarının bir kısmı ise hesap açtırıyor, verileri kendi sunucusuna senkronize ediyor ya da geniş izinler istiyordu. Ben tam tersini istedim: hesap yok, sunucu yok, ağ erişimi yok, her şey kendi tarayıcımda ve şifreli olarak dursun.

Nasıl çalışır

Eklenti ilk açıldığında bir parola belirlemenizi ister. Bu parola hiçbir yerde saklanmaz. PBKDF2-SHA256 ile 310.000 tur işlenerek bir anahtar türetilir ve hesaplarınız bu anahtarla AES-256-GCM kullanılarak şifrelenir. PBKDF2, bir paroladan şifreleme anahtarı üretirken kaba kuvvet denemelerini yavaşlatan bir yöntemdir. AES-256-GCM ise hem gizliliği hem de verinin değiştirilmediğini garanti eden bir şifreleme türüdür.

Kodlar TOTP ve HOTP standartlarına göre üretilir. TOTP zamana dayalı tek kullanımlık paroladır ve her 30 ya da 60 saniyede bir değişir. HOTP ise bir sayaca dayanır ve her kullanımda ilerler. Açılır pencerede her hesap bir kart olarak görünür, kartın altındaki çubuk kodun ne kadar süre daha geçerli olduğunu gösterir. Karta tıkladığınızda kod panoya kopyalanır.

Varsayılan olarak eklenti her açılışta parolayı yeniden sorar. İsterseniz ayarlardan bunu tarayıcı oturumu boyunca bir kez sorulacak şekilde ya da 1 dakika ile 30 gün arasında seçeceğiniz bir hareketsizlik süresine göre değiştirebilirsiniz. Oturum anahtarı tarayıcı kapanınca silinen ve sayfa betiklerinin okuyamadığı bir depolama alanında tutulur.

Öne çıkan özellikler

  • Hesap eklemenin dört yolu var: ekranda görünen bir QR kodu taramak, bir QR görselini dosyadan seçmek ya da panodan yapıştırmak, otpauth:// bağlantısı yapıştırmak veya bilgileri elle girmek.
  • SHA-1, SHA-256 ve SHA-512 algoritmalarını, 6 ile 8 hane arasındaki kodları ve 30 ya da 60 saniyelik süreleri destekliyor.
  • Google Authenticator'ın "Hesapları aktar" ekranında ürettiği QR kodu doğrudan okuyabiliyor ve hesap çoksa kaçıncı parçayı okuduğunu söylüyor.
  • Parolayla korunan şifreli bir yedek dosyası alabiliyor ve bu dosyayı başka bir cihaza geri yükleyebiliyorsunuz.
  • Hesapları başka doğrulayıcı uygulamalara taşımak için düz otpauth:// listesi olarak da dışa aktarabiliyorsunuz.
  • İçe aktarma mevcut hesapları silmiyor ve aynı hesabı ikinci kez eklemiyor.
  • Uzun listelerde arama kutusu, açık ve koyu tema, Türkçe ve İngilizce arayüz bulunuyor.

Teknik altyapı

exte, Chrome'un güncel eklenti biçimi olan Manifest V3 ile yazıldı. Derleme adımı, npm ya da paketleyici kullanmadım. Depodaki klasör doğrudan çalışan eklentinin kendisidir ve kod düz ES modüllerinden oluşur. Arka planda çalışan bir servis çalışanı da yok, çünkü kodlar yalnızca açılır pencere açıkken üretiliyor.

QR kodlarını çözmek için jsQR kütüphanesini depoya dahil ettim. Manifest V3 uzaktan kod yüklemeyi yasakladığı için bir CDN üzerinden çağırmak mümkün değildi. Google Authenticator'ın aktarım QR'ı protobuf adlı ikili bir biçim kullanıyor. Tek bir mesaj şeması için koca bir kütüphane eklemek yerine yaklaşık 90 satırlık bir çözücüyü kendim yazdım.

Yedekleme ve içe aktarma işlemlerini açılır pencere yerine ayrı bir ayarlar sekmesine koydum. Açılır pencere, dosya seçici açıldığında odağı kaybedip kapanabiliyor ve bu da yarım kalmış işlemlere yol açıyordu.

Eklenti yalnızca üç izin istiyor. storage hesapları ve ayarları cihazda tutmak için, activeTab yalnızca "Ekrandan tara" düğmesine bastığınızda görünen sekmenin görüntüsünü almak için, clipboardWrite ise tıkladığınız kodu panoya kopyalamak için kullanılıyor. Herhangi bir site erişim izni ve kodda hiçbir ağ çağrısı yok.

Doğrulama

Kod üretme motorunu RFC 4226 ve RFC 6238 belgelerindeki resmi test vektörleriyle SHA-1, SHA-256 ve SHA-512 için sınadım. QR okuma yolu, Google Authenticator çözücüsü, şifreli yedeğin gidiş dönüşü ve parola akışının tamamı (kurulum, kilit açma, parola değiştirme, yeniden kilitleme) için de testler var. Testler Node.js'in kendi test çalıştırıcısıyla, hiçbir bağımlılık kurmadan çalışıyor.

Gizlilik ve güvenlik

Hesap açmanız, giriş yapmanız ya da kişisel bilgi vermeniz gerekmiyor. Veriler chrome.storage.local alanında şifreli olarak duruyor ve Chrome senkronizasyonuna dahil edilmiyor. Analitik, reklam, çerez ya da telemetri yok.

Bu tasarımın bilinçli bir bedeli var: parolanın kurtarma yolu yok. Parolayı unutursanız ya da yedek almadan tarayıcı profilinizi kaybederseniz hesaplarınızı geri getirmenin bir yolu olmaz. Bu yüzden şifreli yedek almanızı öneririm. Düz metin .txt dışa aktarımı ise şifresizdir ve yalnızca hesapları başka bir uygulamaya taşırken kullanılıp sonra silinmelidir.

Kullanım alanları

  • Gün içinde çok sayıda yönetim paneline giren sistem yöneticileri ve geliştiriciler için hızlı bir doğrulayıcı olarak kullanılabilir.
  • Google Authenticator'dan masaüstüne geçmek ya da telefon kaybına karşı ikinci bir kopya tutmak isteyenler için uygundur.
  • Verisinin hiçbir sunucuya gitmemesini şart koşan, gizliliğe önem veren kullanıcılar için tasarlandı.
  • Sade ve bağımlılıksız bir Manifest V3 eklentisinin nasıl kurulacağını incelemek isteyen geliştiriciler için de okunabilir bir örnektir.

Durum

Güncel sürüm 1.1.0. Chrome Web Store başvurusu için gereken metinleri, görselleri ve gizlilik politikasını hazırladım. Mağazada yayımlanana kadar eklenti, depodan indirilip geliştirici modunda yüklenerek kullanılabiliyor.

Kategori
Tarayıcı ve e-posta eklentileri
Yıl
2026

Teknolojiler

  • JavaScript
  • Chrome Extension
  • 2FA
  • Security
  • Open Source

Bağlantılar

Tüm projelere dön