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 los aspectos criptográficos del problema. Para obtener una descripción general, consulte cifrado de disco . Para obtener información sobre 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 mantendrá la confidencialidad de 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 un adversario puede determinar a lo largo del tiempo es si los datos de un sector han cambiado o no desde la última vez que los miró.
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, si se quiere que los datos sigan siendo confidenciales, el método de cifrado debe ser modificable ; no se deben procesar dos sectores exactamente de la misma forma. 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 modificación conocida .
La tercera propiedad no suele ser controvertida, pero prohíbe indirectamente el uso de cifrados de flujo , ya que estos requieren, para su seguridad, que el mismo estado inicial no se utilice dos veces (lo que ocurriría 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 parece un desperdicio de espacio. La alternativa, un cifrado de bloque , está limitado a un cierto 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 todo un sector del disco . Las consideraciones ya enumeradas hacen que varios modos de encadenamiento conocidos no sean adecuados: el modo ECB , que no se puede modificar, y los modos que convierten los 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 indican si un adversario ha estado modificando su texto cifrado. En parte, esto se debe a que es imposible garantizar de manera absoluta la integridad del disco: pase lo que pase, un adversario siempre podría revertir todo el disco a un estado anterior, evitando cualquier comprobación de este tipo. Si se desea un 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 .
Aunque antes se aceptaba comúnmente que el cifrado de discos debía preservar la longitud, algunas características adicionales justifican el uso de espacio adicional. Un ejemplo es el cifrado autenticado , que ocupa espacio adicional a cambio de garantizar la integridad del sector. Una aplicación de esta garantía sería evitar que un atacante provoque errores en el núcleo al romper el sistema de archivos. [1]
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 un método de bloque ancho lo hace en uno solo. Los métodos de bloque estrecho como LRW, XES y XTS permiten a un atacante explotar la granularidad del bloque para realizar análisis de tráfico y reproducción. [2] Un cifrado de bloque ancho idealmente hace que todo el texto cifrado sea irreconocible para un cambio en cualquier parte del texto sin formato. [3]
Al igual que 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 cifrados (CBC) es un modo de encadenamiento común en el que el texto cifrado del bloque anterior se codifica con el texto sin formato del bloque actual antes del cifrado:
Dado que no existe 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 algunas maneras.
El CBC presenta 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 proporcionen los IV, pero la receta general es crear dos sectores cifrados con primeros bloques idénticos y ; estos dos se relacionan entre sí mediante . Por lo tanto, el cifrado de es idéntico al cifrado de , lo que deja una marca de agua en el disco. El patrón exacto de "igual-diferente-igual-diferente" en el disco se puede alterar para hacer 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 bloques en modo CTR para generar los IV.
ESSIV es un método para generar vectores de inicialización para el cifrado de bloques que se utilizará en el cifrado de discos. Los métodos habituales para generar IV son secuencias predecibles de números basados, 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 evita 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. [4] [5]
ESSIV fue diseñado por Clemens Fruhwirth y ha sido integrado en el kernel de Linux desde la versión 2.6.10, aunque se ha utilizado un esquema similar para generar IVs para el cifrado de intercambio de OpenBSD desde 2000. [6]
ESSIV es compatible como una opción con los sistemas de cifrado de disco dm-crypt [7] y FreeOTFE .
Si bien el CBC (con o sin ESSIV) garantiza la confidencialidad, no garantiza la integridad de los datos cifrados. Si el adversario conoce el texto simple, es posible cambiar cada segundo bloque de texto simple 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 discos en modo CBC o CBC-ESSIV. [8]
El cifrado de bloque estrecho modificable (LRW) [9] es una instancia del modo de operaciones introducido por Liskov, Rivest y Wagner [10] (véase el 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 cifrado de bloque con índice lógico (tweak) utiliza la siguiente fórmula:
Aquí, la multiplicación y la suma se realizan en el campo finito ( para AES). Con un poco de precomputación, solo se requiere una única multiplicación por sector (tenga en cuenta que la suma en un campo finito binario es una simple suma bit a bit, también conocida como xor): , donde se precalculan para todos los valores posibles de . Este modo de operación solo necesita un único cifrado por bloque y protege contra todos los ataques anteriores, excepto una pequeña fuga: si el usuario cambia un solo bloque de texto sin formato en un sector, entonces solo cambia un solo bloque de texto cifrado. (Tenga en cuenta que esta no es la misma fuga que tiene el modo ECB: con el modo LRW, los 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 utiliza LRW y lo admite como opción para los sistemas de cifrado de discos dm-crypt y FreeOTFE .
Otro modo de cifrado modificable, XEX ( xor–encrypt–xor ), fue diseñado por Rogaway [11] 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 [11] permite varios índices). El texto cifrado, , se obtiene utilizando:
dónde:
Las operaciones básicas del modo LRW (cifrado AES y multiplicación del campo de Galois ) son las mismas que las utilizadas en el modo Galois/Contador (GCM), lo que permite una implementación compacta del hardware universal LRW/XEX/GCM.
El XEX original tiene una debilidad. [12]
El robo de texto cifrado proporciona 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 [13] como IEEE P1619 . [14] El estándar XTS requiere el uso de una clave diferente para el cifrado IV que para el cifrado de bloques; esto difiere de XEX que utiliza solo una clave única. [11] [15] : 1–4 Como resultado, los usuarios que desean 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 CCA-seguro, ya que XTS calcula la secuencia que comienza en ; esto difiere de XEX que comienza en . [11] : 7 [15] : 6
El 27 de enero de 2010, el NIST publicó la Publicación Especial (SP) 800-38E [16] en su forma final. La SP 800-38E es una recomendación para el modo de operación XTS-AES, estandarizado por la norma IEEE Std 1619-2007, para módulos criptográficos. La publicación aprueba el modo XTS-AES del algoritmo AES por referencia a la norma IEEE Std 1619-2007, sujeto a un requisito adicional, que limita el tamaño máximo de cada unidad de datos encriptados (normalmente un sector o bloque de disco ) a 2 20 bloques AES. Según la SP 800-38E, "En ausencia de autenticación o control de acceso, XTS-AES proporciona más protección que los otros modos de confidencialidad aprobados contra la manipulación no autorizada de los datos encriptados".
XTS es compatible con BestCrypt , Botan , cgd de NetBSD , [17] dm-crypt , FreeOTFE , TrueCrypt , VeraCrypt , [18] DiskCryptor, geli de FreeBSD , el software de cifrado de disco softraid de OpenBSD , OpenSSL , FileVault 2 de Mac OS X Lion , BitLocker de Windows 10 [19] y wolfCrypt .
El modo XTS es susceptible a la manipulación y alteración de datos, y las aplicaciones deben emplear medidas para detectar modificaciones de datos si la manipulación y alteración son una preocupación: "... dado que no hay etiquetas de autenticación , cualquier texto cifrado (original o modificado por el atacante) se descifrará como un texto simple y no hay un mecanismo integrado para detectar alteraciones. Lo mejor que se puede hacer es garantizar que cualquier alteración del texto cifrado aleatorizará completamente el texto simple, y confiar en que la aplicación que utiliza esta transformación incluya suficiente redundancia en su texto simple para detectar y descartar dichos textos simples aleatorios". Esto requeriría mantener sumas de comprobació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 la manipulación de datos es inexistente. [20]
El modo es susceptible a ataques de análisis de tráfico, repetició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 de grano fino (16 bytes), que pueden usarse para ataques de análisis o repetición (con una granularidad de 16 bytes). Sería posible definir cifrados de bloque para todo el sector, lamentablemente con un rendimiento degradado (ver más abajo). [2]
CMC y EME protegen incluso contra la pequeña fuga mencionada 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 costo demasiado alto, ya que la misma fuga a nivel de sector es inevitable de todos modos.
CMC, introducido por Halevi y Rogaway, significa CBC–mask–CBC: todo el sector está cifrado en modo CBC (con ), el texto cifrado se enmascara mediante xoring con , y se vuelve a cifrar en modo CBC comenzando desde el último bloque. Cuando el cifrado de bloque subyacente es una permutación pseudoaleatoria fuerte (PRP), entonces a nivel de sector el esquema es una PRP modificable. Un problema es que para descifrar uno debe pasar secuencialmente sobre todos los datos dos veces.
Para solucionar este problema, Halevi y Rogaway introdujeron una variante paralelizable denominada EME (ECB–mask–ECB). Funciona de la siguiente manera:
Tenga en cuenta que, a diferencia de LRW y CMC, solo hay una única clave .
El SISWG consideró la estandarización de CMC y EME . EME está patentado y, por lo tanto, no se considera que sea el modo principal admitido. [21]
HCTR (2005) es un modo de operación para cifrados de bloques que preserva la longitud, es de bloque ancho y se puede modificar. [22] Sin embargo, tiene un error en la especificación y otro en su prueba de seguridad, lo que hace que su nivel de seguridad declarado no sea válido. HCTR2 (2021) es una variante que corrige estos problemas y mejora la seguridad, el rendimiento y la flexibilidad. [23] HCTR2 está disponible en el kernel de Linux desde la versión 6.0.
HCTR y HCTR2 utilizan un modo de operación de cifrado de bloques personalizado llamado XCTR; AES-128-XCTR se utiliza generalmente para HCTR2. HCTR2 utiliza una función hash polinómica llamada POLYVAL. HCTR2 es eficiente en procesadores modernos con instrucciones AES e instrucciones de multiplicación sin acarreo . [23]
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 discos. 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 pasadas sobre los datos, pero sigue siendo más rápida que AES-128-XTS en un ARM Cortex-A7 (que no tiene un conjunto de instrucciones AES ). [24] Está disponible en el kernel de Linux desde la versión 5.0.
En 2023, Aldo Gunsing, Joan Daemen y Bart Mennink presentaron la construcción de "dos pisos", que también utiliza un cifrado de flujo. Es modificable y de bloques anchos. [3]
Si bien el esquema de cifrado autenticado IAPM proporciona cifrado y 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. [25]
{{cite book}}
: |journal=
ignorado ( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda ){{cite journal}}
: Requiere citar revista |journal=
( ayuda )CS1 maint: multiple names: authors list (link){{cite journal}}
: Requiere citar revista |journal=
( ayuda )