Zabezpečení

Jak je trezor postaven a co by se v něm našlo při průniku.

Naposledy aktualizováno 21. září 2026 · AssuredAuth, společností CircleRoll LLC

Toto je veřejný popis toho, jak AssuredAuth chrání dvoufaktorová tajná data, hesla a karty, které v něm uchováváte. Je napsán tak, aby si čtenář se zaměřením na bezpečnost mohl ověřit každé tvrzení oproti aplikaci a oproti publikovaným testovacím vektorům (k dispozici každému recenzentovi na vyžádání na adrese hello@assuredauth.com). Říká to, co je pravda, a nic víc: nic zde netvrdí, že je mimo útok, a nic není slibováno v procentech.

Stručně řečeno: úložiště existuje na jednom místě, ve vašem telefonu. Každá hodnota v něm je zašifrována klíčem, který uchovává bezpečnostní hardware telefonu a nelze jej exportovat. Neprovozujeme žádný server úložiště, neuchováváme žádnou kopii ani klíč. Záložní soubor opouští telefon až poté, co je zašifrován pomocí hesla, které se nikde neukládá.

Nahlásit problém: hello@assuredauth.com. Viz „Nahlášení slabiny“ na konci.

1. Co je šifrováno a čím

DataNa telefonuKlíč
Dvoufaktorové tajemství (TOTP/HOTP/Steam seeds) Na telefonuKlíčenka (iOS) / Obchod podporovaný úložištěm klíčů pro Android KlíčHardwarově vázaný klíč platformy; řádek databáze obsahuje pouze referenci (secretRef), nikdy ne seed.
Hesla (hodnota hesla, poznámky) Na telefonuZapečetěný řádek: AES-256-GCM, náhodný 96bitový nonce na hodnotu KlíčNáhodný 256bitový datový klíč, sám obalený hardwarovým klíčem v §2
Karty (číslo, platnost, jméno na kartě, CVC) Na telefonuStejná pečeť jako u hesel; CVC je volitelný a ukládá se pouze v případě, že jej zadáte. KlíčStejný datový klíč
Metadata (názvy služeb, uživatelská jména, ikony, pořadí řazení) Na telefonuDatabáze aplikace (SwiftData / Room) KlíčChráněno šifrováním souborů operačního systému; považováno za netajné
Záložní soubor (.authbackup) Na telefonuKamkoli to umístíte: Soubory, iCloud Drive, aplikace Google Drive, DataFolder, sdílený list KlíčKlíč odvozený z vašeho hesla (§3). Apple a Google obdrží zapečetěný soubor a nic jiného.
Aplikace pro Watch / Wear Na telefonuVlastní klíčenka k hodinkám / EncryptedSharedPreferences KlíčKlíče platformy pro hodinky; přenášené přes kanál spárovaného zařízení platformy
Provoz rozšíření pro počítače (jednorázové kódy na vyžádání) Na telefonuNeukládá se; přenáší se jako obálky šifrované mezi konci KlíčPár klíčů X25519 na párování, soukromý klíč v řetězci klíčů / úložišti klíčů; relé vidí pouze šifrovaný text.

Diagnostika nemá žádnou metodu, která by přijímala tajný kód. Žádná analytická událost neobsahuje pole úložiště. Žádná hodnota z úložiště se nikdy nezapisuje do protokolu, a to ani v žádném sestavení.

2. Kde se klíče nacházejí na každé platformě

iOS. Datový klíč je zabalen v klíči vygenerovaném uvnitř Secure Enclave (kSecAttrTokenIDSecureEnclave) s řízením přístupu .privateKeyUsage + .userPresence, accessibility …ThisDeviceOnly, ve sdílené přístupové skupině Keychain aplikace, takže rozšíření AutoFill může používat stejný klíč. Soukromý klíč nelze z Enclave přečíst aplikací, zálohou ani ladicím programem; Enclave souhlasí s jeho použitím pouze po přítomnosti uživatele (Face ID, Touch ID nebo přístupový kód zařízení). ThisDeviceOnly znamená, že záloha telefonu na iCloudu nebo iTunes klíč neobsahuje; obnovený telefon začíná s prázdným trezorem a požaduje váš záložní soubor a přístupovou frázi. Telefon bez hesla nemůže zablokovat klíč .userPresence (Enclave ho odmítá vytvořit) a simulátor se záměrně vydává stejnou cestou (jeho výzva k zjištění přítomnosti je upozornění, na které žádný test nemůže odpovědět): datový klíč je tam obyčejná položka Keychain určená pouze pro zařízení – stále mimo každou zálohu, stále nečitelná, když je telefon uzamčen, ale bez druhé výzvy – a obrazovka Zabezpečení to přesně říká a navrhuje nastavení hesla.

