Drošība

Kā velve ir uzbūvēta un ko varētu atklāt pārkāpums.

Pēdējoreiz atjaunināts 2026. gada 21. septembrī · AssuredAuth, CircleRoll LLC

Šis ir publiskais apraksts par to, kā AssuredAuth aizsargā divfaktoru noslēpumus, paroles un kartes, ko jūs tajā glabājat. Tas ir uzrakstīts tā, lai drošību apzinošs lasītājs varētu pārbaudīt katru apgalvojumu pret lietotni un publicētajiem testa vektoriem (pieejami jebkuram recenzentam pēc pieprasījuma uz hello@assuredauth.com). Tajā ir teikts patiesība un nekas vairāk: nekas šeit neapgalvo, ka ir ārpus uzbrukuma, un nekas netiek solīts procentos.

Īsumā: seifs atrodas vienuviet — jūsu tālrunī. Katra tajā esošā vērtība ir šifrēta ar atslēgu, ko glabā tālruņa drošības aparatūra un ko nevar eksportēt. Mēs nedarbinām seifa serveri, neglabājam nekādas kopijas un nekādu atslēgu. Rezerves fails atstāj tālruni tikai pēc tam, kad tas ir šifrēts ar paroli, kas nekad nekur netiek glabāta.

Ziņot par problēmu: hello@assuredauth.com. Skatiet sadaļu "Ziņošana par vājumu" beigās.

1. Kas ir šifrēts un ar ko

DatiTālrunīAtslēga
Divfaktoru noslēpumi (TOTP/HOTP/Steam sēklas) TālrunīKeychain (iOS) / Android Keystore atbalstīts veikals AtslēgaPlatformas aparatūras piesaistītā atslēga; datubāzes rindā ir tikai atsauce (secretRef), nekad sākotnējā vērtība (sēkla).
Paroles (paroles vērtība, piezīmes) TālrunīAizzīmogota rinda: AES-256-GCM, nejauša 96 bitu nonce katrai vērtībai AtslēgaNejauša 256 bitu datu atslēga, kas pati ir ietverta aparatūras atslēgā §2
Kartes (numurs, derīguma termiņš, vārds uz kartes, CVC) TālrunīTāds pats zīmogs kā parolēm; CVC nav obligāts un tiek saglabāts tikai tad, ja to ievadāt. AtslēgaTā pati datu atslēga
Metadati (pakalpojumu nosaukumi, lietotājvārdi, ikonas, kārtošanas secība) TālrunīLietotnes datubāze (SwiftData / Room) AtslēgaAizsargāts ar operētājsistēmas failu šifrēšanu; tiek uzskatīts par ne-slepenu
Rezerves fails (.authbackup) TālrunīLai kur jūs to ievietotu: Faili, iCloud disks, Google diska lietotne, Datu mape, koplietošanas lapa AtslēgaAtslēga, kas iegūta no jūsu paroles (§3). Apple un Google saņem tikai aizzīmogoto failu un neko citu.
Watch/Wear pavadoņlietotne TālrunīPulksteņa paša atslēgu piekariņš / EncryptedSharedPreferences AtslēgaPulksteņa platformas atslēgas; pārsūtītas pa platformas pārī savienoto ierīču kanālu
Darbvirsmas paplašinājuma datplūsma (vienreizējie kodi pēc pieprasījuma) TālrunīNetiek saglabāts; tiek pārsūtīts kā pilnībā šifrētas aploksnes AtslēgaX25519 atslēgu pāris katrā savienojumā, privātā atslēga atslēgu piekariņā/atslēgu krātuvē; relejs redz tikai šifrētu tekstu.

Diagnostikai nav metodes, kas akceptētu slepeno kodu. Nevienā analīzes notikumā nav iekļauts glabātuves lauks. Nevienā versijā žurnālā netiek ierakstīta nekāda vērtība no glabātuves.

2. Kur atrodas atslēgas katrā platformā

