Sto scrivendo due applicazioni che sono destinate all'esecuzione su due dispositivi separati. È simile a una soluzione desktop remoto come TeamViewer.
Quanto segue è la mia proposta per un processo di autenticazione tra due dispositivi A e B, dove A è l'autorità. Potrebbe essere un po 'prolisso, ma voglio solo essere accurato:
1) User inputs a password to A
2) A generates public and private key from password
3) A saves private key to memory
4) A saves private key to file
5) A appends salt to password in memory
6) A digests password + salt with SHA128.
7) A saves the hash to file.
8) B connects to A through TCP
9) A sends public key to B
10) User inputs (the same) password to B
11) B encrypts password with the public key obtained from A
12) B sends the encrypted password to A
13) A decrypts the password with private key
14) A applies steps 5 and 6
15) A compares the hash of the obtained password with the stored hash.
Questo processo non comporta l'invio della password in testo normale attraverso la rete in modo tale che la parte sia sicura, quindi le mie domande sono:
Dovrebbe invece essere usata la crittografia a chiave simmetrica? In tal caso, come si farebbe senza la trasmissione della password in testo semplice?
Sembra che archiviare sia l'hash della password che la chiave privata generata dalla password sia eccessiva. È?
Nota a margine, tutto avviene su una LAN.