Частное совместное использование данных между приложениями iOS с разными идентификаторами команд

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

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

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

Любые советы/рекомендации по наилучшему способу включения такой схемы разблокировки функций будут очень полезны.


person Magic Bullet Dave    schedule 26.09.2013    source источник
comment
Вы изучали соль и гашиш? Это 1 способ, поэтому технически это не «шифрование», вы не можете получить ключ и «декодировать», вы можете только проверить, что что-то еще хэширует с тем же результатом. Что равносильно восстановлению... Я полагаю, что это также зависит от конкретного устройства.   -  person CW0007007    schedule 26.09.2013
comment
У меня нет, но я буду. Спасибо за указатель.   -  person Magic Bullet Dave    schedule 26.09.2013
comment
Нет проблем. Там полно всего. Я использовал его в проекте, если вы застряли.   -  person CW0007007    schedule 26.09.2013
comment
Спасибо. Взглянув на это, и если я правильно понимаю, это позволит мне безопасно отправлять данные между приложениями. Прав ли я, говоря, что если кто-то перехватил пакет, сняв его с монтажного стола, он мог взять этот пакет и поместить его на монтажный стол другого устройства и разблокировать функции? Я думаю, это потому, что соль отправляется с хэшем, но уникальности устройства нет. Имеет ли это смысл?   -  person Magic Bullet Dave    schedule 27.09.2013
comment
Ну, как вы можете заставить это работать, так: в приложении A) есть секретный ключ (строка), например UPGRADE_PACKAGE_LOYALTY (не имеет значения, что это такое). Затем это хешируется, хэш возвращает кучу данных. Затем эти данные отправляются в другое приложение через монтажный стол. В APp B, когда вы проверяете, есть ли другое приложение, у вас будет тот же ключ UPGRADE_PACKAGE_LOYALTY, тогда вы сравните этот хэш с хешем из другого приложения. Если они совпадают, вы знаете, что у них есть другое приложение. Значит, единственный способ взломать его — узнать ключ UPGRADE_PACKAGE_LOYALTY? Имеет ли это смысл ?   -  person CW0007007    schedule 27.09.2013
comment
Поскольку хеш нельзя «декодировать», это 1 способ. Так что иметь только это никому не нужно.   -  person CW0007007    schedule 27.09.2013
comment
Да, это имеет смысл, и спасибо за более подробное объяснение. Я думаю, что я пытаюсь сказать, что если они перенесут хешированный пакет на другое устройство и поместят его на монтажный стол, приложение B выполнит сравнение и разблокирует функции, даже если приложение A не присутствовало на устройстве. Таким образом, хотя он останавливает чтение и создание пакета третьей стороной, он не останавливает его перехват и передачу на другие устройства. Я правильно это понял? Дэйв   -  person Magic Bullet Dave    schedule 27.09.2013
comment
Хм, да, кажется, я понимаю, что вы имеете в виду. Подумайте, картон не может быть лучшим решением для вас сейчас.   -  person CW0007007    schedule 27.09.2013


Ответы (1)


Я также использую монтажный стол для отправки данных между приложениями. Это действительно полезный инструмент для отправки средних объемов данных между приложениями. Недавно я написал пост в блоге на эту тему.

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

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

В качестве альтернативы, если ваши данные довольно малы, вы можете закодировать данные в URL-адрес и использовать схему URL-адреса для перемещения данных в другое приложение.

person Dillan    schedule 30.10.2013
comment
Привет Диллан, спасибо за ответ. В конце концов мы использовали общий монтажный стол с нашим собственным базовым шифрованием. - person Magic Bullet Dave; 30.10.2013
comment
@MagicBulletDave извините за комментарий к такому старому сообщению, но не могли бы вы рассказать о своем решении? В моих тестах общий монтажный стол всегда перезаписывался любой инициированной пользователем операцией монтажного стола, например. если пользователь копирует какой-то текст или что-то еще между моментом, когда приложение A записывает что-то в монтажный стол, и моментом, когда приложение B пытается его прочитать. - person jcayzac; 27.08.2015