Mi aplicación de iOS necesita almacenar un secreto previamente compartido. No se puede incrustar dentro del propio paquete de aplicaciones porque podría extraerse mediante el análisis estático del paquete.
El sistema In-App-Purchase de Apple permite que una aplicación realice una solicitud a Apple. iOS debe verificar la autenticidad de la aplicación (ya que todas las aplicaciones están firmadas). Me doy cuenta de que puedo usar este sistema para verificar que la aplicación es mía (y no un impostor que intenta obtener el secreto).
Mi aplicación haría una solicitud de IAP a Apple, luego Apple genera un recibo firmado criptográficamente y se lo devuelve a mi aplicación, quien luego pasa el recibo a mi servidor que verifica la firma de Apple y emite un nuevo secreto por instancia de aplicación y lo devuelve al cliente (para almacenamiento en el enclave seguro de iPhone) donde ninguna otra aplicación puede leerlo.
Este sistema se rompería si un atacante pudiera enviar sus propios recibos a mi servicio. Entiendo que el recibo contiene el nombre del paquete / paquete de aplicaciones que Apple afirma que es correcto, pero no sé cómo protegería contra un atacante que realiza un tipo de ataque de repetición en el que obtendría mi aplicación para hacer el IAP, por lo que el recibo es válido, pero capture el recibo, pause el proceso de mi aplicación, luego envíe la receta de su aplicación a mi servicio (obteniendo así el secreto).
¿Cuál es una buena solución para este problema, y podría un teléfono con jailbreak permitir que otra aplicación se enmascare como mi aplicación de Apple para IAP?