iOS. Datu atslēgu ietver atslēga, kas ģenerēta drošajā enklāvā (kSecAttrTokenIDSecureEnclave) ar piekļuves kontroli .privateKeyUsage + .userPresence, piekļuves kontroli …ThisDeviceOnly, lietotnes koplietotajā atslēgu piekariņa piekļuves grupā, lai automātiskās aizpildes paplašinājums varētu izmantot to pašu atslēgu. Lietotne, dublējums vai atkļūdotājs nevar nolasīt privāto atslēgu no enklāva; ​​enklāvs piekrīt to izmantot tikai pēc lietotāja klātbūtnes (Face ID, Touch ID vai ierīces parole). ThisDeviceOnly nozīmē, ka tālruņa iCloud vai iTunes dublējumā nav šīs atslēgas; atjaunots tālrunis sākas ar tukšu krātuvi un pieprasa jūsu dublējuma failu un paroli. Tālrunis bez piekļuves koda nevar piekļūt .userPresence atslēgai (Enclave atsakās to izveidot), un simulators pēc būtības izvēlas to pašu ceļu (tā klātbūtnes uzvedne ir brīdinājums, uz kuru neviens tests nevar atbildēt): tur datu atslēga ir vienkāršs ierīces atslēgu piekariņa elements — joprojām nav iekļauts katrā dublējumkopijā, joprojām nav nolasāms, kamēr tālrunis ir bloķēts, bet bez otrās uzvednes — un drošības ekrānā ir tieši tas pats teikts un ieteikts iestatīt piekļuves kodu.

Android. Datu atslēgu ietver AndroidKeyStore AES-256 atslēga, kas tiek ģenerēta StrongBox, ja ierīcei tāda ir (pretējā gadījumā TEE), ar setUserAuthenticationRequired(true) un 30 sekunžu autentifikācijas derīgumu pēc biometriskās vai ierīces akreditācijas datu ievadīšanas, setUnlockedDeviceRequired(true) un setInvalidatedByBiometricEnrollment(true) atstāšanas. Pēdējais karodziņš ir godīgs, nevis slodzes nesošs: Android to piemēro tikai atslēgām, kurām katrā lietošanas reizē ir nepieciešama biometrija, tāpēc šajā 30 sekunžu atslēgā ar atļauto ierīces akreditāciju tas neko nemaina — svešiniekiem pirkstu neļauj atklāt tas, ka reģistrēšanai ir nepieciešams PIN kods, un ekrāna bloķēšanas noņemšana atslēgu padara neatgriezeniski nederīgu. Atslēgu krātuves atslēgas nevar eksportēt, un tās netiek iekļautas Android mākoņa dublējumkopijā. Domēns, ko lietotne nosauc savos skatos (webDomain), tiek uzskatīts tikai no zināmas pārlūkprogrammas; no jebkuras citas pakotnes tam jābūt arī tādam, ko sistēma ir verificējusi šai pakotnei (Digital Asset Links), jo jebkura lietotne var pieprasīt jebkuru domēnu.

Ko tas nozīmē nozagtam datubāzes failam. SQLite fails un aizzīmogotās rindas ir šifrēta teksta formātā. Atslēga, kas tās atver, atrodas drošības aparatūrā tālrunī, no kura fails ir nācis, un to nevar kopēt kopā ar failu. Bezsaistē nav ko minēt: datu atslēga ir nejauša, tā nav atvasināta no kaut kā, ko persona būtu izvēlējusies.

3. Dublējuma fails

Rezerves kopijas ir vienīgā lieta, kas atstāj tālruni, tāpēc principā tās ir vienīgā vieta, kur ir iespējams bezsaistes uzbrukums. Tā dizains padara šo uzbrukumu dārgu un nodrošina pēc iespējas mazāk resursu:

Fails ir JSON formātā un lasāms jebkurā teksta redaktorā; tikai šifrēts teksts ir necaurspīdīgs. Ja kāds atrod failu pēc pieciem gadiem, kad lietotne ir pazudusi, viņš var redzēt, kā tas tika precīzi aizzīmogots, un atvērt to ar OpenSSL vai jebkuru Argon2 bibliotēku.

Formāts v1 (piegādāts 1.0 versijā, paliek lasāms)

{
  "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>"
}
SolisBaiti
keyPBKDF2-HMAC-SHA256(passphrase as UTF-8, salt, 600000 rounds, 32 bytes)
aadUTF-8("authbackup:1:600000:") ‖ salt (neapstrādāti sāls baiti, nevis base64)
ciphertext, tagAES-256-GCM(key, nonce, plaintext, aad); 16 baiti, atsevišķi glabāta birka
plaintextUTF-8 JSON, atslēgas sakārtotas: {"accounts":[…],"exportedAt":"…Z","passwords":[…],"version":1}

Saderības piezīme: Android 1.0 versijā tika uzrakstīts v1 variants — kdf ar mazajiem burtiem, bez taga atslēgas (16 baitu taga pievienots šifrētajam tekstam) un bez papildu datiem. Abas platformas turpina lasīt šos failus (ja taga nav: sadaliet pēdējos 16 baitus, atveriet ar tukšu AAD; salīdziniet kdf bez reģistrjutīguma), un abas tagad raksta tikai iepriekš minēto izkārtojumu.

