Спасибо, что нашли время, чтобы прочитать это. Я молодой разработчик, обладающий некоторым профессиональным опытом в веб-проектах и кодировании на стороне сервера, но теперь я создаю свое первое мобильное приложение и после углубленного исследования онлайн я не смог прояснить некоторые вопросы, которые у меня были о том, как обеспечить передачу данных из мобильного приложения.Защита мобильных соединений - Сохранение секретов и ключей
Вот что, я думаю, я правильно понял: Внедряя SSL-сертификат (и, необязательно, привязывание SSL на клиенте), вы в значительной степени предотвращаете обнюхивание информации о пользователях в открытых сетях и имитацию других пользователей («Человек-в-середине» и т. Д.). Любой дополнительный уровень безопасности предназначен для защиты сервера и предотвращения доступа к информации о вашей структуре транзакций и деталях. Другие уровни безопасности включают аутентификацию сообщения (например, HMAC) для аутентификации сообщения перед его обработкой и шифрования для «скрытия» содержимого сообщения.
Я хотел бы реализовать процесс Encrypt-then-HMAC для дальнейшего обеспечения транзакций, и это мой вопрос относительно этого процесса: Как вы храните ключ/секрет на клиенте? Я понимаю, что это будет зависеть от специфики приложения и степени безопасности, которую он хочет достичь. По этой причине я включаю в себя некоторые особенности: не существует высокочувствительной информации о пользователе, который хранится или передается (SSN, банковское дело и т. Д.), Но приложение обрабатывает платежи, и, следовательно, могут возникнуть большие затраты, если кто-то начнет возиться с сервером и платежной системы. Поэтому я стараюсь реализовать безопасную передачу между клиентом и сервером, не делая ничего необычного или непропорционального в усилиях.
Я много читал о предмете и из того, что мог собрать, независимо от того, каким образом вы получаете ключ или секрет, в какой-то момент он будет представлен в виде открытого текста для логики шифрования/хэширования, и поэтому кто-то будет быть в состоянии отлаживать приложение, точку прерывания, что шаг и компрометировать ключ/секрет. Как вы обходите это (и можете ли вы)? Что будет считаться «подходящим» (hardcoding?, Происходящим из структуры таблицы или других элементов?)?
Этот вопрос действительно предназначен для высокоуровневого и концептуального, поэтому я не думаю, что это важно, какую платформу я обсуждаю, но в любом случае на данный момент я кодирую приложение iOS, а бэкэнд - .NET.
Большое спасибо за ваше время, любая помощь или понимание были бы весьма признательны. Если я смогу прояснить любой аспект приложения, я был бы рад сделать это. Best, Michel
Пожалуйста, обратитесь к этой ссылке, если вы разрабатываете приложение ios ... https: //developer.apple.com/library/ios/samplecode/CryptoExercise/Listings/Classes_SecKeyWrapper_m.html – jailani
Большое спасибо, очень полезно. – user3165053