Per ciascuno dei sistemi operativi che hai elencato, dovresti sfruttare l'archiviazione sicura integrata del sistema operativo per le chiavi piuttosto che tentare di "roll your own".
In generale, non è considerata una best practice utilizzare la propria crittografia poiché si continuerà a dover supportare e eseguire il debug della propria implementazione che potrebbe avere vulnerabilità non ottimizzate. Invece, è una buona pratica sfruttare gli strumenti nativi a disposizione per l'archiviazione sicura.
Per iOS, questo sarebbe il portachiavi. Per Android, questo è noto come il keystore. Per Windows Phone 8.1+, questo è noto come "Credential Locker".
Questi sistemi generalmente funzionano crittografando i dati privati in un piccolo database sul dispositivo e limitandone l'accesso solo alle applicazioni autorizzate. Ciò rende molto più difficile togliere la chiave privata dal dispositivo senza il rooting / jailbreak del dispositivo, ecc.
Dovresti anche generare chiavi univoche per ogni dispositivo che riceve questi file. Avere una stringa hardcoded nell'app (piuttosto che in un file di configurazione) è pericoloso perché una volta che quella chiave è compromessa, tutti gli utenti sono compromessi. Verifica l'uso corretto di SecureRandom o di librerie crittografiche simili per assicurarti di generare chiavi uniche, quasi impossibili da decifrare.