Digamos que tengo una aplicación de mensajería móvil. Hay un servidor central que administra las cosas (como un directorio de usuarios, incorporación, etc.) y hay todos los clientes.
Mi aplicación es profesional, por lo que utiliza un cifrado asimétrico para enviar mensajes de forma segura.
Mi pregunta es, en resumen, ¿el cliente o el servidor deben generar el par de claves público-privadas?
Si el cliente genera el par, entonces el par puede generarse en el lado del cliente y luego enviarse al servidor (tal vez encriptado con la clave pública del servidor).
Si el servidor genera el par, entonces tuve una idea más complicada:
- El cliente genera un secreto (
S
) - El cliente cifra el secreto con la clave pública del servidor
- El cliente envía el secreto cifrado al servidor
- El servidor descifra el secreto cifrado con la clave privada del servidor
- El servidor genera un par de claves público-privadas para el cliente
- El servidor cifra la clave privada con un secreto (
S
) y la elimina de la memoria - El servidor envía una clave privada encriptada al servidor
- El cliente descifra la clave privada cifrada con un secreto (
S
), que tenía desde el principio - ¡Hurra! El cliente ahora tiene clave privada y la clave pública está en el servidor! :)
Entonces, ¿cuál es el mejor enfoque? ¿Debería el cliente o el servidor generar el par de claves público-privadas desde una perspectiva de seguridad? ¿Existe una forma mejor / más eficiente / más segura de hacerlo que mis soluciones?