Saugumas

Kaip pastatytas skliautas ir ką būtų galima rasti įsilaužus.

Paskutinį kartą atnaujinta 2026 m. rugsėjo 21 d. · „AssuredAuth“, „CircleRoll LLC“

Tai viešas aprašymas, kaip „AssuredAuth“ apsaugo jūsų sistemoje laikomus dviejų veiksnių slaptus kodus, slaptažodžius ir korteles. Jis parašytas taip, kad saugumu besirūpinantis skaitytojas galėtų patikrinti kiekvieną teiginį, susijusį su programėle ir paskelbtais testavimo vektoriais (prieinamus bet kuriam recenzentui paprašius adresu hello@assuredauth.com). Jame sakoma tai, kas yra tiesa, ir nieko daugiau: niekas čia neteigia, kad yra atakų nepaisoma, ir niekas nežadama procentais.

Trumpai tariant: saugykla yra vienoje vietoje – jūsų telefone. Kiekviena joje esanti vertė yra užšifruota raktu, kurį saugo telefono saugos įranga ir kurio negalima eksportuoti. Mes nenaudojame jokio saugyklos serverio, nesaugome jokių kopijų ir neturime jokio rakto. Atsarginė kopija palieka telefoną tik po to, kai ji užšifruojama slaptažodžiu, kuris niekur neišsaugomas.

Pranešti apie problemą: hello@assuredauth.com. Žr. „Silpnumo pranešimas“ pabaigoje.

1. Kas yra užšifruota ir su kuo

DuomenysTelefoneRaktas
Dviejų veiksnių paslaptys (TOTP/HOTP/Steam sėklos) Telefone„Keychain“ („iOS“) / „Android“ „Keystore“ palaikoma parduotuvė RaktasPlatformos aparatinės įrangos susietas raktas; duomenų bazės eilutėje yra tik nuoroda („secretRef“), niekada ne „seed“ (pradinis kodas).
Slaptažodžiai (slaptažodžio reikšmė, pastabos) TelefoneUždaryta eilutė: AES-256-GCM, atsitiktinis 96 bitų nonso vienetas vienai vertei RaktasAtsitiktinis 256 bitų duomenų raktas, kurį pats suvynioja aparatinės įrangos raktas §2
Kortelės (numeris, galiojimo laikas, vardas kortelėje, CVC) TelefoneTas pats antspaudas kaip ir slaptažodžiams; CVC yra neprivalomas ir saugomas tik tuo atveju, jei jį įvedate. RaktasTas pats duomenų raktas
Metaduomenys (paslaugų pavadinimai, vartotojo vardai, piktogramos, rūšiavimo tvarka) TelefoneProgramėlės duomenų bazė („SwiftData“ / „Room“) RaktasApsaugota operacinės sistemos failų šifravimu; laikoma ne slapta informacija
Atsarginės kopijos failas (.authbackup) TelefoneKur bebūtų: Failai, „iCloud“ diskas, „Google“ disko programėlė, Duomenų aplankas, bendrinimo lapas RaktasRaktas, gautas iš jūsų slaptafrazės (§3). „Apple“ ir „Google“ gauna tik užklijuotą failą ir nieko daugiau.
„Watch“ / „Wear“ programėlė TelefoneLaikrodžio raktų pakabukas / „EncryptedSharedPreferences“ RaktasLaikrodžio platformos raktai; perduodami per platformos suporuoto įrenginio kanalą
Darbalaukio plėtinio srautas (vienkartiniai kodai pateikiami paprašius) TelefoneNesaugoma; perduodama kaip nuo galo iki galo užšifruoti vokai RaktasX25519 raktų pora kiekvienam susiejimui, privatus raktas „Keychain“ / „Keystore“ saugykloje; relė mato tik šifruotą tekstą

Diagnostika neturi metodo, kuris priimtų slaptą kodą. Joks analizės įvykis neturi saugyklos lauko. Jokia reikšmė iš saugyklos niekada neįrašoma į žurnalą jokioje kompiliavimo versijoje.

2. Kur kiekvienoje platformoje yra raktai

