Güvenlik

Kasanın nasıl inşa edildiği ve bir ihlal durumunda neler bulunacağı.

Son güncelleme 21 Eylül 2026 · AssuredAuth, CircleRoll LLC tarafından.

Bu, AssuredAuth'ın içinde sakladığınız iki faktörlü kimlik doğrulama bilgilerini, şifreleri ve kartları nasıl koruduğuna dair kamuya açık açıklamadır. Güvenlik bilincine sahip bir okuyucunun her iddiayı uygulama ve yayınlanmış test vektörlerine (herhangi bir inceleyiciye hello@assuredauth.com adresinden talep üzerine sağlanabilir) karşı kontrol edebilmesi için yazılmıştır. Sadece doğru olanı söyler ve fazlasını söylemez: burada hiçbir şeyin saldırılara karşı tamamen korunaklı olduğu iddia edilmez ve hiçbir şey yüzde olarak vaat edilmez.

Özetle: Kasa tek bir yerde, telefonunuzda bulunur. İçindeki her değer, telefonun güvenlik donanımının sakladığı ve dışarı aktarılamayan bir anahtarla şifrelenir. Hiçbir kasa sunucusu çalıştırmıyoruz, hiçbir kopyayı saklamıyoruz ve hiçbir anahtarı tutmuyoruz. Yedekleme dosyası, hiçbir yerde saklanmayan bir parola altında şifrelendikten sonra telefondan ayrılır.

Bir sorun bildirin: hello@assuredauth.com. Lütfen yazının sonundaki "Zayıflık bildirme" bölümüne bakın.

1. Neler neyle şifreleniyor?

VeriTelefondaAnahtar
İki faktörlü kimlik doğrulama sırları (TOTP/HOTP/Steam tohumları) TelefondaAnahtar Zinciri (iOS) / Android Keystore destekli depolama AnahtarPlatformun donanıma bağlı anahtarı; veritabanı satırı yalnızca bir referans (secretRef) içerir, asla tohum değerini içermez.
Şifreler (şifre değeri, notlar) TelefondaMühürlü satır: AES-256-GCM, değer başına rastgele 96 bitlik bir nonce. Anahtar§2'de belirtilen donanım anahtarı tarafından sarmalanmış rastgele bir 256 bit veri anahtarı.
Kartlar (numara, son kullanma tarihi, kart üzerindeki isim, CVC kodu) TelefondaŞifrelerle aynı mühür; CVC isteğe bağlıdır ve yalnızca girmeniz durumunda saklanır. AnahtarAynı veri anahtarı
Meta veriler (hizmet adları, kullanıcı adları, simgeler, sıralama düzeni) TelefondaUygulamanın veritabanı (SwiftData / Room) Anahtarİşletim sisteminin dosya şifrelemesiyle korunmaktadır; gizli olmayan dosya olarak kabul edilir.
Yedekleme dosyası (.authbackup) TelefondaNereye koyarsanız koyun: Dosyalar, iCloud Drive, Google Drive, appDataFolder, paylaşım sayfası AnahtarParolanızdan türetilen bir anahtar (§3). Apple ve Google mühürlü dosyayı alırlar ve başka hiçbir şey almazlar.
Watch / Wear eş uygulaması TelefondaSaatin kendi Anahtarlığı / ŞifrelenmişPaylaşılanTercihler AnahtarSaat platformunun anahtarları; platformun eşleştirilmiş cihaz kanalı üzerinden aktarılır.
Masaüstü uzantı trafiği (tek kullanımlık kodlar talep üzerine verilir) TelefondaDepolanmaz; uçtan uca şifrelenmiş zarflar olarak iletilir. AnahtarEşleştirme başına bir X25519 anahtar çifti, özel anahtar Anahtarlık/Anahtar Deposu'nda; röle yalnızca şifrelenmiş metni görür.

Tanılama bölümünde gizli bilgi kabul eden bir yöntem bulunmamaktadır. Hiçbir analiz olayında kasa alanı yer almaz. Kasadan gelen hiçbir değer, hiçbir derlemede günlüğe yazılmaz.

