Bezpečnosť

Ako je trezor postavený a čo by sa v ňom našlo po porušení.

Posledná aktualizácia 21. septembra 2026 · AssuredAuth, spoločnosť CircleRoll LLC

Toto je verejný popis toho, ako AssuredAuth chráni dvojfaktorové tajomstvá, heslá a karty, ktoré v ňom uchovávate. Je napísaný tak, aby čitateľ so zameraním na bezpečnosť mohol skontrolovať každé tvrdenie oproti aplikácii a oproti publikovaným testovacím vektorom (k dispozícii každému recenzentovi na požiadanie na adrese hello@assuredauth.com). Hovorí to, čo je pravda, a nič viac: nič tu netvrdí, že je mimo útoku, a nič nie je sľubované v percentách.

Stručne povedané: úložisko existuje na jednom mieste, vo vašom telefóne. Každá hodnota v ňom je zašifrovaná kľúčom, ktorý uchováva bezpečnostný hardvér telefónu a ktorý nemožno exportovať. Neprevádzkujeme žiadny server úložiska, neuchovávame žiadne kópie ani kľúč. Záložný súbor opúšťa telefón až po zašifrovaní pomocou prístupovej frázy, ktorá sa nikde neukladá.

Nahlásiť problém: hello@assuredauth.com. Pozri časť „Nahlásenie slabiny“ na konci.

1. Čo je šifrované a čím

ÚdajeNa telefóneKľúč
Dvojfaktorové tajomstvá (TOTP/HOTP/Steam seeds) Na telefóneObchod podporovaný službou Keychain (iOS) / Android Keystore KľúčHardvérovo viazaný kľúč platformy; riadok databázy obsahuje iba referenciu (secretRef), nikdy nie počiatočnú hodnotu (seed).
Heslá (hodnota hesla, poznámky) Na telefóneZapečatený riadok: AES-256-GCM, náhodný 96-bitový nonce na hodnotu KľúčNáhodný 256-bitový dátový kľúč, ktorý je sám obalený hardvérovým kľúčom v §2
Karty (číslo, expirácia, meno na karte, CVC) Na telefóneRovnaká pečať ako heslá; CVC je voliteľný a uloží sa iba vtedy, ak ho zadáte. KľúčRovnaký dátový kľúč
Metadáta (názvy služieb, používateľské mená, ikony, poradie zoradenia) Na telefóneDatabáza aplikácie (SwiftData / Room) KľúčChránené šifrovaním súborov operačného systému; považované za netajné
Záložný súbor (.authbackup) Na telefóneKamkoľvek ho umiestnite: Súbory, iCloud Drive, aplikácia Disk Google, priečinok s údajmi, hárok na zdieľanie KľúčKľúč odvodený z vašej prístupovej frázy (§3). Zapečatený súbor dostanú len spoločnosti Apple a Google a nič viac.
Aplikácia pre Watch / Wear Na telefóneVlastná kľúčenka hodiniek / EncryptedSharedPreferences KľúčKľúče platformy hodiniek; prenesené cez kanál spárovaného zariadenia platformy
Prevádzka rozšírenia pre počítače (jednorazové kódy na požiadanie) Na telefóneNeuložené; prenášané ako obálky šifrované medzi koncovými bodmi KľúčPár kľúčov X25519 na párovanie, súkromný kľúč v Keychain / Keystore; relé vidí iba šifrovaný text

Diagnostika nemá metódu, ktorá by akceptovala tajný kód. Žiadna analytická udalosť neobsahuje pole trezoru. Žiadna hodnota z trezoru sa nikdy nezapíše do protokolu, ani v žiadnom zostavení.

2. Kde sa kľúče nachádzajú na každej platforme

