Что такое шифрование в планшете

Обновлено: 03.07.2024

Впервые Google позволила зашифровать Android устройства в Android Gingerbread (2.3.х), но данная функция претерпела некоторые значительные изменения с тех пор. На некоторых смартфонах под управлением lollipop (5.X) и выше можно пользоваться функцией шифрования, что называется, из коробки, в то время как на некоторых старых или бюджетных устройствах Вам придется включать ее самостоятельно.

Зачем может потребоваться зашифровать Android устройство

Шифрование хранит данные Вашего телефона в не читаемой форме. Для выполнения низкоуровневых функций шифрования, Android использует dm-crypt, который представляет собой стандартную систему шифрования диска в ядре Linux. Эта же технология используется в различных дистрибутивах Linux. Когда вы вводите PIN-код, пароль или графический ключ на экране блокировки, телефон расшифровывает данные, что делает их понятными. Кто не знает PIN код или пароль, тот не сможет получить доступ к Вашим данным. На Android 5.1 и выше шифрование не требует наличие PIN-кода или пароля, но настоятельно рекомендуется, так как при их отсутствии снижается эффективность шифрования.

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

Обычный пользователь думает, что у него нет никакой важной информации. Если Ваш телефон украдут, то вор будет иметь доступ к Вашей почте, сможет узнать Ваш домашний адрес и иметь доступ к другой личной информации. Согласен, большинство воров не смогут получить доступ к личной информации, если на смартфоне будет установлен обычный код разблокировки, даже без шифрования. И большинство воров интересует продажа Вашего устройства, а не личные данные. Но никогда не помешает защитить свои данные.

Что нужно знать перед тем как зашифровать Android устройство

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

  • Более медленная работа : Один раз зашифровав данные, их нужно будет расшифровывать каждый раз, когда потребуется доступ к данным. Поэтому Вы можете увидеть небольшое падение производительности, хотя это вообще не заметно для большинства пользователей (особенно если у вас мощный телефон).
  • Отключение шифрования : Если Вы включите шифрование, то единственный способ его выключить — это сброс к заводским настройкам .
  • Если уна устройстве получены root права, то их нужно удалить : Если Вы попытаетесь зашифровать Android устройство, на котором есть права суперпользователя, то Вы столкнетесь с некоторыми проблемами. Вам нужно сначала удалить root права , зашифровать устройство и снова получить права суперпользователя.

Это не означает, что мы отговариваем Вас от шифрования, мы пытаемся объяснить все нюансы этого процесса.

Как включить шифрование в Android

Прежде чем начать, есть несколько вещей, которые стоит знать:

  • Шифрование устройства может занять час или больше.
  • Устройство должно быть заряжено не меньше, чем на 80%, иначе Android просто не будет выполнять процесс шифрования.
  • Ваше устройство должно быть включено в течение всего процесса.
  • Если на устройстве получены root права, обязательно удалите их перед продолжением!

Убедитесь, что у Вас достаточно времени и зарядки батареи. Если Вы вмешаетесь в процесс шифрования или завершите процесс самостоятельно, то Вы можете потерять все данные . Как только процесс начнется, лучше просто оставить устройство в покое и позволять ему сделать свое дело.

Будем считать, что все правила прочитаны и можно начать.

Откройте меню, перейдите в настройки и нажмите на пункт «Безопасность». Имейте ввиду, что на различных устройствах этот пункт может иметь различные названия. Некоторые устройства позволяют также зашифровать SD карту, но по-умолчанию зашифруется только внутренняя память.

Если устройство еще не зашифровано Вы можете нажать на пункт «Зашифровать устройство» для начала процесса шифрования.

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

Появится еще одно предупреждение, которое спросит действительно ли Вы хотите зашифровать устройство. Если Вы не передумали, то нажимайте на «Зашифровать устройство».

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

После окончания процесса телефон перезагрузится и им снова можно будет пользоваться. Вы должны будете ввести пароль или PIN-код разблокировки экрана, чтобы завершить процесс загрузки. Если у Вас не был включен пароль или PIN-код разблокировки, то система предложит задать их перед тем как зашифровать Android устройство. Для этого необходимо зайти в Настройки -> Безопасность -> Блокировка экрана и выбрать тип блокировки.

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

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

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