Android. Datový klíč je obalen klíčem AndroidKeyStore AES-256, vygenerovaným v StrongBoxu, pokud zařízení nějaký má (jinak TEE), s parametrem setUserAuthenticationRequired(true) a 30sekundovou platností ověření po biometrickém nebo zařízení přihlašovacím údaji, parametry setUnlockedDeviceRequired(true) a setInvalidatedByBiometricEnrollment(true) ponechanými zapnutými. Poslední příznak je spíše upřímný než zátěžový: Android jej aplikuje pouze na klíče, které vyžadují biometrické údaje při každém použití, takže u tohoto 30sekundového klíče s povoleným přihlašovacím údajem zařízení se nic nemění – co drží prst cizí osoby mimo dosah, je to, že registrace vyžaduje PIN a že odstranění zámku obrazovky klíč trvale zneplatní. Klíče úložiště klíčů nelze exportovat a jsou vyloučeny ze zálohy cloudu Androidu. Doména, kterou aplikace pojmenovává ve svých vlastních zobrazeních (webDomain), je důvěryhodná pouze ze známého prohlížeče; z jakéhokoli jiného balíčku musí být také doménou, kterou systém pro daný balíček ověřil (Digital Asset Links), protože jakákoli aplikace si může nárokovat jakoukoli doménu.

Co to znamená pro ukradený soubor databáze. Soubor SQLite a zapečetěné řádky jsou šifrovaný text. Klíč, který je otevírá, je uložen v bezpečnostním hardwaru telefonu, ze kterého soubor pochází, a nelze jej s ním kopírovat. Offline není třeba nic hádat: datový klíč je náhodný, není odvozen z ničeho, co si daná osoba vybrala.

3. Záložní soubor

Zálohy jsou to jediné, co opouští telefon, takže jsou v principu jediným místem, kde je offline útok možný. Díky tomuto designu je tento útok drahý a zároveň má co nejméně prostoru pro práci:

Soubor je ve formátu JSON a čitelný v jakémkoli textovém editoru; neprůhledný je pouze zašifrovaný text. Někdo, kdo soubor najde za pět let, když je aplikace pryč, může přesně vidět, jak byl zapečetěn, a otevřít ho pomocí OpenSSL nebo jakékoli knihovny Argon2.

Formát v1 (dodává se ve verzi 1.0, zůstává čitelný)

{
  "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>"
}
KrokBajty
keyPBKDF2-HMAC-SHA256(passphrase as UTF-8, salt, 600000 rounds, 32 bytes)
aadUTF-8("authbackup:1:600000:") ‖ salt (neupravené bajty saltu, ne base64)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); tag 16 bajtů, uložen samostatně
plaintextUTF-8 JSON, klíče seřazené: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Poznámka ke kompatibilitě: Android 1.0 napsal variantu v1 — kdf malými písmeny, bez klíče tag (16bajtový tag připojený k šifrovanému textu), bez dalších dat. Obě platformy tyto soubory neustále čtou (pokud tag chybí: rozdělí posledních 16 bajtů, otevře s prázdným AAD; porovná kdf bez rozlišování velkých a malých písmen) a obě nyní zapisují pouze výše uvedené rozložení.

Formát v2 (aktuální; výchozí pro nové zálohy)

{
  "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>"
}
KrokBajty
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); tag 16 bajtů, uložen samostatně
plaintextUTF-8 JSON, klíče seřazené: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

Argon2id je referenční implementace v jazyce C (phc-winner-argon2, CC0), která je dostupná na obou platformách. 64 MiB a 3 průchody trvají na současném telefonu asi sekundu a každý odhad stojí stejnou paměť a čas na jakémkoli hardwaru – vlastnost, kterou PBKDF2 postrádá proti GPU sestavám, a důvod, proč v2 existuje. Čtečka ignoruje klíče, které nezná, takže čtečka v1 s tělem v2 jednoduše nikdy karty nevidí.

Důkaz