iOS. Dátový kľúč je obalený kľúčom vygenerovaným v rámci zabezpečenej enklávy (kSecAttrTokenIDSecureEnclave) s riadením prístupu .privateKeyUsage + .userPresence, prístupnosť …ThisDeviceOnly, v zdieľanej prístupovej skupine Keychain aplikácie, takže rozšírenie AutoFill môže použiť rovnaký kľúč. Súkromný kľúč nie je možné z enklávy prečítať aplikáciou, zálohou ani ladiacim programom; enkláva súhlasí s jeho použitím až po prítomnosti používateľa (Face ID, Touch ID alebo prístupový kód zariadenia). ThisDeviceOnly znamená, že záloha telefónu v iCloude alebo iTunes tento kľúč neobsahuje; obnovený telefón sa začína s prázdnym trezorom a vyžaduje si súbor zálohy a prístupovú frázu. Telefón bez prístupového kódu nemôže zablokovať kľúč .userPresence (Enclave ho odmieta vytvoriť) a simulátor sa podľa návrhu vydá rovnakou cestou (jeho výzva na prítomnosť je upozornenie, na ktoré žiadny test nedokáže odpovedať): dátový kľúč je tam obyčajná položka Keychain určená len pre zariadenie – stále mimo každej zálohy, stále nečitateľná, keď je telefón uzamknutý, ale bez druhej výzvy – a obrazovka Zabezpečenie hovorí presne to a navrhuje nastaviť prístupový kód.

Android. Dátový kľúč je obalený kľúčom AndroidKeyStore AES-256, vygenerovaným v StrongBoxe, keď ho zariadenie má (inak TEE), s nastavením setUserAuthenticationRequired(true) a 30-sekundovou platnosťou autentifikácie po biometrických alebo prihlasovacích údajoch zariadenia, ponechanými zapnutými parametrami setUnlockedDeviceRequired(true) a setInvalidatedByBiometricEnrollment(true). Posledný príznak je skôr úprimný ako záťažový: Android ho aplikuje iba na kľúče, ktoré vyžadujú biometrické údaje pri každom použití, takže na tomto 30-sekundovom kľúči s povolenými prihlasovacími údajmi zariadenia sa nič nemení – to, čo drží prst cudzieho človeka vonku, je to, že registrácia vyžaduje PIN kód a že odstránenie zámku obrazovky kľúč natrvalo zneplatní. Kľúče úložiska kľúčov nie je možné exportovať a sú vylúčené zo zálohy cloudu systému Android. Doména, ktorú aplikácia pomenuje vo svojich vlastných zobrazeniach (webDomain), sa považuje za dôveryhodnú iba zo známeho prehliadača; z akéhokoľvek iného balíka musí byť tiež doménou, ktorú systém overil pre daný balík (Digital Asset Links), pretože akákoľvek aplikácia si môže nárokovať akúkoľvek doménu.

Čo to znamená pre ukradnutý databázový súbor. Súbor SQLite a zapečatené riadky sú zašifrovaný text. Kľúč, ktorý ich otvára, je umiestnený v bezpečnostnom hardvéri telefónu, z ktorého súbor pochádza, a nemožno ho skopírovať spolu so súborom. Offline nie je potrebné nič hádať: dátový kľúč je náhodný, nie je odvodený z ničoho, čo si daná osoba vybrala.

3. Záložný súbor

Zálohy sú jediná vec, ktorá opúšťa telefón, takže sú v princípe jediným miestom, kde je možný offline útok. Táto konštrukcia robí tento útok drahým a zároveň mu poskytuje čo najmenej priestoru na spracovanie:

Súbor je vo formáte JSON a je čitateľný v ľubovoľnom textovom editore; nepriehľadný je iba zašifrovaný text. Niekto, kto nájde súbor o päť rokov, keď je aplikácia odstránená, môže presne vidieť, ako bol zapečatený, a otvoriť ho pomocou OpenSSL alebo ľubovoľnej knižnice Argon2.

Formát v1 (dodávaný vo verzii 1.0, zostáva čitateľný)

