El cifrado de disco es un caso especial de protección de datos en reposo cuando el medio de almacenamiento es un dispositivo direccionable por sectores (por ejemplo, un disco duro). Este artículo presenta aspectos criptográficos del problema. Para obtener una descripción general, consulte cifrado de disco . Para conocer los diferentes paquetes de software y dispositivos de hardware dedicados a este problema, consulte software de cifrado de disco y hardware de cifrado de disco .
Los métodos de cifrado de disco tienen como objetivo proporcionar tres propiedades distintas:
La primera propiedad requiere definir un adversario del cual se mantienen confidenciales los datos. Los adversarios más fuertes estudiados en el campo del cifrado de discos tienen estas capacidades:
Un método proporciona una buena confidencialidad si la única información que dicho adversario puede determinar a lo largo del tiempo es si los datos de un sector han cambiado o no desde la última vez que miraron.
La segunda propiedad requiere dividir el disco en varios sectores , normalmente de 512 bytes (4096 bits) de longitud, que se cifran y descifran de forma independiente entre sí. A su vez, para que los datos sigan siendo confidenciales, el método de cifrado debe poder modificarse ; No deben procesarse dos sectores exactamente de la misma manera. De lo contrario, el adversario podría descifrar cualquier sector del disco copiándolo en un sector no utilizado del disco y solicitando su descifrado. Mientras que el propósito de un cifrado de bloque habitual es imitar una permutación aleatoria para cualquier clave secreta , el propósito del cifrado modificable es imitar una permutación aleatoria para cualquier clave secreta y cualquier ajuste conocido .
La tercera propiedad no suele ser controvertida. Sin embargo, indirectamente prohíbe el uso de cifrados de flujo , ya que los cifrados de flujo requieren, por su seguridad, que no se utilice dos veces el mismo estado inicial (que sería el caso si un sector se actualiza con datos diferentes); por lo tanto, esto requeriría un método de cifrado para almacenar estados iniciales separados para cada sector del disco, lo que aparentemente sería una pérdida de espacio. La alternativa, un cifrado de bloque , está limitado a un determinado tamaño de bloque (normalmente 128 o 256 bits). Debido a esto, el cifrado de disco estudia principalmente los modos de encadenamiento , que amplían la longitud del bloque de cifrado para cubrir un sector completo del disco . Las consideraciones ya enumeradas hacen que varios modos de encadenamiento conocidos sean inadecuados: el modo ECB , que no se puede modificar, y los modos que convierten cifrados de bloque en cifrados de flujo, como el modo CTR .
Estas tres propiedades no ofrecen ninguna garantía de integridad del disco; es decir, no le dicen si un adversario ha estado modificando su texto cifrado. En parte, esto se debe a que es imposible garantizar absolutamente la integridad del disco: pase lo que pase, un adversario siempre podría revertir todo el disco a un estado anterior, eludiendo dichas comprobaciones. Si se desea algún nivel no absoluto de integridad del disco, se puede lograr dentro del disco cifrado archivo por archivo utilizando códigos de autenticación de mensajes .
Los métodos de cifrado de disco también se distinguen en métodos de "bloque estrecho" y "bloque ancho". Para un texto sin formato del tamaño de un sector, el método de bloque estrecho lo cifra en varios bloques, mientras que el método de bloque ancho lo cifra en solo uno. Los métodos de bloque estrecho como LRW, XES y XTS permiten a un atacante explotar la granularidad del bloque para realizar análisis y reproducción del tráfico. [1] Lo ideal es que un cifrado de bloque ancho haga que todo el texto cifrado sea irreconocible para un cambio en cualquier parte del texto sin formato. [2]
Como la mayoría de los esquemas de cifrado, el cifrado de disco basado en cifrado de bloques utiliza modos de operación que permiten cifrar cantidades de datos mayores que el tamaño de bloque de los cifrados (normalmente 128 bits). Por lo tanto, los modos son reglas sobre cómo aplicar repetidamente las operaciones de bloque único de los cifrados.
El encadenamiento de bloques de cifrado (CBC) es un modo de encadenamiento común en el que el texto cifrado del bloque anterior se combina con el texto sin formato del bloque actual antes del cifrado:
Dado que no hay un "texto cifrado del bloque anterior" para el primer bloque, se debe utilizar un vector de inicialización (IV) como . Esto, a su vez, hace que el CBC sea modificable de alguna manera.
CBC sufre algunos problemas. Por ejemplo, si los IV son predecibles, entonces un adversario puede dejar una "marca de agua" en el disco, es decir, almacenar un archivo creado especialmente o una combinación de archivos identificables incluso después del cifrado. El método exacto para construir la marca de agua depende de la función exacta que proporciona los IV, pero la receta general es crear dos sectores cifrados con primeros bloques idénticos y ; estos dos luego están relacionados entre sí por . Por tanto, el cifrado de es idéntico al cifrado de , dejando una marca de agua en el disco. El patrón exacto de "igual-diferente-igual-diferente" en el disco puede modificarse para que la marca de agua sea única para un archivo determinado.
Para protegerse contra el ataque de marca de agua, se utiliza un cifrado o una función hash para generar los IV a partir de la clave y el número de sector actual, de modo que un adversario no pueda predecir los IV. En particular, el enfoque ESSIV utiliza un cifrado de bloque en modo CTR para generar los IV.
ESSIV [3] es un método para generar vectores de inicialización para el cifrado de bloques a utilizar en el cifrado de discos. Los métodos habituales para generar IV son secuencias predecibles de números basadas, por ejemplo, en la marca de tiempo o el número de sector, y permiten ciertos ataques, como un ataque de marca de agua . ESSIV previene tales ataques generando IV a partir de una combinación del número de sector SN con el hash de la clave. Es la combinación con la clave en forma de hash lo que hace que el IV sea impredecible.
ESSIV fue diseñado por Clemens Fruhwirth y se ha integrado en el kernel de Linux desde la versión 2.6.10, aunque se ha utilizado un esquema similar para generar IV para el cifrado de intercambio de OpenBSD desde 2000. [4]
ESSIV es compatible como opción con los sistemas de cifrado de disco dm-crypt [5] y FreeOTFE .
Si bien CBC (con o sin ESSIV) garantiza la confidencialidad, no garantiza la integridad de los datos cifrados. Si el adversario conoce el texto sin formato, es posible cambiar cada segundo bloque de texto sin formato a un valor elegido por el atacante, mientras que los bloques intermedios se cambian a valores aleatorios. Esto se puede utilizar para ataques prácticos al cifrado de disco en modo CBC o CBC-ESSIV. [6]
El cifrado de bloque estrecho modificable (LRW) [7] es una instancia del modo de operaciones introducido por Liskov, Rivest y Wagner [8] (ver Teorema 2). Este modo utiliza dos claves: es la clave para el cifrado de bloque y es una clave adicional del mismo tamaño que el bloque. Por ejemplo, para AES con una clave de 256 bits, es un número de 256 bits y es un número de 128 bits. El bloque de cifrado con índice lógico (modificación) utiliza la siguiente fórmula:
Aquí la multiplicación y la suma se realizan en el campo finito ( para AES). Con algunos cálculos previos, solo se requiere una única multiplicación por sector (tenga en cuenta que la suma en un campo binario finito es una simple suma bit a bit, también conocida como xor): , donde se calculan previamente para todos los valores posibles de . Este modo de operación necesita solo un cifrado por bloque y protege contra todos los ataques anteriores excepto una fuga menor: si el usuario cambia un solo bloque de texto sin formato en un sector, entonces solo cambia un único bloque de texto cifrado. (Tenga en cuenta que esta no es la misma fuga que tiene el modo ECB: con el modo LRW, textos sin formato iguales en diferentes posiciones se cifran en diferentes textos cifrados).
Existen algunos problemas de seguridad con LRW y este modo de operación ahora ha sido reemplazado por XTS.
BestCrypt emplea LRW y lo admite como opción para los sistemas de cifrado de disco dm-crypt y FreeOTFE .
Rogaway [9] diseñó otro modo de cifrado modificable, XEX ( xor–encrypt–xor ), para permitir el procesamiento eficiente de bloques consecutivos (con respecto al cifrado utilizado) dentro de una unidad de datos (por ejemplo, un sector de disco). El ajuste se representa como una combinación de la dirección del sector y el índice del bloque dentro del sector (el modo XEX original propuesto por Rogaway [9] permite varios índices). El texto cifrado, se obtiene usando:
dónde:
Las operaciones básicas del modo LRW (cifrado AES y multiplicación de campos Galois ) son las mismas que las utilizadas en el modo Galois/Contador (GCM), permitiendo así una implementación compacta del hardware universal LRW/XEX/GCM.
El XEX original tiene una debilidad. [10]
El robo de texto cifrado brinda soporte para sectores con un tamaño no divisible por el tamaño del bloque, por ejemplo, sectores de 520 bytes y bloques de 16 bytes. XTS-AES se estandarizó el 19 de diciembre de 2007 [11] como IEEE P1619 . [12] El estándar XTS requiere el uso de una clave diferente para el cifrado IV que para el cifrado en bloque; esto difiere de XEX que usa solo una clave. [9] [13] : 1–4 Como resultado, los usuarios que deseen cifrado AES -256 y AES-128 deben proporcionar 512 bits y 256 bits de clave respectivamente. Las dos claves (es decir, ambas mitades de la clave XTS) deben ser distintas para que XTS sea seguro para CCA, ya que XTS calcula la secuencia comenzando en ; esto difiere de XEX que comienza en . [9] : 7 [13] : 6
El 27 de enero de 2010, el NIST publicó la Publicación Especial (SP) 800-38E [14] en su forma final. SP 800-38E es una recomendación para el modo de operación XTS-AES, según lo estandarizado por IEEE Std 1619-2007, para módulos criptográficos. La publicación aprueba el modo XTS-AES del algoritmo AES con referencia al estándar IEEE 1619-2007, sujeto a un requisito adicional, que limita el tamaño máximo de cada unidad de datos cifrados (normalmente un sector o bloque de disco ) a 2 20 AES. bloques. Según SP 800-38E, "En ausencia de autenticación o control de acceso, XTS-AES proporciona más protección que otros modos aprobados de sólo confidencialidad contra la manipulación no autorizada de los datos cifrados".
XTS es compatible con BestCrypt , Botan , cgd de NetBSD , [15] dm-crypt , FreeOTFE , TrueCrypt , VeraCrypt , [16] DiskCryptor, geli de FreeBSD , software de cifrado de disco softraid OpenBSD , OpenSSL , Mac OS X Lion FileVault 2, BitLocker de Windows 10 [17] y wolfCrypt .
El modo XTS es susceptible a la manipulación y manipulación de datos, y las aplicaciones deben emplear medidas para detectar modificaciones de datos si la manipulación y la manipulación son una preocupación: "... dado que no hay etiquetas de autenticación , cualquier texto cifrado (original o modificado por el atacante) será descifrado como texto sin formato y no existe un mecanismo incorporado para detectar alteraciones. Lo mejor que se puede hacer es asegurarse de que cualquier alteración del texto cifrado aleatorizará completamente el texto sin formato y confiar en que la aplicación que utiliza esta transformación incluya suficiente redundancia. en su texto sin formato para detectar y descartar dichos textos sin formato aleatorios." Esto requeriría mantener sumas de verificación para todos los datos y metadatos en el disco, como se hace en ZFS o Btrfs . Sin embargo, en los sistemas de archivos de uso común, como ext4 y NTFS , solo los metadatos están protegidos contra la manipulación, mientras que la detección de manipulación de datos es inexistente. [18]
El modo es susceptible a ataques de análisis de tráfico, reproducción y aleatorización en sectores y bloques de 16 bytes. A medida que se reescribe un sector determinado, los atacantes pueden recopilar textos cifrados detallados (16 bytes), que pueden usarse para analizar o reproducir ataques (con una granularidad de 16 bytes). Sería posible definir cifrados de bloques para todo el sector, lamentablemente con un rendimiento degradado (ver más abajo). [1]
CMC y EME protegen incluso contra las fugas menores mencionadas anteriormente para LRW. Desafortunadamente, el precio es una doble degradación del rendimiento: cada bloque debe cifrarse dos veces; Muchos consideran que esto es un coste demasiado alto, ya que de todos modos la misma fuga a nivel sectorial es inevitable.
CMC, presentado por Halevi y Rogaway, significa CBC–mask–CBC: todo el sector se cifra en modo CBC (con ), el texto cifrado se enmascara mediante xoring con y se vuelve a cifrar en modo CBC a partir del último bloque. Cuando el cifrado de bloque subyacente es una permutación pseudoaleatoria (PRP) fuerte, entonces, a nivel de sector, el esquema es un PRP modificable. Un problema es que para descifrar uno debe pasar secuencialmente todos los datos dos veces.
Para resolver este problema, Halevi y Rogaway introdujeron una variante paralelizable llamada EME (BCE–máscara–BCE). Funciona de la siguiente manera:
Tenga en cuenta que, a diferencia de LRW y CMC, sólo existe una clave .
El SISWG consideró la estandarización de CMC y EME . EME está patentado y, por lo tanto, no se considera el modo principal admitido. [19]
La construcción HBSH (hash, cifrado de bloque, cifrado de flujo, hash), publicada por empleados de Google en 2018, permite utilizar un cifrado de flujo rápido en el cifrado de disco. El esquema Adiantum utilizado en dispositivos Android de gama baja elige específicamente NH , Estándar de cifrado avanzado de 256 bits (AES-256), ChaCha12 y Poly1305 . La construcción es modificable y de bloque ancho. Requiere tres pases sobre los datos, pero aún es más rápido que AES-128-XTS en un ARM Cortex-A7 (que no tiene un conjunto de instrucciones AES ). [20]
En 2023, Aldo Gunsing, Joan Daemen y Bart Mennink presentaron la construcción de "dos pisos", que también utiliza un cifrado de flujo. De nuevo es modificable y de bloque ancho. [2]
Mientras que el esquema de cifrado autenticado IAPM proporciona cifrado así como una etiqueta de autenticación, el componente de cifrado del modo IAPM describe completamente los esquemas LRW y XEX anteriores y, por lo tanto, XTS sin el aspecto de robo de texto cifrado . Esto se describe en detalle en las Figuras 8 y 5 de la patente estadounidense 6.963.976. [21]
{{cite journal}}
: Citar diario requiere |journal=
( ayuda ){{cite book}}
: |journal=
ignorado ( ayuda ){{cite journal}}
: Citar diario requiere |journal=
( ayuda ){{cite journal}}
: Citar diario requiere |journal=
( ayuda )CS1 maint: multiple names: authors list (link){{cite journal}}
: Citar diario requiere |journal=
( ayuda )