Руководство по использованию идентификатора оборудования, определяемого приложением, для реализации логики приложения "на устройство"

Этот раздел описывает, как приложение с облачным компонентом может использовать идентификатор оборудования, определяемый приложением (ASHWID), совместно со службой своего серверного компонента для реализации логики приложения "на устройство". К этой категории относятся приложения, реализующие политики лицензирования "на устройство".

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

Введение

Приложения Магазина Windows позволяют легко обмениваться данными и содержимым между несколькими устройствами. Хотя потребителям нравится подобная возможность, лицензиары содержимого часто нуждаются в механизме, позволяющем ограничить число устройств, на которые пользователи смогут распространять содержимое. Некоторые приложения, например приложения для лицензирования содержимого, должны соответствовать политикам лицензирования "на устройство". Этот вопрос можно решить, используя идентификатор оборудования, определяемый приложением (сокращенно ASHWID), и облачную службу серверного компонента. ASHWID обеспечивает надежную привязку приложения или пакета к устройству путем предоставления нескольких индивидуальных характеристик оборудования. В рамках сохранения конфиденциальности пользователя ASHWID различается для каждого приложения. Если базовая конфигурация оборудования не была изменена, при двух запросах от одного и того же приложения ASHWID будут одинаковыми. Однако если профиль оборудования изменяется (например, когда пользователь отключает USB-адаптер Bluetooth), ASHWID также изменится. Облачная служба серверного компонента может проверить ASHWID и сравнить его с предыдущими значениями. Хотя значения ASHWID отличаются друг от друга, их можно проанализировать, чтобы определить, не вызвано ли это расхождение незначительными изменениями, например добавлением памяти к системе. Уровень допустимых расхождений определяется реализацией облачной службы серверного компонента. Специальные элементы, из которых состоит ASHWID, и руководство по их анализу предоставляются в последующих разделах.

На высоком уровне приложение может выполнить следующие шаги.

  1. В приложении клиентский код вызывает метод HardwareIdentification.GetPackageSpecificToken и возвращает ASHWID в серверную часть для приложения.
  2. Облачная служба проверяет, пришло ли это значение из Windows и можно ли ему доверять.
  3. Облачная служба сравнивает полученное значение ASHWID с записанными ранее значениями, предоставленными этим пользователем, чтобы определить, совпадают ли они, и решить, не выходит ли устройство за границы допустимого отклонения, разрешенного службой.
  4. Облачная служба либо разрешает, либо запрещает использование своего содержимого на определенном устройстве.

Полезные термины

Определения из этого разделаОписание

Package ID

Состоит из кортежа, включающего пять частей: имя пакета, издатель, версия, источник и architecture (x86, x64, ARM или нейтральный).

Package full name

Объединенный идентификатор пакета с именем издателя в хэше. (<package name>_<Version>_<Architecture>_< Resources>_<Base32(SHA256(Publisher))>) Например: microsoft.office_15.0.0.0_x86_en-us_tf9ntdy1vxe7p (последний термин — это хэш издателя) .

Package family name

Имя пакета, объединенное с хэшированным именем издателя.

Криптографический элемент nonce

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

ASHWID

Идентификатор оборудования, определяемый приложением.

 

Структура ASHWID

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

ASHWID создается с помощью компонентов, из которых состоит устройство. Каждый компонент, если он присутствует, участвует в секции байтового потока, возвращаемого ASHIWD. Девять компонентов перечислены ниже.

  1. Идентификатор процессора
  2. Объем памяти
  3. Серийный номер дискового устройства
  4. Сетевой адаптер (например, MAC-адрес сетевой карты)
  5. Адаптер аудио
  6. Стыковочный узел
  7. Адрес Bluetooth
  8. Идентификатор устройства с высокоскоростным мобильным подключением
  9. BIOS

