Una panoramica tecnica per chi valuta la sicurezza. Tutto quello che c'è qui è verificabile sul codice sorgente — comprese le parti che ci fanno meno bella figura, che dichiariamo invece di ometterle.
Non esiste un backend. L'estensione è un'estensione Chrome Manifest V3 che genera i codici TOTP/HOTP localmente con OTPAuth. Non gestiamo server, non teniamo account e non abbiamo alcun canale attraverso cui i dati dell'utente possano arrivare a noi.
Poiché non c'è un server, non c'è nemmeno materiale crittografico lato server, né deposito di chiavi, né alcun percorso di recupero controllato da noi. Se un utente dimentica la password e perde il codice di recupero, non possiamo aiutarlo: è una scelta progettuale.
La protezione con password è facoltativa e disattivata per impostazione predefinita. Quando è attiva:
I dati non vengono mai cifrati direttamente con una chiave derivata dalla password. Una chiave principale casuale cifra i record; l'output di PBKDF2 si limita a incapsulare quella chiave principale. Ne discendono due conseguenze, entrambe rilevanti:
Con la protezione con password attiva viene cifrato l'intero record dell'account tranne identificatore e impronta — nome del servizio compreso, così un profilo rubato non rivela presso quali servizi l'utente ha un account. All'attivazione l'estensione cifra i record, li verifica decifrandoli e confrontandoli e solo allora rimuove ogni copia in chiaro: archiviazione locale del browser, sincronizzazione e tutte e sette le istantanee di backup a rotazione.
Lo diciamo chiaramente, perché conta per la vostra valutazione:
In breve: questo protegge i dati a riposo. Non difende, e non può difendere, un dispositivo già sotto il controllo di un attaccante mentre viene usato.
Il manifest dichiara esattamente due permessi e nessun permesso host:
Non ci sono content script, nessun permesso tabs, cookies o webRequest e nessuna risorsa accessibile dal web. L'estensione non può leggere né modificare il contenuto di alcuna pagina.
La scansione dei QR con la fotocamera gira su una pagina dell'estensione aperta in una scheda, non nel popup: un popup viene distrutto quando perde il focus, ed è esattamente ciò che fa una richiesta di permesso. Per questo non serve alcun permesso nel manifest: si usa la normale richiesta di accesso alla fotocamera del browser, concessa per origine dell'estensione e revocabile nelle impostazioni del sito, e non compare mai finché l'utente non apre lo scanner. Il video è decodificato localmente e non viene mai trasmesso né memorizzato.
Nell'uso normale l'estensione non effettua richieste automatiche, e Manifest V3 vieta il codice remoto. Tutte le connessioni che può stabilire:
| Host | Quando | Trasporta dati dell'utente? |
|---|---|---|
| worldtimeapi.org timeapi.io | Controllo dello scarto dell'orologio, con cache, fallisce in silenzio. Con l'orologio sfasato il TOTP smette di funzionare. | No |
| authenticator.sh | Pagina di benvenuto all'installazione; pagina di feedback alla disinstallazione o alla valutazione. | No (normali log del server web) |
Nessun font, script, foglio di stile o immagine viene caricato da host di terze parti. Tutto ciò che serve a disegnare l'interfaccia è dentro il pacchetto.
Non dovete credere sulla parola a nulla di quanto sopra. L'estensione è open source e ogni rilascio è riproducibile:
.crx pubblicato dal Chrome Web Store e decomprimetelonpm ci && npm run build su Node 20 LTSdist/ ottenuto con il pacchetto decompressoCon ogni release su GitHub pubblichiamo uno SHA-256 per ciascun file del dist/ prodotto, come SHA256SUMS-v<version>.txt e in formato sha256sum: il passo 4 si riduce quindi a una sola esecuzione di sha256sum -c. Le differenze dovrebbero limitarsi all'ordine dei file dentro gli archivi e agli spazi nell'output minificato tra versioni patch di Node.
Le dipendenze a runtime sono volutamente poche — OTPAuth, React, jsQR, Zustand, Framer Motion e Lucide — fissate da un lockfile versionato. Un SBOM CycloneDX è disponibile su richiesta.
Leggere il codice sorgenteSiamo un piccolo fornitore indipendente. Se uno dei punti seguenti è un requisito vincolante per il vostro processo, è meglio saperlo ora che dopo tre settimane di valutazione:
Quello che offriamo in cambio è piena trasparenza del codice, una build verificabile, una superficie di permessi minima e nessuna infrastruttura server che possa in primo luogo custodire i vostri dati.
Segnalazioni di vulnerabilità e domande sulla sicurezza: security@authenticator.sh. La nostra policy di divulgazione, l'ambito, i tempi di risposta e le condizioni di safe harbour sono nella pagina policy di sicurezza; cosa viene memorizzato e cosa lascia il dispositivo è descritto nell'informativa sulla privacy.
Rispondiamo volentieri a un questionario scritto di valutazione fornitori o ripercorriamo il codice insieme a un team di sicurezza.
Per tutto ciò che non riguarda la sicurezza — installazione, recupero dell'account, domande di fatturazione legate a un rollout — vedete il supporto. Vi preghiamo di non inviare lì segnalazioni di vulnerabilità: quella casella non è trattata come riservata.