Biztonság

Hogyan épült a trezor, és mit találna egy betörés.

Utolsó frissítés: 2026. szeptember 21. · AssuredAuth, a CircleRoll LLC által

Ez a nyilvános leírás arról, hogyan védi az AssuredAuth a benne tárolt kétfaktoros titkokat, jelszavakat és kártyákat. Úgy íródott, hogy a biztonságtudatos olvasó minden állítást ellenőrizhessen az alkalmazással és a közzétett tesztvektorokkal szemben (amelyek kérésre elérhetők bármely véleményező számára a hello@assuredauth.com címen). Azt mondja, ami igaz, és semmi többet: semmi sem állítja, hogy támadhatatlan lenne, és semmi sem ígérhető százalékos formában.

Röviden: a trezor egy helyen található, a telefonodon. Minden benne lévő érték titkosítva van egy kulccsal, amelyet a telefon biztonsági hardvere tárol, és nem tud exportálni. Nem üzemeltetünk trezorszervert, nem tárolunk másolatokat és kulcsot. A biztonsági mentési fájl csak azután hagyja el a telefont, hogy egy olyan jelszóval titkosították, amelyet soha sehol nem tárolnak.

Probléma bejelentése: hello@assuredauth.com. Lásd a „Gyengeség jelentése” részt a végén.

1. Mi van titkosítva, mivel

AdatA telefononKulcs
Kétfaktoros titkok (TOTP/HOTP/Steam magok) A telefononKulcstartó (iOS) / Android Keystore által támogatott áruház KulcsA platform hardverhez kötött kulcsa; az adatbázis sor csak egy referenciát (secretRef) tartalmaz, soha nem a kezdőértéket.
Jelszavak (a jelszó értéke, megjegyzések) A telefononLezárt sor: AES-256-GCM, egy véletlenszerű 96 bites nonce értékenként KulcsEgy véletlenszerű 256 bites adatkulcs, amelyet a §2-ben található hardverkulcs csomagol be
Kártyák (szám, lejárat, kártyán szereplő név, CVC) A telefononUgyanaz a pecsét, mint a jelszavaké; a CVC opcionális, és csak akkor tárolódik, ha Ön adja meg. KulcsUgyanaz az adatkulcs
Metaadatok (szolgáltatásnevek, felhasználónevek, ikonok, rendezési sorrend) A telefononAz alkalmazás adatbázisa (SwiftData / Room) KulcsAz operációs rendszer fájltitkosítása védi; nem titkosként kezelik
Biztonsági mentési fájl (.authbackup) A telefononBárhová is teszed: Fájlok, iCloud Drive, Google Drive alkalmazás, Adatmappa, egy megosztási lap KulcsA jelszavadból származtatott kulcs (§3). Az Apple és a Google csak a lezárt fájlt kapja meg, semmi mást.
Watch / Wear kísérőalkalmazás A telefononAz óra saját kulcstartója / EncryptedSharedPreferences KulcsAz óra platformjának kulcsai; a platform párosított eszközcsatornáján keresztül továbbítva
Asztali bővítmény forgalma (egyszeri kódok kérésre) A telefononNincs tárolva; végponttól végpontig titkosított borítékként továbbítva KulcsEgy X25519 kulcspár párosításonként, privát kulcs a kulcstartóban / kulcstárolóban; a relé csak titkosított szöveget lát

A diagnosztikának nincs olyan metódusa, amely titkos kulcsot fogad el. Egyetlen analitikai esemény sem tartalmaz vault mezőt. A vaultból származó érték soha nem kerül naplóba, semmilyen buildben.

2. Hol találhatók a kulcsok, minden platformon

