Come funzionano i segreti TOTP (e perché non vanno condivisi)

Che cos’è un segreto TOTP, i posti in cui le sue copie si accumulano in silenzio, e l’ordine esatto per reimpostare un account il cui segreto è già circolato.

Un segreto TOTP è una stringa casuale, da 16 a 32 caratteri base32, che il fornitore genera una volta e non cambia mai. Non deriva dalla tua password, non è legato ad alcun dispositivo, e non ha scadenza. Ogni copia produce codici validi per sempre, e nulla nell’account può dirti quante copie esistono.

Ecco tutto il fascicolo contro la sua condivisione. Ciascuna di queste affermazioni merita il suo dettaglio, e va aggiunto che cosa fare di un account il cui segreto è già circolato, dato che la domanda arriva quasi sempre troppo tardi.

Che cos’è un segreto, precisamente

La meccanica che trasforma un segreto in sei cifre è trattata nella guida completa al TOTP in squadra. Ciò che conta qui è che cosa sia il segreto in quanto oggetto.

È simmetrico. I due lati detengono lo stesso valore. Non c’è una metà pubblica: non c’è quindi nulla che tu possa distribuire senza rischio.

Ha molta entropia e non si indovina. Da 80 a 160 bit di casualità. Nessun attacco pratico consiste nel calcolarlo, ed è proprio per questo che ogni incidente reale è una copia.

Non ha un ciclo di vita. Niente scadenza, niente versione, niente elenco di revoca, niente rotazione. Il protocollo non ha alcun vocabolario per «questa copia non è più valida», solo per «questo segreto non è più configurato sull’account».

È indipendente dalla password. Reimpostare l’una non fa nulla all’altro. Le squadre cambiano le password dopo un’uscita e lasciano il secondo fattore al suo posto, che è la metà sbagliata se il segreto ha viaggiato.

I posti in cui finisce una copia

Questo elenco merita di essere letto lentamente. L’argomento contro la condivisione non è che una copia sia pericolosa, è che le copie si accumulano dove nessuno guarda.

  • Il database del fornitore, al suo posto.
  • L’app di autenticazione di tutti quelli che hanno scansionato il codice QR.
  • Il backup del dispositivo di ciascuno di quei telefoni, ovunque viva.
  • La sincronizzazione nel cloud delle app che la propongono, cioè la maggior parte oggi.
  • Lo screenshot preso durante la configurazione, in un rullino fotografico, a sua volta sincronizzato.
  • Il messaggio di chat in cui è stato pubblicato, più l’indice di ricerca e la conservazione di quella piattaforma.
  • La voce di cassaforte condivisa, esportata un giorno in un file che nessuno ha cancellato.
  • La variabile d’ambiente su un runner di CI o un server, se un automatismo effettua l’accesso.

Due cose valgono per tutti gli elementi dopo il primo. Nessuno compare da nessuna parte nelle impostazioni di sicurezza dell’account, e nessuno viene eliminato da un’azione che tu possa compiere all’interno dell’account.

Perché «l’abbiamo condiviso una volta sola» non è mai una volta

Un segreto condiviso una volta non resta in un solo posto, perché i sistemi in cui atterra sono progettati per copiare le cose.

Un telefono viene salvato e poi ripristinato sul suo sostituto. Un’app di autenticazione aggiunge la sincronizzazione nel cloud con un aggiornamento, e il segreto è ormai in un account a cui non avevi pensato. Una cassaforte viene esportata prima di una migrazione. Una piattaforma di chat conserva la cronologia e la rende ricercabile a tutti quelli che arrivano dopo, compresi quelli che non erano nella squadra al momento del messaggio. Il portatile di un fornitore se ne va con il fornitore.

Nulla di ciò suppone che qualcuno si comporti male. È il funzionamento ordinario del software per il grande pubblico, ed è per questo che il numero di copie di un segreto condiviso non fa che crescere.

Che cosa ti costa condividerlo

Conteggio. Non puoi sapere quante copie esistono.

Revoca. Non puoi ritirarne una. Puoi solo invalidarle tutte riconfigurando l’account.

Indipendenza. Un segreto conservato accanto alla password fa sì che una sola compromissione consegni entrambi i fattori, il che equivale a un fattore unico con passaggi in più.

Attribuzione. Una qualsiasi delle copie può aver prodotto il codice usato alle 3:12. Nessun registro, da nessuna parte, dirà quale.

