Dónde almacenar hashes, sales, keys en aplicaciones de escritorio

5

Estoy tratando de averiguar dónde o cómo debo almacenar los secretos y las claves de la aplicación dentro de una aplicación de escritorio. Por ejemplo, una clave de la aplicación de Facebook o una clave de Dropbox y un secreto.

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

Todo está bien y está bien, pero con todos estos métodos, simplemente estoy almacenando un valor de sal o hash en algún lugar en lugar de la clave, al final. Seguramente, si un pirata informático puede obtener el código sal / hash y posiblemente el código fuente, podrá descifrar la clave cifrada y obtener mi contraseña / clave / secreto de todos modos.

Una opción sobre la que he leído que parece más segura es no almacenar este valor en la aplicación de escritorio, sino llamar a un servicio web para obtener la clave (probablemente encriptada). Pero mi pregunta es que, incluso en este caso, un pirata informático decente simplemente hará un volcado de memoria o algo para ver cuál es el valor devuelto por el servicio web, y luego estamos de vuelta en el punto 1.

La siguiente mejor alternativa parece ser la oscuridad.

¿Me estoy perdiendo algo completamente?

En una nota al margen, ¿de qué sirve una clave / secreto de facebook / twitter / dropbox / etc para un pirata informático? Seguramente todavía necesitarían las credenciales de un usuario o el token de acceso para poder usarlo de todos modos.

Cualquier consejo o sugerencia será apreciada.

    
pregunta user177950 07.05.2015 - 06:16
fuente

1 respuesta

5

TLDR : no puede guardar nada en secreto en una aplicación cliente, solo puede hacer que sea más difícil de encontrar. Debe ofuscar la clave secreta para que sea lo suficientemente difícil para que un atacante quiera realizar ingeniería inversa.

las aplicaciones cliente, que deben implementarse en el dispositivo del usuario final, están sujetas a ingeniería inversa y, por lo tanto, NADA se puede mantener en secreto. Pero es cierto que puede hacer que el proceso de ingeniería inversa sea difícil para algunas partes de su aplicación, a veces lo suficientemente difícil como para que no valga la pena, utilizando ofuscación .

utilizar un hash y un salt no te ayudará, ya que una función hash es una función de una sola vía: se puede usar para validar un hash de entrada dado que es idéntico a lo que se espera. No se puede utilizar para cifrar datos, ya que no hay ningún método para descifrar.

Puede usar cifrado simétrico como AES, pero aún así se necesitará la clave de cifrado para descifrar los datos y, por lo tanto, también estará disponible para el atacante.

Como usted indicó, mantener el secreto en un servidor y llamar a un servicio web es inútil, ya que el atacante puede llamar al servicio web al igual que su aplicación cliente.

Por lo tanto, el único medio real de proteger tu secreto es utilizar la ofuscación, lo que hará que a un atacante no le valga la pena hacer el esfuerzo de ingeniería inversa.

En mi humilde opinión, en su caso, una clave secreta para una API son datos confidenciales, pero no críticos. Cualquiera puede obtener una clave de API propia y, como lo anotó en sí mismo, no le otorga permisos a los datos de ningún usuario. Es solo para el proveedor de servicios hacer un seguimiento de quién está haciendo las llamadas a la API y, a veces, en ciertas API para monitorear el uso, los límites e incluso las tarifas. Por lo tanto, se arriesga a que alguien le robe el ancho de banda de sus llamadas a la API y tal vez incluso le haga pagar por el uso de la API. En el lado positivo, tales claves (facebook, twitter ...) son muy comunes, hoy en día casi en todas las aplicaciones, y por lo tanto, es suficiente para que lo hagas un poco más difícil de lo normal para que el atacante simplemente deje tu aplicación. solo y vaya a tomar una clave API sercret de otra aplicación en la que simplemente está en texto sin formato.

Aquí es una publicación de blog con algunas ideas simples y agradables.

    
respondido por el aviv 07.05.2015 - 12:27
fuente

Lea otras preguntas en las etiquetas