2. Her platformda anahtarların bulunduğu yer

iOS. Veri anahtarı, Güvenli Bölge (kSecAttrTokenIDSecureEnclave) içinde oluşturulan ve erişim kontrolü .privateKeyUsage + .userPresence, erişilebilirlik …ThisDeviceOnly olan bir anahtarla sarmalanmıştır; bu anahtar, uygulamanın paylaşılan Anahtar Zinciri erişim grubunda bulunur, böylece Otomatik Doldurma uzantısı aynı anahtarı kullanabilir. Özel anahtar, uygulama, yedekleme veya hata ayıklayıcı tarafından Güvenli Bölge'den okunamaz; Güvenli Bölge yalnızca kullanıcı mevcut olduğunda (Face ID, Touch ID veya cihaz parolası) kullanmayı kabul eder. ThisDeviceOnly, telefonun iCloud veya iTunes yedeklemesinin anahtarı içermediği anlamına gelir; geri yüklenen telefon boş bir kasa ile başlar ve yedekleme dosyanızı ve parolanızı ister. Parolası olmayan bir telefon, .userPresence anahtarını kilitleyemez (Enclave bunu oluşturmayı reddeder) ve simülatör de tasarım gereği aynı yolu izler (varlık uyarısı, hiçbir testin yanıtlayamayacağı bir uyarıdır): burada veri anahtarı, yalnızca cihaza özgü düz bir Anahtar Zinciri öğesidir - hala her yedeklemede yer almaz, telefon kilitliyken hala okunamaz, ancak ikinci bir uyarı yoktur - ve Güvenlik ekranı tam olarak bunu söyler ve bir parola belirlemeyi önerir.

Android. Veri anahtarı, cihazda StrongBox varsa (aksi takdirde TEE) StrongBox'ta oluşturulan bir AndroidKeyStore AES-256 anahtarıyla sarmalanmıştır; setUserAuthenticationRequired(true) ve biyometrik veya cihaz kimlik bilgilerinden sonra 30 saniyelik kimlik doğrulama geçerliliği, setUnlockedDeviceRequired(true) ve setInvalidatedByBiometricEnrollment(true) ayarları açık bırakılmıştır. Son bayrak, yük taşıyıcı olmaktan ziyade dürüst bir yaklaşımdır: Android bunu yalnızca her kullanımda biyometrik kimlik doğrulaması gerektiren anahtarlara uygular, bu nedenle cihaz kimlik bilgilerine izin verilen bu 30 saniyelik anahtarda hiçbir şeyi değiştirmez; yabancı birinin parmağını dışarıda tutan şey, kayıt için PIN gerektirmesi ve ekran kilidinin kaldırılmasının anahtarı tamamen geçersiz kılmasıdır. Keystore anahtarları dışa aktarılamaz ve Android'in bulut yedeklemesinden hariç tutulur. Bir uygulamanın kendi görünümlerinde adlandırdığı bir alan adı (webDomain), yalnızca bilinen bir tarayıcıdan kabul edilir; Diğer paketlerden herhangi birinden farklı olarak, sistemin o paket için doğruladığı bir alan adı olması gerekir (Dijital Varlık Bağlantıları), çünkü herhangi bir uygulama herhangi bir alan adını talep edebilir.

Bu durum, çalınan bir veritabanı dosyası için ne anlama geliyor? SQLite dosyası ve mühürlenmiş satırlar şifrelenmiş metindir. Bunları açan anahtar, dosyanın geldiği telefondaki güvenlik donanımında bulunur ve dosyayla birlikte kopyalanamaz. Çevrimdışı olarak tahmin edilecek bir şey yoktur: veri anahtarı rastgele oluşturulur, bir kişinin seçtiği herhangi bir şeyden türetilmez.

3. Yedekleme dosyası

Yedeklemeler, telefondan ayrılan tek şeydir; bu nedenle, prensip olarak çevrimdışı bir saldırının mümkün olduğu tek yer burasıdır. Tasarım, bu saldırıyı maliyetli hale getirir ve ona çalışabileceği en az şeyi verir:

Dosya JSON formatındadır ve herhangi bir metin düzenleyicide okunabilir; yalnızca şifrelenmiş metin anlaşılmazdır. Beş yıl sonra, uygulama ortadan kalktıktan sonra dosyayı bulan biri, dosyanın nasıl mühürlendiğini tam olarak görebilir ve OpenSSL veya herhangi bir Argon2 kütüphanesiyle açabilir.

Biçim v1 (1.0 sürümünde gönderildi, okunabilirliğini koruyor)

{
  "format": "authbackup",
  "version": 1,
  "kdf": "PBKDF2-HMAC-SHA256",
  "rounds": 600000,
  "salt": "<base64, 16 bytes>",
  "cipher": "AES-256-GCM",
  "nonce": "<base64, 12 bytes>",
  "ciphertext": "<base64>",
  "tag": "<base64, 16 bytes>"
}
AdımBayt
keyPBKDF2-HMAC-SHA256(passphrase as UTF-8, salt, 600000 rounds, 32 bytes)
aadUTF-8("authbackup:1:600000:") ‖ salt (ham tuz baytları, base64 değil)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); 16 baytlık etiket, ayrı olarak saklanır
plaintextUTF-8 JSON, anahtarlar sıralanmış: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Uyumluluk notu: Android 1.0, v1'in bir varyantını yazdı — küçük harfli kdf, etiket anahtarı yok (şifreli metne eklenen 16 baytlık etiket), ek veri yok. Her iki platform da bu dosyaları okumaya devam ediyor (etiket yoksa: son 16 baytı bölün, boş bir AAD ile açın; kdf'yi büyük/küçük harf duyarlılığı olmadan karşılaştırın) ve her ikisi de artık yalnızca yukarıdaki düzeni yazıyor.

Biçim v2 (mevcut; yeni yedeklemeler için varsayılan)

{
  "format": "authbackup",
  "version": 2,
  "kdf": "Argon2id",
  "memoryKiB": 65536,
  "passes": 3,
  "lanes": 1,
  "salt": "<base64, 16 bytes>",
  "cipher": "AES-256-GCM",
  "nonce": "<base64, 12 bytes>",
  "ciphertext": "<base64>",
  "tag": "<base64, 16 bytes>"
}
AdımBayt
keyArgon2id(version 0x13, passphrase as UTF-8, salt, m = 65536 KiB, t = 3, p = 1, tagLength 32, no secret, no associated data)
aadUTF-8("authbackup:2:argon2id:65536:3:1:") ‖ salt
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); 16 baytlık etiket, ayrı olarak saklanır
plaintextUTF-8 JSON, anahtarlar sıralanmış: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

Argon2id, her iki platformda da bulunan referans C uygulamasıdır (phc-winner-argon2, CC0). 64 MiB ve 3 geçiş, mevcut bir telefonda yaklaşık bir saniye sürer ve her tahminin herhangi bir donanımda bu kadar bellek ve zaman maliyetine neden olmasını sağlar; bu özellik PBKDF2'nin GPU sistemlerine karşı sahip olmadığı bir özelliktir ve v2'nin var olma nedenidir. Bir okuyucu bilmediği tuşları yok sayar, bu nedenle v2 gövdesi verilen bir v1 okuyucu kartları asla görmez.

Kanıt