Formāts v2 (pašreizējais; noklusējuma iestatījums jaunām dublējumkopijām)

{
  "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>"
}
SolisBaiti
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 baiti, atsevišķi glabāta birka
plaintextUTF-8 JSON, atslēgas sakārtotas: {"accounts":[…],"cards":[…],"exportedAt":"…Z","passwords":[…],"version":2}

Argon2id ir atsauces C implementācija (phc-winner-argon2, CC0), kas ir pieejama abās platformās. 64 MiB un 3 caurlaides aizņem aptuveni sekundi pašreizējā tālrunī, un katrs minējums jebkurā aparatūrā patērē tik daudz atmiņas un laika — šī īpašība PBKDF2 trūkst salīdzinājumā ar GPU platformām, un iemesls v2 pastāvēšanai. Lasītājs ignorē atslēgas, kuras tas nezina, tāpēc v1 lasītājs, kam piešķirts v2 pamatteksts, vienkārši nekad neredz kartes.

Pierādījums

Trīs testa vektora failus (rezerves kopija v1, rezerves kopija v2 un Argon2id) ģenerē trešā implementācija, kas ir neatkarīga no abām lietotnēm (Node OpenSSL PBKDF2 un AES-GCM, WebAssembly Argon2id, kas ģenerēšanas laikā tiek pārbaudīts, salīdzinot ar atsauces implementācijas publicētajām atbildēm). Katrs no tiem satur paroli, sāls, nonce, vienkāršo tekstu, atvasināto atslēgu, AAD, paredzamo šifrtekstu un tagu, kā arī visu failu. Vienības testi iOS un Android nolasa tos pašus failus un apgalvo tos pašus baitus, tāpēc vienā platformā aizzīmogota rezerves kopija tiek pierādīta, nevis pieņemta, ka atveras otrā, un visu trīs failu sakritība nav divas vienas un tās pašas kļūdas kopijas. Palīgrīks atver failu, ko tālrunis faktiski uzrakstījis ar to pašu trešo ieviešanu, un pārbauda galveni atbilstoši iepriekš minētajiem noteikumiem (precīzi formāta atslēgas, tāpēc nedrīkst būt mājiens vai nosaukums; 16 baitu sāls, 12 baitu nonce, 16 baitu birka tiek glabāta atsevišķi; 2. versija precīzi 64 MiB / 3 / 1; nepareiza parole tiek noraidīta); automatizētā iOS palaišana ieraksta vienu simulatorā un atver to šādā veidā, un meklē simulatora lietotņu konteinerā, lietotņu grupas konteinerā un atslēgu ķēdes datubāzē katru iesēto paroli un kartes numuru kā UTF-8 un UTF-16 (0 trāpījumi).

4. Draudu modelis

