Можно ли использовать ecryptfs-setup-private для использования 256-битного ключа AES (вместо 128-битной длины ключа по умолчанию)?

ecryptfs-setup-private по умолчанию будет использовать 128-битный ключ AES.

Могу ли я использовать 256-битный ключ (длина ключа 32 байта)?

Конечно, я мог бы выполнить весь процесс вручную, как описано здесь: https://wiki.archlinux.org/index.php/System_Encryption_with_eCryptfs#Setup_.28in_detail.29

Но я хочу иметь удобство использования простых в использовании инструментов ecryptfs, но только с более сильным ключом шифрования.

Я попытался изменить / usr / bin / ecryptfs-setup-private (с изменением KEYBYTES = "16" на KEYBYTES = "32" внутри), но процесс создания приватных / .Private-каталогов не удастся.

Короткий ответ – нет'. Когда я писал ecryptfs-setup-private , я выбрал набор значений по умолчанию для eCryptfs, которые я считал разумными, безопасными и поддерживаемыми для миллионов пользователей Ubuntu, которые не заботятся о настройках в долгосрочной перспективе. Это ограничило количество комбинаций конфигурации, которые мы должны были тестировать и поддерживать.

Как вы уже отметили, eCryptfs очень настраивается, если вы читаете документы и монтируете вручную, а функция Ubuntu Encrypted Private / Home имеет согласованный набор параметров во всем мире.

Более того, Брюс Шнайер рекомендовал использовать AES256 в пользу AES128:

А для новых приложений я предлагаю, чтобы люди не использовали AES-256. AES-128 обеспечивает более чем достаточно запаса безопасности в обозримом будущем.

Ну, длинный ответ может быть «да, но имейте в виду потерять совместимость с 16-байтовыми закодированными каталогами».

Применяя следующий патч к последним источникам ecryptfs-utils-104, необходимо выполнить эту работу, однако он просто меняет значение hardcoded на 32 без возможности выбора. Но если это кому-то полезно:

