Система безопасности в iOS впечатляет. Все продумано до мелочей, аппаратная и программная части тесно переплетены. После прочтения iOS Security (или в более простой форме iPhone in Business) становится понятно, почему iOS не грозят вирусы, а ваши личные данные в безопасности. Сравните с Android-смартфонами, где с б/у телефонов восстанавливают картинки, письма и контакты.
Сегодня перевод части iOS Security про защиту данных.
Пасскоды
Пасскод это код для разблокировки телефона, обычно состоит из четырех цифр.
Пасскод защищает ваш телефон от посторонних и активирует Защиту файлов. Без установки пасскода вы можете удаленно удалить все данные с устройства. С установленным пасскодом файлы зашифрованы и без пасскода прочесть их невозможно.
Пасскод шифруется ключом устройства, перебор возможен только на iPhone, где его установили.
Для защиты от перебора пасскод зашифрован несколько раз, одна проверка правильности занимает примерно 80 миллисекунд. Чтобы аппаратно перебрать все комбинации 6 символьного пасскода потребуется пять с половиной лет, а стандартного 4-х числового 14 минут : )
Помимо этого, iOS увеличивает время проверки после каждого ошибочного ввода. Пользователи с чрезвычайно секретными данными включают опцию полного стирания телефона после 10 неверных попыток.
Touch ID, появившийся в iPhone 5S, позволяет установить длинный число-буквенный пасскод, ведь вводить его не нужно, телефон разблокируется пальцем. Советую воспользоваться этой возможностью.
Защита файлов
В iOS встроен механизм шифрования файлов на диске устройства. Механизм позволяет удаленно и быстро очистить файловую систему, защищает ваши данные при установке флеш-памяти в другой телефон. Если установлен пасскод, прочитать содержимое файлов без него невозможно.
Защита файлов реализована через иерархию криптографических ключей.
iOS присваивает каждому файлу 256 битный AES ключ. Данные записываются на диск только в зашифрованном виде.
AES — симметричный алгоритм шифрования. Правительство США использует AES с ключом 256 бит для хранения секретных документов. Симметричность означает, что для шифрования и расшифровки данных используется один и тот же ключ.
В iOS существует несколько классов защиты файлов. Каждый класс защиты имеет свой крипто-ключ.
Файловый ключшифруетсяключом класса. Зашифрованный файловый ключ сохраняется в метаданных файла. Метаданные всех файлов шифруются ключом файловой системы.
Ключ файловой системы создается случайным образом при первой установке iOS или очистке устройства. Ключ хранится в Стираемом хранилище. Когда пользователь очищает устройство опцией Erase all content and settings или удаленно через iCloud, ключ файловой системы удаляется. Теперь все файлы недоступны, система не может расшифровать метаданные, в которых хранится ключ файла.
Ключ класса, в свою очередь,зашифрован уникальным ключом устройства и пасскодом.
Такая схема гибка и производительна. Например, чтобы сменить класс защиты файла, достаточно перешифровать ключ файла. А при смене пасскода достаточно перешифровать ключ класса защиты.
Классы защиты данных
При создании файла сторонние приложения выбирают ему Класс защиты. Донесите эту информацию до разработчиков и установите правильные классы для персональных данных пользователя.
Полная защита (NSFileProtectionComplete)Ключ класса полная защита зашифрован пасскодом и ключом устройства. Через 10 секунд после блокирования устройства, расшифрованный ключ класса стирается из памяти. Все файлы этого класса становятся недоступны, пока пользователь не введет пасскод снова.
Полную защиту использует стандартное почтовое приложение для писем и вложений. Все данные о местоположении пользователя хранятся в файлах с полной защитой.
Не защищен, если открыт (NSFileProtectionCompleteUnlessOpen)
Иногда требуется записывать файлы, когда устройство заблокировано, например, при скачивании в фоновом режиме. Для этого существует класс не защищен, если открыт.
Для файлов, защищенным этим классом, помимо Ключа файла создается пара из закрытого и публичного ключа. Из закрытого ключа файла и публичного ключа класса генерируется общий ключ (shared secret). Публичный ключ класса доступен без пасскода. Ключ файла шифруется общим ключом и сохраняется в метаданных вместе с публичным ключом файла. Закрытый ключ файла удаляется. Как только запись в файл закончена, ключ файла стирается из памяти. Чтобы открыть файл заново, временный ключ воссоздается из закрытого ключа класса и публичного ключа файла. Закрытый ключ класса уже защищен пасскодом.
Другими словами, файлы класса не защищен, если открыт могут быть созданы в фоне, но после завершения записи для доступа к ним потребуется пасскод.
Защищен до первого входа (NSFileProtectionCompleteUntilFirstUserAuthentication)
Работает аналогично полной защите, только расшифрованный ключ файла не удаляется из памяти при блокировании устройства. Этот класс защищает данные от атак с перезагрузкой устройства. Класс используется по умолчанию в сторонних приложениях.
Без защиты (NSFileProtectionNone)
Ключ класса без защиты зашифрован только ключом устройства. Файлы, защищенные этим классом, нельзя прочитать на другом устройстве и можно быстро сделать недоступными удаленно.
Аппаратная поддержка шифрования
Постоянные шифровки и расшифровки всех файлов замедлили бы работу системы и уменьшили время работы от батареи. Поэтому в каждом iPhone шифрование реализовано на аппаратном уровне.
На пути между оперативной памятью и флеш-картой встроен чип AES-256 шифрования. Процессор передает ему ключ файла и данные прозрачно и быстро шифруются и дешифруются при доступе к файлу.
Уникальный ключ устройства (UID) и ключ группы устройств (GID) это 256 битные AES ключи, прошитые в процессор при производстве. Программное обеспечение не имеет доступа к этим ключам, им доступны только результаты шифровки/дешифровки этими ключами. UID уникален для каждого устройства и не хранится у Apple или ее поставщиков. GID совпадает для всех устройств с одним типом процессора (например, для всех устройств с A7 чипом). GID используется как дополнительная защита при установке и восстановлении системы. Прошивание этих ключей на чип позволяет избежать их подмены, обхода или доступа из-вне аппаратного движка AES-шифрования.
UID позволяет криптографически привязать данные к конкретному устройству. Например, иерархия ключей шифрования файловой системы включает UID. Если переставить чип памяти с одного устройства на другое, файлы будут недоступны.
Все остальные крипто-ключи созданы системным генератором случайных чисел. Энтропия для ключей считается из времени исполнения системных запросов при загрузке и данных сенсоров устройства после.
Безопасное удаление ключей столь же важно, как и их создание. Это особенно сложно на флеш-накопителях, где из-за износа данные могут дублироваться в нескольких местах. Поэтому iOS устройства содержат Стираемое хранилище (Effaceable Storage). Эта функция позволяет стирать небольшие блоки данных с устройства хранения на самом низком уровне.