Protocollo facile per l'autenticazione e-mail

2

Sto preparando un sistema molto semplice per inviare comandi a un server remoto via email. Ogni volta che un'e-mail viene inviata a [email protected] , il server esegue uno script python che fa qualcosa di diverso in base al do_something del destinatario e utilizza il contenuto e-mail e i metadati come parametri per qualsiasi attività che eseguirà. Questo verrà utilizzato per fornire servizi tramite e-mail per un insieme specifico di utenti che non hanno la connessione Internet diretta devono del tempo. Gli utenti non scrivono le email da soli, ma usano una piccola applicazione che genera tutti i metadati necessari.

Ovviamente è molto importante autenticare gli utenti in modo affidabile. Potrei implementare un protocollo di crittografia a chiave pubblica, ma un amico mi ha suggerito la seguente idea, che è molto facile da implementare, e mi sembra abbastanza affidabile per me:

Genero una password per ciascun utente (identificata dal suo indirizzo email), ad esempio una stringa casuale di dimensione 2K. Il server conosce la password per ciascun utente e ogni utente conosce la sua password. L'applicazione utente genera un'e-mail per l'attività corrispondente con tutti i dati necessari. Al termine, concatena alcuni metadati della posta elettronica (ad esempio mittente e timestamp per evitare collisioni per lo stesso utente) con la password dell'utente e calcola un hash sicuro (attualmente sto utilizzando SHA-512). Quindi associa questo hash all'email generata. Il server riceve l'e-mail e calcola lo stesso hash (ricorda che conosce la presunta password del mittente). Se corrisponde all'hash allegato nell'email, è considerato autenticato.

Supponiamo ora di poter rendere affidabile ogni utente con la sua password (non per via elettronica). Questo meccanismo è sicuro? So che probabilmente sto reinventando molto (piuttosto vecchio) di ruote qui, quindi per favore perdona la mia ignoranza sull'argomento. So che gli hash SHA sono praticamente irreversibili, e questo è il motivo principale per cui penso che questa strategia possa funzionare.

Grazie in anticipo.

    
posta Alejandro Piad 31.01.2013 - 20:42
fonte

2 risposte

6

Stai tentando di utilizzare un MAC . L'applicazione di una funzione di hash sulla concatenazione della password e alcuni altri dati è un MAC personalizzato, e non molto buono con le solite funzioni di hash come SHA-512 a causa del attacco di estensione della lunghezza . Ecco perché è stato inventato HMAC .

L'uso di HMAC con un segreto condiviso è un buon metodo di autenticazione. Tuttavia, a causa dell'intrinseca insicurezza delle e-mail, probabilmente vorrai anche qualche crittografia, e per questo dovresti semplicemente usare OpenPGP (con la sua implementazione OpenSource ). L'utilizzo di un sistema software già esistente è al contempo più sicuro e più semplice rispetto al reimplementazione del proprio sistema.

Indipendentemente dal metodo di autenticazione che usi, dovresti aggiungere un attacco anti-replay: un utente malintenzionato potrebbe inviare una email valida (che ha osservato in transito) una seconda volta, innescando così l'effetto email di nuovo . Gli attacchi di Replay ridono di MAC e crittografia. Per sconfiggerli, il server deve "ricordare" le e-mail precedenti e scartare i duplicati esatti.

    
risposta data 31.01.2013 - 20:58
fonte
3

Tom ha una grande prospettiva su come portare l'idea generale del sistema che suggerisci di annusare ed è il più grande rischio - attacco di riproduzione.

Alcuni altri pensieri che potrebbero darti qualcosa su cui riflettere:

Che cosa protegge?

Con lo schema che hai, non c'è solo l'attacco di riproduzione, ma il richiamo della password dell'utente viene rubato o perso. Alcune delle correzioni per replicare gli attacchi (come inserire un timestamp e lasciare che il timestamp sia usato una sola volta) - possono funzionare per alcuni casi, ma non per altri (casi in cui un utente legittimo invierà diversi messaggi in una singola finestra temporale.

Quanto è importante la disponibilità costante e qual è il rischio se l'autenticazione crea un falso positivo o un falso negativo?

Come viene distribuito?

È una grande differenza se funziona all'interno delle protezioni di una rete o qualcosa che viene dal pubblico. Inoltre, la protezione delle password degli utenti sia sul computer client dell'utente che sul server è un grosso problema e deve essere protetta in modo commisurato ai rischi del sistema.

Come vengono reinseriti gli utenti?

Questo può essere un problema sia per le chiavi asimmetriche che per le password degli utenti - spesso il processo di reset / rekey è il più grande rischio, poiché l'utente è ora privo della prova di autenticazione. Il reset delle password aggiunge il rischio che la password debba essere memorizzata in entrambe le posizioni. Se gli utenti devono lavorare (e resettare le password) da remoto, questo può essere un grosso problema.

Rekey delle chiavi assimmetriche ha alcuni degli stessi problemi: conoscere l'utente è un problema se l'utente ha perso le sue credenziali, ma la chiave privata in una coppia assimetrica non deve essere trasmessa finché il pubblico la chiave può essere verificata.

Quali sono i tuoi requisiti di facilità d'uso?

La maggior parte degli utenti, se opportunamente predisposti, può firmare e-mail con il clic di un pulsante nella maggior parte dei client di posta principali (Outlook e Notes di sicuro). Ci vorrà un'estensione al client di posta elettronica per fare qualcosa di personalizzato. Se hai pochi utenti molto esperti, questo potrebbe non essere un grosso problema. Ma se questo deve andare da uomini d'affari non tecnici, questa sarà una vera sfida per l'UI, la cui dimensione potrebbe sminuire i benefici.

    
risposta data 31.01.2013 - 21:25
fonte

Leggi altre domande sui tag