diff -ruN ecryptfs-utils-104/README ecryptfs-utils-104-32byte/README --- ecryptfs-utils-104/README 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/README 2015-01-23 05:43:43.206773596 +0100 @@ -278,13 +278,13 @@ You should get something like this: --- -/secret /secret ecryptfs rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0 +/secret /secret ecryptfs rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=32,ecryptfs_cipher=aes 0 0 --- Add ``user'' and ``noauto'' to the mount options: --- -/secret /secret ecryptfs user,noauto,rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=16,ecryptfs_cipher=aes 0 0 +/secret /secret ecryptfs user,noauto,rw,ecryptfs_sig=deadbeefdeadbeef,ecryptfs_key_bytes=32,ecryptfs_cipher=aes 0 0 --- Append your edited line to your /etc/fstab file. Now it's time to test diff -ruN ecryptfs-utils-104/doc/manpage/mount.ecryptfs_private.1 ecryptfs-utils-104-32byte/doc/manpage/mount.ecryptfs_private.1 --- ecryptfs-utils-104/doc/manpage/mount.ecryptfs_private.1 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/doc/manpage/mount.ecryptfs_private.1 2015-01-23 05:43:43.206773596 +0100 @@ -29,7 +29,7 @@ - mount SOURCE onto DESTINATION - as an ecryptfs filesystem - using the AES cipher - - with a key length of 16 bytes + - with a key length of 32 bytes - using the passphrase whose signature is in ~/.ecryptfs/Private.sig The only setuid operation in this program is the call to \fBmount\fP(8) or \fBumount\fP(8). diff -ruN ecryptfs-utils-104/src/include/ecryptfs.h ecryptfs-utils-104-32byte/src/include/ecryptfs.h --- ecryptfs-utils-104/src/include/ecryptfs.h 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/src/include/ecryptfs.h 2015-01-23 05:43:43.207773542 +0100 @@ -144,7 +144,7 @@ #define ECRYPTFS_ECHO_OFF 0 #define ECRYPTFS_AES_BLOCK_SIZE 16 -#define ECRYPTFS_AES_KEY_BYTES 16 +#define ECRYPTFS_AES_KEY_BYTES 32 #define ECRYPTFS_DEFAULT_WRAPPED_PASSPHRASE_FILENAME "wrapped-passphrase" diff -ruN ecryptfs-utils-104/src/utils/ecryptfs-recover-private ecryptfs-utils-104-32byte/src/utils/ecryptfs-recover-private --- ecryptfs-utils-104/src/utils/ecryptfs-recover-private 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/src/utils/ecryptfs-recover-private 2015-01-23 05:43:43.207773542 +0100 @@ -101,12 +101,12 @@ 1) mount_sig=$(echo "$sigs" | head -n1) fnek_sig= - mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=16" + mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=32" ;; 2) mount_sig=$(echo "$sigs" | head -n1) fnek_sig=$(echo "$sigs" | tail -n1) - mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_fnek_sig=$fnek_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=16" + mount_opts="$opts,ecryptfs_sig=$mount_sig,ecryptfs_fnek_sig=$fnek_sig,ecryptfs_cipher=aes,ecryptfs_key_bytes=32" ;; *) continue diff -ruN ecryptfs-utils-104/src/utils/ecryptfs-setup-private ecryptfs-utils-104-32byte/src/utils/ecryptfs-setup-private --- ecryptfs-utils-104/src/utils/ecryptfs-setup-private 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/src/utils/ecryptfs-setup-private 2015-01-23 05:43:43.208773488 +0100 @@ -13,7 +13,8 @@ TEXTDOMAIN="ecryptfs-utils" MESSAGE="$(gettext 'Enter your login passphrase')" CIPHER="aes" -KEYBYTES="16" +KEYBYTES="32" +SIGBYTES="16" FNEK= # Zero out user-defined GREP_OPTIONS, such as --line-number @@ -97,7 +98,8 @@ bytes=$1 # Pull $1 of random data from /dev/urandom, # and convert to a string of hex digits - od -x -N $bytes --width=$bytes /dev/urandom | head -n 1 | sed "s/^0000000//" | sed "s/\s*//g" + # od -x -N $bytes --width=$bytes /dev/urandom | head -n 1 | sed "s/^0000000//" | sed "s/\s*//g" + dd if=/dev/urandom bs=$[$bytes*3/2] count=1 status=none | base64 } filename_encryption_available() { @@ -393,7 +395,7 @@ error "$(gettext 'Could not add passphrase to the current keyring')" fi sig=`echo "$response" | grep "Inserted auth tok" | sed "s/^.*\[//" | sed "s/\].*$//"` -if ! echo "$sig" | egrep -qs "^[0-9a-fA-F]{$KEYBYTES,$KEYBYTES}$"; then +if ! echo "$sig" | egrep -qs "^[0-9a-fA-F]{$SIGBYTES,$SIGBYTES}$"; then error "$(gettext 'Could not obtain the key signature')" fi temp=`mktemp` diff -ruN ecryptfs-utils-104/src/utils/mount.ecryptfs_private.c ecryptfs-utils-104-32byte/src/utils/mount.ecryptfs_private.c --- ecryptfs-utils-104/src/utils/mount.ecryptfs_private.c 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/src/utils/mount.ecryptfs_private.c 2015-01-23 05:43:43.208773488 +0100 @@ -47,7 +47,8 @@ * by the system administrator (or user?) at run time. For now, these are set * to reasonable values to reduce the burden of input validation. */ -#define KEY_BYTES 16 +#define SIG_BYTES 16 +#define KEY_BYTES 32 #define KEY_CIPHER "aes" #define FSTYPE "ecryptfs" #define TMP "/dev/shm" @@ -159,13 +160,13 @@ sig[0] = NULL; sig[1] = NULL; for (i=0; i<2; i++) { - if ((sig[i] = (char *)malloc(KEY_BYTES*sizeof(char)+2)) == NULL) { + if ((sig[i] = (char *)malloc(SIG_BYTES*sizeof(char)+2)) == NULL) { perror("malloc"); goto err; } - memset(sig[i], '\0', KEY_BYTES+2); - /* Read KEY_BYTES characters from line */ - if (fgets(sig[i], KEY_BYTES+2, fh) == NULL) { + memset(sig[i], '\0', SIG_BYTES+2); + /* Read SIG_BYTES characters from line */ + if (fgets(sig[i], SIG_BYTES+2, fh) == NULL) { if (i == 0) { fputs("Missing file encryption signature", stderr); goto err; @@ -187,7 +188,7 @@ sig[i][j] = '\0'; } } - if (strlen(sig[i]) > 0 && strlen(sig[i]) != KEY_BYTES) { + if (strlen(sig[i]) > 0 && strlen(sig[i]) != SIG_BYTES) { fputs("Invalid hex signature length\n", stderr); goto err; } @@ -489,7 +490,7 @@ * - mounts ~/.Private onto ~/Private * - as an ecryptfs filesystem * - using the AES cipher - * - with a key length of 16 bytes + * - with a key length of 32 bytes * - and using the signature defined in ~/.ecryptfs/Private.sig * - ONLY IF the user * - has the signature's key in his keyring diff -ruN ecryptfs-utils-104/tests/lib/etl_funcs.sh ecryptfs-utils-104-32byte/tests/lib/etl_funcs.sh --- ecryptfs-utils-104/tests/lib/etl_funcs.sh 2014-01-23 19:09:48.000000000 +0100 +++ ecryptfs-utils-104-32byte/tests/lib/etl_funcs.sh 2015-01-23 05:43:43.209773433 +0100 @@ -32,7 +32,7 @@ default_ext2_opts="user_xattr,acl" default_ext3_opts="user_xattr,acl,commit=600,barrier=1,data=ordered" default_btrfs_opts="nodatacow" -default_mount_opts="rw,relatime,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_sig=\${ETL_FEKEK_SIG}" +default_mount_opts="rw,relatime,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_sig=\${ETL_FEKEK_SIG}" default_fne_mount_opts="${default_mount_opts},ecryptfs_fnek_sig=\${ETL_FNEK_SIG}"