SituācijaKas viņiem irKo viņi iegūst
Pazaudēts vai nozagts tālrunis, bloķēts Kas viņiem irIerīce, datubāzes fails, aizzīmogotās rindas Ko viņi iegūstŠifrēts teksts. Ietīšanas atslēga atrodas drošajā enklāvā/StrongBox un tiek atbrīvota tikai pēc ierīces bloķēšanas, kā arī jaunas biometriskās informācijas vai paroles ievadīšanas. Tālruņa attālināta noslaukšana (Find My / Find My Device) iznīcina atslēgas materiālu.
Nozagts dublējuma fails Kas viņiem ir.authbackup fails no mākoņa konta, e-pasta, klēpjdatora Ko viņi iegūstAES-256-GCM pamatteksts zem atslēgas, kas atvasināta no vismaz 12 rakstzīmju garas paroles, ar failam atbilstošu sāls vērtību un Argon2id pie 64 MiB × 3 caurlaidēm (v2) vai PBKDF2 pie 600 000 kārtām (v1). Nav skaidras norādes, nav lietotājvārda, nav kontu saraksta. Katrs minējums maksā pilnu atvasinājuma cenu; nav īsceļa. Spēcīga parole šeit ir visa aizsardzība, un lietotne to norāda lapā.
Nozagta ierīce ar atbloķētu ekrānu Kas viņiem irAtbloķēts tālrunis jūsu rokā Ko viņi iegūstKodu saraksts. Seifs (paroles, kartes) atrodas aiz lietotnes bloķēšanas un atkārtoti bloķējas automātiskās bloķēšanas taimerī (nekavējoties / 1 minūte / 5 minūtes); atšifrēta vērtība atmiņā pastāv tikai tik ilgi, kamēr tā tiek rādīta ekrānā. Automātiskās aizpildes un vienkārša teksta eksportēšanas laikā tiek pieprasīta jauna biometrija pat tad, ja lietotne ir atvērta. Ieslēdziet lietotnes bloķēšanu ar opciju “Nekavējoties”, ja jūs tas uztrauc.
Ļaunprātīga lietotne tajā pašā tālrunī Kas viņiem irCitas lietotnes smilškaste, starpliktuve, pieejamības vai pārklājuma triki Ko viņi iegūstTas nevar lasīt mūsu failus (platformas smilškastes tehnoloģija) vai izmantot mūsu atslēgu (atslēga ir saistīta ar mūsu parakstīšanas identitāti un lietotāja klātbūtni). Kopijas no starpliktuves tiek dzēstas pēc 30 sekundēm; operētājsistēmā Android kopija tiek atzīmēta kā sensitīva un izslēgta no starpliktuves vēstures. Operētājsistēmā Android Vault ekrānuzņēmumi iestata FLAG_SECURE (nav ekrānuzņēmumu, nav ekrāna ierakstīšanas, pārslēdzējā ir tukšs lauks); iOS ierīcē pārslēdzēja sīktēla logs tiek tukšs. Automātiskā aizpildīšana operētājsistēmā Android tiek nodrošināta tikai lietotnēm, kuras sistēma ir pārbaudījusi, izmantojot saglabāto domēnu (digitālo aktīvu saites), tāpēc līdzīgai lietotnei netiek piedāvāta jūsu parole.
Pikšķerēšanas lapa Kas viņiem irVietne, kas izskatās pēc tās, kuru saglabājāt Ko viņi iegūstNekas neaizpilda. Atbilstība tiek noteikta pēc reģistrējamā domēna (publisks sufiksu saraksts, kas ir iekļauts un atjaunināts kopā ar lietotni): login.example.com un example.com sakrīt, example.com.evil.net un examp1e.com nesakrīt. Lietotnes pārlūkprogramma salīdzina tādā pašā veidā un aizpilda tikai to rāmi, kas veica pieprasījumu, atkārtoti pārbaudot to ar šī rāmja izcelsmi aizpildīšanas brīdī; resursdators bez sava reģistrējama domēna — IP adrese, tukšs nosaukums lokālajā tīklā — precīzi atbilst un nekas brīvāks. iOS AutoFill pievieno Apple saistīto domēnu pārbaudi. Parole, kas manuāli jāielīmē līdzīgā domēnā, joprojām ir risks; lietotne to nevar noņemt, tikai izvairīties no palīdzības.
Mūsu pašu serveri Kas viņiem ir— Ko viņi iegūstNav seifa servera. AssuredAuth nav kontu, nav pierakstīšanās un nav jūsu seifa kopijas, tāpēc mūsu pusē nav nekā no jūsu, ko varētu nozagt vai uzlauzt. Servera pusē darbojas divas lietas, no kurām neviena nepieskaras seifam: darbvirsmas paplašinājuma releja pastkaste, kurā tiek glabātas pilnībā šifrētas aploksnes (vienreizējas lietošanas kodi, kas tiek dzēsti nolasīšanas brīdī; relejam nekad nav atslēgas), un papildu privātā savienojuma izejas serveri, kas pārraida datplūsmu un neuzglabā piekļuves žurnālus.
Pavēste vai valdības pieprasījums Kas viņiem irMums adresēts juridiskais process Ko viņi iegūstNav nekā, ko nodot: mums nav ne seifa, ne atslēgas, ne paroles, ne rezerves kopijas. Mūs var piespiest to teikt; mūs nevar piespiest radīt to, kas neeksistē.

5. Starpliktuve, ekrānuzņēmumi un atmiņa

6. Automātiskā aizpildīšana: kas aizpilda un kas neaizpilda

