Как доказать происхождение приложения для iOS?

#ios #cryptography #open-source #code-signing

#iOS #криптография #с открытым исходным кодом #подписание кода

Вопрос:

У меня есть проект iOS с открытым исходным кодом с общедоступными источниками на github. Я опубликовал приложение в App Store, используя свою учетную запись разработчика.

Есть ли у меня способ доказать пользователю, что опубликованное приложение на самом деле было скомпилировано из исходных текстов на github?

Редактировать

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

Например, подписывая код пакета приложения, я доказываю Apple, что создатель приложения и разработчик, зарегистрированный в Apple, — одно и то же лицо. Мой вопрос заключается в том, существует ли аналогичный механизм, чтобы доказать пользователю, что происхождение двоичного файла и общедоступного источника идентично.

Комментарии:

1. Зачем вам нужно что-то «доказывать» своим пользователям?

2. @Neeku Я мог бы обмануть пользователя, заявив, что я скомпилировал из репозитория github, но вместо этого включил вредоносный код, например, чтобы украсть некоторую конфиденциальную информацию, которую пользователь вводит в приложение. Поэтому мне технически не нужно это доказывать. Скорее я хочу это доказать, поэтому им не нужно доверять мне.

3. Ах! Хорошо! Я не думал об этом таким образом. В этом случае вы должны сделать подтверждение / согласие или что-то вроде на информационной странице вашего приложения, или как раздражающее всплывающее окно при запуске приложения, или даже на заставке ( Default@2x.png ).

4. @Neeku Да, я мог бы. Но что бы это доказало?

5. Я не знаю! Это то, что вы хотите сделать; доказать, что вы не кодировали его самостоятельно. «Отказ от ответственности: это приложение разработано на основе «THE_ABC_PROJECT», и владелец этого приложения не несет никакой ответственности за какие-либо сбои и т. Д. И т. Д.»

Ответ №1:

Я думаю, что я наткнулся на сложную проблему. Он гораздо более общий, чем iOS. Трудно доказать, что источником определенного двоичного файла является данный исходный код, по крайней мере, потому, что двоичный файл, который вы получите, зависит от множества деталей:

  • версия компилятора
  • исправления ОС
  • флаги компилятора
  • точные версии библиотек и их настройки компилятора
  • значения переменных среды во время компиляции и т. Д.

Доказательство должно было бы как-то учитывать все это.

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

Так что, очевидно, мы должны доверять разработчику. Такое отношение «доверие к разработчику» кажется нормой. В критически важных для безопасности проектах с открытым исходным кодом разработчик подписывает двоичный файл. После загрузки двоичного файла я бы проверил подпись перед запуском кода. В случае приложения для iOS обо всем этом позаботится App Store. Как разработчик, я должен подписать двоичный код. Apple проверит эту подпись перед размещением приложения в App Store.

В результате, если вы размещаете приложение в App Store, я знаю, что Apple знает, кто вы. Так мне легче доверять вам.

TL; DR: Доказательство будет сложным, но вы можете упростить доверие.

Ответ №2:

Для iOS существуют дополнительные сложности. Частью отправки вашего приложения является его разработка кода, а процесс разработки кода включает в себя изменение заголовка Mach-O, команд загрузки и сегмента LINKEDIT. Вероятно, вы могли бы повысить доверие (но все равно не доказать), отправив хэши кода в структуру каталогов code-signed code; НО приложение в AppStore повторно подписано Apple, и, следовательно, некоторые хэши кода будут изменены независимо от того, что вы делаете.

Комментарии:

1. Очень интересно. У вас есть какие-нибудь полезные ссылки на документацию о том, что такое структура каталогов кода и как работает подпись кода?

2. Для общего обзора: developer.apple.com/library/mac/documentation/DeveloperTools/… Вы также хотите проверить исходный код на компьютере. h и loader.h; оба доступны с opensource.apple.com

Ответ №3:

Один из способов сделать это — показать информацию в пакете настроек iOS. Я видел пару приложений, реализующих пакет настроек iOS и показывающих там подтверждения / атрибуции. Другим способом было бы показать эту информацию внутри вас, но я бы не рекомендовал этого.

Комментарии:

1. Я мог бы просто показать любую информацию через пакет настроек или в приложении. Как это должно что-то доказывать?