iOS. Az adatkulcsot a Secure Enclave-en (kSecAttrTokenIDSecureEnclave) belül generált kulcs veszi körül, amelynek hozzáférés-vezérlése .privateKeyUsage + .userPresence, accessibility …ThisDeviceOnly, és amely az alkalmazás megosztott Keychain hozzáférési csoportjában található, így az AutoFill bővítmény ugyanazt a kulcsot használhatja. A privát kulcsot az alkalmazás, egy biztonsági mentés vagy egy hibakereső nem olvashatja ki az Enclave-ból; az Enclave csak akkor járul hozzá a használatához, ha a felhasználó jelen van (Face ID, Touch ID vagy az eszköz jelszava). A ThisDeviceOnly azt jelenti, hogy a telefon iCloud vagy iTunes biztonsági mentése nem tartalmazza a kulcsot; a visszaállított telefon egy üres trezorral indul, és kéri a biztonsági mentési fájlt és a jelszót. Egy jelszó nélküli telefon nem tud hozzáférést biztosítani egy .userPresence kulcshoz (az Enclave nem hajlandó létrehozni egyet), és a szimulátor is ugyanezt az utat járja be (a jelenléti prompt egy riasztás, amire egyetlen teszt sem tud válaszolni): ott az adatkulcs egy egyszerű, csak az eszközön található kulcstartó elem – még mindig nincs minden biztonsági mentésben, továbbra is olvashatatlan, amíg a telefon zárolva van, de nincs második prompt –, és a Biztonsági képernyő pontosan ezt mondja, és javasolja egy jelszó beállítását.

Android. Az adatkulcsot egy AndroidKeyStore AES-256 kulcs csomagolja, amelyet a StrongBox generál, amikor az eszköz rendelkezik ilyennel (különben a TEE-vel), a setUserAuthenticationRequired(true) paraméterrel és egy 30 másodperces hitelesítési érvényességgel biometrikus vagy eszközhitelesítő adat megadása után, a setUnlockedDeviceRequired(true) és a setInvalidatedByBiometricEnrollment(true) paraméterekkel. Ez az utolsó jelző inkább őszinte, mint teherbíró: az Android csak olyan kulcsokra alkalmazza, amelyek minden használatkor biometrikus adatot igényelnek, így ennél a 30 másodperces kulccsal, amelynél az eszközhitelesítő adat engedélyezett, ez semmit sem változtat – az idegen ujját az tartja távol, hogy a regisztráláshoz szükség van a PIN-kódra, és a képernyőzár feloldása véglegesen érvényteleníti a kulcsot. A kulcstároló kulcsok nem exportálhatók, és nem kerülnek felhasználásra az Android felhőalapú biztonsági mentésében. Egy alkalmazás által a saját nézeteiben (webDomain) elnevezett domaint csak egy ismert böngészőből hiszünk; bármely más csomagból is olyannak kell lennie, amelyet a rendszer ellenőrzött az adott csomaghoz (Digital Asset Links), mivel bármely alkalmazás igényelhet bármilyen domaint.

Mit jelent ez egy ellopott adatbázisfájl esetében? Az SQLite fájl és a lezárt sorok titkosított szöveget tartalmaznak. A kulcs, ami megnyitja őket, a fájlt tartalmazó telefon biztonsági hardverében található, és nem másolható a fájllal együtt. Offline nincs mit találgatni: az adatkulcs véletlenszerű, nem egy személy által választott dologból származik.

3. A biztonsági mentési fájl

A biztonsági mentések az egyetlen dolgok, amik elhagyják a telefont, így elvileg ezek az egyetlen helyek, ahol offline támadásra van lehetőség. A kialakítás drágává teszi ezt a támadást, és a lehető legkevesebb erőforrást biztosítja:

A fájl JSON formátumú és bármilyen szövegszerkesztőben olvasható; csak a titkosított szöveg átlátszatlan. Aki öt év múlva, az alkalmazás eltűnése után megtalálja a fájlt, pontosan láthatja, hogyan lett lezárva, és megnyithatja OpenSSL-lel vagy bármely Argon2 könyvtárral.

v1 formátum (1.0 verzióban szállítva, olvasható marad)

{
  "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>"
}
LépésBájtok
keyPBKDF2-HMAC-SHA256(passphrase as UTF-8, salt, 600000 rounds, 32 bytes)
aadUTF-8("authbackup:1:600000:") ‖ salt (nyers sóbájtok, nem base64)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); 16 bájtos címke, külön tárolva
plaintextUTF-8 JSON, kulcsok rendezve: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Kompatibilitási megjegyzés: Az Android 1.0 a v1 egy variánsát írta — kdf kisbetűs, kulcscímke nélkül (a 16 bájtos címke hozzáfűzve a titkosított szöveghez), további adatok nélkül. Mindkét platform folyamatosan olvassa ezeket a fájlokat (ha a címke hiányzik: az utolsó 16 bájt felosztása, üres AAD-vel való megnyitás; a kdf összehasonlításakor ne legyen megkülönböztetendő a kis- és nagybetűk), és most már mindkettő csak a fenti elrendezést írja.