iOS. Duomenų raktas yra suvyniotas į raktą, sugeneruotą saugiame enklave (kSecAttrTokenIDSecureEnclave) su prieigos kontrole .privateKeyUsage + .userPresence, prieinamumu …ThisDeviceOnly, programėlės bendrinamoje „Keychain“ prieigos grupėje, kad automatinio pildymo plėtinys galėtų naudoti tą patį raktą. Privačiojo rakto iš enklavo negali nuskaityti programėlė, atsarginė kopija ar derinimo programa; enklavas sutinka jį naudoti tik tada, kai vartotojas yra prisijungęs („Face ID“, „Touch ID“ arba įrenginio slaptažodis). „ThisDeviceOnly“ reiškia, kad telefono „iCloud“ arba „iTunes“ atsarginėje kopijoje nėra rakto; atkurtas telefonas paleidžiamas su tuščia saugykla ir prašo jūsų atsarginės kopijos failo bei slaptažodžio. Telefonas be slaptažodžio negali pasiekti .userPresence rakto („Enclave“ atsisako jį sukurti), o simuliatorius pagal savo paskirtį eina tuo pačiu keliu (jo buvimo raginimas yra įspėjimas, į kurį joks testas negali atsakyti): ten duomenų raktas yra paprastas tik įrenginiui skirtas „Keychain“ elementas – vis dar iš kiekvienos atsarginės kopijos, vis dar neįskaitomas, kai telefonas užrakintas, bet be antro raginimo – o saugos ekrane nurodoma būtent tai ir siūloma nustatyti slaptažodį.

Android. Duomenų raktą suvynioja „AndroidKeyStore AES-256“ raktas, sugeneruotas „StrongBox“, kai įrenginyje jį yra (kitaip – ​​TEE), su „setUserAuthenticationRequired(true)“ ir 30 sekundžių autentifikavimo galiojimu po biometrinių duomenų arba įrenginio kredencialų pateikimo, „setUnlockedDeviceRequired(true)“ ir „setInvalidatedByBiometricEnrollment(true)“. Paskutinė žymė yra sąžininga, o ne apkrovą laikanti: „Android“ ją taiko tik raktams, kuriems kiekvieną kartą naudojant reikia biometrinių duomenų, todėl šis 30 sekundžių raktas su leidžiamais įrenginio kredencialais nieko nekeičia – pašaliniams asmenims pirštą saugo tai, kad registruojant reikia PIN kodo, o ekrano užrakto pašalinimas visam laikui panaikina raktą. „Keystore“ raktų negalima eksportuoti ir jie neįtraukiami į „Android“ debesies atsarginę kopiją. Domenas, kurį programa įvardija savo rodiniuose (webDomain), laikomas tik žinomoje naršyklėje; iš bet kurio kito paketo jis taip pat turi būti toks, kurį sistema patvirtino tam paketui (skaitmeninių išteklių nuorodos), nes bet kuri programa gali pareikšti pretenzijas į bet kurį domeną.

Ką tai reiškia pavogtam duomenų bazės failui. „SQLite“ failas ir užantspauduotos eilutės yra užšifruoto teksto. Raktas, kuris jas atidaro, yra telefono, iš kurio buvo gautas failas, saugos įrangoje ir negali būti nukopijuotas kartu su failu. Neprisijungus nėra ko spėlioti: duomenų raktas yra atsitiktinis, o ne gautas iš žmogaus pasirinktų duomenų.

3. Atsarginės kopijos failas

Atsarginės kopijos yra vienintelis dalykas, kuris palieka telefoną, todėl iš principo tai yra vienintelė vieta, kur galima atlikti ataką neprisijungus. Dėl tokio dizaino ataka yra brangi ir jai reikia kuo mažiau išteklių:

Failas yra JSON formato ir skaitomas bet kuriame teksto redaktoriuje; tik šifruotas tekstas yra neskaidrus. Asmuo, radęs failą po penkerių metų, kai programėlė nebeveikia, gali tiksliai pamatyti, kaip jis buvo užklijuotas, ir atidaryti jį naudodamas OpenSSL arba bet kurią „Argon2“ biblioteką.

Formatas v1 (išsiųstas 1.0 versijoje, lieka įskaitomas)

{
  "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>"
}
ŽingsnisBaitai
keyPBKDF2-HMAC-SHA256(passphrase as UTF-8, salt, 600000 rounds, 32 bytes)
aadUTF-8("authbackup:1:600000:") ‖ salt (neapdoroti druskos baitai, ne base64)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); žymė 16 baitų, saugoma atskirai
plaintextUTF-8 JSON, raktai surūšiuoti: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Suderinamumo pastaba: „Android 1.0“ parašė v1 variantą – kdf mažosiomis raidėmis, be žymės rakto (16 baitų žymė pridedama prie šifruoto teksto), be papildomų duomenų. Abi platformos toliau skaito šiuos failus (kai žymės nėra: padalinkite paskutinius 16 baitų, atidarykite su tuščiu AAD; lyginkite kdf nekreipdami dėmesio į didžiąsias ir mažąsias raides) ir abi dabar rašo tik aukščiau pateiktą išdėstymą.

