stringtranslate.com

Estiramiento clave

En criptografía , se utilizan técnicas de estiramiento de claves para hacer que una clave posiblemente débil, generalmente una contraseña o frase de contraseña , sea más segura contra un ataque de fuerza bruta al aumentar los recursos (tiempo y posiblemente espacio) necesarios para probar cada clave posible. Las contraseñas o frases de contraseña creadas por humanos suelen ser lo suficientemente cortas o predecibles como para permitir el descifrado de contraseñas , y la ampliación de claves tiene como objetivo dificultar dichos ataques al complicar un paso básico de probar una sola contraseña candidata. La ampliación de claves también mejora la seguridad en algunas aplicaciones del mundo real donde se ha restringido la longitud de la clave, al imitar una longitud de clave más larga desde la perspectiva de un atacante de fuerza bruta. [1]

Hay varias formas de realizar estiramientos clave. Una forma es aplicar una función hash criptográfica o un cifrado de bloque repetidamente en un bucle. Por ejemplo, en aplicaciones donde la clave se utiliza para un cifrado , la programación de claves en el cifrado se puede modificar para que demore un período de tiempo específico en ejecutarse. Otra forma es utilizar funciones hash criptográficas que requieren grandes requisitos de memoria; estas pueden ser efectivas para frustrar ataques de adversarios limitados por la memoria.

Proceso

Los algoritmos de extensión de claves dependen de un algoritmo que recibe una clave de entrada y luego dedica un esfuerzo considerable para generar un cifrado extendido (llamado clave mejorada [ cita necesaria ] ) que imita la aleatoriedad y una longitud de clave más larga. El algoritmo no debe tener ningún atajo conocido, por lo que la forma más eficaz de relacionar la entrada y el cifrado es repetir el propio algoritmo de extensión de claves. Esto obliga a los atacantes de fuerza bruta a realizar el mismo esfuerzo en cada intento. Si este esfuerzo adicional se compara con una búsqueda de claves por fuerza bruta de todas las claves con una determinada longitud, entonces la clave de entrada puede describirse como estirada en esa misma longitud. [1]

El estiramiento clave deja al atacante con dos opciones:

Si el atacante utiliza la misma clase de hardware que el usuario, cada suposición tardará en procesarse la misma cantidad de tiempo que le tomó al usuario (por ejemplo, un segundo). Incluso si el atacante tiene recursos informáticos mucho mayores que el usuario, la ampliación de la clave seguirá ralentizando al atacante sin afectar gravemente la usabilidad del sistema para ningún usuario legítimo. Esto se debe a que la computadora del usuario solo tiene que calcular la función de extensión una vez que el usuario ingresa su contraseña, mientras que el atacante debe calcularla para cada intento del ataque.

Este proceso no altera la entropía del espacio clave original. El algoritmo de extensión de clave es determinista , lo que permite que una entrada débil genere siempre la misma clave mejorada, pero por lo tanto limita la clave mejorada a no más combinaciones posibles que el espacio de clave de entrada. En consecuencia, este ataque sigue siendo vulnerable si no está protegido contra ciertas compensaciones de tiempo-memoria , como el desarrollo de tablas de arcoíris para apuntar a múltiples instancias del espacio de claves mejorado en paralelo (de hecho, un atajo para repetir el algoritmo). Por este motivo, el estiramiento clave se suele combinar con la salazón . [1]

Basado en hash

Muchas bibliotecas proporcionan funciones que realizan estiramientos clave como parte de su función; consulte crypt(3) para ver un ejemplo. PBKDF2 sirve para generar una clave de cifrado a partir de una contraseña y no necesariamente para la autenticación de contraseña. PBKDF2 se puede utilizar para ambos si el número de bits de salida es menor o igual que el algoritmo de hash interno utilizado en PBKDF2, que suele ser SHA-2 (hasta 512 bits), o se puede utilizar como clave de cifrado para cifrar datos estáticos.

fuerza y ​​tiempo