Formátum v2 (jelenlegi; az új biztonsági mentések alapértelmezett formátuma)

{
  "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>"
}
LépésBájtok
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 bájtos címke, külön tárolva
plaintextUTF-8 JSON, kulcsok rendezve: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

Az Argon2id a referencia C implementáció (phc-winner-argon2, CC0), amely mindkét platformon elérhető. A 64 MiB és a 3 menet körülbelül egy másodpercet vesz igénybe egy jelenlegi telefonon, és minden találat ennyi memóriába és időbe kerül bármely hardveren – ez az a tulajdonság, aminek a PBKDF2 hiányzik a GPU-s rendszerekkel szemben, és a v2 létezésének oka. Egy olvasó figyelmen kívül hagyja azokat a kulcsokat, amelyeket nem ismer, így egy v1 olvasó, amely egy v2 törzset kap, egyszerűen soha nem látja a kártyákat.

Bizonyíték

Három tesztvektorfájlt (backup v1, backup v2 és Argon2id) egy harmadik implementáció generál, függetlenül mindkét alkalmazástól (a Node OpenSSL for PBKDF2 és AES-GCM, egy WebAssembly Argon2id, amelyet a generáláskor ellenőriztek a referencia implementáció közzétett válaszaival). Mindegyik tartalmazza a jelszót, a salt, a nonce, a plaintext, a származtatott kulcs, az AAD, a várható titkosított szöveg és a tag, valamint a teljes fájlt. Az iOS és Android rendszeren végzett egységtesztek ugyanazokat a fájlokat olvassák be, és ugyanazokat a bájtokat állítják be – így egy az egyik platformon lezárt biztonsági mentés bizonyítottan megnyílik a másikon, nem pedig feltételezetten, és mindhárom egyezése nem ugyanazon hiba két másolata. Egy társeszköz megnyit egy fájlt, amit egy telefon írt ugyanazzal a harmadik implementációval, és ellenőrzi a fejlécet a fenti szabályok alapján (pontosan a formátum kulcsai, így nem lehet benne hint vagy név; 16 bájtos salt, 12 bájtos nonce, 16 bájtos tag külön tárolva; 2-es verzió pontosan 64 MiB / 3 / 1 méretben; a rossz jelszó elutasítva); az automatizált iOS-futtatás ír egyet a szimulátorra, és úgy nyitja meg, majd a szimulátor alkalmazáskonténerében, alkalmazáscsoport-konténerében és kulcstartó-adatbázisában minden kezdeti jelszót és kártyaszámot UTF-8 és UTF-16 kódolásban (0 találat) keres.

4. Fenyegetésmodell

HelyzetAmijük vanAmit kapnak
Elveszett vagy ellopott telefon, zárolva Amijük vanAz eszköz, az adatbázisfájl, a lezárt sorok Amit kapnakRejtjelezett szöveg. A csomagolókulcs a Secure Enclave / StrongBox tárolóban található, és csak az eszköz zárolása, valamint egy új biometrikus azonosító vagy jelszó megadása után szabadul fel. A telefon távoli törlése (Find My / Find My Device) megsemmisíti a kulcs anyagát.
Ellopott biztonsági mentési fájl Amijük vanAz .authbackup fájl egy felhőfiókból, egy e-mailből vagy egy laptopról Amit kapnakEgy AES-256-GCM törzs, legalább 12 karakteres jelszóból származtatott kulcs alatt, fájlonkénti salt adással és Argon2id-vel 64 MiB × 3 menetnél (v2) vagy PBKDF2-vel 600 000 körben (v1). Nincs egyértelmű célzás, nincs felhasználónév, nincs egyértelmű fióklista. Minden találgatás a teljes levezetési költségbe kerül; nincs gyors megoldás. Egy erős jelszó a teljes védelem itt, és az alkalmazás ezt a lapon is kimondja.
Ellopott eszköz feloldott képernyővel Amijük vanEgy telefon a kezedben, feloldva Amit kapnakA kódok listája. A trezor (jelszavak, kártyák) az alkalmazászár mögött található, és az automatikus zárolási időzítő (azonnal / 1 perc / 5 perc) alapján újrazáródik; a visszafejtett érték csak addig létezik a memóriában, amíg a képernyője mutatja. Az automatikus kitöltés és a sima szöveges exportálás friss biometrikus adatokat kér, még akkor is, ha az alkalmazás meg van nyitva. Kapcsold be az alkalmazászárat az „Azonnal” beállítással, ha ez az eset aggaszt.
Kártékony alkalmazás ugyanazon a telefonon Amijük vanEgy másik alkalmazás tesztkörnyezete, a vágólap, az akadálymentesítési vagy átfedési trükkök Amit kapnakNem tudja olvasni a fájljainkat (platform sandboxing), és nem tudja használni a kulcsunkat (a kulcs az aláírói identitáshoz és a felhasználói jelenléthez van kötve). A másolatok 30 másodperc elteltével törlődnek a vágólapról; Androidon a másolat érzékenyként van megjelölve, és kizárásra kerül a vágólap előzményeiből. A Vault képernyői Androidon FLAG_SECURE beállítást kapnak (nincsenek képernyőképek, nincs képernyőfelvétel, üres a kapcsoló); iOS esetén a kapcsoló bélyegképe üres. Az automatikus kitöltés Androidon csak azoknak az alkalmazásoknak jelenik meg, amelyeket a rendszer a mentett domainhez (Digital Asset Links) képest ellenőrizett, így a hasonló alkalmazások nem kapják meg a jelszavát.
Adathalász oldal Amijük vanEgy olyan oldal, ami hasonlít ahhoz, amit elmentettél Amit kapnakSemmi sem töltődik ki. Az egyezés regisztrálható domain alapján történik (nyilvános utótaglista, amely az alkalmazással együtt érkezik és frissül): a login.example.com és az example.com egyezik, az example.com.evil.net és az examp1e.com nem. Az alkalmazáson belüli böngésző ugyanúgy egyezik, és csak a kérdező keretbe tölti ki, amelyet a kitöltés pillanatában újra ellenőriztek a keret saját eredetével; egy olyan gazdagép, amelynek nincs saját regisztrálható domainje – IP-cím, egy csupasz név a helyi hálózaton –, pontosan egyezik, és semmi lazább. Az iOS AutoFill hozzáadja az Apple társított domainek ellenőrzését. A kézzel egy hasonló domainbe beillesztendő jelszó továbbra is kockázatos; az alkalmazás ezt nem tudja eltávolítani, csak a segítségnyújtás elkerülését.
Saját szervereink Amijük van— Amit kapnakNincs trezorkiszolgáló. Az AssuredAuth nem rendelkezik fiókokkal, bejelentkezésekkel és a trezor másolatával, így a mi oldalunkon nincs semmi, ami a tiéd lenne, amit el lehetne lopni vagy feltörni. Két dolog fut szerveroldalon, de egyik sem érinti a trezort: egy továbbító postafiók az asztali bővítményhez, amely végponttól végpontig titkosított borítékokat tárol (egyszer használatos kódok, amelyek olvasáskor törlődnek; a továbbítónak soha nincs kulcsa), és az opcionális privát kapcsolat kilépőkiszolgálói, amelyek forgalmat továbbítanak, és nem vezetnek hozzáférési naplókat.
Idéző végzés vagy kormányzati kérés Amijük vanVelünk szemben intézett jogi eljárás Amit kapnakNincs mit átadnunk: nincs nálunk trezor, kulcs, jelszó és biztonsági mentés. Kényszeríthetnek minket arra, hogy ezt kimondjuk; nem kényszeríthetnek minket arra, hogy olyasmit állítsunk elő, ami nem létezik.

5. Vágólap, képernyőképek és memória

6. Automatikus kitöltés: mi töltődik ki, és mi nem

HolJelszavakKártyák
iOS: Safari és alkalmazások (AutoFill bővítmény) JelszavakIgen, egy új Face ID / Touch ID / jelszó megadása után a bővítményben (LAContext), és csak arra a regisztrálható domainre vonatkozóan, amelyhez a bejegyzést mentették, az Apple társított domainek ellenőrzésével az alkalmazásokhoz. KártyákNem. A Safariban az automatikus kártyakitöltés csak az Apple-től származik; a kártya képernyőjén az áll, hogy „Kitöltés az AssuredAuth böngészőben és másolással”, és semmi mást nem ígér.
Android: alkalmazások és Chrome (AutofillService) JelszavakIgen, adathalmazonkénti hitelesítés: a rendszer a kitöltés előtt megjeleníti a BiometricPrompt feliratot; az alkalmazáscsomag csak akkor egyezik, ha a Digital Asset Links a mentett domainhez köti. KártyákIgen, a creditCardNumber, creditCardExpiration* és creditCardSecurityCode tippek, ugyanaz a biometrikus kapu.
Az AssuredAuth böngésző (mindkét platformon) JelszavakIgen, regisztrálható domain – egy olyan gazdagép, amelynek nincsenek pontosan egyező sajátjai – által a kérdező keretbe, biometrikusan a kitöltés előtt KártyákIgen, terepi érzékeléssel, biometrikus a kitöltés előtt
Másolás gombok JelszavakAz alkalmazászár mögött 30 másodperces vágólap KártyákSzám, lejárat, CVC (ugyanazok a szabályok)

