«Здоровье» пользователя, его медицинские показатели и информация о физической активности – одна из важнейших категорий данных, которая может храниться на смартфоне. Бум носимых устройств, разнообразных датчиков, браслетов, часов и трекеров продолжается более пяти лет. Индустрия предлагает широкое разнообразие устройств, которые могут собирать подробную информацию как о состоянии организма, так и о физической активности пользователя и его местоположении даже если пользователь не взял с собой смартфон. Комбинация данных с такого устройства и информации с телефона позволяет восстановить подробную картину действий пользователя буквально по минутам. Такая информация не должна попасть в руки злоумышленников или нечистоплотных рекламодателей; эта же информация бесценна для расследования преступлений, позволяя восстановить картину происшествия с точной привязкой ко времени. Сегодня мы подробно рассмотрим, какие данные собирают стандартные приложения Apple Health (iOS) и Google Fit (Android), как и где эти данные сохраняются, куда синхронизируются, как защищены и как их можно извлечь.
Приложение Apple Health появилось в сентябре 2014 года одновременно с выходом iOS 8. С тех самых пор Apple Health предустанавливается на все устройства iPhone.
Apple Health работает в фоновом режиме независимо от того, востребованы ли его возможности пользователем. Приложение использует данные от встроенных в iPhone датчиков энергоэффективного сопроцессора, которые передают информацию о количестве шагов и общей активности пользователя.
В экосистеме Apple есть и собственное устройство-компаньон для сбора дополнительных данных, которые не может предоставить iPhone. Речь об Apple Watch, которые в разных модификациях позволяют измерять пульс, определять степень активности пользователя, детектировать падения и снимать электрокардиограмму.
Пользователям, запустившим приложение Apple Health, доступны четыре основных категории данных:
Откуда поступают данные, на основе которой приложение отображает всю эту информацию? Все данные собираются от устройств и приложений, работающих по протоколу HealthKit. Сюда входит как сам iPhone, так и часы Apple Watch, а также различные сторонние устройства и приложения – браслеты, часы, трекеры, разнообразные спортивные и медицинские датчики и приборы. Для работы сторонних приложений необходимо предоставить им доступ к информации Apple Health, что само по себе несёт определённые риски.
При этом в самом приложении Apple Health для каждой категории данных официально рекомендуется не одно, а сразу несколько приложений – начиная с приложения Strava, получившего известность после скандала с утечкой данных о ежедневной рутине военнослужащих американской военной базы в Сирии.
Кроме того, доступны следующие расширенные категории данных:
Очевидно, что далеко не все данные (и даже не значительная их часть) могут быть определены посредством бытовых устройств, даже если речь идёт о последнем поколении Apple Watch. Откуда же берутся все эти данные? Здесь нужно вспомнить о том, что в марте 2018 года Apple сумела договориться с рядом сетевых клиник в США, Великобритании и Австралии о стандартизации электронного формата медицинской информации и о передаче этих данных. Речь идёт об архитектуре CDA – Clinical Document Architecture, которая стала стандартом де-факто для обмена медицинскими данными.
Стандарт CDA основан на XML, а документы в этом формате могут быть импортированы и обработаны в приложении Apple Health (категория Health Records). Актуальность CDA для России в настоящее время невысока: получить соответствующий файл можно только из одного из поддерживающих архитектуру CDA медицинских учреждений. Для импорта данных в Apple Health его достаточно будет открыть в приложении, после чего информация будет занесена в базу данных. Данные будут автоматически синхронизированы с другими устройствами Apple через облако iCloud.
Медицинские карты, результаты лабораторных анализов, данные наблюдений, рецепты, прививки, аллергические реакции и другие виды информации, входящие в Health Records, являются медицинской тайной, которая в большинстве стран защищается законодательно. Тем удивительнее стал подход к защите этих данных, который выбрала Apple в iOS 11. В этой версии операционной системы данные Health Records могли были ограничены только документами CDA; эти данные синхронизировались с iCloud точно так же, как синхронизируются фотографии или заметки. Иными словами, никакой дополнительной защиты предусмотрено не было, и данные Health Records можно было извлечь посредством Apple ID и пароля, получить по запросу у Apple или посредством GDPR; наконец, скачать из «облака».
Для iOS 11 верны следующие утверждения:
В iOS 12 защиту серьёзно переработали. В новой версии ОС данные Apple Health в целом и Health Records в частности перенесли в отдельный контейнер, который получил дополнительный уровень защиты. Данные в новом контейнере шифруются ключом из связки ключей (Keychain), который, в свою очередь, зашифрован ключом шифрования связки ключей. Ключ шифрования связки ключей перешифрован ключом, который вычисляется на основе пасскода (iOS) или системного пароля (macOS) пользователя. Такой механизм защиты достаточно сложен и безопасен, а для того, чтобы извлечь данные «здоровья» из облака iCloud потребуются абсолютно все данные из следующего списка:
Прямые следствия такого способа защиты данных следующие:
На самом iPhone данные хранятся в папке /private/var/mobile/Library/Health/
В ней находятся две связанных базы данных в формате SQLite: healthdb.sqlite и healthdb_secure.sqlite. В этих базах данных содержится вся информация, за исключением точных координат тренировок пользователя (тех самых координат, которые часы Apple Watch начинают собирать сплошным потоком с периодичностью в одну секунду, если определяют момент начала тренировки). Данные о местоположении сохраняются в зашифрованную базу данных healthdb_secure.hfd.
В базе данных healthdb.sqlite содержится информация об источниках данных. В базе healthdb_secure.sqlite хранится основная информация с частыми отсылками к первой базе.
Apple Health использует синхронизацию в облако iCloud. Синхронизируются данные, собранные приложением Apple Health; записи CDA, насколько нам известно, в облако не поступают. Не синхронизируется и уникальный для каждого устройства идентификатор Medical ID. Многие сторонние приложения (Strava, Endomondo и другие) сихронизируют данные в собственные облачные сервисы.
Синхронизация данных «здоровья» появилась в iOS 11 (напомним, сама подсистема Health вышла одновременно с iOS 8, но до 11-й версии данные хранились исключительно на самом устройстве). В iOS 11 данные «здоровья» попадают в облако так же, как и остальные виды синхронизированных данных: они поступают в отдельный контейнер в iCloud, из которого их можно извлечь в виде отдельных фрагментов и расшифровать каждый фрагмент при помощи ключей, которые также извлекаются из iCloud. Физическая безопасность данных обеспечивается исключительно тем, что сами данные хранятся на одних серверах (которые, кстати, принадлежат Microsoft, Google, AT&T или китайской государственной компании, если речь идёт о китайских пользователях) в зашифрованном виде, а ключи расшифровки физически хранятся только на серверах самой компании Apple в Купертино. Таким образом, ни Microsoft, ни Google, ни правительство Китая прямого доступа к данным не имеют (данные зашифрованы), но если известны логин и пароль пользователя – расшифровать их вполне можно. Такая информация выдаётся правоохранительным органам и по запросу GDPR.
Гораздо интереснее дела обстоят в iOS 12. В новой версии iOS предусмотрена дополнительная защита данных «здоровья». Для обеспечения обратной совместимости с устройствами с iOS 11 данные, собранные iOS 12, попадают в отдельный контейнер (при этом старый, незащищённый контейнер сохраняется, и данные из него будут прочитаны устройствами с iOS 12). Насколько нам известно, незащищённый контейнер сохраняется в облаке до тех пор, пока есть хотя бы одно устройство с iOS 11, которое участвует в облачной синхронизации «здоровья». Как только все устройства обновляются до iOS 12, незащищённый контейнер должен пропасть из «облака» (фактически это может происходить после длительной, иногда – очень длительной задержки).
Данные в новом, защищённом контейнеры будут дополнительно зашифрованы при помощи ключа, который хранится в облачной связке ключей (iCloud Keychain). Извлечь этот ключ можно лишь после извлечения и расшифровки самого iCloud Keychain, который, в свою очередь, зашифрован ключом, который вычисляется на основе кода блокировки (или системного пароля) пользователя. Таким образом, данные из нового контейнера невозможно расшифровать без кода блокировки от iPhone или пароля от компьютера Mac, который уже участвует в синхронизации.
Если имеется физический доступ к iPhone и известен код блокировки, экспортировать данные Apple Health не просто, а очень просто. Достаточно открыть приложение Health и воспользоваться штатной функцией экспорта. Приложение создаст ZIP архив, который можно сразу же передать посредством AirDrop.
Другой вариант – создать локальную резервную копию iPhone через iTunes, обязательно с паролем (если пароль на резервную копию не будет установлен, то данные Health не сохраняются). В резервную копию сохраняются оригинальные базы данных, а не экспортированные данные.
Если на iPhone установлен jailbreak, то можно снять образ файловой системы и получить доступ к указанным базам данных.
Если же физического доступа к iPhone нет, то извлечь информацию можно из облака iCloud. В зависимости от того, под какой версией iOS работает устройство пользователя (11 или 12), может потребоваться под блокировки одного из устройств, которые участвовали в синхронизации. Для извлечения и расшифровки потребуется Elcomsoft Phone Breaker https://www.elcomsoft.com/eppb.html
Если хотя бы одно из устройств пользователя работает на iOS 11:
Если все устройства пользователя работают под управлением iOS 12, то первого (незашифрованного) контейнера в облаке может не быть. В этом случае потребуется ввести код блокировки от iPhone, который уже участвует в синхронизации.
Данные скачиваются так же, как и в случае с первым контейнером, однако требуется дополнительно скачать и расшифровать ключ из iCloud Keychain, которым будут зашифрованы базы данных Health.
Теперь данные можно просмотреть и проанализировать:
В экосистеме Google нет штатного аналога системы «Здоровье» в том виде, как она реализована в iOS. Тем не менее, отдалённый аналог в смартфонах под управлением Android всё же есть. Это – приложение Google Fit, которое можно установить на телефон из Play Store. Различий между Apple Health и Google Fit множество.
Количество и разнообразие собираемой и отображаемой информации
Приложение Apple Health, как мы видели, агрегирует огромное количество типов данных из массы источников. При этом агрегируются только те типы данных, которые предусмотрены разработчиками Apple, но их, как правило, приложение в состоянии корректно отобразить и проанализировать.
Обратная сторона медали — в приложении Apple Health отображаются сразу все доступные типы данных, даже если информации как таковой там нет. Честно говоря, с непривычки такое обилие данных просто запутывает. Что такое Mindfullness? Почему для пользователей мужского пола отображается целый список непонятных слов в разделе Reproductive Health? (Для информации: у пользователей мужского пола напрочь отсутствуют те органы, состояние которых приложение Apple Health «измеряет»). Откуда берутся данные о том, какое количество кальция, меди или железа пользователь употребил на обед, а если эти строки пустые, то зачем они выводятся на главный экран? У нас нет разумных ответов на эти вопросы (специалисты-диетологи наверняка знают, как и те, кто вынужден следить за балансом микроэлементов). Вероятно, это своеобразная реклама возможностей системы. Приложение Apple Health перегружено пустой, нерелевантной и просто «мусорной» информацией, приучая пользователей игнорировать целые разделы.
Google Fit – противоположность решению от Apple. Приложение агрегирует минимум информации: количество шагов, пройденное расстояние, данные о том, сколько времени пользователь провёл в движении (Move Points) и данные о том, сколько времени пользователь провёл в активном движении (данные Heart Points). Интересный момент: различные сторонние приложения и датчики могут сообщать (а могут и не сообщать, жёстких требований у Google нет) многочисленные дополнительные типы и классы данных, и Google Fit сохранит их и синхронизирует с облаком. При этом пользователю такие данные не будут видны: в интерфейсе Google Fit просто нет соответствующих возможностей.
Google Fit и интеграция со сторонними приложениями
Так же, как и Apple Health, Google Fit поддерживает интеграцию со сторонними приложениями. Но если в приложении Apple Health есть множество предопределённых категорий для самой разнообразной информации, то Google Fit способен отображать лишь ограниченное число типов данных. Более того; производителям датчиков и приложений, совместимых с Apple HealthKit, приходится отдавать в Apple Health всю или почти всю информацию, которую собирает устройство или приложение; таково требование Apple. А вот у Google таких требований нет. В результате, к примеру, браслеты Samsung отдают информацию только приложению от Samsung, которое, в свою очередь, просто не отдаёт данные в Google Fit. Подобным же образом ведут себя браслеты Garmin; что интересно, те же самые браслеты совершенно спокойно отдают данные в Apple Health, если у пользователя не смартфон на Android, а iPhone.
Из всего перечисленного есть несколько важных следствий.
Google Fit: извлечение данных
Данные Google Fit можно извлечь посредством собственного сервиса Google Takeout или при помощи приложения Elcomsoft Cloud Explorer.
Сравнение с Apple Health
В отличие от iPhone, приложение Google Fit не использует встроенные в смартфон датчики – в частности, практически не используется встроенный во многие телефоны шагомер. Данные об активности пользователя аппроксимируются алгоритмами на базе искусственного интеллекта. Алгоритмы вычисляют количество шагов пользователя на основе редких (в целях экономии заряда) опросов датчика-шагомера, данных Significant Movement (это то самое, что позволяло смартфонам с Android 6.0 «засыпать» в режим Doze), приблизительных данных служб геолокации (чаще всего – даже не со спутников, а вычисленных при помощи мобильных вышек) и той информации, которую вводит о себе пользователь при настройке приложения (рост, вес и возраст).
Соответственно, если взять на прогулку iPhone и, к примеру, Google Pixel, то, проанализировав данные по возвращении, мы увидим совершенно разную информацию.
Вот наглядный пример. Из пятичасовой поездки (1:20 на машине, прогулка, обед, короткая поездка на машине и возвращение домой) приложение Apple Health сделало следующие выводы:
Apple Health: пройдено 3287 шагов, 2.6 км дистанция, калорий 222+1342=1564, время физической активности – неизвестно, но даёт 9 минут «упражнений» и время «stand hours» — 5 часов (это совсем не так, 5 часов – это общее время, в течение которого на руке были часы Apple Watch; из них около 2.5 часов заняла поездка в машине).
Данные доступны в формате XML; за час зарегистрировано несколько десятков записей приблизительно следующего содержания. Пример записи:
<Record type="HKQuantityTypeIdentifierHeartRate" sourceName="Oleg’s Apple Watch" sourceVersion="5.1.2" device="<<HKDevice: 0x2832ab610>, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch4,2, software:5.1.2>" unit="count/min" creationDate="2019-01-06 14:35:47 +0100" startDate="2019-01-06 14:23:53 +0100" endDate="2019-01-06 14:23:53 +0100" value="96">
Данные шагомера. Обратим внимание, что данные собираются из двух источников: iPhone и часы.
<Record type="HKQuantityTypeIdentifierStepCount" sourceName="iPhone" sourceVersion="12.1.2" device="<<HKDevice: 0x2832ad680>, name:iPhone, manufacturer:Apple, model:iPhone, hardware:iPhone11,6, software:12.1.2>" unit="count" creationDate="2019-01-06 14:51:45 +0100" startDate="2019-01-06 14:40:37 +0100" endDate="2019-01-06 14:48:11 +0100" value="198"/>
<Record type="HKQuantityTypeIdentifierStepCount" sourceName="Oleg’s Apple Watch" sourceVersion="5.1.2" device="<<HKDevice: 0x2832ad5e0>, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch4,2, software:5.1.2>" unit="count" creationDate="2019-01-06 14:50:55 +0100" startDate="2019-01-06 14:37:08 +0100" endDate="2019-01-06 14:43:07 +0100" value="150"/>
Данные сердцебиения:
<Record type="HKQuantityTypeIdentifierHeartRateVariabilitySDNN" sourceName="Oleg’s Apple Watch" sourceVersion="5.1.2" device="<<HKDevice: 0x2832a2800>, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch4,2, software:5.1.2>" unit="ms" creationDate="2019-01-07 14:31:58 +0100" startDate="2019-01-07 14:30:56 +0100" endDate="2019-01-07 14:31:58 +0100" value="16.5784"> <HeartRateVariabilityMetadataList> <InstantaneousBeatsPerMinute bpm="101" time="14:30:57,56"/> <InstantaneousBeatsPerMinute bpm="100" time="14:30:58,16"/> <InstantaneousBeatsPerMinute bpm="101" time="14:30:58,75"/> <InstantaneousBeatsPerMinute bpm="100" time="14:30:59,35"/> <InstantaneousBeatsPerMinute bpm="100" time="14:30:59,96"/> <InstantaneousBeatsPerMinute bpm="100" time="14:31:00,56"/> <InstantaneousBeatsPerMinute bpm="102" time="14:31:01,14"/> <InstantaneousBeatsPerMinute bpm="97" time="14:31:01,76"/> <InstantaneousBeatsPerMinute bpm="95" time="14:31:02,39"/> </HeartRateVariabilityMetadataList> </Record>
Данные о пройденной дистанции:
<Record type="HKQuantityTypeIdentifierDistanceWalkingRunning" sourceName="Oleg’s Apple Watch" sourceVersion="5.1.2" device="<<HKDevice: 0x2832f9270>, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch4,2, software:5.1.2>" unit="km" creationDate="2019-01-06 15:08:49 +0100" startDate="2019-01-06 14:58:43 +0100" endDate="2019-01-06 15:06:35 +0100" value="0.178172"/>
Кроме того, доступны некоторые дополнительные типы данных, которые сообщают часы: Basal Energy Burned, Active Energy Burned, Flights Climbed, Apple Exercise Time.
<Record type="HKQuantityTypeIdentifierActiveEnergyBurned" sourceName="Oleg’s Apple Watch" sourceVersion="5.1.2" device="<<HKDevice: 0x28329d0e0>, name:Apple Watch, manufacturer:Apple, model:Watch, hardware:Watch4,2, software:5.1.2>" unit="kcal" creationDate="2019-01-06 15:31:53 +0100" startDate="2019-01-06 15:28:49 +0100" endDate="2019-01-06 15:29:50 +0100" value="0.424"/>
В целом приложение Apple Health даёт вполне цельную картинку активности пользователя, позволяющую, к примеру, уличить в измене неверного мужа (данные InstantaneousBeatsPerMinute) или раскрыть инсценированное ограбление http://fortune.com/2018/12/06/apple-iphone-health-app-murderer/ (данные щагомера и HKQuantityTypeIdentifierFlightsClimbed):
<Record type="HKQuantityTypeIdentifierFlightsClimbed" sourceName="iPhone" sourceVersion="10.2.1" device="<<HKDevice: 0x283294320>, name:iPhone, manufacturer:Apple, model:iPhone, hardware:iPhone8,1, software:10.2.1>" unit="count" creationDate="2018-02-24 15:33:19 +0100" startDate="2018-02-24 14:01:57 +0100" endDate="2018-02-24 14:01:57 +0100" value="1"/>
А вот данные о точном местоположении пользователя с использованием встроенного в часы датчика GPS или самого iPhone сохраняются в том случае, если Apple Health посчитает, что пользователь не просто гуляет или бежит за автобусом, а занимается спортивной ходьбой или бегом. В противном случае такие данные просто отсутствуют. Если же часы или приложение посчитают, что пользователь тренируется, то данные начнут собираться сплошным потоком с периодичностью в одну секунду:
<Location date="2019-01-05 12:43:54 +0100" latitude="52.5118" longitude="13.3364" altitude="27.6155" horizontalAccuracy="1.31159" verticalAccuracy="1.11272" course="168.053" speed="0.783315"/> <Location date="2019-01-05 12:43:55 +0100" latitude="52.5118" longitude="13.3364" altitude="27.6987" horizontalAccuracy="1.30859" verticalAccuracy="1.11246" course="168.053" speed="0.75217"/> <Location date="2019-01-05 12:43:56 +0100" latitude="52.5118" longitude="13.3364" altitude="27.7774" horizontalAccuracy="1.30547" verticalAccuracy="1.11249" course="168.053" speed="0.719109"/>
В таких случаях измерение жизненных параметров организма также производится с повышенной периодичностью или постоянно.
А вот как выглядят данные с Google Fit:
Google Fit: пройдено 3748 шагов, 2.41 км дистанция, калорий 1377, время физической активности 50 минут. При этом карта на одном из скриншотов выглядит довольно странно: на самом деле участок был преодолён за рулём автомобиля совсем по другому маршруту.
Вот так выглядит участок агрегированных Google Fit данных за период 14:30-15:30. В файле Daily Aggregations будет доступна информация, сгруппированная в 15-минутные периоды. Её не так много:
Start time,End time,Calories (kcal),Distance (m),Low latitude (deg),Low longitude (deg),High latitude (deg),High longitude (deg),Average speed (m/s),Max speed (m/s),Min speed (m/s),Step count,Average weight (kg),Max weight (kg),Min weight (kg),Inactive duration (ms),Walking duration (ms) 14:30:00.000+01:00,14:45:00.000+01:00,21.970262804673375,81.47002220153809,52.3498691,14.5603561,52.3498691,14.5603561,1.3560495376586914,1.361162781715393,1.3509362936019897,189,,,,839979,60021 14:45:00.000+01:00,15:00:00.000+01:00,18.642008718815653,11.182665824890137,52.3457901,14.5852002,52.3457901,14.5852002,,,,269,,,,890828,9172 15:00:00.000+01:00,15:15:00.000+01:00,57.92037990980161,234.93591034412384,52.3452287,14.5833228,52.3454651,14.584661,0.6185604934920054,0.7937963008880615,0.4872109591960907,442,,,,290734,609266
Если у пользователя нет часов или фитнес-трекера, то для сбора данных будет использоваться только сам телефон. В этом случае данные попадают в папку Low Accuracy. Сюда не входят маршруты, которые пользователь преодолел за рулём или в общественном транспорте – только пешие прогулки или занятия спортом.
<Activity Sport="Other"> <Id>2019-01-06T14:16:36.976Z</Id> <Notes>Walking</Notes> <Lap StartTime="2019-01-06T14:16:36.976Z"> <Track> <Trackpoint> <DistanceMeters>0.0</DistanceMeters> <Time>2019-01-06T14:16:36.976Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>13.942784309387207</DistanceMeters> <Time>2019-01-06T14:16:59.061Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>105.96516132354736</DistanceMeters> <Time>2019-01-06T14:18:38.996Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>181.415753364563</DistanceMeters> <Time>2019-01-06T14:19:39.966Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>200.01529788970947</DistanceMeters> <Time>2019-01-06T14:19:55.202Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>258.8811311721802</DistanceMeters> <Time>2019-01-06T14:20:41.096Z</Time> <Position> <LatitudeDegrees>52.3458285</LatitudeDegrees> <LongitudeDegrees>14.5853516</LongitudeDegrees> </Position> </Trackpoint> <Trackpoint> <DistanceMeters>258.8811311721802</DistanceMeters> <Time>2019-01-06T14:20:41.195Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>282.5838632583618</DistanceMeters> <Time>2019-01-06T14:21:42.124Z</Time> </Trackpoint> </Track> <DistanceMeters>282.5838632583618</DistanceMeters> <TotalTimeSeconds>305.148</TotalTimeSeconds> <Calories>26.090152740478516</Calories> <Intensity>Active</Intensity> <TriggerMethod>Manual</TriggerMethod> </Lap> </Activity>
А вот что будет, если у пользователя есть браслет или часы, которые могут сообщать данные в Google. Обратим внимание, что данные хранятся в том же формате, но сохраняются при этом в отдельной папке.
<Activity Sport="Other"> <Id>2018-12-11T19:21:55.172Z</Id> <Notes>Walking</Notes> <Lap StartTime="2018-12-11T19:21:55.172Z"> <Track> <Trackpoint> <DistanceMeters>0.0</DistanceMeters> <Time>2018-12-11T19:21:55.172Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>27.18842887878418</DistanceMeters> <Time>2018-12-11T19:22:23.299Z</Time> </Trackpoint> <Trackpoint> <DistanceMeters>62.03313636779785</DistanceMeters> <Time>2018-12-11T19:22:54.555Z</Time> </Trackpoint> </Track> <DistanceMeters>62.03313636779785</DistanceMeters> <TotalTimeSeconds>59.383</TotalTimeSeconds> <Calories>5.07724666595459</Calories> <Intensity>Active</Intensity> <TriggerMethod>Manual</TriggerMethod> </Lap> </Activity>
Наконец, можно просмотреть посуточную агрегацию в папке Daily Summaries:
Date,Calories (kcal),Distance (m),Low latitude (deg),Low longitude (deg),High latitude (deg),High longitude (deg),Average speed (m/s),Max speed (m/s),Min speed (m/s),Step count,Average weight (kg),Max weight (kg),Min weight (kg),Inactive duration (ms),Walking duration (ms) 2019-01-06,1893.2533778121408,1692.7585290074348,52.3145496,13.3485443,52.5222746,14.588051,3.7923538250920985,32.099998474121094,0.3485696017742157,3832,,,,48974765,2463627
Выводы? Apple Health собирает больше данных, и они в целом более точные даже без использования внешних датчиков (часов) просто в силу того, что приложение от Apple не стесняется задействовать встроенный в iPhone шагомер.
Важный момент: Apple Health не возвращает карты перемещений, а данные местоположения сохраняются только в том случае, если приложение (или часы) посчитает, что пользователь занимается спортивной тренировкой.
Google Fit не опрашивает постоянно датчик шагомера. Вместо этого используются алгоритмы искусственного интеллекта, вычисляющие число шагов пользователя на основе редких включений датчика-шагомера (если таковой присутствует в устройстве), данных Significant Motion и данных местоположения (определяемых, скорее всего, по сотовым вышкам, а не по спутникам). В результате Fit возвращает лишь очень приблизительную картину. Использование внешних датчиков (например, встроенных в спортивный трекер или часы, поддерживающие интеграцию с Google Fit) позволяет уточнить картину благодаря точному подсчёту количества шагов, и добавить некоторые категории данных (пульс, давление). Тесной интеграции, как между часами Apple Watch и системой iOS, здесь нет. При этом Google Fit собирает данные о местоположении пользователя с использованием датчиков телефона независимо от того, занимается ли пользователь спортивной активностью или нет.
Синхронизация и защита данных
Как синхронизируются и как защищены данные Apple Health мы уже рассказали. Если на все устройства пользователя установлена iOS 12, то данные Apple Health будут надёжно зашифрованы, а ключ шифрования перешифрован посредством кода блокировки экрана (или системным паролем, если речь идёт о macOS). Для доступа к данным потребуется логин (Apple ID), пароль от Apple ID, одноразовый пароль двухфакторной аутентификации (если отключить 2FA, то данные «Здоровья» не будут синхронизированы) и код блокировки экрана одного из устройств, на котором уже включена синхронизация данных «Здоровья».
В описанной выше ситуации данные «Здоровья» не будут переданы правоохранительным органам по запросу (точнее, они могут быть переданы, но расшифровать полученную информацию будет невозможно). Не получить информацию и запросом через GDPR. Извлечь их можно либо путём синхронизации на свежее устройство под управлением iOS, либо посредством специализированного софта (Elcomsoft Phone Breaker). С другой стороны, если есть устройство, на которое синхронизированы данные Health и которое можно разблокировать, то их можно просто экспортировать в ZIP.
Apple Health может «поделиться» данными с одним из многочисленных сторонних приложений, которые пользователь может установить или самостоятельно, или по рекомендации самого приложения Apple Health. Так, для каждой категории данных Apple Health рекомендует сразу несколько приложений, которые помогут собрать, обработать и проанализировать информацию. Если установить одно или несколько таких приложений, а потом в настройках системы разрешить им доступ к данным Health, то приложения смогут как поставлять информацию в Apple Health, так и получать данные, собранные Apple Health и другими подключёнными сторонними приложениями. Что будут делать эти приложения с данными, как они собираются их защищать и охранять, куда будут передавать и как хранить – известно только со слов разработчиков таких приложений. Утечки случались. Наверное, самым показательным является случай с приложением Strava, доступным для платформ iOS и Android. Компания использовала приложение Strava Running and Cycling GPS для сбора информации, и на основе данных пользователей составило статистику и обнародовало местоположение военнослужащих военных баз в США, Сирии и Нигерии. В общем-то, это всё, что нужно знать об отношении сторонних компаний к персональным данным.
В то же время вся информация из приложения Apple Health чётко структурирована; все поля определены и описаны, и если данные удалось расшифровать, то анализировать их достаточно просто.
В случае с Google дела обстоят и проще, и сложнее. Проще – потому что все данные Google Fit доступны в «облаке» Google Account без какого-либо дополнительного шифрования. Их можно извлечь посредством собственного сервиса компании Google Takeout, можно получить по запросу от правоохранительных органов. Никакой дополнительной защиты или шифрования – нет. А вот анализ данных из Google Fit может оказаться сложнее. Дело в том, что Google Fit способен агрегировать информацию из различных источников, включая сторонние приложения и внешние датчики. К сожалению, Google не описывает структуру данных и не предопределяет категории, в результате чего каждое стороннее приложение может сообщать данные хоть и в стандартном формате, но с собственными обозначениями категорий и типов данных. Анализировать информацию приходится вручную.
Принципиальное отличие между Apple Health и Google Fit не только в том, какие типы информации собирает каждое приложение, но и в том, как и от кого эти данные защищены.
Google Fit собирает данные о местоположении. Если не используются внешние датчики, то собирается информация от Google Location Services на основе данных от сотовых вышек и GPS с периодичностью 5 минут. Количество шагов аппроксимируется на основе редких периодических опросов датчика-шагомера, пройденной дистанции и данных о телосложении пользователя, которые вводит сам пользователь. Если внешние датчики используются, то в приложение может поступать дополнительная информация.
Google Fit: синхронизация и защита данных. Все собранные данные синхронизируются в учётную запись пользователя. Дополнительной защиты нет. Шифрования нет. Данные доступны как самой компании Google, так и правоохранительным органам и любым желающим через сервис Google Takeout.
Apple Health собирает данные на основе датчиков телефона, включая встроенный шагомер и альтиметр. Данные о местоположении в обычном состоянии не регистрируются. Они регистрируются лишь в периоды, когда система или Apple Watch определяют «спортивный» характер активности пользователя; в таких случаях координаты сохраняются ежесекундно. Интересный момент: Apple Health также просит пользователя ввести данные о телосложении, но использует их противоположно тому, как это делает Google. Если Google Fit рассчитывает количество шагов пользователя по пройденной дистанции и росту, то Apple Health рассчитает пройденную дистанцию на основе роста пользователя и количества шагов, которые зарегистрировал датчик-шагомер (за исключением периодов спортивных тренировок). При наличии внешних датчиков (а ими могут выступать как часы Apple Watch, так и множество сторонних устройств и приложений) собирается заметно больше данных.
Начиная с iOS 11, Apple синхронизирует данные Health в облако. В iOS 11 данные «здоровья» не имели какой-то особой защиты; их можно было извлечь и расшифровать точно так же, как и остальные синхронизированные данные (фотографии, контакты, заметки, календари и т.п.) Соответственно, если данные в облако поступают с устройства, работающего под управлением iOS 11, то доступны они будут как самой компании Apple, так и правоохранительным органам и всем желающим воспользоваться сервисом извлечения данных запросом GDPR.
В iOS 12 используется принципиально другой подход к защите данных «здоровья». Теперь они защищены ключом, который хранится в облачной связке ключей iCloud Keychain. Этот ключ может быть получен в том и только в том случае, если известны логин и пароль от Apple ID, получен одноразовый код двухфакторной аутентификации (а сам режим двухфакторной аутентификации обязательно включен); наконец, расшифровать ключ получится только если известен код блокировки устройства, которое уже участвует в синхронизации Apple Health. Соответственно, данные, полученные с устройств под управлением iOS 12, зашифрованы и не доступны ни компании Apple, ни правоохранительным органам, ни тем, кто хочет получить информацию через GDPR. Извлечь их можно либо посредством синхронизации с новым устройством Apple (с iOS 12) и последующим экспортом данных Apple Health, либо, если лишнего устройства под управлением iOS 12 под рукой нет, при помощи специализированного приложения (Elcomsoft Phone Breaker).
Сторонние приложения, которым предоставляется доступ к данным Google Fit и Apple Health, мы выделим в самостоятельную группу. Количество и разнообразие таких приложений не позволяет проанализировать все или даже самые популярные из них. Тем не менее, уже были зарегистрированы утечки данных из нескольких известных приложений. Разрешая доступ к данным «здоровья» стороннему приложению нужно чётко понимать, что с этого момента ты сам отдал свои данные «на сторону». И если механизмы защиты данных «здоровья» в iOS известны и хорошо изучены, то политики и механизмы защиты твоих данных у сторонних компаний будут располагаться в диапазоне от «намного хуже» до «полностью отсутствуют».