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.