Üç test vektör dosyası (yedekleme v1, yedekleme v2 ve Argon2id), her iki uygulamadan bağımsız üçüncü bir uygulama tarafından oluşturulur (Node'un PBKDF2 ve AES-GCM için OpenSSL'i, oluşturma sırasında referans uygulamanın yayınlanmış yanıtlarına karşı kontrol edilen bir WebAssembly Argon2id). Her biri parola, tuz, nonce, düz metin, türetilmiş anahtar, AAD, beklenen şifreli metin ve etiket ile dosyanın tamamını içerir. iOS ve Android'deki birim testleri aynı dosyaları okur ve aynı baytları doğrular; bu nedenle bir platformda mühürlenmiş bir yedeklemenin diğerinde açılabileceği varsayılmaz, kanıtlanır ve üçünün de aynı sonucu vermesi aynı hatanın iki kopyası değildir. Yardımcı bir araç, telefonun aynı üçüncü uygulama ile gerçekten yazdığı bir dosyayı açar ve başlığı yukarıdaki kurallara göre kontrol eder (tam olarak formatın anahtarları, bu nedenle ipucu veya isim bulunamaz; 16 baytlık tuz, 12 baytlık nonce, ayrı olarak saklanan 16 baytlık etiket; sürüm 2 tam olarak 64 MiB / 3 / 1; yanlış parola reddedilir); otomatik iOS çalıştırması simülatörde bir tane yazar ve bu şekilde açar ve simülatörün uygulama kapsayıcısında, Uygulama Grubu kapsayıcısında ve anahtar zinciri veritabanında her tohumlanmış parola ve kart numarasını UTF-8 ve UTF-16 olarak arar (0 sonuç).

4. Tehdit modeli

DurumSahip oldukları şeyNe elde ediyorlar?
Kaybolmuş veya çalınmış telefon, kilitli Sahip oldukları şeyCihaz, veritabanı dosyası, mühürlenmiş satırlar Ne elde ediyorlar?Şifrelenmiş metin. Şifreleme anahtarı Güvenli Bölge/Güçlü Kutu içinde bulunur ve yalnızca cihaz kilidi açıldıktan ve yeni bir biyometrik veri veya parola girildikten sonra serbest bırakılır. Telefonu uzaktan silmek (Telefonumu Bul/Cihazımı Bul) anahtar materyalini de yok eder.
Çalınan yedekleme dosyası Sahip oldukları şeyBulut hesabından, e-postadan veya dizüstü bilgisayardan alınan .authbackup dosyası. Ne elde ediyorlar?En az 12 karakterden oluşan bir parola cümlesinden türetilen bir anahtar altında AES-256-GCM gövdesi, dosya başına tuz ve 64 MiB × 3 geçişte (v2) Argon2id veya 600.000 turda (v1) PBKDF2 ile çalışır. İpucu yok, kullanıcı adı yok, açık metinde hesap listesi yok. Her tahmin, tam türetme maliyetine neden olur; kısayol yok. Burada tüm savunma güçlü bir parola cümlesinden ibarettir ve uygulama bunu sayfada belirtiyor.
Ekran kilidi açık halde çalınmış cihaz Sahip oldukları şeyElinizde, kilidi açık bir telefon Ne elde ediyorlar?Kodlar listesi. Kasa (şifreler, kartlar) uygulama kilidinin arkasındadır ve otomatik kilit zamanlayıcısında (hemen / 1 dk / 5 dk) yeniden kilitlenir; şifresi çözülmüş değer yalnızca ekranda gösterildiği sürece bellekte bulunur. Otomatik doldurma ve düz metin dışa aktarma, uygulama açıkken bile yeni bir biyometrik kimlik doğrulaması ister. Bu durumdan endişe ediyorsanız, uygulama kilidini "Hemen" seçeneğiyle açın.
Aynı telefondaki kötü amaçlı uygulama Sahip oldukları şeyBaşka bir uygulamanın sanal alanı, pano, erişilebilirlik veya yer paylaşımı hileleri Ne elde ediyorlar?Uygulama dosyalarımızı okuyamaz (platform sanal alanı) veya anahtarımızı kullanamaz (anahtar, imzalama kimliğimize ve kullanıcı varlığına bağlıdır). Kopyalar 30 saniye sonra panodan silinir; Android'de kopya hassas olarak işaretlenir ve pano geçmişinden hariç tutulur. Vault ekranları Android'de FLAG_SECURE olarak ayarlanır (ekran görüntüsü yok, ekran kaydı yok, geçiş ekranında boş); iOS'ta geçiş ekranı küçük resmi boş bırakılır. Android'de otomatik doldurma yalnızca sistemin kaydedilen alan adına (Dijital Varlık Bağlantıları) karşı doğruladığı uygulamalara sunulur, bu nedenle benzer bir uygulamaya şifreniz sunulmaz.
Kimlik avı sayfası Sahip oldukları şeyKaydettiğiniz siteye benzeyen bir site. Ne elde ediyorlar?Hiçbir şey doldurulmaz. Eşleştirme, kayıt edilebilir alan adına göre yapılır (uygulama ile birlikte gelen ve güncellenen genel sonek listesi): login.example.com ve example.com eşleşir, example.com.evil.net ve examp1e.com eşleşmez. Uygulama içi tarayıcı da aynı şekilde eşleşir ve yalnızca istenen çerçeveye doldurulur, doldurma anındaki çerçevenin kendi kaynağına göre yeniden kontrol edilir; kendi kayıt edilebilir alan adı olmayan bir sunucu (bir IP adresi, yerel ağda çıplak bir ad) tam olarak eşleşir ve daha gevşek bir eşleşme olmaz. iOS Otomatik Doldurma, Apple'ın ilişkili alan adları kontrolünü ekler. Benzer bir yere elle yapıştırmanız gereken bir parola hala bir risktir; uygulama bunu kaldıramaz, yalnızca yardım etmekten kaçınabilir.
Kendi sunucularımız Sahip oldukları şey— Ne elde ediyorlar?Kasa sunucusu yok. AssuredAuth'ın hesapları, oturum açma işlemleri ve kasanızın bir kopyası yok, bu nedenle bizim tarafımızda çalınabilecek ve kırılabilecek hiçbir şeyiniz yok. Sunucu tarafında çalışan iki şey var ve bunların hiçbiri kasaya dokunmuyor: uçtan uca şifrelenmiş zarfları (tek kullanımlık kodlar, okunduğunda silinir; rölenin asla anahtarı yoktur) depolayan masaüstü uzantısı için bir röle posta kutusu ve trafiği taşıyan ve erişim günlüklerini tutmayan isteğe bağlı özel bağlantının çıkış sunucuları.
Bir mahkeme celbi veya hükümet talebi Sahip oldukları şeyBize yöneltilen hukuki süreç Ne elde ediyorlar?Teslim edecek hiçbir şeyimiz yok: elimizde kasa, anahtar, parola veya yedekleme yok. Bunu söylemeye mecbur bırakılabiliriz; ancak var olmayan bir şeyi üretmeye zorlanamayız.

