Каноническое объяснение шифрования и уязвимостей Android

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


Я некоторое время пытался понять процесс шифрования Android и его уязвимости.

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

Мое понимание (или непонимание?)

  1. Пароль шифрования генерируется из комбинации PIN-кода экрана блокировки пользователя и алгоритма шифрования (в этом заключается врожденная слабость из-за ограниченной длины PIN-кода).
  2. Это приправлено и хранится в корневом каталоге, недоступном для пользователей.
  3. Это используется для генерации фактического пароля для шифрования/дешифрования, и фактический пароль хранится в ОЗУ.
  4. Это было усилено путем привязки шага 1 к SoC устройства ( Какая версия Android? Какой аппаратный элемент однозначно идентифицирует устройство? Можно ли заменить его на подделку? )
  5. Следовательно, невозможно расшифровать данные без ключа шифрования и устройства (также подходит для внешней SD)
  6. Возможные методы восстановления - брутфорс, захват информации ОЗУ (шаг 3) для получения ключа
  7. Устройства с root-доступом, по- видимому , более восприимчивы к доступу к данным шага 2 через пользовательское восстановление /, возможно, ПЗУ и перепрошивку ядра ?? ( если это правда, почему это не рекламируется как большой риск? )
  8. Даже если эта информация получена, я предполагаю, что создание фактического пароля требует нетривиальных усилий.
  9. Marshmallow может рассматривать внешний SD как «внутреннее хранилище» или «портативное хранилище». По логике это не должно иметь значения, но я не уверен

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

Итак, я ищу каноническое объяснение для понимания с точки зрения пользователя

  • Весь процесс шифрования (включая внешнюю SD)

  • Различия реализации в разных версиях Android — от KitKat до Marshmallow (включая двойные опции для внешней SD в Marshmallow)

  • Уязвимости на уровне пользователя

Запись

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

  • Возможным преимуществом может быть «обман» будущих вопросов по связанным аспектам .

  • За счет повторения ответы должны быть в первую очередь на уровне пользователя , но с адекватным объяснением для более глубокого понимания. Разделение ответа на две части может быть подходящим способом.

  • Я бы поставил точку, чтобы проголосовать против тривиальных / случайных / исправлений ответов , чтобы поощрять исчерпывающие ответы.

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

Ответы (2)

Я представляю, как это работает:

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

Большой трюк здесь заключается в том, что асинхронное шифрование главного ключа. Когда у Android есть мастер-ключ, он может обмениваться данными с хранилищем. Только когда пользователь вошел в систему, этот главный ключ известен. Асинхронное шифрование — это то, что называется шифрованием с открытым ключом. Происходит следующее: открытый ключ шифрует данные (в данном случае мастер-ключ), а закрытый ключ расшифровывает данные. Не путать с шифрованием хранилища. Хранилище представляет собой просто синхронное шифрование. Там один и тот же ключ используется для шифрования и дешифрования. Но нахождение/восстановление этого «главного» ключа — важная задача. Это означает, что если в какой-то момент у вас есть слабый метод входа в систему, например, «1234» в качестве пин-кода, и вы передумаете и измените пин-код на «5364», который труднее угадать, если только это не более ранний «1234». " был украден, шпионил, в любой момент безопасность стала лучше. То же самое происходит при изменении метода входа в систему на полный пароль, который невозможно угадать, или при атаке по словарю. Само хранилище вообще не нужно перешифровывать. Все дело в сокрытии главного ключа — внутри. Пользователь никогда не увидит этот мастер-ключ, потому что, скорее всего, это всего лишь своего рода случайный хеш-код — ничто никогда не «найдет» или «угадает» этот хэш-код. Даже АНБ или любой другой орган безопасности на планете не смог бы найти такой подходящий ключ. Единственный вектор атаки — надежда на слабость со стороны пользователя. Возможно, пользователь выбрал пин-код для входа. Если это 4 цифры, то это максимум 10000 возможных пин-кодов. ОС может «заблокировать» устройство после тестирования нескольких за короткое время. Тогда решение состоит в том, чтобы «взломать» ОС, чтобы можно было попробовать все возможные пин-коды без вмешательства ОС и блокировки устройства. Думаю, именно так ФБР в конце концов получило доступ к телефону преступника. Я думаю, что сторонняя компания (какая-то израильская компания, насколько я помню) сделала взлом для ФБР. Они преодолели ограничение на количество попыток ввода пин-кода. Если логин полный пароль, и если пользователь выбрал надежный пароль, и вы sol. Не за всю жизнь со всей мощью процессора на планете можно взломать это за миллион лет. Я не покупаюсь ни на какие АНБ, могу расшифровать какие-либо слухи. Я думаю, что эти люди смотрели слишком много фильмов о людях в черном. Все, что нужно сделать, это просмотреть научные документы о различных алгоритмах шифрования (например, AES), и вы поймете, что взлом просто невозможен, за исключением старых дней, когда были 40-битные ключи. Эти времена давно прошли. Я думаю, что AES128 уже невозможно взломать, и, если кого-то это беспокоит, переход на AES256 делает его более безопасным на величину, сравнимую с размером вселенной.Возможно , однажды квантовые компьютеры смогут его расшифровать, но я настроен скептически. Не уверен, что система вероятностей может просто выделить решение. Мы увидим об этом, в конце концов. Возможно, это все равно через несколько жизней. Не о чем беспокоиться прямо сейчас.

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

Я думаю, вы имеете в виду «симметричный» и «асимметричный». Не "синхронный" и "асинхронный".

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

По сути, как только ваше устройство расшифровывает файлы, к ним может напрямую обращаться процесс с привилегиями суперпользователя. Этот процесс может получить доступ к вашему устройству, используя уязвимость в самом ПЗУ (ОС Android). (Это было недавно в новостях, поскольку WikiLeaks выявил некоторые недостатки)

Устройства с root-доступом, по-видимому, более восприимчивы к доступу к данным шага 2 через пользовательское восстановление /, возможно, ПЗУ и перепрошивку ядра ?? (если это правда, почему это не рекламируется как большой риск?)

Перед рутом : чтобы рутировать устройство, вы должны использовать внешние инструменты, каждый из которых имеет глубокий доступ к внутренней структуре устройства. Некоторые из этих инструментов предварительно скомпилированы и не имеют открытого исходного кода. У них есть «официальные» сайты, но кто эти люди? (например, twrp.me, supersu.com, но есть и другие, например KingoRoot) Можно ли им действительно доверять? Некоторым я доверяю больше, чем другим. Например, KingoRoot установил на мой компьютер программу, которая вела себя как вирус (для ее удаления пришлось использовать двойную загрузку).

После того, как вы рутируете : предоставление скомпилированной программе (APK) доступа SU означает, что она может делать все, что захочет, без ограничений или указания того, какое намерение она будет использовать. (Намерения позволяют APK получить доступ к таким вещам, как Wi-Fi, камера и т. д.). Таким образом, «надежное приложение» после получения root-доступа может легко получить доступ к любой информации и отправить ее обратно на свой сервер.

Защищает ли полное шифрование устройства мои данные от Google и правительства?

Гугл - да. У него нет ключа для разблокировки.

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

Сложности процедур/алгоритмов безопасности бесполезны, если их можно перехватить и обойти.

Изменить: стоит отметить, что Google действительно имеет возможность загружать и устанавливать/обновлять приложения на ваше устройство Android, не спрашивая вашего разрешения и даже не уведомляя вас о том, что обновление произошло. И даже на корневом устройстве, кажется, нет способа заблокировать это без потери ключевых функций (Play Store, Карты, Синхронизация и т. д.)