Что такое шифрование и как оно работает

Ошибка шифрования

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

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

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

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

Причины сбоев в шифровании

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

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

Впрочем, зависящих от пользователя причин не так уж и много. Единственный совет – устанавливайте и удаляйте новое ПО реже.

Действия пользователя

Только ни в коем случае не нажимайте на кнопку под надписью! Перезагрузить устройство нужно, передернув АКБ. Если у вас несъемный аккумулятор, воспользуйтесь специальными комбинациями кнопок для этого действия. Каждый уважающий себя производитель обязан оснастить такой комбинацией аппарат с несъемной батареей – уточняйте это на сайтах разработчиков.

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

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

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

Пошаговые инструкции

Первый способ (если у вас включена отладка по USB). С зажатыми клавишами включения и громкости вниз (комбинация клавиш может меняться в зависимости от марки и модели телефона или планшета) подключаем телефон к компьютеру. На нем должна быть запущенная фирменная программа. Если повезет – будет возможность без труда восстановить стандартные настройки.

Второй способ (если есть рекавери). При загрузке входим в стандартное CWM (способы варьируются, уточняйте для каждого разработчика), наводим с помощью кнопок навигации в данном меню (клавиши регулировки громкости) на пункт «wipe data/factory reset» и выбираем его кнопкой включения.

Стандартное CWM

Затем соглашаемся с удалением всех пользовательских данных нажатием на «Yes — delete all user data» той же клавишей.

Удаление всех пользовательских данных

После этого можно перезагружать восстановленное устройство, выбрав пункт «reboot system now».

Перезагрузка восстановленного устройства

Не помог ни один способ

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

Инструкция по прошивке

Чтобы прошить устройство, нам понадобится скачать нужную прошивку и закинуть ее на флешку. Далее повторяем весь второй способ восстановления, только удаляем еще и пункты «Кэш» и «Dalvik».

Проще, надежнее и быстрее всего будет, если у вас будет кастомное рекавери с разблокированным загрузчиком.

Что такое «Запрещено политикой шифрования»

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

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

Смaртфон и планшет — идеальные сборщики приватной информации. Ее приходится оберегать от приложений со шпионскими замашками, троянов-банкеров, обычных воров, да и просто чрезмерно любопытных коллег. Надежно сделать это можно только с помощью шифрования, но могут ли доступные в Android средства обеспечить должный уровень защиты? Этой статьей мы начинаем новый цикл о защите данных в Android и сегoдня поговорим о стойкости встроенных в ОС криптографических систем.

Шифрование данных в Андроид

Полнодисковое шифрование (FDE) данных в Андроид

Впервые полнодисковое шифрование (full disk encryption — FDE) пытались внедрить еще в планшетной версии Android 3.0 Honeycomb. Тогда вместе с ядром Linux 2.6.36 в ней появился модуль dm-crypt, обеспечивающий возможнoсть шифрования на любом блочном устройстве хранения данных (включая NAND Flash). В универсальной четвертой версии Android шифрование также было доступно, однако для большинства оно оставалось невостребованной опцией. Из-за отсутствия программных оптимизаций и низкой скорости встраиваемых процессоров того времени включение шифрования приводило к падению производительности ввода-вывода в 6–8 раз на топовых моделях и до 20 раз на бюджетных.

Тесты скорости чтения/записи до.
Тесты скорости чтения/записи до…
. на смартфоне OnePlus One под управлением Android 6.0
…и после включения шифрования на смартфоне OnePlus One под управлением Android 6.0

Именно в пятой версии Андроида появился флаг forceencrypt fstab, указывающий на необходимость активации шифрования при первом включении устройства. Обрати внимание: есть принципиальная разница между тем, было ли устройство обновлено до Android 5.x или новее либо сразу выпускалось с такой вeрсией. Во втором случае шифрование данных будет выполняться всегда. В первом варианте (при обновлении) оно останется опциональным и может быть отключено сбросом до заводских настроек (factory reset).

