Hay tres componentes que debe comprender en cualquier uso de cifrado de bloque y se aplican explícitamente aquí:
- El bloque de cifrado primitivo. Esta podría ser una de sus claves familiares, candidatas a AES, como, bueno, AES, Serpiente, Twofish, Blowfish, ...
- El modo de operación. El uso de un cifrado de bloque tal como está, bloque por bloque se denomina libro de códigos electrónicos, pero existen otros modos, como el encadenamiento de bloque de cifrado y el modo de contador, con sus diversas ventajas y desventajas.
- El esquema de generación de vectores de inicialización, como essiv que combate varias técnicas de huellas dactilares disponibles a los atacantes contra CBC utilizados para el cifrado de disco.
Así que cuando eliges una opción, por ejemplo, aes-cbc-essiv
, en realidad está solicitando AES, que se usa en el modo CBC con IV cifrados en función de algún identificador por bloque, mientras que aes-xts-plain
usa AES en el modo XTS con IVs antiguos generados a partir de cierta información por bloque.
Se reduce a si confía en que XTS tenga suficiente resistencia al blanqueamiento (que ESSIV combate) incorporado al modo de cifrado. En esta etapa, XTS es un modo más moderno con más ventajas técnicas, pero se ha sometido a menos pruebas criptográficas que, por ejemplo, CBC.
Un punto a destacar con XTS, de wikipedia:
Debido a la división, los usuarios que deseen el cifrado AES 256 y AES 128 deberán elegir tamaños de clave de 512 bits y 256 bits respectivamente.
El cuidado debe ser elegido generando tamaños de clave con este modo de modo que cada bloque use una clave del tamaño de bit deseado. No he mirado la información de LUKS para ver cómo, o cryptsetup, divide sus claves; esto puede ser algo que desee hacer para asegurarse de que tiene el nivel de seguridad correcto que desea. Como tal, siguiendo su guía, se ha utilizado el cifrado de 256 bits por bloque (con la clave 512 dividida en dos partes).