Подтвердить что ты не робот

Правильный и безопасный способ хранения покупок в приложениях

Каков наилучший способ хранения покупки на устройстве на устройстве, так что покупки также могут быть доступны в автономном режиме, но безопасность покупок не нарушена?

4b9b3361

Ответ 1

Не храните ничего полезного на устройстве, так как ему нельзя доверять, и его легко скомпрометировать кто-то мотивированным.

Теперь все это зависит от типа и значения приобретаемого предмета и того, что происходит, если оно скомпрометировано.

Если это действительно полезно, используйте удаленный защищенный сервер для управления безопасными элементами. В покупках приложений вы можете получить квитанцию, которая может быть проверена вашим удаленным безопасным сервером, разговаривающим с яблочными серверами напрямую через безопасное соединение. См. Эту ссылку на подтверждение получения квитанций магазина.

Ответ 2

Насколько я знаю, самым удобным способом безопасного хранения купленного актива было бы использование некоторой формы шифрования.

Пользователь должен иметь возможность загружать ресурс зашифрованный, а приложение должно расшифровывать его на лету.

Однако убедитесь, что вы также храните ключ в безопасном режиме, поскольку строковые ключи (в двоичном виде приложения) могут быть легко восстановлены квалифицированным хакером. Хорошим способом защиты ключа будет использование некоторой аутентификации с серверной системой. Приложение получит ключ от сервера и сохранит его только в течение нескольких минут, необходимых для дешифрования актива.

Этот защитный механизм не является неприступным; Я чувствую, что он достаточно изощрен, чтобы препятствовать большинству пользователей пытаться подорвать его.

Чтобы расшифровать ваши активы на устройстве, хорошей идеей было бы использовать CommonCrypto. Он предоставляется Apple (с SDK для iOS), поэтому вам не нужно создавать его с нуля, и вам не нужно предоставлять документацию (требуемую законодательством США) для вашего приложения. Я нашел Jim Dovey Common Crypto wrapper самый простой способ его использования.

Надеюсь, что это поможет.:)

Ответ 3

Вы хотите зашифровать файл, для которого лучше всего использовать Common Crypto. Чтобы иметь возможность доступа к данным в автономном режиме, вам необходимо сохранить ключ шифрования на устройстве.

Решение состоит в использовании брелка: используйте SecRandomCopyBytes для генерации ключа достаточной длины и сохраните его в цепочке ключей с помощью SecItemAdd. Затем используйте этот ключ для шифрования данных и записи его в локальное хранилище устройства обычным способом. Когда придет время для чтения файла с диска, используйте SecItemCopyMatching, чтобы загрузить ключ из брелка и использовать его для дешифрования данных.