2010-08-09 10 views
6

Necesito enviar datos desde mi aplicación de iPhone a mi servidor web, y viceversa. Para hacer esto de forma segura, estoy usando un algoritmo de encriptación. Requiere una clave que debe ser conocida tanto por el servidor como por el usuario para que pueda llevarse a cabo el descifrado. Estaba pensando en usar solo una cadena estática simple en mi aplicación y en el servidor como la clave, pero luego recordé que el código compilado todavía puede ser desmontado y visto, pero solo hasta cierto punto.¿Se puede descubrir una cadena "secreta" en una aplicación Obj-C compilada?

Entonces, ¿qué tan seguro estaré si coloco los métodos de encriptación y la cadena "secreta" en el código fuente de mi aplicación? ¿Hay alguna otra forma de lograr la comunicación entre una aplicación y un servidor de forma segura?

Gracias.

Respuesta

6

Sí, se puede encontrar con bastante facilidad. Ejecute el programa strings en su ejecutable y probablemente lo encuentre. Además, cualquier cosa en su programa puede ser "encontrada", ya que está necesariamente abierta para la lectura.

Use SSL para conexiones seguras. Utiliza cifrado asimétrico, lo que significa que la clave para encriptar los datos no es la misma que será necesaria para descifrarla. De esta forma, incluso si los atacantes descubren su clave de cifrado, todavía no pueden usarla para decodificar. Todos los principales servidores HTTP y bibliotecas cliente admiten HTTPS, y eso es lo que hace.

+0

Gracias, SSL parece la forma más sencilla de implementar pero más segura, después de observar cómo funcionan los algoritmos no simétricos ... – pop850

+0

¿es posible que un hacker descargue cadenas internas cuando se ejecuta una aplicación? Si es así, ¿hay alguna manera de protegerse contra esto? – vinnybad

+0

@vinnybad, generalmente es posible volcar toda la memoria de un programa y escanearla, y no hay una forma segura de evitarla. – zneak

4

¿Qué "cierto grado" crees que es exactamente? Cada instrucción y cada dato que contiene su aplicación está abierta a posible visualización. Además, usar la misma clave para cada dispositivo es lo último en locura criptográfica.

Simplemente use HTTPS. SSL/TLS es una tecnología segura y probada integrada en todos los principales servidores HTTP y en todas las principales bibliotecas cliente HTTP.

2

Utiliza un algoritmo simétrico. Tal vez deberías considerar tener un método no simétrico si necesitas una gran seguridad. De esta forma, incluso podría recrear las claves en, por ejemplo, cada sesión y solo necesitaría intercambiar la clave pública.

Aquí algunos ejemplos:

  • RSA
  • Diffie-Hellman
  • ElGamal
  • ECDSA
  • XTR
0

Como han dicho otros, lo que estás proponiendo es completamente inseguro. Si a alguien le importa tu aplicación, publicará la clave secreta en Internet dentro de los 10 minutos de su lanzamiento.

cosas que necesita la investigación son:

  1. algoritmos de cifrado asimétricas
  2. Diffie-Hellman de intercambio de claves

(Nota - No estoy diciendo que esas son la solución a su problema, pero aprender sobre ellos lo educará en los problemas involucrados y lo preparará mejor para elegir una solución)

En una nota adicional, ¿por qué no puede simplemente usar una Conexión HTTPS?

Por último, si este esquema de cifrado protege los datos críticos, probablemente le convenga contratar a un consultor para que lo ayude, ya que como novato en el tema, seguramente cometerá errores fundamentales.

1

iOS tiene servicios de llavero para almacenar cosas como claves de cifrado de forma segura y (relativamente) fácil. Consulte Keychain Services Programming.

Todas las API de cifrado que probablemente necesite también están disponibles en la biblioteca CommonCrypto incluida en libSystem. En resumen, no es necesario tomar atajos cuando se trata de proteger sus aplicaciones iOS.

Cuestiones relacionadas