Пароль LUKS правильный, но не принимается.

Вопрос или проблема

Я пытаюсь установить Kali на ноутбук, что обычно несложно. Однако на этом устройстве установщик Kali выдает ошибку при записи изменений в разделах на диск по какой-то причине. Ранее я смог обойти эту проблему, вручную разбив диск на разделы с помощью fdisk. Kali работала отлично. Однако мне не хватало шифрования диска. Поэтому я стер диск и решил вручную разбить его на разделы и настроить Kali с шифрованием LUKS.

Я нашел статью, которую смог следовать с небольшими отклонениями
https://devconnected.com/how-to-encrypt-root-filesystem-on-linux/
Схема разделов, которую я в итоге получил, выглядит следующим образом

Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: WDC WD5000LPVX-7
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: C6EB1185-05CF-4E8D-ABAC-1376C75628F8

Device       Start       End   Sectors   Size Type
/dev/sda1     2048   1953791   1951744   953M Linux filesystem
/dev/sda2  1953792   3907583   1953792   954M EFI System
/dev/sda3  3907584 976773119 972865536 463.9G Linux filesystem

С sda1 в качестве /boot (нужно из-за BIOS legacy boot), sda2 в качестве /boot/efi и sda3 как корневой зашифрованной файловой системы. Эта схема работала для незашифрованной установки Kali, так что все, что мне нужно было — это настроить LUKS.

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

$ lsblk                      
NAME               MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
sda                  8:0    0 465.8G  0 disk  
├─sda1               8:1    0   953M  0 part  
├─sda2               8:2    0   954M  0 part  
└─sda3               8:3    0 463.9G  0 part  
  └─crypto         254:0    0 463.9G  0 crypt 
    ├─cryptVG-swap 254:1    0     2G  0 lvm   
    └─cryptVG-root 254:2    0 461.9G  0 lvm

Я запускаю Kali на live USB для настройки жесткого диска ноутбука, и статья описывает перенос существующей установки ОС на зашифрованную установку. Я не могу rsync файлы живого носителя так, чтобы ОС работала как настоящая (не живая) установка, поэтому я просто использовал установщик Kali, чтобы записать установку на USB, как будто это был жесткий диск (не знаю, почему установщик записывает разделы нормально на USB, но не на мой диск, но ладно). Затем я смог смонтировать оба и синхронизировать корневую файловую систему USB на мой зашифрованный диск. Это, казалось, работало как по маслу.

Я также смог переустановить grub, как указано, без особых проблем, после небольшого изменения в этом разделе. В основном я использовал --rbind при монтировании /dev перед chroot, чтобы избежать ошибки sudo, и мне также нужно было монтировать/привязывать proc перед chroot. После успешного chroot я все равно получил ошибку, заявляющую, что имя хоста “kali” не может быть разрешено в любом случае, когда я запускал sudo, но это, похоже, не повлияло на команды, которые я выполнял, поэтому я игнорировал это.

Моя настройка grub выглядела следующим образом:

UUIDs

$ lsblk -f
NAME FSTYPE FSVER LABEL     UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                               
├─sda1
│    vfat   FAT32           9080-831D                                             
├─sda2
│    vfat   FAT32           345D-5BB8                                             
└─sda3
     crypto 2               f0b2bee7-9566-4178-9a3a-6ffee87482df                  
  └─crypto
     LVM2_m LVM2            6t1L5r-GdTD-Fda4-A3D7-OjMI-DiI9-mKM76J                
    ├─cryptVG-swap
    │  swap   1               9d7471b5-cd00-477b-a599-48517194122c                  
    └─cryptVG-root
       ext4   1.0             740ca216-99a9-46ee-a2c2-fa2dbde2ccb7    417.1G     3% /mnt

/etc/fstab

$ cat /mnt/etc/fstab 
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# root
UUID=740ca216-99a9-46ee-a2c2-fa2dbde2ccb7 /               ext4    errors=remount-ro 0       1
# efi
UUID=345D-5BB8  /boot/efi       vfat    umask=0077      0       1
# swap
UUID=9d7471b5-cd00-477b-a599-48517194122c none            swap    sw              0       0

/etc/crypttab

$ cat /mnt/etc/crypttab 
# <target name> <source device>     <key file>  <options>
crypt UUID=f0b2bee7-9566-4178-9a3a-6ffee87482df none luks

Судя по этим конфигурациям, кажется, что я должен быть в состоянии нормально загрузиться в ОС. Я правильно указал UUID, насколько я могу судить, и grub stage 1 установлена правильно, потому что он запрашивает у меня пароль для разблокировки устройства. Однако, хотя я могу разблокировать /dev/sda3 с помощью моего пароля, используя cryptsetup luksOpen /dev/sda3 crypto, при вводе этого же пароля на экране загрузки я получаю сообщение об ошибке неверного пароля.

При загрузке в sda я вижу

Enter passphrase for hd0,gpt3 (f0b2bee7-9566-4178-9a3a-6ffee87482df):

И при вводе правильного пароля он сразу выводит

error: Invalid passphrase
error: no such cryptodisk found
error: disk `lvmid/kJKtcZ-eQPE-zpEE-r5hz-MWlz-WdzV-hg2lMF/GAVDs1-caOS-pBlM-bQsb-MDyN-2LdM-nyQveG' not found
grub rescue>

Почему grub не может разблокировать мой LUKS-диск, в то время как cryptsetup может? Как я могу исправить grub, чтобы он мог?

Я понимаю, что это технически проблема XY, но я пытался решить X (ошибка установщика Kali) без успеха, поскольку, кажется, никто другой не имеет моей проблемы, и я так близок к решению Y, что думаю, что это не имеет значения. Плюс я хочу узнать больше о grub.

Edit: luksDump информация

$ sudo cryptsetup luksDump /dev/sda3
LUKS header information
Version:        2
Epoch:          3
Metadata area:  16384 [bytes]
Keyslots area:  16744448 [bytes]
UUID:           f0b2bee7-9566-4178-9a3a-6ffee87482df
Label:          (no label)
Subsystem:      (no subsystem)
Flags:          (no flags)

Data segments:
  0: crypt
    offset: 16777216 [bytes]
    length: (whole device)
    cipher: aes-xts-plain64
    sector: 4096 [bytes]

Keyslots:
  0: luks2
    Key:        512 bits
    Priority:   normal
    Cipher:     aes-xts-plain64
    Cipher key: 512 bits
    PBKDF:      argon2id
    Time cost:  4
    Memory:     1048576
    Threads:    4
    Salt:       73 ... 12 
    AF stripes: 4000
    AF hash:    sha256
    Area offset:32768 [bytes]
    Area length:258048 [bytes]
    Digest ID:  0
Tokens:
Digests:
  0: pbkdf2
    Hash:       sha256
    Iterations: 77101
    Salt:       c2 ... 80 
    Digest:     c7 ... 43

GRUB 2.12 не поддерживает расшифровку ключевого слота ARGON2ID; он сразу сообщит о неверном пароле, тогда как обычно GRUB занимает некоторое время для расшифровки (из-за того, что SSE-регистр отключены в GRUB). Преобразуйте его в формат PBKDF2:

cryptsetup luksConvertKey --pbkdf pbkdf2 <device>

источник: ответ на Reddit

Ответ или решение

Проблема, с которой вы столкнулись, связана с невозможностью загрузчика GRUB 2.12 успешно расшифровать LUKS-том, который вы создали с использованием PBKDF (Password-Based Key Derivation Function) Argon2id. Это связано с тем, что на текущий момент GRUB не поддерживает данный алгоритм шифрования, в отличие от Cryptsetup, который успешно справляется с данной задачей. Далее попробуем глубже рассмотреть суть проблемы и предложим возможные пути её решения.

Теоретическое обоснование

Важной частью процесса шифрования дисков является использование сильной криптографии для защиты данных. In LUKS ver. 2 появилась возможность использования новых, более защищенных алгоритмов, таких как Argon2id для PBKDF, которые значительно увеличивают безопасность, особенно против атак, использующих мощные вычислительные ресурсы для подбора пароля (например, атаки методом перебора).

Argon2id — это современный алгоритм, который обеспечивает не только надёжность за счёт использования временных и памяти затратных операций, но и устойчивое распределение ключей. Однако, как оказалось, данное преимущество оборачивается проблемой для GRUB, который пока не поддерживает этот богатый функционал.

Пример

Ваш опыт прекрасно иллюстрирует данную проблему. Процесс шифрования вы организовали с использованием Cryptsetup, инструмента, который может легко справляться с новыми алгоритмами PBKDF, включая Argon2id. Тем не менее, GRUB, используемый в вашем сетапе, не может прочитать заголовок, которому требуется такая обработка перед расшифровкой, и поэтому просто отвечает ошибкой "Invalid passphrase".

Ваш текущий LUKS конфиг с Argon2id выглядит следующим образом:

$ sudo cryptsetup luksDump /dev/sda3
LUKS header information
Version: 2
...
PBKDF: argon2id
...
Key: 512 bits
Cipher: aes-xts-plain64

Применение

Основное решение для обхода проблемы — это использование более совместимого алгоритма PBKDF. В вашем случае, вместо Argon2id лучше использовать старый, но поддерживаемый GRUB метод — PBKDF2. Для этого вам необходимо преобразовать ключевой слот LUKS, использующий Argon2id, в формат PBKDF2:

cryptsetup luksConvertKey --pbkdf pbkdf2 /dev/sda3

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

Дополнительно, стоит учесть, что:

  1. Резервное копирование: Перед трансформацией всегда создавайте резервные копии важной информации, чтобы избежать потери данных в случае ошибок в процессе преобразования.
  2. Обновление ПО: Проверьте наличие обновлений под GRUB и используемую вами ОС, чтобы в дальнейшем минимизировать такие несовместимости. Возьмите за правило использовать новые версии программного обеспечения, которые могли уже получить поддержку новых стандартов шифрования.

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

Оцените материал
Добавить комментарий

Капча загружается...