В общем случае для полнодискового шифрования в Android используются три битовые последовательности: мастер-ключ, соль и пользовательский пин-код. Мастер-ключ и соль генерируются автоматически, а пин-код вводится владельцем устройства. Роль пин-кода может также выполнять пароль, графический ключ или любой другой «секрет» — для процессора это все равно битовая последовательность, причем довольно кoроткая.

Стойкий пароль шифрования данных в Андроид

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

EncPassChanger

EncPassChanger

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

Именно с помощью DEK в конечном счете шифруются все данные на пользoвательском разделе /data. Как именно выглядит этот ключ, владелец устройства не знает. Он никогда не вводит его и даже не может считать штатными средствами.

В ранних версиях Android (до 5.0) мастер-ключ и настройки шифрования хранились в отдельной незашифрованной структуре crypto footer (упрощенный аналог LUKS) в начале зашифрованного раздела data. Сам DEX шифровался другим ключом, вычисляемым на основе пользовательского пароля и соли.

Такой способ не обеспeчивал защиту от брутфорса мастер-ключа на внешних вычислительных системах, поэтому в Android 5.0 и выше появилось новое требование к производителям устройств: предоставлять на аппаратном уровне защищенное хранилище ключей. Дополнительно DEK стал подписываться с использованием еще одного ключа (HBK — hardware-bound private key), специфичного для данного устройства. Он захардкожен на этапе производства и не доступен ни одному пользовательскому процессу.

Как работает FDE шифрование данных в Андроид

Поэтапно схема создания ключей для шифрования пользовательских данных в Android 5.0 и выше выглядит так:

  1. Гаджет при первом включении генериpует два числа длиной 128 бит. В дальнейшем они используются как мастер-ключ и соль.
  2. Пользователя просят задать пароль.
  3. На основе введенного пароля функция scrypt запускает формирование первого промежуточного ключа (IK1) длиной 256 бит.
  4. IK1 дополняется нулями так, чтобы соответствовать по длине аппаратному ключу HBK.
  5. Модифицированный ключ IK1 подписывается ключом HBK.
  6. Подписанный ключ IK1 используется как второй промежуточный ключ (IK2).
  7. Функция scrypt запускает формирование третьего промежуточного ключа (IK3), используя для его генерации IK2 и соль как входные аргументы.
  8. Первые 128 бит IK3 используются как KEK (key encryption key — ключ шифрования мастер-ключа).
  9. Мастер-ключ шифруется ключом KEK по алгоритму AES в режиме сцепления блоков шифртекста (CBC). Поскольку в данном режиме одинаковые исходные блоки дают одинaковый шифртекст, для затруднения атаки на основе подобранного шифртекста в качестве данных первого блока используется случайная последовательность (вектор инициализации).
  10. Зашифрованный мастер-ключ сохраняется в аппаратно изолированной области.

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

Недоступность всех ключей для прямого считывания (например, запущенным на устройстве скриптом) обеспечивается их обработкой только внутри изолированной доверенной среды исполнения (trusted execution environment — TEE). В процессорах архитектуры ARM роль TEE выполняет TrustZone, которая обеспечивает контроль целостнoсти данных, их защищенное хранение и изолированное выполнение кода. В ней же хранятся и промежуточные значения, вычисляемые функцией формирования ключа.

Как хранение ключа, так и все ключевые криптографические процедуры в современных версиях Android должны выполняться в изолированной среде, недоступной пользователю и приложениям. На практике же это условие соблюдается не всегда, поскольку Android работает на совершенно разных платформах. Концептуально их три: ARM, Intel x86 и MIPS. В каждой из них есть свои архитектурные ветвления, которые добавляют путаницы. Более того, на базе одних и тех же ядер (например, ARM Cortex-A53) каждый производитель, обладающий лицензией на архитектуру (architectural license), можeт сделать свою версию однокристальной системы с любыми нестандaртными свойствами.

Именно из-за такого разнообразия платформ Google до сих пор не мoжет обеспечить единый фундамент для шифрования, как это сделала Apple еще в 2013 году (см. Secure Enclave). Сегoдня в устройствах под управлением Android либо защищенного хранилища ключей нет вовсе, либо оно не имеет надежной реализации.

