Estoy desarrollando un software en el que necesito transmitir datos confidenciales (contraseñas) en una configuración de servidor / cliente mediante TCP. Todos los datos se cifran mediante AES (la clave simétrica es única para cada intercambio y se transmite mediante PGP / RSA, esta parte es segura).
Me gustaría, para mayor seguridad, codificar los datos confidenciales antes de enviarlos. Las contraseñas se almacenan en una base de datos SQL. Usar SHA-256/512 funciona de maravilla, pero preferiría usar BCrypt, que es sólido en caso de que la base de datos sea robada. Sin embargo, dado que BCrypt requiere la contraseña simple para verificar las coincidencias y como la verificación se realiza en el lado del servidor, esto requerirá que envíe la contraseña en texto sin formato (aunque esté encriptado con AES). También pensé en hacer alrededor de 1000 iteraciones hashing de la contraseña usando sha-256 / sha-512, pero no estoy seguro de que sea realmente la mejor idea.
¿Cuál sería la mejor manera de garantizar una transmisión totalmente segura y un almacenamiento de contraseñas totalmente seguro?