ASHWID не всегда включает все девять идентификаторов компонентов. Возможные причины:

  • Возможно, целевое оборудование не имеет всех девяти компонентов. Например, у вашей настольной системы, скорее всего, нет стыковочного узла.
  • Устройство может иметь несколько компонентов одного типа. Например, может быть два адаптера аудио.
  • Каждый физический диск предоставляет идентификатор компонента. Настольная система с тремя физическими дисками возвращает три идентификатора компонента.
  • При подключении к стыковочному узлу планшет возвращает идентификаторы компонентов для дополнительного сетевого адаптера (Ethernet) и адаптера аудио (порта HDMI или аналогового аудиовыхода).

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

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

Представление байтового потокаКомпонент
1,0Процессор
2,0 Память
3,0Дисковое устройство
4,0Сетевой адаптер
5,0 Адаптер аудио
6,0Стыковочный узел
7,0Высокоскоростное мобильное подключение
8,0Bluetooth
9,0BIOS системы

 

Образец ASHWIDS

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

  • 7,0,124,215,3,0,206,143,8,0,128,55,5,0,12,222,5,0,128,255,6,0,1,0,4,0,20,22,4,0,48,155,1,0,250,155,2,0,162,217,9,0,92,101

    На планшете Samsung Intel Core i5 обнаружено высокоскоростное мобильное подключение.

  • 7,0,124,215,3,0,206,143,8,0,128,55,5,0,126,129,5,0,12,222,5,0,128,255,6,0,1,0,4,0,20,22,4,0,48,155,4,0,178,193 ,1,0,250,155,2,0,162,217,9,0,92,101

    При стыковке на одном устройстве обнаружено три разных адаптера аудио и три разных сетевых адаптера.

  • 3,0,188,97,3,0,76,128,3,0,250,138,5,0,220,130,6,0,1,0,4,0,20,164,1,0,204,49,2,0,226,37,9,0,22,72

    На настольной системе найдено три разных диска.

  • 3,0,24,211 ,5,0,182,46,5,0,54,49,6,0,1,0,4,0,203,9,1,0,148,99,2,0,162,255,9,0,140,234

    Устройство с Nvidia Tegra 3. Вы, возможно, заметили, что поток "6,0,1,0" соответствует стыковочному узлу, независимо от устройства или конструктивных параметров.

Создание ASHWID в клиенте

Использование метода API

HardwareIdentification.GetPackageSpecificTokenМетод предоставляет приложениям Магазина Windows возможности для создания ASHWID устройства, на котором они запущены. Если два приложения вызовут этот API, для одного устройства будут возвращены разные ASHWID. В рамках определенного приложения или пакета на ASHWID не влияют:

  • повторная установка операционной системы;
  • быстрый сброс параметров;
  • обновление номера SKU операционной системы;
  • установка обновлений для приложения;
  • смена пользователя на устройстве.

Компонент облачных служб приложения Магазина Windows может проверить, является ли ASHWID подлинным, с помощью дополнительного элемента "nonce", подписи и сертификата. Этот API WinRT доступен через проекцию во всех поддерживаемых языках программирования.

Использование дополнительного элемента "nonce"

Приложение может передать шифровальный элемент "nonce" методу GetPackageSpecificToken во входных данных. Предоставляя каждый раз разный элемент "nonce", облако может проверить, действительно ли ASHWID получен от Windows, а не воспроизведен повторно пользователем. Элемент "nonce" позволяет проверить актуальность ASHWID и предоставляет защиту от атак с повторяющимися пакетами. Если облачная служба использует элемент "nonce", она может проверить, был ли ASHWID создан после того, как облачные службы отправили элемент "nonce". Не рекомендуется передавать элемент "nonce" со значением "null", если ваши облачные службы не отслеживают атаки с повторяющимися пакетами.

Образец клиентского кода

Примеры клиентского кода для создания ASHWID см. в HardwareIdentification.GetPackageSpecificToken.

Обработка ASHWID в облаке

