stringtranslate.com

Teoría del cifrado de discos

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 .

Definición del problema

Los métodos de cifrado de disco tienen como objetivo proporcionar tres propiedades distintas:

  1. Los datos del disco deben permanecer confidenciales .
  2. Tanto la recuperación como el almacenamiento de datos deben ser operaciones rápidas, sin importar dónde se encuentren almacenados los datos en el disco.
  3. El método de cifrado no debe desperdiciar espacio en disco (es decir, la cantidad de almacenamiento utilizada para datos cifrados no debe ser significativamente mayor que el tamaño del texto sin formato ).

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:

  1. Pueden leer el contenido sin procesar del disco en cualquier momento;
  2. Pueden solicitar que el disco encripte y almacene archivos arbitrarios de su elección;
  3. y pueden modificar sectores no utilizados en el disco y luego solicitar su descifrado.

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 mediante códigos de autenticación de mensajes .

Cuando es aceptable ocupar espacio adicional

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]

Bloque estrecho y ancho

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]

Modos basados ​​en cifrado de bloques

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.

Encadenamiento de bloques cifrados (CBC)

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 se pueda modificar 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.

Vector de inicialización del sector de sal cifrado (ESSIV)

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 .

Ataque de maleabilidad

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]

Liskov, Rivest y Wagner (LRW)

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 .

Xor–cifrar–xor (XEX)

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:

es el texto simple,
es el numero del sector,
es el elemento primitivo del polinomio definido ; es decir, el número 2 ,
es el número del bloque dentro del sector. XEX usa ; XTS usa .

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]

Modo de libro de códigos modificado basado en XEX con robo de texto cifrado (XTS)

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 .

Debilidades de XTS

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]

CBC–máscara–CBC (CMC) y ECB–máscara–ECB (EME)

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 y HCTR2

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]

Modos de cifrado de flujo

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]

Patentes

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]

Véase también

Referencias

  1. ^ Poettering, Lennart. "El extraño estado del arranque autenticado y el cifrado de disco en distribuciones genéricas de Linux". 0pointer.net .
  2. ^ de Thomas Ptacek; Erin Ptacek (30 de abril de 2014). "No quieres XTS".
  3. ^ por Aldo Gunsing; Joan Daemen; Bart Mennink. Modos de cifrado de bloque ancho basados ​​en mazos (PDF) . El tercer taller del NIST sobre modos de operación de cifrado de bloque 2023.
  4. ^ Fruhwirth, Clemens; Schuster, Markus (diciembre de 2005). «Mensajes secretos: cifrado de disco duro con DM-Crypt, LUKS y cryptsetup» (PDF) . Linux Magazine . N.º 61. págs. 65–71 . Consultado el 22 de agosto de 2024 .
  5. ^ Fruhwirth, Clemens (18 de julio de 2005). «Nuevos métodos de cifrado de discos duros» (PDF) . Universidad Tecnológica de Viena . Consultado el 22 de agosto de 2024 .
  6. ^ Provos, Niels (2000). Encriptación de memoria virtual (pdf) . Noveno Simposio de Seguridad USENIX . Denver, Colorado.
  7. ^ Milan Broz. "DMCrypt dm-crypt: objetivo criptográfico del mapeador de dispositivos del kernel de Linux". gitlab.com . Consultado el 5 de abril de 2015 .
  8. ^ Jakob Lell (22 de diciembre de 2013). "Ataque de maleabilidad práctico contra particiones LUKS cifradas con CBC".
  9. ^ Los últimos borradores y la información de las reuniones de SISWG e IEEE P1619 se encuentran en la página de inicio de P1619 [1].
  10. ^ M. Liskov, R. Rivest y D. Wagner. Cifrados de bloque modificables [2] Archivado el 5 de diciembre de 2008 en Wayback Machine , CRYPTO '02 (LNCS, volumen 2442), 2002.
  11. ^ abcd Rogaway, Phillip (24 de septiembre de 2004). "Instanciaciones eficientes de cifrados de bloques modificables y refinamientos de los modos OCB y PMAC" (PDF) . Departamento de Ciencias de la Computación (PDF). Universidad de California, Davis.
  12. ^ Minematsu, Kazuhiko (2007). "Análisis de seguridad mejorado de los modos XEX y LRW" (PDF) . Áreas seleccionadas en criptografía . Apuntes de clase en informática. Vol. 4356. págs. 96–113. doi :10.1007/978-3-540-74462-7_8. ISBN 978-3-540-74461-0.
  13. ^ Karen McCabe (19 de diciembre de 2007). "IEEE aprueba estándares para el cifrado de datos". Asociación de estándares IEEE. Archivado desde el original el 6 de marzo de 2008.
  14. ^ Estándar IEEE para la protección criptográfica de datos en dispositivos de almacenamiento orientados a bloques. 18 de abril de 2008. pp. 1–40. doi :10.1109/IEEESTD.2008.4493450. ISBN 978-0-7381-5363-6. {{cite book}}: |journal=ignorado ( ayuda )
  15. ^ ab Liskov, Moisés; Minematsu, Kazuhiko (2 de septiembre de 2008). "Comentarios sobre XTS-AES" (PDF) .
  16. ^ Morris Dworkin (enero de 2010). "Recomendación para modos de operación de cifrado de bloques: el modo XTS-AES para confidencialidad en dispositivos de almacenamiento" (PDF) . Publicación especial 800-38E del NIST. Instituto Nacional de Estándares y Tecnología . doi :10.6028/NIST.SP.800-38E. {{cite journal}}: Requiere citar revista |journal=( ayuda )
  17. ^ "Controlador de disco criptográfico NetBSD". Archivado desde el original el 8 de enero de 2019. Consultado el 7 de enero de 2019 .
  18. ^ "Modos de operación". Documentación de VeraCrypt . IDRIX . Consultado el 13 de octubre de 2017 .
  19. ^ "¿Qué novedades hay en BitLocker?". 12 de noviembre de 2015. Consultado el 15 de noviembre de 2015 .
  20. ^ Norma para la protección criptográfica de datos en dispositivos de almacenamiento orientados a bloques (PDF) , IEEE P1619/D16, 2007, p. 34, archivado desde el original (PDF) el 14 de abril de 2016 , consultado el 14 de septiembre de 2012
  21. ^ P. Rogaway, Modo de operación de cifrado de bloques para construir un cifrado de bloques de tamaño de bloque amplio a partir de un cifrado de bloques convencional, solicitud de patente de EE. UU. 20040131182 A1.
  22. ^ Wang, Peng; Feng, Dengguo; Wu, Wenling (2005). "HCTR: un modo de cifrado de longitud de entrada variable". Seguridad de la información y criptología . 3822 : 175–188. doi :10.1007/11599548_15.
  23. ^ ab "Cifrado que preserva la longitud con HCTR2".
  24. ^ Crowley, Paul; Biggers, Eric (13 de diciembre de 2018). "Adiantum: cifrado que preserva la longitud para procesadores de nivel de entrada". IACR Transactions on Symmetric Cryptology : 39–61. doi : 10.13154/tosc.v2018.i4.39-61 .
  25. ^ * Patente de EE. UU. 6.963.976, "Esquemas de cifrado autenticados con clave simétrica" ​​(presentada en noviembre de 2000, emitida en noviembre de 2005, vence el 25 de noviembre de 2022) [3] Archivada el 11 de agosto de 2018 en Wayback Machine . [4].

Lectura adicional

Enlaces externos