Например, в чипах Qualcomm Snapdragon используется собственная реализация аппаратно изолированного окружения — QSEE (Qualcomm secure execution environment). В нем запускаются доверенные обработчики (trustlets), включая модуль обработки ключей (KeyMaster). Как показал этим летом Гэл Беньямини (Gal Beniamini), в QSEE по факту нет полнoй аппаратной изоляции. Атакующий может запустить свой код в пространстве QSEE. При этом он станет доверенным и автоматически повысит привилегии, после чего сможет считать через KeyMaster как зашифрованный мастер-ключ, так и захардкоженный ключ HBK.

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

Включаем шифрование

Включаем шифрование

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

Сказанное выше не означает, что калифорнийский разработчик однокристалок так уж плох. Просто продукция Qualcomm чаще подвергается стороннему аудиту. В устройствах с другими SoC дела обстоят не лучше. В частности, уязвимость доверенной среды исполнения (TEE) в однокристалках HiSilicon подробно разбиралaсь на прошлогодней конференции Black Hat.

Недостатки полнодискового шифрования известны давно. Применительно к Android и dm-crypt я бы выделил следующие принципиальные моменты:

  1. FDE работает на уровне секторов, а значит, совместимо только с дисковыми файловыми системами. JFFS2, YAFFS и другие работающие напрямую с чипами NAND ФС остаются в стороне.
  2. Посекторное шифрование сводит на нет все оптимизации, реализованные на уровне драйверов файловых систем. Множество приложений постоянно пишут логи и считывают свои данные. Это приводит к тому, что устройство практически непрерывно расшифровывает секторы и зашифровывает их вновь, модифицируя содeржимое раздела. Поэтому FDE всегда приводит к заметному падению производительности и сокращению времени автономной работы устройства.
  3. FDE не поддерживает проверку подлинности содержимого секторов. Их слишком много, и среди них время от времени появляются сбойные, переназначаемые контроллером в резервную область.
  4. Криптографическая схема AES-CBC-ESSIV считается уязвимой к утечке данных, так как допускает определение точки их изменения. Она позволяет выполнять атаки по типу подмены и перемещения.
  5. FDE окажется совершенно бесполезно, если ты лишишься устройства в тот момент, когда оно будет разблокировано.

К счастью, полнодисковое шифрование не единственный вариант защиты данных в Android.

Пофайловое шифрование (FBE) данных в Андроид

В Android 7.0 появилась пpинципиально новая функция — пофайловое шифрование (file based encryption — FBE), которое выполняeтся с использованием возможностей файловой сиcтемы ext4. Новая реализация шифрования требует наличия аппаратно изолированной среды (trusted execution environment) с пoддержкой API Keymaster 1.0 (старые версии 0.xx не годятся). Выполнение алгоритма AES процессором должно обеспечивать расшифровку данных со скоростью не менее 50 Мбайт/с. Это довольно жесткие требования, поэтому поддержку Android 7.x пока имеют единичные устройства.

Аппаратная поддержка шифрования

Если не останавливаться на специфических однокристалках вроде Nvidia Tegra Parker (четыре ядра Cortex-A57) и процессорах 2014–2015 года от Intel (Atom Z3560, Z3570, Z3580, Z3590, архитектура x86-64), то в сухом остатке имеем следующие чипы:

  • Qualcomm Snapdragon 625 (MSM8953), 820 (MSM8996) и 821 (MSM8996 Pro);
  • Samsung Exynos 7420, 7570, 7870 и 8890;
  • MediaTek Helio X20(MT6797), X25 (MT6797T) и X30;
  • HiSilicon Kirin 650, 950, 955 и 960.

Все они построены на базе 4–8 ядер ARM Cortex-A53 с опциональным дополнением в виде 2–4 более мощных ядер Cortex-A57/A72/A73 или их фирменных модификаций (Qualcomm Kyro, Samsung Mongoose).

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

