La mia app iOS deve memorizzare un segreto precondiviso. Non può essere incorporato all'interno del pacchetto di app stesso perché potrebbe essere estratto analizzando staticamente il pacchetto.
Il sistema di acquisto in-app di Apple consente a un'app di fare una richiesta ad Apple. iOS dovrebbe verificare l'autenticità dell'app (dato che tutte le app sono firmate) - Mi rendo conto che potrei usare questo sistema per verificare che l'app sia mia (e non un impostore che cerca di ottenere il segreto).
La mia app farebbe una richiesta IAP ad Apple, Apple quindi genera una ricevuta firmata crittograficamente e la restituisce alla mia app, che poi passa la ricevuta al mio server che verifica la firma di Apple ed emette un nuovo segreto di istanza per-app e lo restituisce al client (per la memorizzazione nell'iPhone Secure Enclave) dove nessun'altra app può leggerlo.
Questo sistema si romperebbe se un utente malintenzionato potesse inviare le proprie ricevute al mio servizio. Capisco che la ricevuta contenga il nome del pacchetto di app / pacchetto che Apple afferma sia corretto, ma non so come proteggerei da un utente malintenzionato che esegue un tipo di attacco di replay in cui farebbero sì che la mia app effettui lo IAP in modo tale da ricevere la ricevuta è valido, ma acquisisci la ricevuta, interrompi il processo della mia app, quindi invia la ricetta dalla loro app al mio servizio (ottenendo così il segreto).
Qual è una buona soluzione a questo problema e un telefono jailbroken potrebbe consentire a un'altra app di mascherarsi come app per Apple per IAP?