¿Cómo implementar un servicio web seguro?

0

Quiero crear un servicio web donde podamos iniciar sesión en este sistema con nombre de usuario y contraseña. Después de que el usuario seleccione un archivo de su computadora y envíe este archivo al servidor. Quiero cifrar este archivo a un grupo de usuarios (quiero usar criptografía ABE). Ahora, ¿cuáles son los pasos para hacerlos?

Mi idea es: Inicie sesión en el sistema con nombre de usuario y contraseña básicos. Almaceno el nombre de usuario y la contraseña en mi base de datos en una tabla.

Después de la criptografía ABE, ¿dónde puedo guardar la clave privada maestra y la clave pública maestra? ¿En mi base de datos?

Después de iniciar sesión, el sistema crea una clave secreta del usuario. Guardo mi clave secreta en mi base de datos. Después de usar la clave pública maestra para cifrar el archivo (lo recupero de una consulta SQL) y cargarlo en mi servidor, y cuando lo recupero, lo descifro con mi clave secreta (lo recupero con la consulta SQL). / p>

¿Es correcto este enfoque? ¿Hay un enfoque más correctamente?

    
pregunta JLo 14.09.2016 - 09:34
fuente

3 respuestas

3

Primero, su enfoque para los nombres de usuario / contraseñas: muestra que es un principiante en seguridad, lo que está bien, pero significa que probablemente no debería diseñar un almacén de archivos seguro. Sin embargo, aquí va con algunos comentarios más constructivos:

1) NUNCA almacenas las contraseñas de los usuarios. Parada completa Lo que usted hace es almacenar una versión salada y con hash de su contraseña. Cuando intentan iniciar sesión, salt y hash, compare con el hash almacenado. De OWASP: enlace

2) No hay ninguna razón para utilizar el cifrado asimétrico aquí, simplemente puede cifrar y descifrar de su almacén de datos. Almacene su clave (y IV) en una ubicación segura; tradicionalmente, este es un archivo al que solo tiene acceso su aplicación en el servidor, donde se asegura de que su aplicación se ejecute como un usuario aislado. Sin embargo, los sistemas más modernos para el almacenamiento de claves incluyen HSM (módulos de hardware, muy caros) o sistemas como Keywhiz o Hashicorp's Vault: son complicados pero baratos. Esto es mejor si desea rotación de claves (¡bien!) Y redundancia en los servidores de aplicaciones.

En serio, si esta es una aplicación real, estas son cosas que necesitan expertos más allá de las aleatorias en Internet. Hay muchos errores sutiles que puede cometer que devaluarán todas las demás medidas de seguridad que tome. Tienes que hacer todo bien, obtener ayuda profesional.

    
respondido por el crovers 14.09.2016 - 17:29
fuente
0
  

¿Es correcto este enfoque?

Demasiado amplio, como preguntar si está "seguro". Eso debería ganar un voto para cerrar. Pero también hiciste la pregunta:

  

donde puedo guardar la clave privada maestra

(Donde guarda la clave pública no es un problema de seguridad más allá de garantizar su disponibilidad).

Una solución es un HSM, pero que solo protege la captura de la clave: necesita medidas adicionales para detener el abuso de la clave.

Alternativamente .... Realmente no se puede cambiar la clave con frecuencia. Pero puede poner una frase de contraseña / cifrarla usando un algoritmo asimétrico y cambiar esa frase de forma regular. Y la pregunta de cómo almacenar las credenciales de seguridad dentro de una aplicación web se ha planteado muchas veces antes de aquí:

  • almacenarlo en el cliente, no en el servidor
  • solo guárdelo en la memoria en el servidor
  • asegúrese de que exista separación de privilegios entre las partes de la aplicación que necesitan usar la clave y todo lo demás en el servidor
respondido por el symcbean 14.09.2016 - 14:29
fuente
0

Según sus preguntas, es mucho mejor usar algunos de los esquemas existentes en lugar de inventar los suyos. Más específicamente, debes evitar usar cosas como la criptografía basada en atributos: se propuso hace bastante tiempo y, aunque parece muy simple, no hay muchos ejemplos a nivel de libro de texto que puedas seguir, y ser engañado por la simplicidad del método, podría implementar algo. completamente irrelevante.

Aparte de estas quejas aburridas, el objetivo funcional y las garantías de seguridad del sistema no se describen lo suficiente como para proponerle una solución.

Sería muy útil si explica qué garantías de seguridad y expectativas funcionales. ¿Qué hace el sistema con los datos, quién debería verlos y regularlos en función de qué requisitos debería verlos?

Qué tipo de acceso tienen los usuarios al sistema, etc.

    
respondido por el Eugene 15.09.2016 - 15:16
fuente

Lea otras preguntas en las etiquetas