Cómo almacenar de forma segura las claves API

4

Necesito almacenar claves API para mis usuarios. Estas llaves son extremadamente valiosas ya que se usan para comprar y vender cosas. Algunos usuarios no querrán dar estas claves a nadie, y estoy tratando de encontrar una mejor solución que simplemente almacenarlas en una base de datos.

Sería bueno mantener el control de la clave con el usuario. Considero hacer un script de código abierto que puedan implementar en un servidor y mi aplicación de llamada o similar.

Somone sugirió que podría ser posible configurar un proxy para hacer algo sin ningún código, pero esto está más allá de mi experiencia.

¿Alguien tiene alguna otra idea?

editar: para más aclaraciones

Mi sistema es una aplicación web. Cada usuario le da a mi sistema su clave api, que permite que la aplicación web se negocie en su nombre (comprar y vender cosas). La esencia del sistema es que, bajo ciertas circunstancias automatizadas, el sistema querrá comerciar en nombre del usuario.

Estoy considerando una intervención manual con 2FA, que probablemente será lo suficientemente fuerte en mi opinión, pero no es óptima ya que el usuario no podrá reaccionar lo suficientemente rápido todo el tiempo.

Considero crear algún código de socio de código abierto y ligero que el usuario pueda implementar en su propio servidor en algún lugar. La idea es que se pueda verificar independientemente como no malicioso y que el usuario pueda almacenar las claves por sí mismo.

No estoy seguro de que con este enfoque se obtenga algo más que un pirata informático que tiene que averiguar la ubicación de la secuencia de comandos, e incluso si mi servidor está comprometido, pueden enviar operaciones utilizando mi sistema a esta secuencia de comandos de la misma manera como si todo estuviera en mi servidor.

Supongo que la idea de un servidor proxy sería algo como el anterior, pero algo a un nivel más bajo que una aplicación que se ejecuta en el servidor. Me temo que no tengo suficientes conocimientos de administrador del servidor para especular sobre cómo podría funcionar.

    
pregunta iKode 27.08.2018 - 17:17
fuente

1 respuesta

3

Gran pregunta, y una que aparece con frecuencia (aunque siempre con diferentes matices, por lo que no hay una buena respuesta general). Una búsqueda rápida encontró algunas preguntas relacionadas:

En general, debe decidir en qué categoría de uso se encuentran sus claves, lo que le dirá qué opciones tiene disponibles:

1. Acceso manual

Con esto quiero decir que la clave solo es necesaria cuando hay un humano en el teclado. Este escenario es bastante fácil de resolver: por ejemplo, podría cifrar la clave con una contraseña ingresada por el usuario. Aún debe pensar en imponer contraseñas seguras para mitigar los ataques de fuerza bruta, pero es bastante estándar; vea cómo SSH protege con contraseña las claves ssh para inspirarse.

2. Acceso automatizado

Si las claves confidenciales deben almacenarse de tal manera que puedan ser utilizadas por un proceso automatizado sin humanos en el teclado, entonces se está viendo un problema muy difícil debido a los requisitos conflictivos que debe tener la máquina. tiene acceso, pero un atacante que comprometa la máquina no debería tener acceso.

Las soluciones estándar para este problema incluyen:

  • Adjuntar una tarjeta inteligente USB al servidor o enviar una a cada usuario.
  • Almacenar las claves del lado del servidor en una bóveda segura que usará las claves en nombre del usuario y requiere que los usuarios se autentiquen utilizando una autenticación sólida de dos factores.
  • Si corresponde, Módulos de seguridad de hardware .

Claramente, la solución aplicable depende mucho de la arquitectura de su entorno.

    
respondido por el Mike Ounsworth 27.08.2018 - 18:17
fuente

Lea otras preguntas en las etiquetas