Tutto ciò che una squadra si aspetta dalla 2FA su un account condiviso, dalla disponibilità senza collo di bottiglia a un’uscita che funziona, passando per una risposta a «chi si è connesso», deriva dal non distribuire il segreto. La meccanica per arrivarci è in condividere codici TOTP senza condividere il segreto.

Se è già stato condiviso

La maggior parte delle squadre che leggono questo ha già condiviso un segreto da qualche parte. La domanda utile non è se sia stato un errore, ma quali account meritino il lavoro di una reimpostazione.

1. Decidi che cosa reimposti

Reimposta gli account su cui un ex detentore del segreto potrebbe fare danni veri: tutto ciò che tocca il denaro, i domini, i dati dei clienti, i diritti di pubblicazione o l’infrastruttura cloud. Per un account senza posta in gioco di cui puoi cambiare la password e la cui lista di accesso è breve, cambiare la password e stringere la condivisione può essere proporzionato. Ciò che conta è decidere deliberatamente; decidere per inerzia è ciò che lascia un account di pagamento esposto per due anni.

2. Reimposta in quest’ordine

L’ordine conta, perché due di questi passaggi possono chiuderti fuori se li fai per primi.

  1. Assicurati di avere codici di recupero aggiornati, o di poterli ottenere, prima di toccare qualsiasi cosa.
  2. Disattiva la 2FA sull’account. Tutte le copie esistenti del segreto muoiono qui.
  3. Riattivala, e metti il nuovo segreto in esattamente un posto.
  4. Concedi l’accesso alle persone che hanno bisogno dei codici, senza distribuire il nuovo segreto.
  5. Rigenera e conserva i codici di recupero, fuori dall’account che recuperano.

3. Poi ripulisci ciò che la reimpostazione non ha toccato

È il passaggio che si salta. Reimpostare il secondo fattore in genere non pone fine a nulla di ciò che è già in corso:

  • Disconnetti tutti i dispositivi e tutte le sessioni. Un attaccante con una sessione viva non ha bisogno di codici.
  • Cambia la password, dato che le due credenziali di solito hanno viaggiato insieme.
  • Passa in rassegna le chiavi API, i token e le applicazioni collegate. Si autenticano senza il secondo fattore per progetto, e sopravvivono alla sua reimpostazione.
  • Guarda la cronologia degli accessi dell’account, in cerca di ciò che provenga da un periodo o un luogo che non dovrebbero esistere.

4. Annota dove vive il nuovo segreto

Una riga per account: dove sta il segreto, chi lo amministra, dove sono i codici di recupero. È l’assenza di quella nota a rendere le squadre riluttanti a reimpostare qualsiasi cosa, perché nessuno è sicuro di che cosa si romperà.

Dove dovrebbe vivere un segreto

In un solo posto, raggiungibile da almeno due amministratori, separato dai codici di recupero, e separato dall’account che protegge. Che sia una voce limitata del tuo gestore di password o uno strumento fatto apposta conta meno della parte «un solo».

Share Auth è una risposta: il segreto è inserito una volta, cifrato a riposo, e mai più mostrato. I membri vedono codici e conti alla rovescia, l’accesso è concesso per persona e per account, e ogni consultazione è registrata. Ciò che elimina è la ragione per cui le squadre distribuiscono segreti all’inizio, cioè che la persona che tiene il telefono non è sempre disponibile.

In breve

  • Un segreto TOTP è permanente, simmetrico e irrevocabile preso da solo.
  • Condividerlo ti costa il conteggio, la revoca, l’indipendenza dei fattori e l’attribuzione.
  • Le copie si moltiplicano tramite i backup, la sincronizzazione, le esportazioni e le cronologie di chat, senza che nessuno faccia nulla di male.
  • Se è stato condiviso, decidi account per account, reimposta nell’ordine, e ripulisci le sessioni e i token che la reimpostazione lascia dietro di sé.
  • Poi tieni esattamente una copia, e dai piuttosto alle persone l’accesso ai codici.

Domande frequenti

In pratica sì: chiave, segreto e seed indicano la stessa stringa base32. Ciò che differisce è la Key URI, il testo otpauth:// che il codice QR di configurazione codifica e che porta il segreto e i suoi parametri. Quando uno strumento chiede una chiave, di solito si aspetta il segreto.

Da leggere anche · Come funziona TOTP

11 min di lettura

La guida completa al TOTP in squadraGuida

Come funziona il TOTP, quali proprietà dell’algoritmo causano tutti i problemi degli account condivisi, e che cosa una squadra deve mettere in piedi.