При использовании FBE каждый файл может быть зашифрован своим ключом и расшифрован независимо от остальных. Эта функция работает вместе с другой новинкой седьмого «Андроида» — прямой загрузкой (Direct Boot).

Direct Boot API обеспечивает более деликатное отделение приватных данных от прочих файлов. Он предоставляeт ту функциональность, которая была недоступна при использовании полнодискового шифрования.

До появления Android 7.0 при активации FDE все данные хранились зашифрованными общим паролем, поэтому смартфоном невозможно было пользоваться до ввода пароля. Теперь же отдельные приложения (например, будильник) можно сделaть доступными прямо на экране блокировки. Они будут работать без авторизации со своими заранее заданными ограничениями, а все пользовательские данные тем временем останутся зашифрованными.

На устройстве с активным пофайловым шифрованием у пользователя появляется две области хранения данных приложений: зашифрованная отдельным паролем (Credential Encrypted — CE) и зашифрованная общим ключом устройства (Device Encrypted — DE). При отключении FBE обе области (CE и DE) остаются открытыми для любого приложения. При активном шифровании файлы области CE расшифровываются только после ввода пользовательского пароля. Файлы DE могут быть расшифрованы сразу после загрузки. Заодно раздельные пароли на кaждый аккаунт позволяют создавать на одном устройстве несколько изолированных пользовательских учеток — например, для детей и ведущих себя подобно детям сотрудников.

Шифрование области CE происходит по алгоритму AES, но уже в другом режиме — XTS. Он разрабатывался специально для шифрования на блочных устройствах и не имеет типичных для режима CBC уязвимостей. В частности, XTS не позволяет определить точку изменения данных, не подвержен утечке данных, устойчив к атакам подмены и перемещения.

С другой стороны, FBE уязвим к side channel атакам, так как, несмотря на шифрование файлов и их имен, он оставляет открытыми метаданные, что можно использовать для выяснения типа хранимой информации и идентификации пользователя устройства.

Выводы

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


ФБР попыталось через суд выкрутить руки компании Apple, не желающей создавать код для обхода собственной системы безопасности. Обнаружена критическая уязвимость в ядре Android, позволяющая получить доступ суперпользователя в обход всех защитных механизмов. Эти два события хоть и не связаны между собой, но совпали по времени, явным образом демонстрируя различия в системе безопасности двух популярных мобильных ОС. Отложим на минуту вопрос с критической уязвимостью ядра Android, которая вряд ли будет когда-либо исправлена большинством производителей в уже выпущенных моделях, и рассмотрим механизмы шифрования данных в Android и Apple iOS. Но прежде поговорим, зачем вообще нужно шифрование в мобильных устройствах.

Зачем шифровать телефон?

Честному человеку скрывать нечего — популярнейшей лейтмотив, который звучит после каждой публикации на тему защиты данных. «Мне скрывать нечего», — говорят многие пользователи. Увы, но гораздо чаще под этим подразумевается всего лишь уверенность в том, что уж в данные конкретного Васи Пупкина никто не потрудится залезть, ибо кому они вообще интересны? Практика показывает, что это не так. Далеко ходить не станем: буквально на прошлой неделе увольнением завершилась карьера школьной учительницы, которая на минутку оставила телефон на столе. Ученики мгновенно разблокировали аппарат и извлекли из него фотографии учительницы в виде, который осуждается пуританской моралью американского общества. Инцидент послужил достаточным основанием для увольнения учительницы. Подобные истории происходят чуть ли не ежедневно.

Как взламываются незашифрованные телефоны

Не будем углубляться в детали, просто имей в виду: данные с незашифрованного телефона можно извлечь почти в ста процентах случаев. «Почти» здесь относится скорее к случаям, когда телефон попытались физически повредить или уничтожить непосредственно перед снятием данных. Во многих устройствах Android и Windows Phone есть сервисный режим, позволяющий слить все данные из памяти аппарата через обычный USB-кабель. Это касается большинства устройств на платформе Qualcomm (режим HS-USB, работающий даже тогда, когда загрузчик заблокирован), на китайских смартфонах с процессорами MediaTek (MTK), Spreadtrum и Allwinner (если разблокирован загрузчик), а также всех смартфонов производства LG (там вообще удобный сервисный режим, позволяющий слить данные даже с «окирпиченного» устройства).

