Una password condivisa è un design scarso per la gestione dell'accesso a un canale di comunicazione privato. Ad esempio, non puoi cacciare un utente senza chiudere il canale: non puoi far sì che dimentichino la password. Non è possibile impedire a un utente di condividere la password con altri utenti (volontariamente o involontariamente) - se la password di un utente è esposta, è possibile invalidarla, ma se la password condivisa è esposta, disturba chiunque stia usando quella password. / p>
Un design migliore separerebbe autenticazione dall'autorizzazione . Per prima cosa autentifica l'utente, ad esempio richiedendo una password ("Reclami che sei Bob? Provalo!"). Una volta che un utente è stato autenticato, determina quali canali a cui l'utente ha accesso osservandolo in un database ("Vediamo se Bob dovrebbe avere accesso al pazzo canale di loop di mancini.").
Questa separazione delle preoccupazioni ha molti vantaggi, ma ha una conseguenza che potrebbe interessarti o meno: il modo semplice per farlo dipende da un'autorità centrale per determinare chi ha accesso al canale. L'approccio alla password condivisa elimina questa autorità centrale, ma al costo di avere una politica di controllo degli accessi piuttosto rigida (qualsiasi utente può consentire a qualsiasi altro utente di aderire, e solo il consenso completo può tenere un utente fuori).
Se il canale deve davvero essere protetto da password, perché quella politica di controllo degli accessi è quella che vuoi veramente, allora devi rispondere a due domande:
- Come verrà comunicata la password ai nuovi partecipanti?
- Ti aspetti che gli utenti possano ridigitare la password ogni volta che si uniscono?
Se la risposta alla (1) è che qualcuno deve conoscere la password per darla, allora qualcuno deve memorizzare la password in una forma recuperabile, quindi l'hashing è fuori per chi fornisce la password. Se la risposta a (2) è che gli utenti memorizzano la password in qualche gestore di password, l'hashing delle password sul server di autenticazione fornisce solo una minima quantità di protezione, ma è comunque una buona idea.
Domanda successiva: quanto è grande il problema se la password è recuperabile sul server? L'hashing della password si rivolge solo a una minaccia specifica: se l'avversario ottiene l'accesso di sola lettura al database. Se ciò consente all'avversario di recuperare le password, allora:
- Accedono al servizio.
- Hanno accesso ad altri servizi in cui lo stesso utente ha utilizzato la stessa password.
Per una password condivisa, (2) non si applica, solo (1). Quindi è meno di un grosso problema che con le password per gli account utente. C'è un vantaggio nel memorizzare la password in un formato hash, ma non decisivo.
Per farla breve, una password condivisa non è un buon modello. Se sei bloccato, ci sono buone probabilità che tu debba memorizzare la password in una forma recuperabile, e non è il tuo problema più grande. Se possibile, prendi la password, ma se non puoi, non perdere il sonno.
Si noti che se gli utenti possono creare il proprio canale protetto, non dovrebbero essere autorizzati a selezionare la password. Nella mia esperienza, queste password condivise sono invariabilmente difficili da digitare, ma password facili da usare come quelle di CraZyStraWs!!!1
. Genera automaticamente una password casuale sensibile (come 10 lettere minuscole selezionate in modo casuale in modo casuale) e costringi gli utenti a usarlo.
Ma, davvero, non usare una password condivisa. Utilizza un database di accesso utente / canale.