Formatas v2 (dabartinis; numatytasis naujų atsarginių kopijų formatas)

{
  "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>"
}
ŽingsnisBaitai
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); žymė 16 baitų, saugoma atskirai
plaintextUTF-8 JSON, raktai surūšiuoti: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

„Argon2id“ yra etaloninė C kalbos implementacija (phc-winner-argon2, CC0), siūloma abiejose platformose. 64 MiB ir 3 perėjimai dabartiniame telefone užtrunka apie sekundę, todėl kiekvienas spėjimas bet kurioje aparatinėje įrangoje kainuoja tiek pat atminties ir laiko – šios savybės PBKDF2 neturi, palyginti su GPU platformomis, ir tai yra priežastis, kodėl egzistuoja v2. Skaitytuvas ignoruoja raktus, kurių nežino, todėl v1 skaitytuvas, gavęs v2 turinį, tiesiog niekada nemato kortelių.

Įrodymas

Trys testų vektorių failai (atsarginė kopija v1, atsarginė kopija v2 ir „Argon2id“) yra generuojami trečios implementacijos, nepriklausomos nuo abiejų programų („Node“ „OpenSSL for PBKDF2“ ir AES-GCM, „WebAssembly Argon2id“, patikrintas generavimo metu pagal paskelbtus etaloninės implementacijos atsakymus). Kiekviename iš jų yra slaptafrazė, druska, vienkartinė reikšmė, paprastas tekstas, išvestinis raktas, AAD, numatomas šifruotas tekstas ir žyma bei visas failas. Vienetų testai „iOS“ ir „Android“ sistemose skaito tuos pačius failus ir nurodo tuos pačius baitus, todėl vienoje platformoje užantspauduota atsarginė kopija yra įrodyta, o ne daroma prielaida, kad atsidarys kitoje, o visų trijų sutapimas nėra dvi tos pačios klaidos kopijos. Papildoma priemonė atidaro telefono įrašytą failą, naudojant tą pačią trečiąją versiją, ir patikrina antraštę pagal aukščiau pateiktas taisykles (tiksliai formato raktus, todėl negali būti jokių užuominų ar pavadinimų; 16 baitų „salt“, 12 baitų „nonce“, 16 baitų žymė, saugoma atskirai; 2 versija – lygiai 64 MiB / 3 / 1; atmesta neteisinga slaptafrazė); automatizuota „iOS“ paleidimo programa įrašo failą į simuliatorių ir atidaro jį tokiu būdu, o simuliatoriaus programų konteineryje, programų grupės konteineryje ir raktų grandinės duomenų bazėje ieško kiekvieno įvesto slaptažodžio ir kortelės numerio UTF-8 ir UTF-16 formatais (0 atitikmenų).

4. Grėsmių modelis