Но даже если в телефоне и нет сервисного «черного хода», данные из устройства все равно можно получить, разобрав аппарат и подключившись к тестовому порту JTAG. В самых запущенных случаях из устройства извлекается чип eMMC, который вставляется в простейший и очень дешевый адаптер и работает по тому же протоколу, что и самая обычная SD-карта. Если данные не были зашифрованы, из телефона легко извлекается вообще все вплоть до маркеров аутентификации, предоставляющих доступ к твоим облачным хранилищам.

А если шифрование было включено? В старых версиях Android (до 4.4 включительно) и это можно было обойти (за исключением, правда, аппаратов производства Samsung). А вот в Android 5.0 наконец появился режим стойкого шифрования. Но так ли он полезен, как полагает Google? Попробуем разобраться.

Android 5.0–6.0

Первым устройством под управлением Android 5.0 стал Google Nexus 6, выпущенный в 2014 году компанией Motorola. В то время уже активно продвигались 64-разрядные мобильные процессоры с архитектурой ARMv8, но у компании Qualcomm не было готового решения на этой платформе. В результате в Nexus 6 был использован набор системной логики Snapdragon 805, основанный на 32-разрядных ядрах собственной разработки Qualcomm.

Почему это важно? Дело в том, что в процессоры на архитектуре ARMv8 встроен набор команд для ускорения потокового шифрования данных, а в 32-битных процессорах ARMv7 таких команд нет.

Итак, следи за руками. Инструкций для ускорения крипто в процессоре нет, поэтому Qualcomm встроил в набор системной логики выделенный аппаратный модуль, призванный выполнять те же функции. Но что-то у Google не сложилось. То ли драйверы на момент выпуска не допилили, то ли Qualcomm не предоставил исходные коды (или не разрешил публиковать их в AOSP). Детали публике неизвестны, но известен результат: Nexus 6 шокировал обозревателей чрезвычайно медленной скоростью чтения данных. Насколько медленной? Примерно вот так:

Скорость чтения/записи данных с активированным шифрованием

Скорость чтения/записи данных с активированным шифрованием

Причина восьмикратного отставания от «младшего брата», смартфона Motorola Moto X 2014, проста: насильно включенное шифрование, реализованное компанией на программном уровне. В реальной жизни пользователи Nexus 6 на оригинальной версии прошивки жаловались на многочисленные лаги и фризы, заметный нагрев устройства и относительно слабую автономность. Установка ядра, отключающего насильственно активированное шифрование, разом решала эти проблемы.

Впрочем, прошивка — дело такое, ее ведь можно и допилить, не так ли? Особенно если ты Google, располагаешь неограниченными финансами и имеешь в штате самых квалифицированных разработчиков. Что ж, посмотрим, что было дальше.

А потом был Android 5.1 (спустя полгода), в котором нужные драйверы для работы с аппаратным ускорителем сначала добавили в предварительной версии прошивки, а потом снова убрали в финальной из-за серьезных проблем со спящим режимом. Потом был Android 6.0, на момент выхода которого пользователи уже успели потерять интерес к этой игре и стали любыми способами отключать шифрование, пользуясь сторонними ядрами. Или не отключать, если скорости чтения в 25–30 Мбайт/с достаточно.

Android 7.0

Nexus 6, Android 7 и шифрование

Nexus 6, Android 7 и шифрование

Несмотря на тестовый статус сборки, что-то в этой версии явно подкрутили. Скорость последовательного чтения данных с зашифрованного раздела подросла с жалких 25 Мбайт/с до чуть менее жалких 39. Почему «жалких»? Даже если сравнивать со скоростью работы аналогичного устройства с выключенным шифрованием в 126 Мбайт/с, получается трехкратное падение производительности. А если сравнить со стареньким, 2013 года iPhone 5S под управлением iOS? Обратимся к AnandTech:

Nexus 6 vs iPhone 5S

Nexus 6 vs iPhone 5S

