2009-10-06 29 views
5

He estado leyendo sobre Secure Remote Password protocol de Stanford, y parece ideal para el tipo de entorno en el que se ejecutan las aplicaciones de iPhone. Desafortunadamente, no he podido encontrar una buena implementación de Objective-C del protocolo. Ni, por lo que puedo decir, hacer el crypto libraries in the SDK implementarlo.Implementación de contraseña remota segura para iPhone

¿Alguien sabe de tal implementación?

Al fallar, ¿cuál es mi mejor apuesta, ¿crees? Podría intentar build OpenSSL into my app, pero se siente como realmente grande agregar para esta pequeña pieza. Podría intentar traducir las implementaciones JavaScript o Java en Objective-C, pero eso infringe la regla n. ° 1 de crypto (utilice una implementación conocida y probada).

Un par de elementos de seguimiento: primero, probablemente debería ser obvio por contexto, pero voy a necesitar algo que sea compatible con el uso comercial de código cerrado (la implementación de JavaScript a la que me vinculé, noté más adelante, es AGPL).

Además, suponiendo que termine yendo con OpenSSL, estoy teniendo problemas realmente para encontrar un ejemplo de usarlo para hacer SRP. Su sitio afirma que el código está allí, pero no puedo encontrar ninguna prueba de ello, ya sea en el OpenSSL documentation, o en el código fuente (v 0.9.8k). (O estoy leyendo mal serio las cosas, y todavía tengo que aplicar una de their patches a la fuente de OpenSSL?)

EDIT:

Lo que podría utilizar realmente en este momento está listo para el uso de código , una receta bastante completa o algún tipo de ejemplo de uso de SRP en OpenSSL. Estoy bastante seguro de poder improvisar algo desde cero con el protocol docs, pero realmente estoy tratando de evitar reinventar la rueda, si puedo evitarlo.

Respuesta

5

Las implementaciones OpenSSL y GnuTLS de SRP-TLS son los únicos basados ​​en C que conozco que se mantienen (TinySRP no se ha actualizado desde 2001, y ha habido muchos avisos de seguridad frente a la versión subyacente OpenSSL se basa en , aunque no sé si impactan a TinySRP en sí mismo).

Dicho esto, cada proyecto de iPhone que he construido finalmente ha tenido que incluir una copia de OpenSSL para una cosa u otra. Recomiendo solo morder la bala y usarla. Las instrucciones que enlazas funcionan bien.

Personalmente, construyo OpenSSL en una biblioteca universal usando lipo que tiene versiones de brazo y x86. De esa manera puedo vincular a una .a única para Simulador y Dispositivo. La lipo es muy fácil. Solo construye las dos bibliotecas y pégalas. Aquí está la regla de mi Makefile:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo \ 
     -create \ 
     -arch armv6 iPhoneOS$(SDK_VER)/lib/$(1) \ 
     -arch i386 iPhoneSimulator$(SDK_VER)/lib/$(1) \ 
     -output iPhoneUniversal$(SDK_VER)/lib/$(1) 
+0

Entonces, ¿qué tan grande es la biblioteca OpenSSL para el dispositivo? (¿Y está lo suficientemente estructurado como para que el enlazador pueda dejar fuera los bits no utilizados?) –

+0

libcrypto.a + libssl.a tienen más de 2.5M, pero no representan nada de eso en el binario final. Si recuerdo la última vez que investigué, OpenSSL agregó alrededor de 400-500k al tamaño binario final. Más de lo que quisiera, pero menos de lo que temía. Traté de reducir la cantidad de archivos en OpenSSL para mejorar el tiempo de compilación, ya que solo necesitábamos algunas funciones, pero rápidamente encontré que esto no funcionaba. OpenSSL está lo suficientemente estructurado para que el enlazador se divida, pero no lo suficiente para el compilador. YMMV dependiendo de qué funciones uses. –

3

La implementación de SRP en la plataforma iOS requiere OpenSSL, por lo que una buena forma de hacerlo es a través de la instalación de OpenSSL vainas.

Hay una buena implementación C de srp por hoccer llamada csrp.

He escrito un contenedor iOS para esta implementación, que puedes encontrar here. Pero debo mencionar que csrp ya está bien implementado y explicado a partir de su documentación.

Cuestiones relacionadas