Учет перемещения оборудования

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

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

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

  • К концу дня пользователь отключает Bluetooth и Wi-Fi, чтобы заряда батареи хватило до прихода домой, но оставляет включенным 3G/4G для возможности подключения к облаку.
  • Пользователь подключает карточку данных 3G к USB-порту.
  • Базовое управление питанием операционной системы или системы микросхемы может отключить отдельные ядра.

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

Ниже приведен простой пример одного из вариантов выявления перемещения оборудования внутри облачной службы.


If 	[(Component_1_previous == Component_1_current) x Weight_1 + 
(Component_2_previous == Component_2_current) x Weight_2 + 
(Component_3_previous == Component_3_current) x Weight_3 + ……..
(Component_n_previous == Component_n_current) x Weight_n]  
>= [Threshold_for_being_the_same_device]
Then It_is_the_same_device	

Использование относительного веса в идентификации устройства

Относительный вес зависит от вашей бизнес-логики и того, что вы определите как приемлемое перемещение оборудования. Для значений веса не существует явных рекомендаций. Некоторые компоненты менее подвержены изменениям, нежели другие, поэтому они будут иметь больший вес. Например, изменение BIOS менее вероятно, чем изменение адаптера аудио. В зависимости от числа дисков, подключенных к системе, может появиться несколько дисковых устройств. Идентификатор компонента для диска, на котором установлена операционная система, вряд ли изменится. Идентификатор процессора для большинства систем x86/x86-64 достаточно стабилен. Если вы обнаружите, что компонент стыковочного узла возвращает одинаковый идентификатор компонента, имеет смысл назначить ему нулевой вес.

Проверка подлинности ASHWID в облаке

Возвращенный ASHWID имеет подпись. Это позволяет приложению проверить, действительно ли возвращенный ASHWID получен от Windows. Передача переменной "nonce" во входных данных защищает от атак с повторяющимися пакетами.

ASHWID хэшируется с помощью закрытого ключа в клиенте. На схеме ниже показан формат подписи.

Формат подписи

Списки отзыва сертификатов

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

Руководство по рабочим процессам облака

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

  1. Проверьте достоверность и срок действия сертификата. Этот шаг предполагает, что корневой сертификат "Microsoft Assurance Designation Root 2011" является доверенным в облачной системе. Корневой сертификат необходимо вручную добавить в доверенное корневое хранилище на серверах под управлением Windows.
    1. Большой двоичный объект сертификата имеет цепочку сертификатов в формате PKCS 7. Выполните сборку и убедитесь, что цепочка сертификатов является доверенной. При проверке цепи доверия следует игнорировать сбои, вызванные истекшим сроком действия некорневого сертификата.
    2. Убедитесь, что цепочка сертификатов проверена на наличие сбоев отзыва. Рекомендуется игнорировать сбои отзыва, вызванные автономными CDP.
    3. Убедитесь, что значение расширенного использования ключа для некорневого сертификата — "1.3.6.1.4.1.311.10.5.40".
    4. Запросите открытый ключ для корневого сертификата в цепочке сертификатов и сравните его с открытым ключом корневого сертификата "Microsoft Assurance Designation Root 2011", чтобы убедиться, что они совпадают.
  2. Убедитесь, что ASHWID действительно создан доверенным кодом Windows.
    1. Большой двоичный объект подписи — это подписанный большой двоичный объект хэша SHA1 объединения элемента "nonce" (при его наличии) и ASHWID.
    2. Используйте некорневой сертификат, чтобы убедиться, что подпись хэша совпадает с исходным элементом "nonce", отправленным из облачной службы и полученным байтовым потоком оборудования.

Связанные разделы

Облачный компонент идентификатора оборудования, определяемого приложением (ASHWID)
HardwareToken
HardwareToken.Certificate
HardwareToken.Signature
HardwareIdentification
HardwareIdentification.GetPackageSpecificToken

 

 

Показ:
© 2015 Microsoft