Usando la clase Apple NSKeyedArchiver sin cifrado para guardar los datos de puntuación localmente

3

Primero que nada, lo siento por mi mal inglés!

Tengo una pregunta sobre la seguridad de NSKeyedArchiver, una subclase de NSCoder de Apple Foundation.framework ( enlace )

En mis Aplicaciones, para la gestión de la Clasificación de Apple, utilicé ABGameKitHelper de Alexander Blunck ( enlace ). He notado que este ayudante utiliza el cifrado AES para guardar puntuaciones en local cuando no se puede acceder al Apple Leaderboard (por ejemplo, no hay red, etc.) con la clase NSKeyedArchiver.

Entonces, mi pregunta: ¿existe una posibilidad real de que un atacante pueda decodificar los datos escritos sin cifrado utilizando NSKeyedArchiver y entender los pares clave-valor? ¿Y también modifica los datos de puntuación, vuelve a conectarte a la red y espera la actualización automática de la tabla de clasificación de ABGameKitHelper?

Gracias de antemano, Alesanco

    
pregunta Alesanco 10.07.2013 - 14:44
fuente

1 respuesta

3

Cualquier persona puede desarchivar cualquier objeto NSKeyedArchiver si no está cifrado, ya que no cifra nada por sí mismo. Todo lo que NSKeyedArchiver hace es, a partir de la Documentación:

  

NSKeyedArchiver, una subclase concreta de NSCoder, proporciona una forma de codificar objetos (y valores escalares) en un formato independiente de la arquitectura que se puede almacenar en un archivo. Cuando archiva un conjunto de objetos, la información de clase y las variables de instancia para cada objeto se escriben en el archivo. La clase complementaria de NSKeyedArchiver, NSKeyedUnarchiver, decodifica los datos en un archivo y crea un conjunto de objetos equivalente al conjunto original.

Entonces, en otras palabras, crea una estructura donde el contenido de cada objeto se almacena con una identificación de su Clase original, para que el objeto original se pueda decodificar más adelante. Piense en ello como un tipo de XML binario.

Lo que te recomiendo que hagas es tomar el NSData creado por [NSKeyedArchiver archivedDataWithRootObject:(id)rootObject] y cifrarlo usando el método que prefieras. Si los datos son realmente secretos, recomiendo usar AES256 o Blowfish . Cuando necesite usarlo, primero descifre los datos y luego póngalos en [NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)data] .

    
respondido por el Bruno Philipe 10.11.2013 - 22:15
fuente

Lea otras preguntas en las etiquetas