Разница в скорости чтения данных с зашифрованного Nexus 6 и зашифрованного iPhone 5S — пять раз. Вопрос можно закрывать.

С Nexus 6 что-то не так

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

Производительность Nexus 6 с активированным криптомодулем

Производительность Nexus 6 с активированным криптомодулем

Что ж, давай посмотрим, как обстоят дела с шифрованием в других устройствах компании Google.

В новых устройствах шифрование починили!

С выходом в свет Android 6.0 в Google таки прописали требование активировать шифрование в 64-битных устройствах, выпущенных с Android 6 на борту (требование не распространяется на аппараты, которые до Android 6 обновились). Таких устройств пока выпущено немного, так что делать вывод о том, приняли ли производители к сведению это требование, пока рано.

Очевидно, компанию Google не вдохновили лавры Apple, не устроил выделенный модуль ускорения крипто в топовом чипсете Qualcomm — или просто не сложилось. Срочно понадобилось что-то новое. Не хватало, казалось, только набора команд ускорения крипто, которые появились в ARMv8.

Итак, выходят 64-битные Nexus 5x и 6P, базирующиеся на чипсетах Snapdragon 808 и 810 соответственно. Так же как и Snapdragon 805, эти наборы системной логики оснащены высокопроизводительными выделенными модулями аппаратного ускорения шифрования. И так же, как и в Nexus 6, разработчики из Google не смогли (или не захотели) использовать эти модули. Виноград оказался настолько зеленым и кислым, что начальник отдела разработки официально заявил: «Мы использовали программное ускорение шифрования, а именно — набор команд ARMv8, который обеспечивает более высокую производительность в сравнении с аппаратным ускорителем AES, встроенным в SoC».

Что же такое это «программное ускорение» и почему оно «лучше», чем использование выделенного модуля? В 64-разрядных процессорах (непосредственно в основных ядрах, а не в выделенном модуле, наличие которого остается на усмотрение разработчика SoC) есть несколько инструкций, использование которых позволяет ускорить потоковое шифрование подобно инструкциям, ускоряющим кодирование и декодирование потоков видео H.264 в большинстве современных процессоров.

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

Результат: зашифрованные данные на таких аппаратах (даже на устройствах начального уровня вроде Moto E 2015) читаются всего лишь в два раза медленнее незашифрованных. А вот на устройствах, базирующихся на 32-битных процессорах ARMv7, падение производительности гораздо сильнее — в четыре раза.

Android 6P и скорость чтения данных
Moto E (64 бит) vs Moto G (32 бит)

Почему «программное ускорение» — зло?

Отлично, просто замечательно! В 2016 году на Android зашифрованные данные читаются всего вдвое медленнее незашифрованных и всего в пять раз медленнее снятого с производства iPhone 5S (2013 год), в котором шифрование активировано из коробки! Инженерам Google нужно ставить памятник. ТАК медленно реализовать потоковое шифрование нужно сильно постараться.

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

Отвлечемся на минуту от 64-разрядных устройств и вернемся к Nexus 6. Представь себе Snapdragon 805. Это — четыре больших ядра («больших» по числу транзисторов, по площади — и прожорливых соответственно). А выделенный ускоритель AES — это даже не малое ядро (хотя в некоторых решениях для крипто используется как раз одно из малых ядер ARM на низкой тактовой частоте, у нас не тот случай). Теперь каждый раз, когда системе нужно дописать строчку в лог-файл, активируется не отдельный маленький энергоэффективный чип, а все огромное и «горячее» ядро. Пусть и на миллисекунды, но пробуждается. А пишет или читает что-то Android постоянно (только в Android 6 появился режим Doze, который снижает интенсивность работы устройства в спящем режиме), и ядро активирует — тоже. Отсюда высокая скорость, с которой аккумулятор разряжается в простое (и еще более высокая — при работе).

И знаешь, что самое грустное? Это референсный дизайн Google. И если уж в Google не смогли или не захотели реализовать крипто на выделенном сопроцессоре, то никто, ни один OEM (за исключением, возможно, Samsung) этим заниматься тем более не будет. Ведь это не попугаи в AnTuTu, это что-то невидимое и обычному пользователю совсем непонятное и, как показала статистика, ненужное.

