AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola,

Quiero añadir la funcionalidad de acceso a dropbox desde mi aplicación. Según su documentación el método de autentificación se debe realizar usando dos claves: "consumer key" y la "consumer secret". Con estas claves y las credenciales del usuario se consigue un token para acceder a la cuenta del usuario.

El problema radica, en que para una aplicación de tipo iOS la clave secreta de desarrollador se debe incluir en el código. Desconozco la manera en que xCode cifra el fichero .IPA generado, pero si alguien consiguiera esa clave mediante ingeniería inversa del código tendría acceso a mi clave de desarrollador.

¿Usáis algún mecanismo para almacenar esa clave en vuestro código?, tengo entendido que el simple hecho de añadir un sistema de cifrado en una aplicación iOS implica un proceso de revisión diferente.

Un saludo.

preguntado 16 May '11, 12:05

Davix's gravatar image

Davix ♦
2.0k81636

editó 16 May '11, 14:33

Consultando documentación en internet, he visto que este tipo de problemas se produce en todas las aplicaciones OAuth, con autentificación en cliente.

(16 May '11, 14:35) Davix ♦

Una cosa que puedes hacer para empezar es no usar Objective-C directamente, sino C pelado. De este modo se hace algo más difícil desensamblar el código. Por ejemplo, usa un array de bytes en lugar de inicializar un NSString estáticamente con la clave. Para algo más de complejidad, añade un offset a estos valores (por ejemplo, súmales 0x5) e incluso encríptala de manera que la clave final solo exista en tiempo de ejecución, y en el binario no esté en claro.

enlace permanente

respondido 16 May '11, 22:44

victor's gravatar image

victor
2.9k51248

Gracias Victor, por tu respuesta. Aunque como dice madmw, en algún momento la clave estará en claro en la memoria, tu método me parece muy efectivo y algo parecido a eso intentare implementar en mi aplicación.

(21 May '11, 12:44) Davix ♦

Yo me limitaría a ofuscarla un poco, partiendo la cadena en varios segmentos y poco más.

NSMutableString *secret = [NSMutableString string];
[secret appendString:@"ABC"];
[secret appendString:@"DEF"];
[secret appendString:[self _segment3]];
[secret appendString:@"GHI"];

Y la verdad es que te servirá de poco. Al final, salvo que te implementes tu propia librería OAuth, se la pasarás a un método donde seguramente se mantenga en claro en memoria. Si alguien tiene interés en hacerse con ella, lo conseguirá, hagas lo que hagas. Mejor dedicar el tiempo a la funcionalidad.

enlace permanente

respondido 20 May '11, 00:04

madmw's gravatar image

madmw
2661311

Hola madmw, muchas gracias por tu respuesta. Estoy de acuerdo contigo en que si alguien tiene interés en conseguir la clave al final la conseguirá. Pero es muy importante mantener las keys lo más protegidas posible. Un usuario mal intencionado podría usar esa key en mi nombre e invalidar mi cuenta de desarrollador en dropbox y dejar en consecuencia sin servicio a mis clientes.

(21 May '11, 12:41) Davix ♦
Tu respuesta:
Activar/desactivar vista previa