Estos ejemplos suponen que una CPU de consumo puede realizar alrededor de 65.000 hashes SHA-1 en un segundo. Por lo tanto, un programa que utiliza estiramiento de claves puede usar 65.000 rondas de hashes y retrasar al usuario durante como máximo un segundo.

Probar una contraseña o frase de contraseña de prueba normalmente requiere una operación hash. Pero si se utilizó la ampliación de claves, el atacante debe calcular una clave reforzada para cada clave que prueba, lo que significa que hay 65.000 hashes para calcular por prueba. Esto aumenta la carga de trabajo del atacante en un factor de 65 000, aproximadamente 2 16 , lo que significa que la clave mejorada vale aproximadamente 16 bits adicionales en fuerza de clave.

La ley de Moore afirma que la velocidad de una computadora se duplica aproximadamente cada 2 años. Bajo este supuesto, cada 2 años una pieza más de fortaleza clave es plausiblemente de fuerza bruta. Esto implica que 16 bits extra de fuerza valen aproximadamente 16×2 = 32 años después de craquearse, pero también significa que el número de rondas de estiramiento de claves que utiliza un sistema debe duplicarse aproximadamente cada 2 años para mantener el mismo nivel de seguridad (ya que la mayoría de las claves son más seguras de lo necesario, los sistemas que requieren una generación de claves determinista consistente probablemente no actualizarán el número de iteraciones utilizadas en la ampliación de claves. En tal caso, el diseñador debe tener en cuenta cuánto tiempo desea que dure el sistema de derivación de claves. inalterado y debe elegir un número apropiado de hashes para la vida útil del sistema).

Las funciones hash vinculadas a la CPU siguen siendo vulnerables a las implementaciones de hardware . Estas implementaciones de SHA-1 existen utilizando tan solo 5000 puertas y 400 ciclos de reloj. [3] Dado que los FPGA de puertas multimillonarias cuestan menos de 100 dólares, [4] un atacante puede construir un cracker de hardware completamente desenrollado por unos 5.000 dólares. [ cita necesaria ] Un diseño de este tipo, con una frecuencia de 100 MHz, puede probar alrededor de 300.000 claves por segundo. El atacante es libre de elegir un buen compromiso entre precio y velocidad, por ejemplo, un diseño de 150.000 claves/segundo por 2.500 dólares. [ cita necesaria ] El estiramiento de la clave aún ralentiza al atacante en tal situación; un diseño de $5,000 que ataque un hash SHA-1 directo podría probar 300,000÷2 16 ≈ 4,578 claves/segundo. [ cita necesaria ]

De manera similar, las GPU de consumo modernas pueden acelerar considerablemente el hash. Por ejemplo, en una prueba comparativa, una Nvidia RTX 2080 SUPER FE calcula más de 10 mil millones de hashes SHA1 por segundo. [5]

Para defenderse del enfoque del hardware, se han desarrollado funciones criptográficas vinculadas a la memoria . Estos acceden a grandes cantidades de memoria de forma impredecible, de modo que los cachés son ineficaces. Dado que grandes cantidades de memoria de baja latencia son caras, un posible atacante se ve significativamente disuadido.

Historia

La primera función de derivación de claves basada en contraseñas deliberadamente lenta, "CRYPT", fue descrita en 1978 por Robert Morris para cifrar contraseñas de Unix . [6] Usó un recuento de iteraciones de 25, una sal de 12 bits y una variante de DES como subfunción. (Se evitó el DES propiamente dicho en un intento de frustrar los ataques utilizando hardware DES estándar). Las contraseñas se limitaron a un máximo de ocho caracteres ASCII . Si bien fue un gran avance para su época, CRYPT(3) ahora se considera inadecuado. El recuento de iteraciones, diseñado para la era PDP-11 , es demasiado bajo, 12 bits de sal son un inconveniente pero no detiene los ataques de diccionario precalculados y el límite de ocho caracteres impide el uso de frases de contraseña más seguras .

