Abierto
Cerca

¿Cargadores de arranque de Linux que admiten cifrado de disco completo? Sistemas de cifrado de datos LUKS, EncFS y CryptoFS para Linux Cifrado de particiones de disco utilizando LUKS

En este artículo intentaré comparar el rendimiento de varios sistemas de cifrado en Linux. En teoría, por supuesto, se sabe qué sistema es más productivo y ha habido intentos de calcular el rendimiento de diferentes sistemas (). Truecrypt incluso contiene un punto de referencia incorporado (que, sin embargo, muestra el rendimiento de la RAM; sólo se puede utilizar para evaluar la velocidad de diferentes algoritmos de cifrado). Haré algo un poco diferente: mediré la velocidad de un sistema de archivos cifrado por diversos medios como porcentaje en comparación con un sistema de archivos normal no cifrado.


Cifraremos una partición separada en un disco duro separado, que no contiene el sistema de archivos raíz, utilizando el algoritmo utilizado por defecto en cada caso específico. Como usuario común, no entiendo los matices de los estándares de cifrado (por ejemplo, en qué se diferencia el hashing RIPEMD-160 de Whirpool, cuál de estos modos es más rápido, cuál proporciona una mayor protección), por lo que simplemente confiaremos en el hecho de que el Los fabricantes de cada producto de software han elegido configuraciones predeterminadas suficientemente criptográficas. Puede que esto no sea del todo correcto, ya que el rendimiento de diferentes algoritmos de cifrado no es el mismo. Si lo desea, por supuesto, puede cambiar el tipo de cifrado, pero no estoy seguro de que todos los productos probados tengan un conjunto de algoritmos absolutamente idéntico. Probaremos:

3) eCryptfs es el sistema predeterminado que se ofrece a los usuarios de Ubuntu para cifrar directorios personales, razón por la cual se incluye en esta prueba. Funciona sobre un sistema de archivos existente. Cifra cada archivo por separado, para que todos puedan ver los derechos, las fechas de modificación y la cantidad de archivos cifrados; De forma predeterminada, los nombres de los archivos también son visibles, aunque existe una opción para cifrarlos. El producto más ineficaz del grupo.

4) EncFS es un análogo aproximado de eCryptfs, pero usa FUSE.

Entonces, para las pruebas, se asignó una máquina separada de edad bastante avanzada en la siguiente configuración: CPU - Intel Celeron 2000Mhz, RAM - 512 Mb DDR PC2700, HDD del sistema - WD Caviar SE 5400 RPM 80Gb, HDD de prueba - WD Caviar SE 7200 RPM 80Gb.
SO: Ubuntu 12.04 LTS, versiones de todo el software actuales para los repositorios de este sistema operativo al momento de escribir este artículo (Truecrypt 7.1a-linux-x86 no de los repositorios).

Probaremos el sistema de archivos ext4 predeterminado para la mayoría de las distribuciones. Para probar el rendimiento, usaremos la utilidad iozone3 y un script de shell escrito "en la rodilla" para medir la diferencia porcentual en las pruebas.

Guión para contar. No se prestó especial atención a la pureza del código; el único criterio a la hora de escribirlo era la presencia del resultado correcto.

#!/bin/sh gendifffile () ( #el procedimiento genera un archivo que es conveniente para analizar. En primer lugar, las líneas #no sujetas a análisis se truncan; en segundo lugar, los dos primeros números de cada línea se truncan, indicando #el tamaño del archivo y el tamaño del registro, respectivamente; en tercer lugar, el archivo completo se genera línea por línea - #un resultado de prueba por línea cat $1 mientras se lee grep "^[[:space:]]*[[:digit:]]" | "(para (i=3;yo)<=NF;i++) {print $i}}" done > > $2 ) getline () ( #procedure imprime el número de línea $2 del archivo $1 head -n $2 "$1" | tail -n 1 ) compare () ( #procedure compara los archivos $1 y $2 línea por línea, calculando la diferencia porcentual de cada uno par de pruebas # luego calcula el promedio aritmético de cuánto por ciento es más rápido o más lento # el archivo que contiene el primer grupo de pruebas que el archivo que contiene el segundo grupo P=0 MAX=0 L1=`cat "$1" # | número de pruebas en el archivo L2=`cat "$2" | wc -l` if [ $L1 -ne $L2 ] entonces #si los archivos contienen diferentes números de pruebas, entonces no los compararemos echo error return fi PASO =$(($L1*5/100)) J=0 para I en `seq 1 $L1`; hacer J=$(($J+1)) si [ $J -eq $STEP ]; 0 echo "$((100*$I/$ L1))% completado ($I de $L1)" fi A=`getline "$1" $I` B=`getline "$2" $I` if [ `echo $A \> $B|bc -l` - eq 1 ]; entonces D=`echo "100-($B*100/$A)"|bc -l` si [ `echo $D \> $MAX| bc -l` -eq "1" ]; MAX=$D dormir 5 fi else D=`echo "100-($A*100/$B)"|bc -l` if [ `echo $D \> $ MAX| bc -l` -eq "1" ]; entonces MAX=$D sleep 5 fi D="-$D" #si el valor tiene un signo "-", entonces esta prueba se ejecutó más rápido #en el segundo archivo , no en el primer fi P=`echo "$P+ $D"| bc -l` hecho P=`echo $P/$L1| bc -l` #calcular la media aritmética echo PERCENT=$P MAX_PERCENT=$MAX ) genaverage () ( #procedimiento para generar un archivo preparado para el análisis, cada línea del cual es #la media aritmética de las líneas correspondientes de todos los archivos de informes ubicado en el directorio analizado AVG=` mktemp` F=`ls "$1"|wc -l` #número de archivos con informes en un directorio determinado #siempre que solo dichos archivos se almacenen allí y nada más #no verificaremos el exactitud de esta suposición if [ -d " $1" -o $F -lt 2 ]; entonces echo error >/dev/stderr #en este procedimiento enviaremos todos los mensajes a stderr, ya que #stdout se sustituye en otro procedimiento rm - f $AVG salir fi TMP=` mktemp` buscar "$1" -escriba f| mientras lee ARCHIVO; haga #para cada archivo de informe de iozone ubicado en el directorio especificado I=`mktemp` #generar un archivo temporal preparado para el análisis gendifffile "$ FILE" "$I" #names escribe todos esos archivos en "TMP" línea por línea echo "$I">>$TMP done L=`cat \`getline "$TMP" 1\`|wc -l` cat " $TMP"| mientras lee LÍNEA; hacer #algunas comprobaciones no vendrían mal L1=`cat "$LINE"| wc -l` #¿todos los archivos contienen la misma cantidad de pruebas if [ $L -ne $L1 ]; luego eco error >/dev/stderr salir fi hecho PASO=$(($L*5/100)) J=0 para I en `seq 1 $L`; hacer J=$(($J+1)) si [ $J -eq $PASO ]; entonces J=0 echo "$((100*$I/$L))% completado ($I de $L)" >/dev/stderr fi SUMFILE=`mktemp` #de esta manera obtengo el valor de la variable SUM del bucle anidado SUM=0 cat "$TMP"| mientras lee LÍNEA; hacer SUM=$((`getline "$LINE" $I`+$SUM)) echo $SUM > "$SUMFILE" hecho echo `tail -n 1 "$SUMFILE"`/$F|bc -l >> $ AVG #obtiene el promedio aritmético #y escríbelo en el lugar apropiado del archivo AVG rm -f "$SUMFILE" done cat "$TMP"| mientras lee LÍNEA; hacer #eliminar archivos temporales rm -f "$LINE" hecho rm -f "$TMP" echo $AVG ) printf %b "\\033)