{
  "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 (surové bajty soli, nie base64)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); tag 16 bajtov, uložený samostatne
plaintextUTF-8 JSON, kľúče zoradené: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Poznámka ku kompatibilite: Android 1.0 napísal variant v1 — kdf malými písmenami, bez kľúča tagu (16-bajtový tag pripojený k šifrovanému textu), bez ďalších údajov. Obe platformy tieto súbory neustále čítajú (ak tag chýba: rozdeliť posledných 16 bajtov, otvoriť s prázdnym AAD; porovnať kdf bez rozlišovania veľkých a malých písmen) a obe teraz zapisujú iba vyššie uvedené rozloženie.

Formát v2 (aktuálny; predvolený pre 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 bajtov, uložený samostatne
plaintextUTF-8 JSON, kľúče zoradené: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

Argon2id je referenčná implementácia v jazyku C (phc-winner-argon2, CC0), ktorá je dostupná na oboch platformách. 64 MiB a 3 prechody trvajú na súčasnom telefóne približne sekundu a každý odhad stojí na akomkoľvek hardvéri toľko pamäte a času – vlastnosť, ktorú PBKDF2 chýba oproti GPU zariadeniam, a dôvod, prečo v2 existuje. Čítačka ignoruje kľúče, ktoré nepozná, takže čítačka v1 s telom v2 jednoducho nikdy nevidí karty.

Dôkaz

Tri súbory testovacích vektorov (záloha v1, záloha v2 a Argon2id) sú generované treťou implementáciou, nezávisle od oboch aplikácií (Node's OpenSSL pre PBKDF2 a AES-GCM, WebAssembly Argon2id overený v čase generovania oproti publikovaným odpovediam referenčnej implementácie). Každý obsahuje prístupovú frázu, soľ, nonce, otvorený text, odvodený kľúč, AAD, očakávaný šifrovaný text a značku a celý súbor. Jednotkové testy na iOS a Android čítajú rovnaké súbory a potvrdzujú rovnaké bajty – takže záloha zapečatená na jednej platforme sa dokážu, nie predpokladajú, otvoriť na druhej a zhoda všetkých troch nie je dvoma kópiami tej istej chyby. Doplnkový nástroj otvorí súbor, ktorý telefón skutočne napísal s tou istou treťou implementáciou, a skontroluje hlavičku podľa vyššie uvedených pravidiel (presne kľúče formátu, takže nemôže byť prítomná žiadna nápoveda ani názov; 16-bajtová salt, 12-bajtový nonce, 16-bajtová značka uložená samostatne; verzia 2 s veľkosťou presne 64 MiB / 3 / 1; nesprávna prístupová fráza odmietnutá); automatizovaný beh iOS zapíše súbor do simulátora a otvorí ho týmto spôsobom a prehľadá kontajner aplikácií simulátora, kontajner skupiny aplikácií a databázu kľúčeniek pre každé zadané heslo a číslo karty ako UTF-8 a UTF-16 (0 zhôd).

4. Model hrozieb

SituáciaČo majúČo dostanú
Stratený alebo ukradnutý telefón, zablokovaný Čo majúZariadenie, databázový súbor, zapečatené riadky Čo dostanúZašifrovaný text. Kľúč na zabalenie je v Secure Enclave / Trezore a uvoľní sa až po uzamknutí zariadenia a zadaní nového biometrického kódu alebo prístupového kódu. Vzdialené vymazanie telefónu (Nájsť môj / Nájsť moje zariadenie) zničí materiál kľúča spolu s ním.
Ukradnutý záložný súbor Čo majúSúbor .authbackup z cloudového účtu, e-mailu, notebooku Čo dostanúTelo AES-256-GCM pod kľúčom odvodeným z prístupovej frázy s dĺžkou najmenej 12 znakov, so soľou pre každý súbor a Argon2id s veľkosťou 64 MiB × 3 priechodov (v2) alebo PBKDF2 s rýchlosťou 600 000 kôl (v1). Žiadna nápoveda, žiadne používateľské meno, žiadny zoznam účtov v otvorenom kóde. Každý odhad stojí plné odvodenie; neexistuje žiadna skratka. Silná prístupová fráza je tu celou obranou a aplikácia to uvádza na hárku.
Ukradnuté zariadenie s odomknutou obrazovkou Čo majúTelefón v ruke, odomknutý Čo dostanúZoznam kódov. Úložisko (heslá, karty) je za zámkom aplikácie a znova sa uzamkne po uplynutí časovača automatického uzamknutia (ihneď / 1 min / 5 min); dešifrovaná hodnota existuje v pamäti iba vtedy, keď sa zobrazuje na obrazovke. Automatické dopĺňanie a export obyčajného textu vyžadujú nový biometrický údaj, aj keď je aplikácia otvorená. Ak máte obavy z tohto prípadu, zapnite uzamknutie aplikácie s možnosťou „Ihneď“.
Škodlivá aplikácia v tom istom telefóne Čo majúTriky s karanténou inej aplikácie, schránkou, prístupnosťou alebo prekrytím Čo dostanúNemôže čítať naše súbory (sandbox platformy) ani používať náš kľúč (kľúč je viazaný na našu identitu podpisu a prítomnosť používateľa). Kópie sa vymažú zo schránky po 30 sekundách; v systéme Android je kópia označená ako citlivá a vylúčená z histórie schránky. Obrazovky trezoru majú v systéme Android nastavenú hodnotu FLAG_SECURE (žiadne snímky obrazovky, žiadny záznam obrazovky, prázdne okno prepínača); systém iOS vyprázdni miniatúru prepínača. Automatické dopĺňanie v systéme Android sa poskytuje iba aplikáciám, ktoré systém overil oproti uloženej doméne (Digital Asset Links), takže aplikácii, ktorá vyzerá ako vyzerajúca aplikácia, sa vaše heslo neponúka.
Phishingová stránka Čo majúStránka, ktorá vyzerá ako tá, ktorú ste si uložili Čo dostanúNič sa nevyplní. Zhoda sa vykonáva podľa registrovateľnej domény (verejný zoznam prípon, zviazaný a aktualizovaný s aplikáciou): login.example.com a example.com sa zhodujú, example.com.evil.net a examp1e.com nie. Prehliadač v aplikácii sa zhoduje rovnakým spôsobom a vyplní iba rámec, ktorý sa opýtal, a opätovne sa skontroluje oproti pôvodu tohto rámca v momente vyplnenia; hostiteľ bez vlastnej registrovateľnej domény – IP adresa, holý názov v lokálnej sieti – sa zhoduje presne a nič voľnejšie. Automatické dopĺňanie v systéme iOS pridáva kontrolu pridružených domén od spoločnosti Apple. Heslo, ktoré musíte ručne vložiť do podobného objektu, stále predstavuje riziko; aplikácia ho nemôže odstrániť, iba sa vyhýba pomoci.
Naše vlastné servery Čo majú— Čo dostanúNeexistuje žiadny server úložiska. AssuredAuth nemá žiadne účty, žiadne prihlásenie ani žiadnu kópiu vášho úložiska, takže na našej strane nie je nič vaše, čo by sa dalo ukradnúť a prelomiť. Na strane servera bežia dve veci, z ktorých ani jedna sa nedotýka úložiska: prenosová poštová schránka pre rozšírenie pre počítače, ktorá ukladá obálky šifrované od konca do konca (jednorazové kódy, ktoré sa po prečítaní vymažú; prenos nikdy nemá kľúč), a výstupné servery voliteľného súkromného pripojenia, ktoré prenášajú prevádzku a neuchovávajú žiadne záznamy o prístupe.
Predvolanie alebo vládna žiadosť Čo majúPrávny proces adresovaný nám Čo dostanúNič na odovzdanie: nemáme žiadny trezor, žiadny kľúč, žiadnu prístupovú frázu ani zálohu. Môžeme byť nútení to povedať; nemôžeme byť nútení vytvoriť niečo, čo neexistuje.

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

6. Automatické dopĺňanie: čo sa vyplní a čo nie

KdeHesláKarty
iOS: Safari a aplikácie (rozšírenie AutoFill) HesláÁno, po novom Face ID / Touch ID / prístupovom kóde v rozšírení (LAContext) a iba pre registrovateľnú doménu, pre ktorú bol záznam uložený, pričom pridružené domény spoločnosti Apple kontrolujú prítomnosť aplikácií. KartyNie. Automatické vypĺňanie karty v prehliadači Safari je len od spoločnosti Apple; na obrazovke karty sa zobrazuje správa „Vyplní sa v prehliadači AssuredAuth a s kópiou“ a nič iné sa nesľubuje.
Android: aplikácie a Chrome (AutofillService) HesláÁno, overovanie pre každú množinu údajov: systém pred vyplnením zobrazí BiometricPrompt; balík aplikácie sa zhoduje iba vtedy, keď ho Digital Asset Links prepojí s uloženou doménou. KartyÁno, náznaky creditCardNumber, creditCardExpiration* a creditCardSecurityCode, rovnaká biometrická brána
Prehliadač AssuredAuth (obe platformy) HesláÁno, pomocou registrovateľnej domény – hostiteľa, ktorý nemá žiadnu vlastnú zhodu presne – do rámca, ktorý sa opýtal, biometricky pred vyplnením KartyÁno, detekciou poľa, biometricky pred vyplnením
Tlačidlá kopírovania HesláZa zámkom aplikácie, 30-sekundová schránka KartyČíslo, platnosť, CVC (rovnaké pravidlá)

Nič sa nenaplní na hostiteľovi, ktorý sa zdá byť podobný. Nič sa nenaplní bez biometrických údajov.

7. Čo sa nikdy nestane

Žiadny server úložiska. Žiadne analytické nástroje, ktoré by obsahovali pole úložiska. Žiadny export obyčajného textu bez potvrdzovacieho hárku a nových biometrických údajov. Žiadna SDK tretej strany nahratá na obrazovke úložiska. Žiadna snímka obrazovky úložiska. Žiadna nápoveda pre heslo. Žiadne zaznamenávanie hodnôt v žiadnej zostave.

8. Pred čím sa nemôžeme chrániť

Heslo dostatočne slabé na uhádnutie. Telefón, ktorého operačný systém je napadnutý v koreňovom nastavení (zariadenie s jailbreakom alebo rootnutým prístupom môže aplikácii klamať o všetkom vyššie uvedenom). Osoba, ktorá je sledovaná počas písania. Škodlivý softvér na ploche, do ktorej vkladáte kód. Hovoríme to preto, aby sa vyššie uvedený zoznam interpretoval tak, ako je: veci, ktoré dokáže dizajn odstrániť, odstránené.

9. Stav kontroly

Tento návrh bol jednotkovo testovaný oproti publikovaným známym odpovediam na oboch platformách a oproti vlastným multiplatformovým vektorom. Externá kontrola je na zozname vlastníka predtým, ako bude trezor inzerovaný v zozname obchodu; dovtedy to bude tento dokument uvádzať tu.

10. Kam veci idú

Nič z trezoru neopúšťa telefón, ale niekoľko vecí okolo neho beží na počítačoch iných ľudí. Toto je zoznam a to, čo každý z nich obsahuje; samotné toky údajov sú opísané v zásadách ochrany osobných údajov na stránke https://assuredauth.com/privacy.

Každý obsahuje len to, čo je uvedené v jeho riadku, a nič z trezoru. Zoznam sa mení spolu s produktom a táto sekcia sa mení spolu s ním.

Nahlásenie slabosti

Ak si myslíte, že ste v niečom z tu popísaného našli slabinu, napíšte na adresu hello@assuredauth.com s predmetom „Zabezpečenie“. Uveďte platformu, verziu aplikácie a postup; stačí dôkaz, ktorý využíva vaše vlastné údaje, a žiadame vás, aby ste netestovali s údajmi iných ľudí. Neponúkame kľúč PGP; ak by sa správa nemala doručiť obyčajným e-mailom, uveďte to v prvej správe a my zariadime iný spôsob.

Čo na oplátku sľubujeme: potvrdíme to do troch pracovných dní, budeme vás informovať o priebehu práce, opravíme pravdivé informácie predtým, ako budú zverejnené, a uvedieme vás tu, ak chcete byť uvedení ako autor. Nebudeme podnikať právne kroky v súvislosti s výskumom vykonaným v dobrej viere v rozsahu uvedenom nižšie.

V rozsahu: aplikácie pre iOS a Android, aplikácie pre hodinky, rozšírenie pre počítače, asuredauth.com a jeho API. Mimo rozsahu: samotné obchody App Store a Google Play, vyššie uvedení poskytovatelia, sociálne inžinierstvo kohokoľvek a odmietnutie služby.

Momentálne nie je žiadna odmena. Na hlásenie sa odpovedá opravou a poďakovaním, nie peniazmi.