SituacijaKą jie turiKą jie gauna
Pamestas arba pavogtas telefonas, užrakintas Ką jie turiĮrenginys, duomenų bazės failas, užantspauduotos eilutės Ką jie gaunaŠifruotas tekstas. Įvyniojimo raktas yra saugioje saugykloje / seife ir atrakinamas tik užrakinus įrenginį ir įvedus naują biometrinį kodą arba slaptažodį. Nuotoliniu būdu valant telefoną („Find My“ / „Find My Device“), sunaikinama ir rakto medžiaga.
Pavogtas atsarginės kopijos failas Ką jie turi.authbackup failas iš debesies paskyros, el. pašto, nešiojamojo kompiuterio Ką jie gaunaAES-256-GCM tekstas po raktu, išvestu iš mažiausiai 12 simbolių slaptažodžio, su failo druskos filtru ir „Argon2id“ esant 64 MiB × 3 perėjimams (v2) arba PBKDF2 esant 600 000 raundų (v1). Jokių užuominų, jokio vartotojo vardo, jokio aiškaus paskyrų sąrašo. Kiekvienas spėjimas kainuoja visą išvedimo kainą; nėra jokio trumpesnio kelio. Stipri slaptažodžio frazė čia yra visa gynyba, ir programėlė tai nurodo lape.
Pavogtas įrenginys su atrakintu ekranu Ką jie turiTelefonas rankoje, atrakintas Ką jie gaunaKodų sąrašas. Saugykla (slaptažodžiai, kortelės) yra už programėlės užrakto ir vėl užrakinama automatinio užrakinimo laikmačiu (nedelsiant / po 1 min. / po 5 min.); iššifruota reikšmė atmintyje egzistuoja tik tol, kol ji rodoma ekrane. Automatinio pildymo ir paprasto teksto eksportavimo metu prašoma naujų biometrinių duomenų net tada, kai programėlė atidaryta. Jei dėl to nerimaujate, įjunkite programėlės užraktą pasirinkdami „Nedelsiant“.
Kenkėjiška programėlė tame pačiame telefone Ką jie turiKitos programos smėlio dėžė, iškarpinė, pritaikymo neįgaliesiems ar perdengimo gudrybės Ką jie gaunaJis negali skaityti mūsų failų (platformos smėlio dėžės technologija) arba naudoti mūsų rakto (raktas susietas su mūsų pasirašymo tapatybe ir naudotojo buvimu). Kopijos iš iškarpinės išvalomos po 30 sekundžių; „Android“ sistemoje kopija pažymima kaip jautri ir neįtraukiama į iškarpinės istoriją. „Vault“ ekranuose „Android“ sistemoje nustatomas FLAG_SECURE (nėra ekrano kopijų, nėra ekrano įrašymo, perjungiklyje nėra vietos); „iOS“ sistemoje perjungiklio miniatiūra ištuštinama. Automatinis pildymas „Android“ sistemoje teikiamas tik toms programoms, kurias sistema patikrino pagal išsaugotą domeną (skaitmeninių išteklių nuorodas), todėl panašiai programai slaptažodis nesiūlomas.
Sukčiavimo apsimetant puslapis Ką jie turiSvetainė, kuri atrodo kaip ta, kurią išsaugojote Ką jie gaunaNiekas neužpildoma. Atitikimas atliekamas pagal registruojamą domeną (viešas priesagų sąrašas, įtrauktas į programėlę ir atnaujinamas kartu su ja): login.example.com ir example.com sutampa, example.com.evil.net ir examp1e.com – ne. Programėlės naršyklė sutampa tokiu pačiu būdu ir užpildo tik tą rėmelį, kuris užklausė, dar kartą patikrintas pagal to rėmelio kilmę užpildymo metu; kompiuteris, neturintis savo registruojamo domeno – IP adreso, paprasto pavadinimo vietiniame tinkle – sutampa tiksliai ir nieko daugiau. „iOS AutoFill“ prideda „Apple“ susijusių domenų patikrą. Slaptažodis, kurį turite rankiniu būdu įklijuoti į panašų domeną, vis tiek yra rizikingas; programėlė negali jo pašalinti, tik gali išvengti pagalbos.
Mūsų pačių serveriai Ką jie turi— Ką jie gaunaNėra jokio saugyklos serverio. „AssuredAuth“ neturi paskyrų, prisijungimų ir jūsų saugyklos kopijos, todėl mūsų pusėje nėra nieko, kas būtų pavogta ar nulaužta. Serverio pusėje veikia du dalykai, iš kurių nė vienas neliečia saugyklos: darbalaukio plėtinio persiuntimo pašto dėžutė, kurioje saugomi nuo galo iki galo užšifruoti vokai (vienkartiniai kodai, ištrinami nuskaičius; persiuntimo sistema niekada neturi rakto), ir pasirenkami privačiojo ryšio išėjimo serveriai, kurie perduoda srautą ir nelaiko prieigos žurnalų.
Šaukimas į teismą arba vyriausybės prašymas Ką jie turiMums adresuotas teisinis procesas Ką jie gaunaNėra ko perduoti: neturime jokios saugyklos, jokio rakto, jokios slaptažodžio ir jokios atsarginės kopijos. Mus galima priversti tai pasakyti; mūsų negalima priversti pateikti to, ko nėra.

5. Mainų sritis, ekrano kopijos ir atmintis

6. Automatinis pildymas: kas užpildo, o kas ne

KurSlaptažodžiaiKortelės
iOS: „Safari“ ir programos (automatinio pildymo plėtinys) SlaptažodžiaiTaip, po naujo „Face ID“ / „Touch ID“ / slaptažodžio plėtinyje („LAContext“) ir tik tam registruojamam domenui, kuriam įrašas buvo išsaugotas, naudojant „Apple“ susietų domenų patikrą programoms KortelėsNe. Kortelės automatinis pildymas „Safari“ naršyklėje yra tik „Apple“ funkcija; kortelės ekrane rodoma „Užpildo „AssuredAuth“ naršyklėje ir su kopija“ ir nieko daugiau nežadama.
„Android“: programos ir „Chrome“ („AutofillService“) SlaptažodžiaiTaip, duomenų rinkinio autentifikavimas: sistema rodo „BiometricPrompt“ prieš užpildymą; programos paketas sutampa tik tada, kai „Digital Asset Links“ susieja jį su išsaugotu domenu. KortelėsTaip, užuominos apie „creditCardNumber“, „creditCardExpiration*“ ir „creditCardSecurityCode“, tie patys biometriniai vartai
„AssuredAuth“ naršyklė (abi platformos) SlaptažodžiaiTaip, pagal registruojamą domeną – pagrindinį kompiuterį, neturintį tikslių atitikmenų – į rėmelį, kuris klausė, biometriniai duomenys prieš užpildant KortelėsTaip, lauko aptikimo būdu, biometrinis prieš užpildymą
Kopijavimo mygtukai SlaptažodžiaiUž programėlės užrakto – 30 sekundžių iškarpinė KortelėsNumeris, galiojimo laikas, CVC (tos pačios taisyklės)

Niekas nepildo duomenų be panašaus kompiuterio. Niekas nepildo duomenų be biometrinių duomenų.

7. Kas niekada neįvyksta

Nėra „Vault“ serverio. Nėra analizės, kurioje būtų „Vault“ laukas. Nėra paprasto teksto eksporto be patvirtinimo lapo ir naujos biometrinės informacijos. Nėra trečiosios šalies SDK, įkelto į „Vault“ ekraną. Nėra „Vault“ ekrano kopijos. Nėra slaptažodžio užuominos. Nėra reikšmių registravimo jokioje versijoje.

8. Nuo ko negalime apsisaugoti

Slaptafrazė, pakankamai silpna, kad būtų galima atspėti. Telefonas, kurio operacinė sistema pažeista ties šaknimis (įrenginys su nulaužta arba root prieigos apsauga gali meluoti programai apie viską, kas išdėstyta aukščiau). Asmuo, kuris yra stebimas rašant. Kenkėjiška programa darbalaukyje, į kurį įklijuojate tekstą. Mes tai sakome tam, kad aukščiau pateiktas sąrašas būtų skaitomas toks, koks jis yra: dalykai, kuriuos dizainas gali pašalinti, yra pašalinami.

9. Peržiūros būsena

Šis dizainas buvo testuojamas vienetais, lyginant su paskelbtais žinomais atsakymais abiejose platformose ir su jo paties kelių platformų vektoriais. Prieš reklamuojant saugyklą parduotuvės sąraše, savininko sąraše pateikiama išorinė apžvalga; kol tai nebus padaryta, šiame dokumente bus nurodyta tai čia.

10. Kur viskas bėga

Niekas iš saugyklos nepalieka telefono, tačiau keli aplinkiniai dalykai veikia kitų žmonių kompiuteriuose. Tai yra sąrašas ir tai, ką kiekvienas iš jų saugo; patys duomenų srautai aprašyti privatumo politikoje adresu https://assuredauth.com/privacy.

Kiekviename saugoma tai, kas parašyta jo eilutėje, ir nieko iš saugyklos. Sąrašas keičiasi kartu su produktu, ir ši skiltis keičiasi kartu su juo.

Pranešimas apie silpnumą

Jei manote, kad radote čia aprašytų dalykų silpnąją vietą, rašykite adresu hello@assuredauth.com su tema „Sauga“. Nurodykite platformą, programėlės versiją ir veiksmus; pakanka įrodymo, kuriame naudojami jūsų duomenys, ir prašome netikrinti su kitų žmonių duomenimis. Mes nesiūlome PGP rakto; jei ataskaita neturėtų būti išsiųsta paprastu el. paštu, pasakykite apie tai pirmoje žinutėje ir mes susitarsime kitaip.

Ką mes pažadame mainais: patvirtinsime per tris darbo dienas, informuosime jus, kol dirbame, ištaisysime klaidas prieš jas publikuojant, ir nurodysime jus, jei norite, kad būtų paminėti. Nesiimsime teisinių veiksmų dėl sąžiningai atliktų tyrimų, kaip nurodyta toliau.

Apimtis: „iOS“ ir „Android“ programėlės, laikrodžių programėlės, darbalaukio plėtinys, assuredauth.com ir jo API. Apimtis nepatenka: pačios „App Store“ ir „Google Play“, aukščiau išvardyti paslaugų teikėjai, bet kokio asmens socialinė inžinerija ir paslaugų trikdymas.

Šiuo metu premijos nėra. Į pranešimą atsakoma pataisant klaidą ir padėkojant, o ne pinigais.