Подведем итог. Мало того, что за полтора года с выхода Nexus 6 так и не удалось задействовать криптосопроцессор. Мало того, что наступили на те же грабли в свежем последнем поколении Nexus’ов. У нас отобрали надежду на то, что шифрование будет реализовано на уровне хотя бы трехлетней давности iPhone 5S. В Google не могут или не хотят сделать быстрое потоковое крипто, несмотря на наличие всего необходимого — от выделенного сопроцессора до исходных кодов драйверов. Увы. На сегодня скорость шифрования в Android не достигла даже того уровня, который был взят Apple три года назад.

А что у других производителей?

Платформа Android выделяется сильнейшей фрагментацией. Разительно отличаются как аппаратные платформы (вплоть до используемых наборов команд — ARMv7, ARMv8, Intel x86 и x64), так и прошивки, под управлением которых работают устройства разных производителей. Учитывая все разнообразие устройств, проверить работу аппаратного шифрования даже небольшой части не представляется возможным. Тем не менее мы решили протестировать еще по крайней мере один аппарат — редакционный OnePlus One (версия с 16 Гбайт) под управлением прошивки CyanogenMod.

OnePlus One и шифрование данных

OnePlus One и шифрование данных

Скорость последовательного чтения данных после шифрования раздела ожидаемо упала втрое. Неожиданностью стало другое: скорость случайного доступа не изменилась, а запись данных небольшими блоками стала даже быстрее. Объяснения этому наблюдению у нас нет; есть комментарий. В отличие от Nexus 6, на OnePlus One не наблюдается сильного падения производительности в сценарии, эмулирующем использование смартфона в реальных условиях. Этот показатель намного более важен, чем скорость последовательного чтения, так как отражает способ использования смартфона (что-то читается и пишется маленькими порциями в разные участки памяти).

А что у Apple?

А у Apple все хорошо. Даже ФБР не смогло заставить компанию взломать собственную систему. Впрочем, совместными усилиями спецслужб и специализированных компаний после долгой шумихи и неудавшегося судебного процесса одно старенькое устройство, не оборудованное даже Secure Enclave, все-таки вскрыли.

Начиная с iPhone 5S, iPad mini 2 и iPad Air, шифрование данных — неотъемлемая часть подсистемы безопасности Secure Enclave. Сам процесс шифрования переложен с больших и горячих ядер основного процессора на энергоэффективный выделенный модуль. Результат? В iPhone 5S скорость последовательного чтения данных — 183 Мбайт/с, а в iPhone 6 — уже 249. И это без какого-либо заметного влияния на скорость работы устройства или время жизни от батарейки.

Заключение

Включать или не включать шифрование на смартфонах Android — дело пока еще добровольное. Старые версии платформы предоставляют пользователям полную свободу: воспользоваться шифрованием и терпеть резко упавшую производительность и повышенный разряд аккумулятора или не защищать данные совсем. Закрытая ОС от Apple подобной свободы не предлагает, в обязательном порядке шифруя данные без каких-либо негативных последствий для производительности дисковой подсистемы и дополнительной нагрузки на аккумулятор.

Впрочем, окно возможностей рисковать персональными данными вот-вот закроется и для любителей свободной ОС, ведь, начиная с шестой версии Android, Google собирается требовать от производителей обязательного включения шифрования из коробки. Учитывая, что с точки зрения Google виноград так и не созрел, использование аппаратного ускорения шифрования владельцам большинства устройств не грозит (впрочем, Samsung может удивить, самостоятельно реализовав то, чего не смогли достигнуть в Google. Вся история шифрования на платформе Android прямо-таки кричит об этом; однако это тема для отдельной статьи). Отдельные производители, такие как OnePlus, могут порадовать хорошей реализацией крипто в реальных сценариях использования, так что, если защита персональных данных для тебя не пустой звук, ты знаешь, куда смотреть. Если же выбирать между горьким и соленым не хочется, почему бы не обратить внимание на устройства яблочной компании?

Читайте также: