Как FDE (Full Disk Encryption) работает так быстро?
Мне интересно, как работает полное шифрование диска в Ubuntu. Вот пример:
Учитывая следующую строку как все содержимое диска:
hello world
После применения какого-либо метода шифрования это будет выглядеть примерно так:
(Я использовал шифр Цезаря со смещением +1 для этого примера, например, A → B; B→C...)
ifmmp xpsme
Как я понимаю, когда компьютер выключен, содержимое диска будет соответствовать приведенной выше строке. Но когда он снова включен, Ubuntu нужно его содержимое, чтобы вернуться снова hello world
для того, чтобы успешно загрузиться.
Что я на самом деле не понимаю, так это то, что в реальном мире содержимое диска намного больше, а алгоритм шифрования - намного сложнее, и мне трудно для компьютера полностью зашифровать / расшифровать все это всего за несколько секунд. (не требуется больше времени для загрузки или выключения).
Как это возможно?
4 ответа
Как работает AES / Rijndael Encryption в целом?
На этой странице есть забавное руководство по рисунку на палочке к расширенному стандарту шифрования (AES), которое легко понять, хотя выглядит более 50 изображений, например, эти два:
а также
Слишком много, чтобы дублировать все это здесь, но если вам нужно изображение "все в одном", то вот оно:
Или есть более компактное объяснение на http://www.password-depot.com/know-how/blowfish_and_rijndael.htm
Метод шифрования Rijndael основан на замене, изменении и выполнении операций xor на байтах. Метод выглядит так:
- Из 128-битного ключа Rijndael генерирует 10 ключей по 128 бит каждый.
- Эти ключи помещены в массивы 4х4.
- Простой текст также делится на массивы 4x4 (по 128 бит).
- Каждый из 128-битных текстовых элементов обрабатывается в 10 раундов (10 раундов для 128-битных ключей, 12 для 192, 14 для 256).
- После 10-го тура код генерируется.
- Каждый отдельный байт подставляется в S-блок и заменяется обратным на GF (2 8).
- Затем применяется побитовая матрица по модулю 2 с последующей операцией XOR с 63.
- Линии матриц сортируются циклически.
- Столбцы умножения матриц чередуются на GF (2 8).
- Подключи каждого раунда подвергаются операции XOR.
Уровень безопасности этого метода шифрования увеличивается, если Rijndael выполняется несколько раз с разными подразделами.
Как работает полное дисковое шифрование Ubuntu?
Я считаю, что это работает путем шифрования раздела с помощью LUKS (настройки по умолчанию с AES), а затем помещает на него несколько томов с помощью LVM (например, /
, swap), расшифровывает и монтирует их при загрузке после ввода ключевой фразы. И есть обычный (не зашифрованный) загрузочный раздел, который загружается достаточно, чтобы запросить пароль.
Руководство the_simple_computer по полному шифрованию диска с Ubuntu (Обновлено 28 июня 2015 г.) говорит о том, как работает шифрование установщика по умолчанию, и упоминает, что двойная загрузка не будет работать (по крайней мере, не из коробки), диск необходимо использовать MBR, чтобы " если на вашем компьютере установлен UEFI, дистрибутив будет установлен в устаревшем режиме BIOS, чтобы вы не могли использовать безопасную загрузку ", а " также дает вам размер подкачки, равный размеру оперативной памяти вашей системы (часто ненужный), и вы у меня нет выбора, какой тип шифрования используется ".
Как быстро шифрование?
Если вы бежите cryptsetup benchmark
он запустит тесты и расскажет вам, как быстро выполняется только шифрование, следите за строками aes-xts (в настоящее время) по умолчанию:
# Algorithm | Key | Encryption | Decryption
aes-xts 256b 150.0 MiB/s 145.0 MiB/s
Средняя скорость чтения жесткого диска может составлять 80-160 МБ / с, поэтому вы не будете намного дольше обычного чтения, и вполне возможно, что только что прочитанные сектора уже были расшифрованы, пока вы все еще ожидаете жесткий диск, чтобы читать больше.
SSD может быть быстрее, может быть, 200-550 МБ / с, так что вы можете заметить это. Но случайное чтение может быть медленнее, и я читал, что скорости SSD могут замедляться после использования (может быть, когда накопитель полностью заполняется, и он должен начать "стирать" сектора?)
Как компьютер может полностью зашифровать / расшифровать весь диск всего за несколько секунд (для загрузки или выключения не требуется больше времени)?
Это не должно расшифровывать все сначала. Шифрование (LUKS) работает с блоками данных, может произвольно расшифровывать любой блок и действует как слой между зашифрованными данными накопителя и тем, что видит файловая система.
Когда файловая система хочет увидеть какой-либо блок данных, LUKS сначала расшифровывает этот блок, а затем передает дешифрованные данные в файловую систему. Сначала вы ждете, пока накопитель прочитает блок данных (как без использования шифрования), и у вас будет только дополнительная задержка для расшифровки этого единственного блока (или нескольких блоков) данных - и если расшифровка выполняется быстрее, чем накопитель может прочитать, расшифровка может быть завершена до того, как накопитель прочитает следующий блок данных.
Так что, как и обычной файловой системе, не нужно читать весь диск, чтобы прочитать файл, когда шифрование добавлено, ему не нужно читать весь диск, и это не делает вещи намного медленнее.
Данные на жестком диске всегда зашифрованы, поэтому при выключении ничего не нужно делать, кроме как забыть ключ.
- В Википедии есть более подробная информация о теории шифрования дисков.
Это будет немного упрощением, но я постараюсь пройти через процесс доступа к файлу в зашифрованной файловой системе.
Например, допустим, в начале зашифрованной файловой системы есть таблица файлов; скажем, мы хотим прочитать /foo.bar
, Итак, первое, что мы делаем, это читаем начало раздела, расшифровываем его и ищем нужный файл; скажем, он говорит, что файл начинается с 0x10000000 байт. Итак, чтобы прочитать, мы начинаем читать с диска в этом месте и расшифровывать его; аналогично, для записи мы можем зашифровать новое содержимое и записать его в этом новом месте.
Надеемся, что это поможет устранить путаницу в процессе.
Процессор использует выделенный набор команд. Это возможно из-за этого, AES-NI. Это обеспечивает быстрое шифрование и дешифрование, или вы можете сказать, что это сокращает накладные расходы. Это быстро, потому что это аппаратная реализация, как объясняется здесь.
Вы можете проверить влияние на производительность здесь, и они того стоят для дополнительной безопасности.
Современные компьютеры могут выполнять миллиарды операций в секунду, поэтому меня не удивляет быстрота шифрования и дешифрования.
Вот как я бы интуитивно оценил скорость работы компьютеров:
- Делать вычисления в памяти (особенно в памяти L1 и L2), очень быстро
- Чтение из локального хранилища, менее быстрое (твердотельные диски быстрее, чем жесткие диски)
- Чтение из сети, еще менее быстрое.
Другой ключевой момент, который нужно понять, это то, что операционная система не нуждается в расшифровке всего жесткого диска для загрузки системы. Скорее операционная система знает, как дешифровать только те части жесткого диска, которые ей нужны, на лету, и то же самое касается записи.
Интуитивно, я не удивлен, что полное шифрование диска не сильно влияет на производительность, так как я считаю, что узким местом является диск.
Конечно, эти интуиции не всегда соответствуют действительности. Например, в действительности были случаи, когда полное шифрование диска вызывало заметное снижение производительности. Но обычно они решаются после того, как разработчики проходят несколько этапов разработки оптимизаций.