Cómo manejar el cifrado / descifrado de clave privada para la aplicación web

2

En el proceso de diseño de una aplicación web que maneja pares de claves públicas / privadas, específicamente una aplicación web de Bitcoin, he pensado mucho sobre cómo manejar de manera segura el almacenamiento de la clave privada, ya que, utilizando un Por analogía bancaria, si alguien tiene acceso a la clave privada de Bitcoin de un usuario, tiene acceso a todos los Bitcoins de ese usuario.

En todos los escenarios, la clave privada se cifrará en una base de datos lo más segura posible, sin acceso directo a Internet, privilegios explícitos de lectura / escritura, etc., pero la parte que estoy tratando de determinar y descubrir. La mejor solución es el engaño de la clave privada. Puedo hacerlo en el lado del cliente, es decir, en el navegador del usuario o en el lado del servidor.

Si lo hago en el lado del servidor, podría asegurarme de que se genere y cifre de manera criptográfica, pero si una persona maliciosa obtiene acceso al servidor, esa persona maliciosa podrá acceder a cualquier clave privada descifrada en la memoria. Podría enviarlo al navegador para que lo guarde en su almacenamiento, pero eso puede generar problemas de ataques de intermediario al poder leer la clave privada en tránsito. Todo el descifrado / cifrado de la clave privada se realizará en el servidor, incluso cuando la clave privada se genere por primera vez.

Si lo hago desde el lado del cliente, no tendría que preocuparme por que una persona maliciosa obtenga la clave privada descifrada de mi servidor como lo estaría descifrando en el navegador, pero debido a que la criptografía Javascript no es tan fuerte como otros métodos Es posible que las claves privadas cifradas no sean tan seguras en el almacenamiento y se puedan comprometer más fácilmente en el caso de robo de datos.

Originalmente me inclinaba a hacer el cifrado / descifrado y la generación de pares de claves en el lado del cliente, pero ahora no estoy tan seguro y para mí parece que ambos tienen preocupaciones válidas. Teniendo en cuenta el estado del navegador moderno y sus avances en la criptografía de Javascript, ¿son los beneficios / riesgos del cifrado / descifrado en el navegador mejores que los beneficios / riesgos de hacerlo en el servidor? Tenga en cuenta que para esta situación, solo considere que la clave privada solo residirá en la memoria del servidor o en el navegador en la memoria / almacenamiento local.

    
pregunta josh 26.05.2014 - 02:25
fuente

1 respuesta

2

No hay limitaciones particulares en la seguridad de la criptografía en JavaScript; es probable que una implementación de JavaScript sea más lenta que una implementación de código nativo, pero es casi seguro que seguirá siendo lo suficientemente rápida para sus propósitos. Sin embargo, el problema real es que, independientemente de si la criptografía ocurre en el servidor o en el cliente, los usuarios todavía tienen que confiar en usted, dado que las aplicaciones web son particularmente propensas a la manipulación y no permiten una verificación fácil del código fuente por parte de los usuarios. . Por lo tanto, una aplicación web para administrar carteras de bitcoin es simplemente una mala idea. Cualquier usuario de su sitio web tendría que confiar en usted, y en todas las autoridades de certificación en las que confían sus navegadores, con sus bitcoins. Dado que los bancos de bitcoins tienen un historial de pérdida / robo de bitcoins de sus usuarios, es poco probable que los usuarios confíen en su sitio web.

Consulte también "Criptografía de Javascript considerada dañina": enlace

    
respondido por el jbms 26.05.2014 - 23:58
fuente

Lea otras preguntas en las etiquetas