Estoy usando arch linux con una partición raíz luks encriptada (arranque sin encriptar), con una frase de contraseña todavía.
Ahora tengo un archivo de claves (3072 bytes), que está escrito en una memoria USB de esta manera:
sudo dd if=tempKeyFile.bin of=/dev/sdd bs=512 seek=1 count=6
y también establecer como pase adicional
sudo cryptsetup luksAddKey /dev/sdb6 tempKeyFile.bin
Cuando abro la partición manualmente con:
sudo cryptsetup --key-file tempKeyFile.bin open /dev/sdb6 luks_root
todo funciona, la partición está mapeada y se puede montar.
Ahora mi línea de parámetros del kernel en grub.cfg
se parece a esto:
linux /vmlinuz-linux root=UUID=$UUID_OF_luks_root$ rw cryptdevice=UUID=$UUID_OF_sdb6$:luks_root cryptkey=/dev/sdd:1:6
Pero al arrancar me sale este error:
No key available with this passphrase.
Invalid Keyfile. Reverting to passphrase.
Ya probé el desplazamiento 2 en lugar de 1, pero el mismo resultado. Noté que no dice que el archivo de claves no se pudo encontrar/leer, pero era incorrecto.
Parece que hay poca documentación sobre esta forma de almacenar el archivo de claves luks. Arch-wiki lo menciona, pero muy brevemente y parece que estoy conforme, así que creo que debería ser posible.
en mi mkinitcpio.conf
MÓDULOS, BINARIOS y ARCHIVOS están vacíos y configuro:
HOOKS=(base udev autodetect keyboard modconf block encrypt filesystems fsck)
así que bloquear está justo antes de cifrar.
¿Cuál es el problema aquí?
Respuesta aceptada:
Desde el enlace de cifrado de ArchLinux (/lib/initcpio/hooks/encrypt
):
*)
# Read raw data from the block device
# ckarg1 is numeric: ckarg1=offset, ckarg2=length
dd if="$resolved" of="$ckeyfile" bs=1 skip="$ckarg1" count="$ckarg2" >/dev/null 2>&1
;;
Entonces, si bien admite la lectura de una clave desde un dispositivo de bloque sin formato, utiliza un tamaño de bloque de 1 (en lugar del 512 predeterminado), por lo que debe multiplicar sus valores por 512 para que funcione.
Entonces, en lugar de cryptkey=/dev/sdd:1:6
prueba cryptkey=/dev/sdd:512:3072
.