Creé una aplicación web que permite que dos dispositivos se transfieran archivos entre sí a través de un servidor web.
La aplicación no admite conexiones punto a punto.
Estoy tratando de lograr un punto en el que el servidor pueda servir a todos los pares de transferencias de archivos de clientes, sin tener una forma de conocer el contenido del archivo.
Después de investigar un poco, encontré una forma y es usar PKI. Así que realmente no entendí la parte de cómo lo hace seguro.
Así que actualmente llegué a este punto:
Donde el cliente A obtiene la clave pública de B y viceversa, y usa la clave pública para cifrar el archivo y el otro lado tiene la clave privada para desbloquear el archivo.
Sin embargo, esto se puede engañar si el servidor envía una clave pública falsa, por ejemplo, su propia clave pública, y luego desbloquea el archivo y lo guarda localmente, y luego lo cifra con la clave pública real, lo que hace que no sea 100% confiable.
Ahora entra la parte de PKI, y es usar una CA como LetsEncrypt, pero ¿cómo puede A obtener la clave pública de B a través del servidor sin darle al servidor la opción de hacer trampa y ver los datos reales? Incluso si envía un certificado firmado, si el otro cliente puede usarlo, ¿el servidor también puede hacerlo?
Donde el cliente A obtiene la clave pública de B y viceversa, y usa la clave pública para cifrar el archivo y el otro lado tiene la clave privada para desbloquear el archivo.
El servidor no tiene una clave privada de A o B, por lo que enviar archivos o claves públicas a través del servidor es bastante seguro. ¡¡Esto es lo que es PKI...!!
Solo la criptografía asimétrica no puede ayudar a cifrar y descifrar archivos grandes, pero sí lo ayuda a establecer una clave simétrica.
En el lado del navegador, puede usar cualquier extensión del navegador para acceder al almacén de certificados del usuario para compartir certificados o para descifrar. My Co. proporciona la extensión de navegador Signer.Digital gratuita que se documenta en esta respuesta SO