Las funciones modernas de derivación de claves basadas en contraseñas, como PBKDF2 , utilizan un hash criptográfico, como SHA-2 , una sal más larga (por ejemplo, 64 bits) y un alto recuento de iteraciones. El Instituto Nacional de Estándares y Tecnología (NIST) de EE. UU. recomienda un recuento mínimo de iteraciones de 10.000. [7] : 5.1.1.2  "Para claves especialmente críticas, o para sistemas muy potentes o sistemas donde el rendimiento percibido por el usuario no es crítico, un recuento de iteraciones de 10.000.000 puede ser apropiado". [8] : 5,2 

En 2009, se introdujo un algoritmo de fortalecimiento de claves que requiere mucha memoria, scrypt , con la intención de limitar el uso de hardware personalizado y altamente paralelo para acelerar las pruebas de claves. [9] [10]

En 2013, se llevó a cabo un concurso de hash de contraseñas para seleccionar un estándar de extensión de claves mejorado que resistiera ataques de procesadores gráficos y hardware de propósito especial. El ganador, Argon2 , fue seleccionado el 1 de julio de 2015. [11]

Algunos sistemas que utilizan estiramiento de teclas

Algunos, pero no todos, el software de cifrado de disco (consulte la comparación de software de cifrado de disco ):

Ver también

Referencias

  1. ^ a b C Kelsey, John; Schneier, Bruce; Salón, Chris; Wagner, David A. (1997). "Aplicaciones seguras de claves de baja entropía". En Okamoto, Eiji; Davida, Jorge I.; Mambo, Masahiro (eds.). Seguridad de la información, Primer taller internacional, ISW '97, Tatsunokuchi, Japón, 17 al 19 de septiembre de 1997, Actas . Apuntes de conferencias sobre informática. vol. 1396. Saltador. págs. 121-134. doi :10.1007/BFb0030415. ISBN 978-3-540-64382-1.
  2. ^ McMillan, Troya (7 de julio de 2022). Guía de certificados CAS-004 de CompTIA Advanced Security Practitioner (CASP+). Certificación de TI de Pearson. ISBN 978-0-13-734870-1.
  3. ^ O'Neill, Máire. "Arquitectura de función hash SHA-1 de bajo costo para etiquetas RFID" (PDF) . Archivado desde el original (PDF) el 19 de marzo de 2012.
  4. ^ "Los nuevos FPGA Xilinx Spartan-3 de 90 nm remodelan el panorama de los semiconductores (0333): comunicados de prensa de Xilinx". Archivado desde el original el 16 de julio de 2011 . Consultado el 8 de agosto de 2010 .
  5. ^ https://gist.github.com/epixoip/47098d25f171ec1808b519615be1b90d, PBKDF2-HMAC-SHA1 con 1000 iteraciones cuesta 2002 hashes SHA-1 a una velocidad de 5164,9 kH/s, lo que equivale a 10 340 129 800 hashes SHA-1 por segundo.
  6. ^ Morris, Robert; Thompson, Ken (3 de abril de 1978). "Seguridad de contraseñas: un caso histórico". Laboratorios Bell . Archivado desde el original el 22 de marzo de 2003 . Consultado el 9 de mayo de 2011 .
  7. ^ Grassi Paul A. (junio de 2017). SP 800-63B-3: Directrices de identidad digital, autenticación y gestión del ciclo de vida . NIST. doi :10.6028/NIST.SP.800-63b.
  8. ^ Meltem Sönmez Turan, Elaine Barker, William Burr y Lily Chen (diciembre de 2010). SP 800-132: Recomendación para la derivación de claves basada en contraseñas, Parte 1: Aplicaciones de almacenamiento . NIST. doi :10.6028/NIST.SP.800-132.{{cite book}}: Mantenimiento CS1: varios nombres: lista de autores ( enlace )
  9. ^ cifrar
  10. ^ scrypt: una nueva función de derivación de claves, Colin Percival , BSDCan 2009, consultado el 1 de 2 de 2011
  11. ^ Competencia de hash de contraseñas
  12. ^ "Formato 7z".
  13. ^ KBDF 4
  14. ^ KeePassXC: creación de su primera base de datos
  15. ^ Drepper, Ulrich. "Cripta Unix usando SHA-256 y SHA-512".
  16. ^ RFC 4880