Tři soubory testovacích vektorů (záloha v1, záloha v2 a Argon2id) jsou generovány třetí implementací, nezávisle na obou aplikacích (Node's OpenSSL pro PBKDF2 a AES-GCM, Argon2id z WebAssembly kontrolovaný v době generování oproti publikovaným odpovědím referenční implementace). Každý z nich obsahuje heslo, salt, nonce, prostý text, odvozený klíč, AAD, očekávaný šifrovaný text a tag a celý soubor. Jednotkové testy na iOS a Androidu čtou stejné soubory a potvrzují stejné bajty – takže záloha zapečetěná na jedné platformě je prokázána, nikoli předpokládána, že se otevře na druhé platformě, a shoda všech tří není dvě kopie stejné chyby. Doprovodný nástroj otevře soubor, který telefon skutečně zapsal se stejnou třetí implementací, a zkontroluje hlavičku podle výše uvedených pravidel (přesně klíče formátu, takže nemůže být přítomna žádná nápověda ani název; 16bajtová salt, 12bajtový nonce, 16bajtová tag uložená odděleně; verze 2 přesně na 64 MiB / 3 / 1; nesprávné heslo odmítnuto); automatizovaný běh iOS zapíše soubor do simulátoru a tímto způsobem jej otevře a prohledá kontejner aplikací simulátoru, kontejner skupin aplikací a databázi klíčenek pro každé nasazené heslo a číslo karty v kódování UTF-8 a UTF-16 (0 zásahů).

4. Model hrozeb

SituaceCo majíCo dostanou
Ztracený nebo ukradený telefon, zamčený Co majíZařízení, databázový soubor, zapečetěné řádky Co dostanouŠifrovaný text. Zabalovací klíč je v Secure Enclave / Trezoru a uvolní se až po uzamčení zařízení a zadání nového biometrického kódu nebo hesla. Vzdálené vymazání telefonu (Najít můj / Najít moje zařízení) zničí materiál klíče spolu s ním.
Ukradený záložní soubor Co majíSoubor .authbackup z cloudového účtu, e-mailu, notebooku Co dostanouTělo AES-256-GCM pod klíčem odvozeným z hesla o délce alespoň 12 znaků, s `saltem` pro každý soubor a Argon2id s 64 MiB × 3 průchody (v2) nebo PBKDF2 s 600 000 průchody (v1). Žádná nápověda, žádné uživatelské jméno, žádný seznam účtů v otevřeném kódu. Každý odhad stojí plné odvození; neexistuje žádná zkratka. Silné heslo je zde celou obranou a aplikace to uvádí na listu.
Ukradené zařízení s odemčenou obrazovkou Co majíTelefon v ruce, odemčený Co dostanouSeznam kódů. Úložiště (hesla, karty) je za zámkem aplikace a znovu se uzamkne po uplynutí časovače automatického zámku (ihned / 1 minuta / 5 minut); dešifrovaná hodnota existuje v paměti pouze tehdy, když je zobrazena na obrazovce. Automatické vyplňování a export prostého textu vyžadují nový biometrický údaj, i když je aplikace otevřená. Pokud se o tento případ obáváte, zapněte zámek aplikace s možností „Okamžitě“.
Škodlivá aplikace ve stejném telefonu Co majíTriky s pískovištěm, schránkou, přístupností nebo překrytím jiné aplikace Co dostanouNemůže číst naše soubory (sandbox platformy) ani používat náš klíč (klíč je vázán na naši identitu podpisu a na přítomnost uživatele). Kopie se ze schránky vymažou po 30 sekundách; v systému Android je kopie označena jako citlivá a vyloučena z historie schránky. Obrazovky úložiště mají v systému Android nastavenou hodnotu FLAG_SECURE (žádné snímky obrazovky, žádný záznam obrazovky, prázdné okno přepínače); systém iOS vyprázdní miniaturu přepínače. Automatické vyplňování v systému Android se poskytnou pouze aplikacím, které systém ověřil oproti uložené doméně (Digital Asset Links), takže podobné aplikaci není nabídnuto vaše heslo.
Phishingová stránka Co majíStránka, která vypadá jako ta, kterou jste si uložili Co dostanouNic se nevyplňuje. Porovnávání probíhá podle registrovatelné domény (seznam veřejných přípon, sdružený a aktualizovaný s aplikací): login.example.com a example.com se shodují, example.com.evil.net a examp1e.com nikoli. Prohlížeč v aplikaci porovnává stejným způsobem a vyplňuje pouze rámce, který se ptal, a znovu porovnává s vlastním původem daného rámce v okamžiku vyplnění; hostitel bez vlastní registrovatelné domény – IP adresa, holý název v lokální síti – se shoduje přesně a nic méně. Automatické vyplňování v systému iOS přidává kontrolu přidružených domén od společnosti Apple. Heslo, které musíte ručně vložit do podobného rámce, stále představuje riziko; aplikace ho nemůže odstranit, pouze se vyhýbá pomoci.
Naše vlastní servery Co mají— Co dostanouNeexistuje žádný server úložiště. AssuredAuth nemá žádné účty, žádné přihlášení ani žádnou kopii vašeho úložiště, takže na naší straně není nic, co by mohlo být ukradeno a prolomeno. Na straně serveru běží dvě věci, z nichž ani jedna se úložiště nedotýká: přenosová poštovní schránka pro rozšíření pro stolní počítače, která ukládá obálky šifrované end-to-end (jednorázové kódy, které se po přečtení smažou; přenos nikdy nemá klíč), a výstupní servery volitelného privátního připojení, které přenášejí provoz a neuchovávají žádné protokoly přístupu.
Předvolání nebo žádost vlády Co majíPrávní proces adresovaný nám Co dostanouNic k předání: nemáme žádný trezor, žádný klíč, žádné heslo ani žádnou zálohu. Můžeme být nuceni to říct; nemůžeme být nuceni předložit něco, co neexistuje.

5. Schránka, snímky obrazovky a paměť

6. Automatické vyplňování: co se vyplní a co ne

KdeHeslaKarty
iOS: Safari a aplikace (rozšíření AutoFill) HeslaAno, po novém Face ID / Touch ID / hesle v rozšíření (LAContext) a pouze pro registrovatelnou doménu, pro kterou byl záznam uložen, s kontrolou aplikací pomocí přidružených domén Apple. KartyNe. Automatické vyplňování karet v Safari je pouze od Applu; na obrazovce karty se zobrazí „Vyplňuje se v prohlížeči AssuredAuth a kopíruje se“ a nic jiného se neslibuje.
Android: aplikace a Chrome (AutofillService) HeslaAno, ověřování pro každou datovou sadu: systém před vyplněním zobrazí BiometricPrompt; balíček aplikace se shoduje pouze tehdy, když jej Digital Asset Links propojí s uloženou doménou. KartyAno, nápovědy creditCardNumber, creditCardExpiration* a creditCardSecurityCode, stejná biometrická brána
Prohlížeč AssuredAuth (obě platformy) HeslaAno, pomocí registrovatelné domény – hostitele, který nemá žádnou vlastní shodu – do rámce, který se ptal, biometricky před vyplněním KartyAno, detekcí pole, biometricky před vyplněním
Tlačítka pro kopírování HeslaZa zámkem aplikace, 30sekundová schránka KartyČíslo, platnost platnosti, CVC (stejná pravidla)

Nic se nenaplní u hostitele, který se zdá být podobný. Nic se nenaplní bez biometrických údajů.

7. Co se nikdy nestane

Žádný server úložiště. Žádné analytické nástroje, které by obsahovaly pole úložiště. Žádný export prostého textu bez potvrzovacího listu a nových biometrických údajů. Žádná SDK třetí strany načtená na obrazovce úložiště. Žádný snímek obrazovky úložiště. Žádná nápověda k heslu. Žádné protokolování hodnot v žádném sestavení.

8. Proti čemu se nemůžeme chránit

Heslo dostatečně slabé na uhádnutí. Telefon, jehož operační systém je napaden v rootovém režimu (zařízení s jailbreakem nebo rootem může aplikaci lhát o všem výše uvedeném). Osoba, která je sledována při psaní. Malware na ploše, do kterého vkládáte kód. Říkáme to proto, aby byl výše uvedený seznam interpretován tak, jaký je: věci, které design dokáže odstranit, odstraněny.

9. Stav kontroly

Tento návrh byl jednotkově testován s ohledem na publikované známé odpovědi na obou platformách a s ohledem na jeho vlastní multiplatformní vektory. Před inzercí trezoru v obchodě je na seznamu vlastníků externí kontrola; dokud se tak nestane, bude to v tomto dokumentu uvedeno.

10. Kam se věci hýbou

Nic z úložiště neopouští telefon, ale několik věcí kolem něj běží na počítačích jiných lidí. Toto je seznam a co každá z nich obsahuje; samotné datové toky jsou popsány v zásadách ochrany osobních údajů na adrese https://assuredauth.com/privacy.

Každý obsahuje pouze to, co je uvedeno na jeho řádku, a nic z úložiště. Seznam se mění s produktem a tato sekce se mění s ním.

Hlášení slabosti

Pokud se domníváte, že jste v něčem z zde popsaného našli slabinu, napište na adresu hello@assuredauth.com s předmětem „Zabezpečení“. Uveďte prosím platformu, verzi aplikace a postup; stačí důkaz, který využívá vaše vlastní data, a žádáme vás, abyste netestovali s daty jiných lidí. Nenabízíme klíč PGP; pokud by hlášení nemělo být doručeno v obyčejné e-mailové podobě, sdělte to v první zprávě a my zařídíme jiný způsob.

Co na oplátku slibujeme: do tří pracovních dnů potvrdíme vaši příspěvek, budeme vás informovat o průběhu práce, opravíme pravdivé informace před jejich zveřejněním a uvedeme vás zde, pokud si přejete být uvedeni jako autor. V souvislosti s výzkumem provedeným v dobré víře v níže uvedeném rozsahu nebudeme podnikat právní kroky.

V rozsahu: aplikace pro iOS a Android, aplikace pro hodinky, rozšíření pro stolní počítače, asuredauth.com a jeho API. Mimo rozsah: samotné App Store a Google Play, výše uvedení poskytovatelé, sociální inženýrství kohokoli a odmítnutí služby.

V tuto chvíli se nevyplácí žádná odměna. Na hlášení se reaguje opravou a poděkováním, ne penězi.