Come posso autenticare / approvare un utente e mantenere comunque l'anonimato in un'applicazione web?

2

Questa è una domanda sull'architettura dei sistemi.

Sono in procinto di pianificare una piattaforma online che raccoglierà le informazioni mediche delle persone. A causa della natura estremamente delicata dei dati presentati, voglio garantire il completo anonimato.

Verrà creato un profilo che conterrà tutti i dati, ma nessuno di essi sarebbe personalmente identificabile - le loro condizioni, sintomi, farmaci, esiti di test, informazioni dietetiche, ecc., ma nessun nome, date (forse l'anno di nascita), posizione, ecc. Vorrei anche evitare di avere qualsiasi informazione di contatto, incluso l'indirizzo email.

Tuttavia, questo presenta alcune sfide logistiche, per non dire altro:

  • Come prevenire lo spam e duplicare le registrazioni
  • Come fornire strumenti per il reset della password se non ho un indirizzo email (o non faccio nulla riguardo al dirottamento dell'account, se la password viene divulgata)
  • Come ospitare "registrazione solo su invito" mantenendo l'anonimato

Mi chiedevo se un approccio a due sistemi potesse funzionare. Se avessi il sito A in cui le persone potessero inserire i loro dettagli di identità di base: nome, email, ecc. E essere convalidati come persona reale, e magari emettere inviti e permessi ad altre persone per registrarsi.

Ciò fornirebbe loro un hash che potrebbe essere inserito nel Sito B che verificherebbe contro tutti gli hash disponibili dal Sito A, e se trovasse una corrispondenza, permetterebbe alle persone di procedere con la loro registrazione anonima sul Sito B .

L'hash verrebbe rimosso dall'elenco di hash disponibili del sito A e l'hash non verrebbe registrato dal sito B- rimuovendo qualsiasi collegamento specifico, pur garantendo la convalida dell'utente reale e controllando le registrazioni ripetute. Funzionerebbe?

So quanto suona complicato, ma non voglio che i dati personali vengano archiviati perché le persone possano hackerare. Se una violazione del Sito A è stata in grado di determinare che una persona specifica si è registrata e quindi ha usato il proprio token sul Sito B, ma non c'era un collegamento 1-a-1 tra un utente del Sito A e un record del Sito B, allora potrei vivere con che.

Per quanto riguarda la logistica della verifica- propongo che l'utente, essendo stato autenticato con l'hash, sia in grado di impostare un nome utente e una password che utilizzano per accedere al sito.

Per fornire sicurezza, potrei suggerire di utilizzare 2FA, ma ciò richiederebbe la memorizzazione di tutto ciò che potrebbe essere utilizzato per collegare l'account a un determinato individuo? Qualcosa di simile ad un 2FA veramente anonimo? Sarei a posto senza avere una politica di registrazione, ma non so se 2FA richieda un indirizzo email o un ID memorizzato con google che potrebbe essere utilizzato per stabilire una connessione.

Id essere molto contento se qualcuno fosse a conoscenza di un caso di utilizzo simile in cui è stata trovata una soluzione accettabile. Forse esiste già un provider che può essere utilizzato (come Sito A)?

    
posta Andy Hickey 24.02.2018 - 17:48
fonte

2 risposte

2

Se memorizzi l'e-mail in qualche altro sito e usi qualcosa come SAML o OAuth ecc per autenticare l'utente, avrai un collegamento tra l'utente nel sito del provider di identità e il sito del fornitore di servizi (il tuo sito). Quindi in questo caso non è possibile garantire l'anonimato totale.

In casi normali si salverebbe l'indirizzo e-mail e una rappresentazione della password (hash)

Nel tuo caso, puoi anche cancellare l'indirizzo email, così quando gli utenti tentano di accedere, creerai un hash del loro indirizzo email / nome utente e un hash del loro passord e lo cercheranno nel tuo database per trovare qualsiasi utente corrispondente . (dovresti includere anche il sale negli hash)

Dovrai fare lo stesso quando fai clic su "forgot passord", dovrai creare l'hash della loro email e cercarlo nel database e inviare loro un "reset passord link"

Usando questo metodo, non è possibile per te o per gli altri trovare l'indirizzo e-mail, a meno che non abbiano l'indirizzo e-mail, salato e accesso al tuo database - quindi possono identificare l'utente nel database.

Tuttavia, non sarebbe neanche possibile per te trovare un utente che ha dimenticato quale indirizzo email ha utilizzato per creare l'account.

Come nota a margine, questa informazione sembra che non dovrebbe essere disponibile su Internet. Nel paese in cui vivo, è molto regolamentato e questo non sarebbe permesso dalla legge. L'unione europea sta arrivando anche con nuove leggi che regolano questo (GDPR) - non esattamente quello che hai chiesto, ma potrebbe essere qualcosa da prendere in considerazione.

    
risposta data 24.02.2018 - 22:05
fonte
0

Non so quali sono le leggi della tua giurisdizione a riguardo, quindi non sono sicuro di cosa devi fare rigorosamente per essere conforme, ma potresti avere un problema qui:

A profile would be created that would contain all of the data, but none of it would be personally identifiable- their condition, symptoms, medications, outcomes of tests, dietary information, etc, but no name, dates (maybe the year of birth), location, etc.

Molti non hanno un nome o un identificatore equivalente qui, ma sicuramente ci sono abbastanza informazioni per identificare una singola persona correlando le informazioni che si tengono con altri database, almeno per alcuni dei utenti. Ad esempio, Mucopolisaccaridosi tipo 4 è una condizione (che io appena selezionati casualmente da una lista) che possono essere danneggiati da un minimo di 1 su 10.000 persone. Combinalo con l'anno di nascita e hai ridotto a meno di un migliaio il numero di persone possibili in un campione di residenti negli Stati Uniti. Correla con altri fattori nel tuo database e probabilmente puoi identificare un singolo individuo con relativa facilità, almeno per chi soffre di malattie rare. E mentre ogni singola malattia rara è rara, ce ne sono molte, quindi in realtà non è così insolito che una persona possa soffrirne.

Questo probabilmente significa che dovresti considerare il tuo database come riservato, anche se non hai identificatori specifici.

How to prevent spam and duplicate registrations

Dovresti notare che la raccolta di indirizzi email non lo consente in ogni caso, poiché è molto facile per le persone inventare nuovi indirizzi email su richiesta.

How to provide password reset tools if I don't have an email address

Potresti usare l'approccio "elenco di domande e risposte", anche se questo naturalmente aumenta la possibilità che il tuo database possa essere usato per identificare gli individui, ma vorrebbe dire che non è necessario mantenere l'indirizzo email.

How to accommodate 'registration by invitation only' while maintaining anonymity

La soluzione a questo dipende da come i tuoi inviti devono essere distribuiti. Potresti passare i token di registrazione (che, ad esempio, contengono un numero univoco e un hash sicuro del numero con una stringa segreta) in un canale di distribuzione che potrebbe quindi passarli in modo anonimo ai tuoi utenti previsti. Quindi devi solo tenere traccia di quali numeri sono stati utilizzati, ma non compromettere l'anonimità degli account.

Il tuo approccio suggerito è simile a questo, ma penso che questo approccio sia un po 'migliore, soprattutto perché non pone alcuna restrizione su quale canale di distribuzione usi (ad esempio per un sito medico, forse il canale di distribuzione potrebbe essere un medico / farmacisti / ecc. - potrebbe anche essere eseguito offline con codici QR prestampati o simili) e non richiede un link dal tuo sito al distributore. Significa anche che il distributore non scopre mai se il token è stato utilizzato o meno, quindi una violazione del distributore (se effettuata online) non rivelerebbe alcuna informazione sui tuoi utenti.

    
risposta data 26.02.2018 - 11:09
fonte

Leggi altre domande sui tag