Semmi sem elég egy hasonmás hoszthoz. Semmi sem elég biometrikus azonosítás nélkül.

7. Ami soha nem történik meg

Nincs Vault szerver. Nincsenek olyan analitikai adatok, amelyek Vault mezőt tartalmaznak. Nincs sima szöveges export megerősítő lap és friss biometrikus adat nélkül. Nincs harmadik féltől származó SDK betöltve a Vault képernyőjére. Nincs képernyőkép a Vault képernyőjéről. Nincs jelszó-emlékeztető. Nincs értékek naplózása egyetlen buildben sem.

8. Ami ellen nem tudunk védekezni

Egy elég gyenge jelszó ahhoz, hogy kitaláljuk. Egy telefon, amelynek operációs rendszere a root szintjén sérült (egy feltört vagy rootolt eszköz hazudhat az alkalmazásnak a fentiek mindegyikéről). Egy személy, akit gépelés közben figyelnek. Kártevő az asztalon, amelyre beilleszted. Ezt azért mondjuk, hogy a fenti listát annak olvassuk, aminek valójában nevezzük: a dolgok, amelyeket egy dizájn eltávolíthat, eltávolíthatók.

9. Felülvizsgálat állapota

Ezt a tervet egységteszteléssel tesztelték mindkét platformon publikált ismert válaszokkal, valamint saját, több platformon is tesztelt vektoraival szemben. A vault áruházi listáján való hirdetés előtt egy külső felülvizsgálat szerepel a tulajdonos listáján; amíg ez nem történik meg, ez a dokumentum itt fogja ezt feltüntetni.

10. Ahol a dolgok futnak

A trezorból semmi sem hagyja el a telefont, de néhány dolog körülötte mások gépein fut. Ez a lista, és hogy mit tartalmaznak az egyes dolgok; magukat az adatfolyamokat az adatvédelmi szabályzat ismerteti a https://assuredauth.com/privacy címen.

Mindegyik a saját sorában szereplő adatokat tartalmazza, a trezorból semmit. A lista a termékkel együtt változik, és ez a szakasz is vele együtt változik.

Gyengeség jelentése

Ha úgy gondolod, hogy gyengeséget találtál az itt leírtak bármelyikében, írj a hello@assuredauth.com címre a „Biztonság” tárggyal. Kérjük, tüntesd fel a platformot, az alkalmazás verzióját és a lépéseket; elegendő egy saját adataidat használó bizonyíték, és kérjük, ne teszteld mások adataival. Nem kínálunk PGP kulcsot; ha egy jelentés nem érkezne meg sima e-mailben, jelezd ezt az első üzenetben, és megbeszéljük más módon.

Amit cserébe ígérünk: három munkanapon belül visszaigazoljuk, folyamatosan tájékoztatjuk Önt a munkánk során, a valós hibákat kijavítjuk, mielőtt bármi is megjelenne rajta, és feltüntetjük a forrást, ha szeretné, hogy a forrás szerepeljen. Az alábbiakban felsorolt ​​​​területeken jóhiszeműen végzett kutatásokkal kapcsolatban nem indítunk jogi lépéseket.

Hatályon kívül: az iOS és Android alkalmazások, az óraalkalmazások, az asztali bővítmény, az assuredauth.com és annak API-ja. Hatályon kívül: maga az App Store és a Google Play, a fent felsorolt ​​szolgáltatók, bárkivel szembeni pszichológiai manipuláció és a szolgáltatásmegtagadás.

Jelenleg nincs jutalom. A bejelentésre javítással és köszönettel válaszolnak, pénzzel nem.