Qué tan seguro es NSUserDefaults en comparación con KeyChain

Quiero saber la security al almacenar, digamos, información de inicio de session de usuario como nombre de usuario y passwords en NSUserDefaults.

En preguntas sobre cómo almacenar dicha información, todos dicen que NSUserDefaults es malo y KeyChan es el path correcto. Pero nunca dicen POR QUÉ NSUserDefaults es malo.

¿Es un riesgo de security almacenar una contraseña en NSUserDefaults?

¿Será accesible para "hackers" si usa NSUserDefaults en lugar de KeyChain?

NSUserDefaults se almacena en text sin formatting dentro del file bundlename.plist en un dispositivo. Todos los que tienen acceso a un dispositivo pueden abrir o copyr el file y leer la información sin encryption.

Ambos methods usan un enfoque de key / valor único, y ese es su único punto común.

NSUserDefaults no utiliza encryption y es parte del entorno limitado de su aplicación. Así se eliminará una vez que se elimine la aplicación.

KeyChain por otro lado, está encriptada y persiste independientemente de su aplicación.

Por lo tanto, para almacenar datos confidenciales, como pares de inicio de session / contraseña, o certificates de security, debe utilizar KeyChain .

Aquí hay un proyecto de ejemplo provisto por Apple: https://developer.apple.com/library/content/samplecode/GenericKeychain/Introduction/Intro.html

Y definitivamente puede escribir su propio contenedor para simplificar el uso.