BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

AES, AES-NI, Intel Core i, LVM2, LUKS

BocaDePez
BocaDePez

Tengo un portátil al que recientemente le he podido activar el juego de instrucciones AES-NI mediante una BIOS modificada. Después de eso le he instalado un GNU/Linux, concretamente Ubuntu 11.10 con el CD Alternate sobre una partición cifrada con la opción aes-cbc-essiv:sha256 que he utilizado como base para un volumen físico LVM2 sobre el cual he creado dos volúmenes lógicos uno para el swap y otro para la raíz del sistema (así se evita que te pida contraseña por cada una de las particiones físicas que se emplearan en caso de no usar LVM2). Como debe ser, el /boot debe ir en una partición o volumen no cifrados para poder tener acceso al kernel y luego este ya se encarga de pedirte la contraseña para desbloquear el resto del sistema de archivos.

El problema que me encontré es que por defecto el proceso de arranque del núcleo Linux no carga los drivers que utilizan las instrucciones AES-NI por lo que todos los accesos de lectura/escritura a disco los descifraba y cifraba por software. Bueno pues para solucionar ese problema basta con añadir los módulos necesarios a un listado del initramfs situado en /etc/initramfs-tools/modules. Los módulos son los siguientes y se tienen que poner en el orden que los he escrito para no tener problemas de dependencias:

cryptd
aes_x86_64
aesni_intel

Con esto ya se cargarán los módulos que permiten hacer uso del hardware AES de los Intel Core i. Una vez arrancado el sistema y ya hecho login, si probáis a quitar los módulos veréis que no os deja por ya estar en uso. El módulo aes_x86_64 obviamente es para distros de 64 bits, en el caso de distros de 32 bits en principio no hace falta, basta sólo con el cryptd y el aesni_intel, no he encontrado ningún módulo que sea necesario:

lsinitramfs /boot/initrd.img-3.0.0-14-generic | grep crypt
lib/x86_64-linux-gnu/libgcrypt.so.11
lib/modules/3.0.0-14-generic/kernel/drivers/block/cryptoloop.ko
lib/modules/3.0.0-14-generic/kernel/drivers/md/dm-crypt.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/salsa20-x86_64.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/twofish-x86_64.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/aes-x86_64.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/3.0.0-14-generic/kernel/crypto
lib/modules/3.0.0-14-generic/kernel/crypto/algif_skcipher.ko
lib/modules/3.0.0-14-generic/kernel/crypto/lrw.ko
lib/modules/3.0.0-14-generic/kernel/crypto/xor.ko
lib/modules/3.0.0-14-generic/kernel/crypto/anubis.ko
lib/modules/3.0.0-14-generic/kernel/crypto/rmd320.ko
lib/modules/3.0.0-14-generic/kernel/crypto/twofish_common.ko
lib/modules/3.0.0-14-generic/kernel/crypto/camellia.ko
lib/modules/3.0.0-14-generic/kernel/crypto/michael_mic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/cast5.ko
lib/modules/3.0.0-14-generic/kernel/crypto/authenc.ko
lib/modules/3.0.0-14-generic/kernel/crypto/cast6.ko
lib/modules/3.0.0-14-generic/kernel/crypto/serpent.ko
lib/modules/3.0.0-14-generic/kernel/crypto/rmd128.ko
lib/modules/3.0.0-14-generic/kernel/crypto/rmd256.ko
lib/modules/3.0.0-14-generic/kernel/crypto/fcrypt.ko
lib/modules/3.0.0-14-generic/kernel/crypto/khazad.ko
lib/modules/3.0.0-14-generic/kernel/crypto/tcrypt.ko
lib/modules/3.0.0-14-generic/kernel/crypto/gf128mul.ko
lib/modules/3.0.0-14-generic/kernel/crypto/lzo.ko
lib/modules/3.0.0-14-generic/kernel/crypto/salsa20_generic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/zlib.ko
lib/modules/3.0.0-14-generic/kernel/crypto/arc4.ko
lib/modules/3.0.0-14-generic/kernel/crypto/xcbc.ko
lib/modules/3.0.0-14-generic/kernel/crypto/algif_hash.ko
lib/modules/3.0.0-14-generic/kernel/crypto/af_alg.ko
lib/modules/3.0.0-14-generic/kernel/crypto/seqiv.ko
lib/modules/3.0.0-14-generic/kernel/crypto/twofish_generic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/tea.ko
lib/modules/3.0.0-14-generic/kernel/crypto/pcrypt.ko
lib/modules/3.0.0-14-generic/kernel/crypto/deflate.ko
lib/modules/3.0.0-14-generic/kernel/crypto/ccm.ko
lib/modules/3.0.0-14-generic/kernel/crypto/vmac.ko
lib/modules/3.0.0-14-generic/kernel/crypto/md4.ko
lib/modules/3.0.0-14-generic/kernel/crypto/crypto_null.ko
lib/modules/3.0.0-14-generic/kernel/crypto/seed.ko
lib/modules/3.0.0-14-generic/kernel/crypto/des_generic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/cts.ko
lib/modules/3.0.0-14-generic/kernel/crypto/rmd160.ko
lib/modules/3.0.0-14-generic/kernel/crypto/ansi_cprng.ko
lib/modules/3.0.0-14-generic/kernel/crypto/xts.ko
lib/modules/3.0.0-14-generic/kernel/crypto/tgr192.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/async_tx.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/raid6test.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/async_xor.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/3.0.0-14-generic/kernel/crypto/async_tx/async_pq.ko
lib/modules/3.0.0-14-generic/kernel/crypto/pcbc.ko
lib/modules/3.0.0-14-generic/kernel/crypto/cryptd.ko
lib/modules/3.0.0-14-generic/kernel/crypto/ctr.ko
lib/modules/3.0.0-14-generic/kernel/crypto/ghash-generic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/sha512_generic.ko
lib/modules/3.0.0-14-generic/kernel/crypto/gcm.ko
lib/modules/3.0.0-14-generic/kernel/crypto/blowfish.ko
lib/modules/3.0.0-14-generic/kernel/crypto/wp512.ko
lib/modules/3.0.0-14-generic/kernel/crypto/authencesn.ko
lib/cryptsetup
lib/cryptsetup/askpass
scripts/local-bottom/cryptopensc
scripts/local-top/cryptroot
scripts/local-top/cryptopensc
conf/conf.d/cryptroot
sbin/cryptsetup

lsinitramfs /boot/initrd.img-3.0.0-14-generic | grep aes
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/aes-x86_64.ko
lib/modules/3.0.0-14-generic/kernel/arch/x86/crypto/aesni-intel.ko

Una vez modificado el archivo /etc/initramfs-tools/modules basta con actualizar la imagen con un update-initramfs -u con lo que os actualizará la imagen del kernel más reciente.

Después de esto ya podréis disfrutar de vuestro sistema de archivos cifrado a prueba de fisgones y con E/S acelerada por hardware. O eso creo, ya que todavía no he hecho medidas de rendimiento, pero el hecho de que no deje descargar el módulo por estar en uso es un indicativo cuando antes si lo cargabas con el sistema ya arrancado lo podías descargar sin ningún impedimento.

BocaDePez
BocaDePez

Muy bien... :D

A ver cuando le das una visual a Haiku: (link roto) haiku-os.org ;)