KurParolesKartes
iOS: Safari un lietotnes (AutoFill paplašinājums) ParolesJā, pēc jauna Face ID/Touch ID/piekļuves koda paplašinājumā (LAContext) un tikai reģistrējamajam domēnam, kuram ieraksts tika saglabāts, ar Apple saistīto domēnu pārbaudi lietotnēm. KartesNē. Kartes automātiskā aizpildīšana Safari pārlūkprogrammā ir tikai Apple funkcija; kartes ekrānā tiek parādīts ziņojums “Aizpilda AssuredAuth pārlūkprogrammā un ar kopiju” un nekas vairāk netiek solīts.
Android: lietotnes un Chrome (AutofillService) ParolesJā, autentifikācija katrai datu kopai: sistēma pirms aizpildīšanas parāda BiometricPrompt; lietotnes pakotne atbilst tikai tad, ja digitālo aktīvu saites to saista ar saglabāto domēnu. KartesJā, norādes uz creditCardNumber, creditCardExpiration* un creditCardSecurityCode, tie paši biometriskie vārti.
AssuredAuth pārlūkprogramma (abas platformas) ParolesJā, reģistrējamā domēna gadījumā — resursdatora, kuram nav neviena precīza atbilstības — kadrā, kas jautāja, biometriski pirms aizpildīšanas KartesJā, ar lauka noteikšanu, biometriskā pirms aizpildīšanas
Kopēšanas pogas ParolesAiz lietotnes bloķēšanas 30 sekunžu starpliktuve KartesNumurs, derīguma termiņš, CVC (tie paši noteikumi)

Nekas neaizpilda informāciju ar līdzīgu resursdatoru. Nekas neaizpilda informāciju bez biometriskās informācijas.

7. Kas nekad nenotiek

Nav glabātuves servera. Nav analītikas rīku, kas satur glabātuves lauku. Nav vienkārša teksta eksporta bez apstiprinājuma lapas un svaigas biometrijas. Nav trešās puses SDK ielādēts glabātuves ekrānā. Nav glabātuves ekrāna ekrānuzņēmuma. Nav paroles norādes. Nav vērtību reģistrēšanas nevienā versijā.

8. No kā mēs nevaram pasargāties

Pietiekami vāja parole, lai to varētu uzminēt. Tālrunis, kura operētājsistēma ir apdraudēta saknē (jailbreakota vai root piekļuves zaudējusi ierīce var lietotnei melot par visu iepriekš minēto). Persona, kuru raksta, kad to novēro. Ļaunprogrammatūra uz darbvirsmas, kurā ielīmējat failus. Mēs to sakām, lai iepriekš minētais saraksts tiktu uztverts tā būtībā: lietas, ko dizains var noņemt, ir noņemtas.

9. Pārskatīšanas statuss

Šis dizains ir pārbaudīts uz vienību, salīdzinot ar publicētajām zināmajām atbildēm abās platformās un ar saviem starpplatformu vektoriem. Pirms seifa reklamēšanas veikala sarakstā īpašnieka sarakstā ir iekļauta ārēja pārskatīšana; līdz tā ir notikusi, šajā dokumentā tas tiks norādīts šeit.

10. Kur kas darbojas

Nekas no seifa neatstāj tālruni, taču dažas lietas ap to darbojas citu cilvēku ierīcēs. Šis ir saraksts un informācija par to, ko katrs no tiem glabā; pašas datu plūsmas ir aprakstītas privātuma politikā vietnē https://assuredauth.com/privacy.

Katrs satur tikai to, kas norādīts tā rindā, un neko no glabātuves. Saraksts mainās līdz ar produkta izmaiņām, un šī sadaļa mainās līdz ar to.

Ziņošana par vājumu

Ja uzskatāt, ka esat atradis vājumu kādā no šeit aprakstītajiem materiāliem, rakstiet uz hello@assuredauth.com ar tēmu "Drošība". Lūdzu, norādiet platformu, lietotnes versiju un darbības; pietiek ar pierādījumu, kurā izmantoti jūsu pašu dati, un lūdzam nepārbaudīt datus ar citu cilvēku datiem. Mēs nepiedāvājam PGP atslēgu; ja ziņojums netiek nosūtīts vienkāršā e-pastā, norādiet to pirmajā ziņojumā, un mēs noorganizēsim citu veidu.

Ko mēs apsolām: mēs apstiprinām trīs darba dienu laikā, informējam jūs, kamēr strādājam pie pētījuma, pirms jebkādu faktu publicēšanas labojam patiesumu un norādām jūs šeit, ja vēlaties, lai jūs tiktu norādīts autorībā. Mēs neuzsāksim tiesvedību par pētījumu, kas veikts labticīgi tālāk minētajā darbības jomā.

Darbības joma: iOS un Android lietotnes, pulksteņu lietotnes, darbvirsmas paplašinājums, assuredauth.com un tā API. Ārpus darbības jomas: App Store un Google Play, iepriekš uzskaitītie pakalpojumu sniedzēji, jebkuras personas sociālā inženierija un pakalpojuma atteikums.

Šobrīd atlīdzība netiek piešķirta. Uz ziņojumu tiek atbildēts ar labojumu un pateicību, nevis ar naudu.