5. Pano, ekran görüntüleri ve hafıza

6. Otomatik Doldurma: Neler doldurulur, neler doldurulmaz

NeredeŞifrelerKartlar
iOS: Safari ve uygulamalar (Otomatik Doldurma uzantısı) ŞifrelerEvet, uzantıda (LAContext) yeni bir Face ID / Touch ID / parola girdikten sonra ve yalnızca Apple'ın uygulamalar için ilişkili alan adları kontrolüyle, girişin kaydedildiği kayıt edilebilir alan adı için geçerlidir. KartlarHayır. Safari'deki kart otomatik doldurma özelliği yalnızca Apple'a aittir; kart ekranında "AssuredAuth tarayıcısında ve Kopyala seçeneğiyle doldurulur" yazar ve başka hiçbir şey vaat etmez.
Android: uygulamalar ve Chrome (AutofillService) ŞifrelerEvet, veri seti bazında kimlik doğrulama: sistem doldurmadan önce BiometricPrompt'u gösterir; uygulama paketi yalnızca Digital Asset Links onu kaydedilmiş alan adıyla ilişkilendirdiğinde eşleştirilir. KartlarEvet, kredi kartı numarası, kredi kartı son kullanma tarihi* ve kredi kartı güvenlik kodu ipuçları, aynı biyometrik geçit.
AssuredAuth tarayıcısı (her iki platformda da) ŞifrelerEvet, kayıt edilebilir alan adı aracılığıyla — tam olarak kendi eşleşmelerinden hiçbirisi olmayan bir sunucu — istenen çerçeveye, doldurmadan önce biyometrik verilerle giriliyor. KartlarEvet, saha tespiti yöntemiyle, dolumdan önce biyometrik yöntem kullanılır.
Kopyalama düğmeleri ŞifrelerUygulama kilidinin arkasında, 30 saniyelik pano KartlarNumara, son kullanma tarihi, CVC (aynı kurallar)

