Lavorando su un pezzo di software intranet, avevo bisogno di implementare la sicurezza tra il client e il server. Vorrei sapere se questo è un modo sicuro per farlo o se ci sono buchi significativi.
Il client e il server presentano un segreto condiviso utilizzando lo scambio di chiavi ECDH (secp521r1). Un nuovo segreto condiviso viene negoziato per ogni richiesta.
La chiave di crittografia viene generata utilizzando Funzione di derivazione chiave basata su password (PBKDF2). Uso il segreto condiviso come password, una chiave già condivisa come salt (per consentire solo ai client autorizzati di connettersi), 100.000 iterazioni e la funzione di hash è SHA512.
Successivamente i dati della richiesta vengono crittografati con aes-128-gcm, utilizzando la chiave di crittografia e un IV di 12 zeri. La risposta è crittografata utilizzando la stessa chiave. Il server quindi scarta la chiave in modo che non possa essere utilizzata due volte.
Questa è una buona implementazione? Ci sono altri modi migliori per farlo? C'è qualcosa che mi manca?