QR kodları, farklı cihazlar arasında hızlı ve zahmetsiz bir şekilde bağlantı kurmayı mümkün kılıyor. Ancak bu basit görünen işlem, özellikle gizlilik ve güvenlik açısından derinlemesine düşünülmesi gereken bir tasarım sürecini beraberinde getiriyor.
Basitlik ve Güvenlik Arasında Denge Kurmak
QR kodlarıyla tarayıcı geçişi sağlayan bir araç geliştirirken, ilk adım olarak ürünün temel kısıtlarını belirlemek önemliydi. Hedef, kullanıcıların hesap oluşturmasına, uygulama indirmesine veya bulut depolama hizmetlerine ihtiyaç duymadan verileri anında paylaşabilmesiydi. Bu hedef doğrultusunda, ürünün tasarımında dikkat edilmesi gereken bazı kritik noktalar ortaya çıktı:
- Herkese açık bağlantıların riskleri: Eğer dosyalar için genel erişim bağlantıları oluşturulsaydı, bu bağlantılar çeşitli güvenlik açıklarına yol açabilirdi. Örneğin, bir bağlantının üçüncü şahıslar tarafından paylaşılması, göndericinin bağlantının ne zaman sona ereceğini düşünmek zorunda kalması veya alıcının çevrimdışı olduğu durumlarda sorun yaşanması gibi senaryolarla karşılaşılabilirdi.
- Yaşayan ve geçici bağlantılar: Bunun yerine, doğrudan bağlantı kurulan cihazlar arasında gerçekleşen, sürekli ve anlık bir veri aktarımı modeli benimsendi. Bu modelde, QR kodu tarandıktan sonra her iki tarayıcı da aynı anda aktif olmalı ve bağlantı sadece o anlık oturum için geçerli oluyor.
Bu yaklaşım, ürünü daha basit ve anlaşılır hale getirirken, kullanıcıların zihninde karmaşık senaryoların oluşmasını da engelliyor. Örneğin, kullanıcılar artık hesap oluşturma, gelen kutusu yönetme veya uzun süreli bağlantı linklerini saklama gibi endişeler taşımıyor.
Bağlantı Kimliğinin Rolü ve Güvenlik Modeli
QR kodu sadece bir bağlantı kurma aracı olarak kullanılabilir. Örneğin, aşağıdaki gibi basit bir URL içerebilir:
Burada yer alan pair-id, sadece WebSocket bağlantıları için bir buluşma noktası görevi görüyor. Bu kimlik, şifreleme anahtarı değildir; sadece iki tarayıcı arasındaki oturumun tanımlanmasını sağlar. QR kodunun yakalanması durumunda, üçüncü şahıslar bağlantı kurmaya çalışabilir, ancak bu, doğrudan verilerin şifresini çözemez. Şifreleme işlemi, tarayıcıların kendi ürettiği anahtarlar aracılığıyla gerçekleşir.
Bu ayrım, QR kodlarının kamuya açık alanlarda nasıl ele alınması gerektiği konusunda önemli bir fark yaratır. Eğer QR kodu bir şifreleme anahtarı olarak kullanılsaydı, kullanıcılar QR kodlarını çok daha dikkatli korumak zorunda kalacak ve UI, bu kodların gizli materyal olarak ele alınmasını gerektirecekti. Ancak bu modelde, bağlantı kimliği sadece bir buluşma noktası olarak görev yapıyor ve şifreleme süreci tarayıcıların kendi ürettiği anahtarlarla gerçekleşiyor.
Tarayıcı Tarafından Üretilen ECDH Anahtarları ile Güvenli Veri Aktarımı
Metin ve dosya aktarımı için, Web Crypto API kullanılarak tarayıcılar tarafından P-256 ECDH anahtar çiftleri üretiliyor. Her iki tarayıcı da kendi anahtar çiftini oluşturuyor ve bu anahtarların genel kısımları, bağlantı kanalı üzerinden karşılıklı olarak paylaşılıyor. Ardından, bu anahtarlar kullanılarak ortak gizli bir anahtar elde ediliyor ve bu gizli anahtar, AES-GCM şifrelemesi için kullanılıyor.
Bu süreç aşağıdaki adımlarla özetlenebilir:
- Tarayıcı A, ECDH anahtar çifti oluşturur.
- Tarayıcı B, ECDH anahtar çifti oluşturur.
- Her iki tarayıcı da genel anahtarlarını bağlantı hizmeti üzerinden paylaşır.
- Ortak gizli anahtar türetilir.
- Tarayıcı A, veriyi şifreleyerek gönderir.
- Tarayıcı B, veriyi aldıktan sonra şifresini çözer.
Metin ve dosya aktarımı için ayrı türetme bağlam dizgeleri kullanılıyor. Örneğin:
icyzip/text/ecdh/v2icyzip/file/ecdh/v1
Bu dizgeler, anahtar ayrımının sağlanması açısından kritik öneme sahip. Bu sayede, gelecekte yapılacak değişiklikler sırasında metin ve dosya aktarımı için kullanılan şifreleme yöntemleri birbirinden bağımsız olarak güncellenebilir.
Bağlantı Durumunun Doğru Bir Şekilde Yönetilmesi
"Bağlı" olarak tanımlanan bir durumun, aslında sonsuza kadar güvenilir olmadığı unutulmamalı. Tarayıcıların arka planda kapanması, telefonun uyku moduna geçmesi veya ağ bağlantısının yeniden kurulması gibi durumlar, bağlantının yeniden kurulmasını gerektirebilir. Bu nedenle, kullanıcı arayüzünün bağlantı durumunu doğru bir şekilde yansıtması gerekiyor.
Bağlantı durumunu kullanıcılara aktarırken en az üç farklı senaryo dikkate alınmalıdır:
- İkinci tarayıcının beklenmesi.
- Beklenen eşle bağlantının kurulmuş olması.
- Bağlantının kopması veya eşin doğrulanamaması durumunda kullanıcının yeniden QR kodu taratması gerektiğinin belirtilmesi.
Bu durumlar, kullanıcı deneyimini önemli ölçüde etkiler. Örneğin, basit bir "Bağlantı başarısız oldu" mesajı yerine, kullanıcının ne yapması gerektiğini açıkça belirten bir mesajın sunulması gerekiyor.
Dosya Aktarımında Farklı Yaklaşımlar Gerekiyor
Dosya aktarımı, metin aktarımından çok daha farklı dinamiklere sahip. Dosyalar genellikle daha büyük boyutlarda olur, ilerleme takibi gerektirir ve bellekte tamponlanmamalıdır. Mevcut tasarımda, dosya aktarımı için sadece bir dosyanın aktarımı destekleniyor. Bu kısıtlı yaklaşım, birçok karmaşık senaryoyu ortadan kaldırıyor:
- Klasör senkronizasyonu yerine sadece tek bir dosya aktarımı.
- Tekrar başlatılabilir çevrimdışı kuyruk yerine sadece anlık aktarım.
- Genel arşiv yerine doğrudan aktarım.
- Birden fazla alıcı yerine sadece iki cihaz arasında aktarım.
- Hesap tabanlı dosya geçmişi yerine sadece anlık aktarım.
Dosyanın göndericisi tarafından tarayıcıda şifrelenmesi ve ardından hizmet üzerinden şifrelenmiş şekilde alıcıya iletilmesi sağlanıyor. Alıcı, veriyi aldıktan sonra tarayıcıda şifresini çözüyor. Eğer şifre çözme işlemi başarısız olursa, aktarımın başarısız olarak kapatılması gerekiyor. Aksi takdirde, kullanıcıya eksik veya hatalı içerik gösterilebilir.
Ayrıca, tarayıcıların farklı platformlardaki davranış farklılıkları da dikkate alınması gereken bir diğer önemli nokta. Masaüstü tarayıcıları, Android Chrome, Android Firefox ve gömülü WebView benzeri tarayıcılar, arka plana geçme, panoya erişim, dosya girişi, indirme işlemleri ve bellek baskısı gibi konularda farklı davranışlar sergileyebilir. Bu nedenle, masaüstü tarayıcılarda çalışan bir özellik, gerçek cihazlar arasında veri aktarımı yapıldığında kırılgan hale gelebilir.
Meta Verilerin Önemi ve Pazarlama Söylemlerinin Sınırları
Verilerin tarayıcı tarafında şifrelenmesi, hizmetin hiçbir metadata görmediği anlamına gelmez. QR kodu tarama zamanı, bağlantı süresi, aktarılan veri boyutu ve aktarımın başarılı olup olmadığı gibi bilgiler hizmet tarafından kaydedilebilir. Bu nedenle, pazarlama söylemlerinde "tüm veriler gizlendi" gibi ifadeler kullanılırken dikkatli olunmalıdır.
Bu araç, basit bir kullanım senaryosuna odaklanarak başlasa da, gelecekte daha geniş özelliklere sahip olabilir. Örneğin, birden fazla dosya aktarımı, arka plan yeniden denemeleri, geçmiş oturumlara erişim veya aktarımın devam ettirilmesi gibi özellikler eklenebilir. Ancak her yeni özellik, kullanıcıların anlaması gereken durum sayısını artıracağı için, önce dar bir kullanım senaryosunu sağlam bir şekilde desteklemek önemlidir.
Yapay zeka özeti
QR kodlarıyla cihazlar arasında anında veri aktarımı sağlamak, kullanıcı dostu bir deneyim sunmanın yanı sıra güvenlik ve gizlilik açısından da dikkatli bir tasarım gerektiriyor. Basit bir araç geliştirirken nelere odaklanılması gerektiğini keşfedin.