Benzer görünümlü bir cihazda hiçbir şey doldurulmaz. Biyometrik veri olmadan hiçbir şey doldurulmaz.

7. Asla gerçekleşmeyen şeyler

Kasa sunucusu yok. Kasa alanı içeren analiz aracı yok. Onay formu ve yeni bir biyometrik veri olmadan düz metin dışa aktarma yok. Kasa ekranında üçüncü taraf SDK yüklü değil. Kasa ekranının ekran görüntüsü yok. Parola ipucu yok. Herhangi bir sürümde değerlerin kaydı tutulmuyor.

8. Korunamayacağımız şeyler

Tahmin edilebilecek kadar zayıf bir parola. İşletim sistemi temelden tehlikeye atılmış bir telefon (jailbreak yapılmış veya rootlanmış bir cihaz, yukarıdakilerin hepsi hakkında uygulamaya yalan söyleyebilir). Yazarken izlenen bir kişi. Masaüstüne yapıştırdığınız kötü amaçlı yazılım. Bunu söylüyoruz ki, yukarıdaki liste olduğu gibi okunsun: bir tasarımın kaldırabileceği şeyler, kaldırıldı.

9. İnceleme durumu

Bu tasarım, hem platformlarda yayınlanmış bilinen yanıtlara hem de kendi platformlar arası vektörlerine karşı birim testinden geçirilmiştir. Kasanın mağaza listesinde reklamı yapılmadan önce harici bir inceleme yapılması, sahibinin listesinde yer almaktadır; bu gerçekleşene kadar, bu belgede bu durum belirtilecektir.

10. İşlerin aktığı yer

Kasanın içindeki hiçbir şey telefondan dışarı çıkmaz, ancak etrafındaki bazı şeyler başkalarının makinelerinde çalışır. Bu liste ve her birinin ne içerdiği; veri akışlarının kendileri ise https://assuredauth.com/privacy adresindeki gizlilik politikasında açıklanmıştır.

Her biri kendi satırında yazanı içerir ve kasadan hiçbir şey içermez. Liste ürünle birlikte değişir ve bu bölüm de onunla birlikte değişir.

Zayıflığı bildirmek

Burada açıklanan herhangi bir şeyde bir güvenlik açığı bulduğunuzu düşünüyorsanız, lütfen hello@assuredauth.com adresine "Güvenlik" konu başlığıyla bir e-posta gönderin. Lütfen platformu, uygulama sürümünü ve adımları ekleyin; kendi verilerinizi kullanan bir kanıt yeterlidir ve başkalarının verileriyle test etmemenizi rica ederiz. PGP anahtarı sağlamıyoruz; bir raporun düz e-posta yoluyla iletilmemesi gerekiyorsa, bunu ilk mesajda belirtin ve başka bir yol ayarlayalım.

Karşılığında size şu sözü veriyoruz: Üç iş günü içinde geri dönüş yapacağız, çalışmalarımız sırasında sizi bilgilendireceğiz, yayınlanmadan önce gerçekleri düzelteceğiz ve isterseniz burada size atıfta bulunacağız. Aşağıda belirtilen kapsamda iyi niyetle yapılan araştırmalar nedeniyle yasal işlem başlatmayacağız.

Kapsam dahilindekiler: iOS ve Android uygulamaları, saat uygulamaları, masaüstü uzantısı, assuredauth.com ve API'si. Kapsam dışında kalanlar: App Store ve Google Play'in kendisi, yukarıda listelenen sağlayıcılar, herhangi birine yönelik sosyal mühendislik ve hizmet reddi saldırıları.

Şu an için ödül yok. Bildirimlere para yerine çözüm önerisi ve teşekkürle yanıt veriliyor.