Dónde almacenar hashes, sales, claves en Aplicaciones de Escritorio

Estoy tratando de averiguar dónde o cómo debo almacenar secretos de aplicaciones y claves dentro de una aplicación de escritorio.
Por ejemplo, una clave de aplicación de Facebook o una clave de la caja de depósito y secreto.

Así que he leído que debería hash, sal, cifrar etc etc estos valores. Esto es para evitar que alguien de ingeniería inversa mi código y ver las claves.

Todo está bien y bien, pero con todos estos métodos, sólo estoy almacenando un valor de sal o hash en algún lugar en lugar de la clave en sí, al final. Sin duda, si un hacker puede llegar a la sal / hash y posiblemente el código fuente, que será capaz de descifrar la clave cifrada y obtener mi contraseña / clave / secreto de todos modos?

Una opción que he leído acerca de que parece que el más seguro es no almacenar este valor en la aplicación de escritorio en absoluto, pero para llamar a un servicio web para obtener la clave (probablemente cifrado). Pero mi pregunta es, incluso en este caso, un hacker decente seguramente sólo hará un volcado de memoria o algo para ver lo que el valor devuelto por el servicio web es, y luego estamos de vuelta en el cuadrado 1.

La siguiente mejor alternativa parece ser la oscuridad.

¿Estoy perdiendo algo por completo?

En una nota lateral, ¿qué uso será un facebook / twitter / dropbox / etc clave / secreto a un hacker de todos modos? ¿Seguramente todavía necesitarían las credenciales de un usuario o el token de acceso para poder utilizarlo de todos modos?

Cualquier consejo o sugerencia será apreciado.

Para cada cuenta de usuario, genere un nuevo token de acceso para la aplicación cuando se inicie correctamente en su servicio. Su servicio de inicio de sesión debe diseñarse como un inicio de sesión para un sitio web:

  • La API sólo debe permitir un número de set (digamos 5) intentos de inicio de sesión incorrectos que reporta al cliente de escritorio que el nombre de usuario / contraseña no coinciden.
  • La API debe devolver un token afiliado sólo a ese usuario cuando el usuario inicie sesión correctamente.
  • Utilice SSL y un método de hashing localizado para pasar contraseñas de usuario a su API

Este token de autenticación proporcionado por su API sólo funcionará para la cuenta individual y, como tal, sólo permitirá al usuario realizar operaciones en su cuenta individual. Por ejemplo, si un usuario desea realizar una operación, debe ser capaz de proporcionar un token de autenticación válido para completar la acción. Utilizando este método, los atacantes podrán obtener una clave de autenticación, pero esa clave de autorización sólo podrá realizar operaciones para la cuenta en la que se genera. No podrá realizar operaciones en ninguna otra cuenta. La idea aquí es dejar que se metan con los datos, pero para mantener la actividad mal compartida a una cuenta.

A partir de ahí, si tiene llamadas API genéricas (por ejemplo, una búsqueda de imágenes) que accede a datos de varias cuentas, asegúrese de que nunca vuelve o permite que ninguna cuenta acceda a todos los datos de su sistema de forma absoluta. Proporcione sólo un número limitado de registros. En este caso, el sistema sigue realizando su trabajo, pero en ningún momento permite acceder a todos los registros de su sistema.

Normalmente implemento un servicio como este:

  • El usuario inicia sesión y obtiene un token de autenticación. Guardo dicho token de autenticación en una base de datos asociada con ese usuario.
  • El usuario llama al servicio web con símbolo de autenticación. Busco la cuenta de usuario mediante el token de autenticación transmitido y el ID de usuario (dos formas de autenticación) y utilizo la cuenta de usuario descubierta para realizar todas las operaciones. No sólo asumo que el ID de usuario es correcto, tiene que ser el que el auth token autenticado contra.
  • Si un usuario necesita realizar una operación delicada como restablecer una contraseña, mi aplicación abre una ventana del navegador o una tarea del explorador en la aplicación donde el usuario puede solicitar y administrar un restablecimiento. Puedo proteger más fácilmente una aplicación web que una en un cliente desconocido.

Utilizando estos métodos, debería ser capaz de hacer una aplicación de escritorio completamente operativa. Existen valores anómalos para esta funcionalidad, si tiene algún mensaje en los comentarios y podemos profundizar en el problema y ver si esta solución todavía puede funcionar para usted.

  • Android / java Sqlite: ¿Cómo recuperar la fecha máxima?
  • Dibuja un arco geográficamente preciso en un mapa para Android
  • Cambiar el idioma de las cadenas en la actividad de Android
  • Colapso de notificaciones nuevas de Jelly Bean por defecto
  • Hora del formato de la clase de tiempo de Android
  • Proguard no obstruye las aplicaciones de Android
  • ¿Puede un ToggleButton cambiar la funcionalidad de otros botones en la misma Actividad?
  • Android imageview.setBackgroundResource () no funciona
  • ¿La alerta no aparece desde la vista web en android?
  • Detección de lanzamientos de actividades de Android
  • Creación de aplicaciones de origen de Android en Eclipse
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.